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 来拒绝不允许手动设置值的产线上的手动设置值。