跳到主要内容

AI 驱动文档

您想了解什么?

变量

变量保存来自产线的值,例如相机前方部件的序列号。相机在运行时保持该值为最新,每次检测都会保存当时的值。然后您可以将其用于文件名、在库中查看,以及在脚本中使用。无需编写代码。

打开 Integration > Variables。

Variables page: where the value comes from, the variable, and where you use it

值来自何处​

来源如何获得
PLC User DataPLC 将其写入 User Data 字节
MQTT某个主题收到消息。值可以是整个载荷,或 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、读取载荷的方式(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 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
  • 重启后为空。 重启后,每个变量都会等待其来源发送新值。手动设置的值需要重新设置
  • 每个相机一套。 变量属于相机,因此其上的每个程序读取的都是同一组变量
  • 导出。 变量会随recipe exports一同传输
在没有 PLC 的台架上进行测试

在 Variables 页面手动设置变量,然后手动触发。recipe script 看到的手动设置值与看到 PLC 的值完全一样,并且捕获会被标记为 manual,因此绝不会被误认为生产数据。recipe script 可以通过检查 vars_info.<name>.source 来拒绝不允许使用手动设置值的产线上的手动值。

后续步骤​