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