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

值來自何處
| 來源 | 如何獲得 |
|---|---|
| PLC User Data | PLC 將其寫入 User Data 位元組 |
| MQTT | 某個主題收到訊息。值可以是整個載荷,或 JSON 訊息中的某個欄位 |
| Camera script | 您的camera script計算出該值並通過 vars.set() 設定 |
| Constant | 您輸入的固定值,例如產線或工位名稱 |
您也可以在 Variables 頁面上手動設定值,例如操作員輸入批號。手動設定的值會一直有效,直到變數自身的來源傳送新值為止;在庫中,使用了手動設定值的捕獲會帶有manual標記。
該頁面提供三個示例作為起點:來自 PLC 的部件序列號、來自 MQTT 的批號,以及產線或工位名稱。
來自 PLC
選擇值在 PLC User Data 中的位置及其型別:
| 設定 | 值 |
|---|---|
| Offset | User Data 的位元組 0 到 463 |
| Type | BOOL、SINT、USINT、INT、UINT、DINT、UDINT、LINT、ULINT、REAL、LREAL、STRING、BYTES |
| Bit | 0 到 7,僅用於 BOOL。不指定時,BOOL 表示整個位元組不為零 |
| String format | Fixed length(固定字元數,尾部的空格和 NUL 會被去除)、Rockwell(Logix STRING:一個 DINT 長度後接 82 個字元)或 Siemens(S7 STRING:一個最大長度位元組、一個長度位元組,然後是字元) |
位元組順序遵循現場匯流排:EtherNet/IP 為小端,PROFINET 為大端。在 PROFINET 上,某些位元組只有當 PLC 傳送完整的 User Data 模組時才會到達。
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 script | vars.serial,以及 vars_info.serial.age_ms 表示值的時長。參見 Recipe script |
| Camera script | vars.get("serial"),對於來源為 camera script 的變數使用 vars.set() |
| 結果訊息 | 通過 MQTT、HTTP API 以及傳送到 camera script 的每條結果訊息都包含 vars 和 vars_info |
須知事項
每次檢測儲存變數在其工具完成時所擁有的值。請讓 PLC 在發出觸發之前寫入序列號,否則捕獲儲存的會是上一個部件的值。
- 空值顯示為
_。 沒有值的變數在檔名中顯示為_,在指令碼中顯示為null - 重啟後為空。 重啟後,每個變數都會等待其來源傳送新值。手動設定的值需要重新設定
- 每個相機一套。 變數屬於相機,因此其上的每個程式讀取的都是同一組變數
- 匯出。 變數會隨recipe exports一同傳輸
在 Variables 頁面手動設定變數,然後手動觸發。recipe script 看到的手動設定值與看到 PLC 的值完全一樣,並且捕獲會被標記為 manual,因此絕不會被誤認為生產資料。recipe script 可以通過檢查 vars_info.<name>.source 來拒絕不允許使用手動設定值的產線上的手動值。