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

值的來源
| 來源 | 如何到達 |
|---|---|
| PLC User Data | PLC 將其寫入其 User Data 位元組 |
| MQTT | 訊息到達某個 topic。值可以是整個 payload,也可以是 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、如何讀取 payload(JSON、String 或 Number),對於 JSON 還需指定欄位的path,例如 $.id。變數的 topic 中不允許使用萬用字元。當 MQTT 關閉時,該變數保持為空。
命名與限制
- 名稱由小寫字母、數字和下劃線組成,以字母開頭,最多 32 個字元:
serial、lot_number、part_type - 以下名稱為保留字:
vars、vars_info、tools、tools_by_name、rules、trigger、recipe、state - 每臺相機最多 64 個變數。文字值最多 1024 位元組
使用位置
| 位置 | 方式 |
|---|---|
| 遠端儲存檔案和資料夾名稱 | {var.serial},例如將 {camera}/{var.lot} 用作資料夾,{var.serial}_{capture_id} 用作檔名。檔名仍需包含 {capture_id}、{trigger_id} 或 {timestamp},且不能包含 /。參見遠端儲存 |
| 庫 | 每次捕獲的詳情列出其儲存的變數,包括來源以及每個值的接收時間 |
| 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 - 重啟後為空。 重啟後,每個變數都要等待其來源傳送新值。手動設定的值需要重新設定
- 每臺相機一組。 變數屬於相機,因此其上的每個程式都讀取相同的變數
- 匯出。 變數會隨程式匯出一同傳輸
在 Variables 頁面手動設定變數,然後手動觸發。recipe script 看到的手動設定值與看到 PLC 的值完全相同,且該捕獲會被標記為 manual,以便永遠不會被誤認為生產資料。recipe script 可以通過檢查 vars_info.<name>.source 來拒絕不允許手動設定值的產線上的手動設定值。