cab 与智能工厂:
借由 OPC 统一架构进行标识的连线作业
需求
在工业领域,有越来越多的生产及物流环境以数字化制造管理系统为基础。机器与人或其他机器进行信息交换,自主处理与制造相关的数据,提供或转发数据。个性化、可扩缩性、精实、制造过程的可追溯性以及可靠的设备及零组件是关键需求。
作为管理系统基础的大多数应用程序或服务皆由网络代管。来自感测器、设备或软件的数据被传输到云主机,并可以在条码打印机或贴标系统、机器人及 IT 系统之间轻易地进行交换 - 前提是它们都说同样的语言且可以互相理解。
协议
开放平台通信统一架构 ( 缩写为 OPC UA ) 为工业环境中由不同制造商生产的机器及零组件之间的信息交换建立了基础。在 OPC 统一架构中,各种不同的规格被转换成一致性的数据模块,从而建立了新的传输接口标准。OPC 统一架构负责触发工业制造中的网络,这部份与我们对办公室中的网络及 USB 传输接口的认知相同。
连接 cab 的设备
您将一家工厂投入运作?或是规划将您的原料仓库依据工业 4.0 的建议与网络连线?如果网络的 IP 地址已就绪,OPC 统一架构可以作为机器设备间进行信息获取的一致性框架。目前新一代的 cab 条码打印机及快速贴标机 IXOR 已完成 OPC 统一架构的集成,适用于工厂内的零组件、产品或包装标识。这些设备能够跟上层控制单元进行协作。
重点一览
- 依需求生产
- 制程自动化
- 设备配置
- 设备的远程控制
- 设备监控
- 互操作性
- 预测及分析
- 可追溯性
- 库存最佳化
- 距离缩短
- 透明性
事件驱动标识
按下按键查询条码打印机进行中的工作已经是过去式了。现今的智能设备会自动显示保养的需求、打印工作使用的耗材或是碳带即将耗尽必须更换的信息。可以远程安装标签,也可以读出标签特性及交换打印用的可变数据。即时显示操作参数,例如打印头目前的运作性能及温度,或是待打印的标签数量。信息由条码打印机传送至工厂的控制系统,控制系统负责辨识及解译信息,并会直接采取适当的处理措施。
作为一个功能卓越的控制系统,OPC 统一架构具备将软件控制的生产数据、警示、事件及数据历史集中在同一处的优势。它集成并统一了不同的地址空间以及供获取的传输接口。
OPC 统一架构搭配 cab 条码打印机
cab 设备*目前支援的 OPC 统一架构功能如下:
- 协议栈
OPC 统一架构二进制协议 - 加密
无
Basic128Rsa15
Basic256Sha256 - 验证
匿名
用户名称 / 密码
尽管通过完全验证的用户对现有的功能拥有完整的权限,匿名用户对条码打印机的结点只有只读的权限,并且无法呼叫方法 ( 即使该方法不会变更条码打印机的配置或状态 )。
- OPC 统一架构服务
SecureChannel Service Set
Session Service Set
Attribute Service Set:属性、事件、非历史数据的读出 / 写入
Method Service Set
MonitoredItem Service Set
Subscription Service Set
View Service Set
OPC 统一架构的服务器端可在设置 / 传输接口 / 网络服务启用。
* 条码打印机 SQUIX, MACH 4S, EOS2, EOS5, HERMES Q, PX Q, 快速贴标机 IXOR
信息模块
cab 条码打印机实践了 OPC 统一架构的设备集成 ( DI ) 模式。有两个名字空间可供使用:
http://cab.de/printer 用于监控及管理打印工作
http://cab.de/printer/setup 用于设备设置
页面下方列出的功能符合现况,有更多的功能持续进行开发中。
名字空间 http://cab.de/Printer
此名字空间可获取条码打印机的目前状态,包括 I/O 状态、条码打印机型号信息或任何关于目前作业状态的信息。
结点名称 | 结点类别 | 描述 |
---|---|---|
Printer | 物件 | 存取条码打印机信息模块的主入口点 |
FPGARevision, Manufacturer, Model, SerialNumber, SoftwareRevision, HardwareRevision |
变数 | 提供硬件及软件的版本信息 |
Bitmap | 方法 | 最后一张打印的标签可存取为 .png 格式 |
Screen | 方法 | 提供 .png 格式的条码打印机屏幕截图 |
I/O | 物件 | 提供透过条码打印机 I/O 接口进行获取的软件;透过 IOStatusChangeEvent 产生 |
LBLWARN | 变数 | 预先警示标签用完 |
RIBERR | 变数 | 碳带耗尽 |
RIBWARN | 变数 | 预先警示碳带用完 |
SetInput | 方法 | 设定 I/O 接口的写入信号:PAUSE, LBLROT |
LabelBitmap | 方法 | 将目前的标签打印内容转成 .png 格式。不同于 bitmap 方法,标签方向及尺寸在此会列入考量。 |
ENDPOS | 变数 | 贴标手臂位于贴标位置 |
ERROR | 变数 | 错误 |
FEEDON | 变数 | 正在进纸 |
HOMEPOS | 变数 | 贴标手臂位于吸标位置 |
JOBRDY | 变数 | 打印工作已就绪 |
MEDERR | 变数 | 标签或碳带耗尽 |
PEELPOS | 变数 | 标签就剥离位置 |
READY | 变数 | 条码打印机已就绪 |
I/O Status | 变数 | I/O 接口的读出状态,由下列变数的数值组合定义: RIBWARN 1 HOMEPOS 8 ERROR 64 RIBERR 512 ENDPOS 2 PEELPOS 16 READY 128 MEDERR 1024 FEEDON 4 JOBRDY 32 LBLWARN 256 ( 部份仅限于 HERMES Q ) |
TriggerInput | 方法 | 触发 I/O 接口的写入信号: FSTLBL, REPRINT, START, LBLREM, JOBDEL, RSTERR, STOP, LBLFEED |
Interpreter | 物件 | 工作状态的信息;透过 ErrorEvent, JobInfoEvent 以及 JobFinishEvent 产生 |
JPhase | 变数 | JScript 解译器的目前状态 |
QueryObject | 方法 | 查询现有的 JScript 物件 |
Current Label | 物件 | 解译器处理打印工作时可用 |
Current Id | 变数 | 目前打印工作的专属工作 ID |
Current Name | 变数 | 工作名称;由 JScript 的j 指令提供目前打印工作的名称 |
Current Content Fields | 物件 | 目前标签动态字段的根结点。字段内容可以借由设定相关结点的数值作替换。 |
abc Status | 变数 | abc basic 解译器的状态: one of Idle, Compiling, Running, RuntimeError, SyntaxError |
Active | 变数 | 条码打印机作业中,例如打印档案的解译或打印 |
Available Space | 变数 | 打印队列可用的内存空间 ( 以百分比为单位 ) |
ESCs | 变数 | 字符串 ( 包括 JScript's ESCs 指令的结果 ) |
ESCz | 变数 | 字符串 ( 包括 JScript's ESCz 指令的结果 ) |
Error | 变数 | 提供详细的错误信息,例如 ESCs 指令的相关信息; 数值必须解译为 ASCII 字符,例如 45 == '-' No Error |
Labels To Print | 变数 | 目前打印工作打印的标签数量 |
Last Job | 变数 | 最近一次处理的打印工作名称;参见 JScript 指令 j |
Online | 变数 | 条码打印机为 ONLINE 状态,也就是图形用户界面的显示内容为首页 |
Paused | 变数 | 条码打印机为 PAUSE 状态 |
CancelJob | 方法 | 允许取消目前打印工作 |
LoadLabel | 方法 | 允许从条码打印机上传标签档案 |
PrintData | 方法 | 允许直接传送 JScript 打印数据至条码打印机 |
TotalCancel | 方法 | 允许中止所有打印工作 |
Ribbon | 物件 | |
Ribbon RibbonDiameter | 变数 | 侦测到的碳带直径 ( 以毫米为单位 ) |
Ribbon RibbonLow | 变数 | 根据条码打印机的菜单设定判断剩余的碳带是否不足 |
Statistics | 物件 | |
Statistics Labels | 变数 | 标签的打印数量 |
Statistics Operating Time | 变数 | 条码打印机的正常运作时间 ( 以分为单位 ) |
Statistics Thermal Direct | 变数 | 以热感印打印的标签纸长度 ( 以毫米为单位 ) |
Statistics Thermal Transfer | 变数 | 以热转印打印的标签纸长度 ( 以毫米为单位 ) |
Paper | ||
Paper Diameter | 变数 | 计算送纸器内剩余标签的直径 ( 以毫米为单位,仅限 HERMES Q ) |
Paper Low | 变数 | 根据条码打印机的菜单设定判断剩余的标签是否不足 ( 仅限 HERMES Q ) |
SubDevices | 物件 | |
Applicator* | 物件 | |
Barcode Verifier* | 物件 | |
Cutter* | 物件 | |
Cutter* Can Perforate | 变数 | 搭配虚线切刀 |
Cutter* Has Stacking Box | 变数 | 搭配的切刀附有裁纸收集盒 |
Demand Sensor* | 物件 | |
Sensor Status | 变数 | 感测器的目前状态 |
Rewinder* | 物件 | |
Ribbon Saver* | 物件 | |
Ribbon Sync | 变数 | 碳带节省装置已完成初始化 |
Ribbon Head State | 变数 | 打印头的目前位置 ( Printing 或 Saving ) |
Ribbon Synchronize | 方法 | 发布碳带节省装置的同步指令;仅与服务工作相关 |
Ribbon ToggleHead | 方法 | 切换打印头的位置;仅与服务工作相关 |
TPH 1 | 物件 | 打印头信息 |
TPH 1 Model | 变数 | 打印头的型号信息 |
TPH 1 SoftwareRevision | 变数 | |
TPH 1 Open | 变数 | 开启状态 |
TPH 1 SerialNumber | 变数 | 打印头序号 |
TPH 1 Temperature | 变数 | 打印头的目前温度 ( 摄氏 ) |
TPH 1 Statistics | 物件 | 打印头的统计数据 |
Storage | 物件 | |
FileDelete | 方法 | 删除条码打印机内部的一个档案 |
FileDownload | 方法 | 将条码打印机的一个档案下载至客户端 |
FileList | 方法 | 列出条码打印机内部的所有档案 |
FileUpload | 方法 | 将客户端的一个档案下载至条码打印机 |
FontList | 方法 | 查询条码打印机的可用字型 |
IFFS | 物件 | 内部闪存档案系统 ( IFFS ) |
IFFS IFFS Available Space | 变数 | 档案系统的可用空间 ( KB ) |
IFFS IFFS Capacity | 变数 | 档案系统的容量 ( KB ) |
SD Card | 物件 | |
SD Card SD Card Attached | 变数 | 指示是否附加档案系统 |
USB Memory | 物件 |
* 可选结点,仅在附加服务密钥时可用
重要提示:依据 OPC 统一架构的设备集成规格,必须始终在设备的 MethodSet 中呼叫方法 ( 即使方法在指定的机制上与个别的 FunctionalGroup 链结较佳 )。透过 FunctionalGroup 呼叫始终会出现错误。
名字空间 http://cab.de/Printer/Setup
此名字空间对条码打印机的配置树拥有完整的权限,该配置树的建模方式与图形用户界面的设置级别相同。树中组态参数的实际位置可能会有变动,因此透过它的浏览路径呼叫结点是不安全的。相反地,配置结点可以透过它们唯一的字符串识别码直接获取。
结点名称 | 结点类别 | 描述 |
---|---|---|
Setup | 物件 | Printer 结点的此一子结点为获取条码打印机设置的主入口点;透过 SetupValueChangeEvent 以及 SetupVisibilityChangeEvent 产生 |
SetOpcUaClientUrl | 方法 | 储存 OPC 统一架构的服务器地址 ( 用于脱机模式 ) |
ExportSettings | 方法 | 将条码打印机设置导出为 .xml 格式 |
ImportSettings | 方法 | 将条码打印机设置导入为 .xml 格式 |
ImportCertificateTLS | 方法 | 导入 TLS 认证 |
ResetSettings | 方法 | 恢复出厂设置 |
ResetPasswords | 方法 | 恢复出厂设置密码 |
< SetupFolder> |
物件 | 包括设置值 |
< SetupValue> |
物件 | 可编辑的设置值 |
IsActive | 变数 | 该组态参数目前可在图形用户界面中获取 |
以下为可用的设置值类型:
- 布尔值
- 列举
- 字符串值 ( 包括字段 )
MinLen
MaxLen
Regex ( 一个可选的正则表达式,用于属性值的写入操作 ) - 数值 ( 包括字段 )
Range
Step
ToggleInt ( 可选,为显示用途 )
Unit ( 可选,为显示用途 ) - 密码 ( 包括最小及最大的长度属性,如同字符串值 )
重要提示:依据 OPC 统一架构的设备集成规格,必须始终在设备的 MethodSet 中呼叫方法 ( 即使方法在指定的机制上与个别的 FunctionalGroup 链结较佳 )。透过 FunctionalGroup 呼叫始终会出现错误。
事件
在 OPC 统一架构的标准事件以外,cab 条码打印机提供下列的补充事件。
事件名称 | 类型 | 描述 |
---|---|---|
ErrorEvent | 事件在条码打印机出现错误时传递;透过结点解译器产生 | |
Message | LocalizedText | 错误信息 |
Detail1 | LocalizedText | 详细错误信息 |
Detail2 | LocalizedText | 更多的详细错误信息 |
JobInfoEvent | 事件在标签打印时传递;透过结点解译器产生 | |
LabelNo | Int32 | 进行的打印工作中的标签数量 |
JobSize | Int32 | 进行的打印工作中打印的标签数量 |
IsTestPrint | 布尔 | 显示目前打印的标签为测试打印 |
JobFinishEvent | 事件在打印工作完成且条码打印机返回闲置状态时传递;透过结点解译器产生 | |
没有其他字段 | ||
SetupValueChangeEvent | 事件在设置值变更时传递;透过结点设置产生 | |
SourceName | 字符串 | 受影响的组态参数的识别码 |
SetupVisibilityChangeEvent | 事件在设置值变更其可见性状态时传递,通常是基于相互依赖;透过结点设置产生 | |
SourceName | 字符串 | 受影响的组态参数的识别码 |
IOStatusChangeEvent | 事件在设备的 I/O 状态变更时传递;透过结点 I/O 产生 | |
Status | UInt32 | Printer->IO->Status 描述的条码打印机最新状态 |
限制:OPC 统一架构的堆栈实作目前不支援:
- 在单一订阅中有不同类型的受监控项目 - 变更通知或事件通知 - 但单一订阅中有多个相同类型的受监控项目是被允许的
- 受监控项目请求中的 Where 子句
- 警示及条件
条码打印机内的 OPC 统一架构客户端支援
使用 JScript 的特殊指令 OPCUA 可让脱机模式的条码打印机从 OPC 统一架构的服务器端读出数据并将其插入标签配置中:
m m
J
H 75,0
S l1;0,0,25,29,50
E OPCUA;opc.tcp://192.168.200.71:4840
T 20,20,0,3,10;[OPCUA:2:DeviceSet,3:Printer,2:SoftwareRevision]
A 1
为了能够在多个 OPC 统一架构的服务器端之间寻址而使用插槽的概念。可以将插槽号加入 OPCUA 的授权,这样最多可以查询五个不同的服务器系统:
m m J H 75,0 S l1;0,0,25,29,50 ;
使用一组用户名称及密码连线E OPCUA-0;opc.tcp://opcuser:opcpass@192.168.200.71:4840 ;
匿名连线E OPCUA-1;opc.tcp://192.168.200.53:4840 T 10,10,0,3,10;SW Rev Drucker 1: [OPCUA-0:2:DeviceSet,3:Printer,2:SoftwareRevision] T 20,20,0,3,10;SW Rev Drucker 2: [OPCUA-1:2:DeviceSet,3:Printer,2:SoftwareRevision] A 1
作为指定浏览路径的替代方案,也可以在 OPCUA 特殊指令中为数据查询指定结点 ID:
m m
J
H 75,0
S l1;0,0,25,29,50
E OPCUA;opc.tcp://192.168.200.71:4840
T 20,20,0,3,10;[OPCUA:ns=3;i=50723]
T 10,10,0,3,10;[OPCUA:ns=4;s=ID_BACKFEED]
A 1
可支援以下的数据类型:
- 整数
- 浮点数
- 字符串, ByteString, XmlElement
- 布尔值
- LocalizedText
- DateTime
- Range
- EUInformation
- 列举
连线信息不一定必须储存在标签,可以改为储存在条码打印机的全域配置。OPC 统一架构的函数 SetOpcUaClientUrl 用于此目的。借由指定需要的插槽及要用的地址,最多可以在此处储存五种不同的连线信息。在这种情况下可忽略标签中的 E 指令。
2021 年 1 月