跳到主要內容

AI 驅動文件

您想了解什麼?

變數

變數儲存來自產線的值,例如相機前方部件的序列號。相機在執行時保持該值為最新,每次檢測都會儲存當時的值。然後您可以將其用於檔名、在庫中檢視,以及在指令碼中使用。無需編寫程式碼。

開啟 Integration > Variables。

Variables page: where the value comes from, the variable, and where you use it

值來自何處​

來源如何獲得
PLC User DataPLC 將其寫入 User Data 位元組
MQTT某個主題收到訊息。值可以是整個載荷,或 JSON 訊息中的某個欄位
Camera script您的camera script計算出該值並通過 vars.set() 設定
Constant您輸入的固定值,例如產線或工位名稱

您也可以在 Variables 頁面上手動設定值,例如操作員輸入批號。手動設定的值會一直有效,直到變數自身的來源傳送新值為止;在庫中,使用了手動設定值的捕獲會帶有manual標記。

該頁面提供三個示例作為起點:來自 PLC 的部件序列號、來自 MQTT 的批號,以及產線或工位名稱。

來自 PLC​

選擇值在 PLC User Data 中的位置及其型別:

設定值
OffsetUser Data 的位元組 0 到 463
TypeBOOL、SINT、USINT、INT、UINT、DINT、UDINT、LINT、ULINT、REAL、LREAL、STRING、BYTES
Bit0 到 7,僅用於 BOOL。不指定時,BOOL 表示整個位元組不為零
String formatFixed length(固定字元數,尾部的空格和 NUL 會被去除)、Rockwell(Logix STRING:一個 DINT 長度後接 82 個字元)或 Siemens(S7 STRING:一個最大長度位元組、一個長度位元組,然後是字元)

位元組順序遵循現場匯流排:EtherNet/IP 為小端,PROFINET 為大端。在 PROFINET 上,某些位元組只有當 PLC 傳送完整的 User Data 模組時才會到達。

LINT 和 ULINT 以文字形式到達

64 位整數在指令碼和結果訊息中以十進位制字串形式出現,因為 JavaScript 的數字型別無法儲存所有 64 位值。如果需要對其進行算術運算,請在指令碼中使用 BigInt(vars.part_id)。

來自 MQTT​

提供topic、讀取載荷的方式(JSON、String 或 Number),以及對於 JSON 而言欄位的path,例如 $.id。變數的主題中不允許使用萬用字元。當 MQTT 關閉時,變數保持為空。

名稱與限制​

  • 名稱由小寫字母、數字和下劃線組成,以字母開頭,最多 32 個字元:serial、lot_number、part_type
  • 以下名稱為保留名稱:vars、vars_info、tools、tools_by_name、rules、trigger、recipe、state
  • 每個相機最多 64 個變數。文字值最大 1024 位元組

在哪裡使用​

位置用法
Remote Storage 檔名和資料夾名{var.serial},例如將 {camera}/{var.lot} 用作資料夾,將 {var.serial}_{capture_id} 用作檔名。檔名仍需包含 {capture_id}、{trigger_id} 或 {timestamp},且不能包含 /。參見 Remote Storage
庫每次捕獲的詳情都會列出其儲存的變數,包括來源以及每個值的接收時間
Recipe scriptvars.serial,以及 vars_info.serial.age_ms 表示值的時長。參見 Recipe script
Camera scriptvars.get("serial"),對於來源為 camera script 的變數使用 vars.set()
結果訊息通過 MQTT、HTTP API 以及傳送到 camera script 的每條結果訊息都包含 vars 和 vars_info

須知事項​

在觸發前寫入

每次檢測儲存變數在其工具完成時所擁有的值。請讓 PLC 在發出觸發之前寫入序列號,否則捕獲儲存的會是上一個部件的值。

  • 空值顯示為 _。 沒有值的變數在檔名中顯示為 _,在指令碼中顯示為 null
  • 重啟後為空。 重啟後,每個變數都會等待其來源傳送新值。手動設定的值需要重新設定
  • 每個相機一套。 變數屬於相機,因此其上的每個程式讀取的都是同一組變數
  • 匯出。 變數會隨recipe exports一同傳輸
在沒有 PLC 的臺架上進行測試

在 Variables 頁面手動設定變數,然後手動觸發。recipe script 看到的手動設定值與看到 PLC 的值完全一樣,並且捕獲會被標記為 manual,因此絕不會被誤認為生產資料。recipe script 可以通過檢查 vars_info.<name>.source 來拒絕不允許使用手動設定值的產線上的手動值。

後續步驟​