跳到主要內容

AI 驅動文件

您想了解什麼?

變數

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

開啟 Integration > Variables。

變數頁面:值的來源、變數,以及使用位置

值的來源​

來源如何到達
PLC User DataPLC 將其寫入其 User Data 位元組
MQTT訊息到達某個 topic。值可以是整個 payload,也可以是 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、如何讀取 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 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
  • 重啟後為空。 重啟後,每個變數都要等待其來源傳送新值。手動設定的值需要重新設定
  • 每臺相機一組。 變數屬於相機,因此其上的每個程式都讀取相同的變數
  • 匯出。 變數會隨程式匯出一同傳輸
無需 PLC 即可在工作臺測試

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

下一步​