跳到主要内容

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

下一步​