3、AI识别结果类型:离散信号(布尔)、寄存器(整数/浮点)、状态位(位组合)的定义与区别
在AI视觉检测、语音识别或预测性维护等场景中,AI模型输出的结果往往是高维的张量或概率分布,而PLC(可编程逻辑控制器)只能处理确定性的、位或字级别的数据。因此,将AI识别结果写入PLC之前,必须完成一次关键的“语义降维”——将模型输出映射为PLC可识别的三种基本数据类型:离散信号(布尔)、寄存器(整数/浮点)和状态位(位组合)。这三类数据在PLC中的存储方式、刷新机制、诊断粒度以及适用的工业场景截然不同。本章将深入剖析三者的定义、底层存储逻辑、适用边界,并通过一个完整的视觉检测案例拆解如何选择与设计。
3.1 离散信号(布尔):最简的“是/非”判定
核心原理
离散信号在PLC中对应BOOL(布尔)类型,物理上占用1个位(bit),只有两种状态:0(False)和1(True)。在IEC 61131-3标准中,BOOL是PLC编程的基础数据类型。从AI视角看,离散信号通常由分类模型的二分类输出经过阈值比较产生——例如,缺陷检测模型输出“OK”的概率为0.92,设定阈值为0.85,则输出True(合格)。
PLC对离散信号的处理具有确定性和实时性:在梯形图中,一个常开触点(--| |--)直接读取该位;在ST语言中,IF signal THEN ...即可触发逻辑。离散信号适合控制高速联锁、安全回路和简单动作触发,因为其刷新周期与PLC扫描周期同步,通常为毫秒级。
判断方法与操作流程
将AI结果映射为离散信号时,需遵循以下流程:
- 定义判定阈值:根据模型验证集的精确率-召回率曲线,选择最优阈值。例如,在表面缺陷检测中,若漏检代价高于误检,应降低阈值。
- 确定映射地址:在PLC中分配一个未使用的位地址,如
M10.0或DB1.DBX0.0。 - 设置刷新方式:若用于安全联锁,应使用立即IO刷新(如西门子的
IMM_IO);若用于普通状态指示,周期刷新即可。 - 编写PLC侧逻辑:在梯形图中使用
赋值线圈(=)或置位/复位(S/R)指令。
// 示例:ST语言中离散信号写入
IF ai_result.confidence > 0.85 THEN
M10.0 := TRUE; // 合格信号
ELSE
M10.0 := FALSE; // 不合格信号
END_IF;
案例拆解:视觉检测OK/NG信号
某汽车零部件装配线使用AI视觉系统检测螺栓是否拧紧。系统输出为:torque_ok(布尔)、torque_value(浮点,单位N·m)。PLC需要控制机械手将不合格品推入废料箱。设计如下:
- 离散信号:
Q0.0(推料气缸动作)由M10.0(NG信号)触发。 - 关键参数:AI模型输出NG概率为0.93,阈值设为0.90,因此
M10.0 := TRUE。 - 结果:PLC在下一个扫描周期执行推料动作,从AI输出到气缸动作总延迟约12ms,满足节拍要求。
3.2 寄存器(整数/浮点):连续量的精确传递
核心原理
寄存器用于传递数值型数据,在PLC中对应INT(16位整数)、DINT(32位整数)、REAL(32位浮点)等类型。与离散信号不同,寄存器占用一个字(16位)或双字(32位)的存储空间,可表达连续变化的过程量。AI模型输出的置信度、缺陷面积、温度预测值、坐标位置等均属于此类。
PLC对寄存器的读写通常通过数据块(DB)或标志字(MW)实现。在PROFINET或EtherNet/IP通信中,AI系统作为IO控制器或设备,通过周期性IO数据交换将寄存器值写入PLC的特定地址区。关键特性是数据一致性:对于32位浮点数,必须确保高低16位在同一扫描周期内更新,否则可能出现“撕裂数据”(高字是新值、低字是旧值)。
判断方法与操作流程
选择寄存器类型时,需考虑以下维度:
| 数据类型 | 范围/精度 | 占用空间 | 适用场景 |
|---|---|---|---|
| INT | -32768 ~ 32767 | 16位 | 计数、小范围整数 |
| DINT | -2^31 ~ 2^31-1 | 32位 | 大范围计数、时间戳 |
| REAL | ±3.4E38,6位有效数字 | 32位 | 温度、压力、置信度 |
| LREAL | ±1.7E308,15位有效数字 | 64位 | 高精度测量(极少用) |
操作流程:
- 确认数值范围:若AI输出为0~1的置信度,使用REAL;若为0~1000的计数,使用INT。
- 分配DB地址:在PLC中创建全局数据块,如
DB1.DBD4(REAL类型)。 - 配置通信映射:在AI系统侧将输出变量映射到PLC的IO地址或Modbus保持寄存器。
- 启用一致性机制:在PROFINET中设置“一致性”为“全部”,确保32位数据原子更新。
案例拆解:缺陷面积实时监控
某注塑工厂使用AI检测产品表面气孔,模型输出每个气孔的像素面积(0~5000像素)。PLC需要根据面积大小分级处理:面积>1000时报警停机。设计如下:
- 寄存器映射:AI系统将最大气孔面积写入
DB1.DBD0(REAL),刷新周期10ms。 - PLC逻辑:在OB1中比较
DB1.DBD0 > 1000.0,触发M20.0报警位。 - 结果:操作员可在HMI上实时查看面积值,历史趋势用于工艺优化。
ABS(value - target) < 0.01。3.3 状态位(位组合):多条件编码的紧凑表达
核心原理
状态位是将多个布尔标志打包到一个字节或字中,每一位代表一个独立状态。例如,一个字节MB0的8个位可分别表示:位0=缺料、位1=卡料、位2=温度过高、位3=压力不足……这种设计极大节省了PLC存储空间,并便于通过一次通信传输多个状态。在AI场景中,当模型输出多种缺陷类型或设备运行模式时,状态位是最佳选择。
与离散信号的区别在于:离散信号是独立的位,而状态位是组合编码。PLC可通过位测试指令(如M0.0)或字节比较(如MB0 = 16#03)来解析。状态位特别适合与Modbus通信协议配合——一个保持寄存器可承载16个状态,大幅减少通信数据量。
判断方法与操作流程
设计状态位编码时,应遵循以下步骤:
- 枚举所有状态:列出AI可能输出的所有离散条件,如缺陷类型A/B/C、设备模式1/2/3。
- 分配位号:为每个状态分配固定的位索引,并建立文档。
- 定义编码规则:明确“1”表示有效还是“0”表示有效(通常高电平有效)。
- PLC解析:使用
L MB0、TAR1等指令读取,或直接使用位逻辑。
// 示例:状态位解析(ST语言)
CASE MB0 OF
16#01: // 位0=1,表示缺陷A
HandleDefectA();
16#02: // 位1=1,表示缺陷B
HandleDefectB();
16#03: // 位0和位1同时为1,表示A+B复合缺陷
HandleCombinedDefect();
END_CASE;
案例拆解:多缺陷类型编码
某电子元件焊接检测站,AI模型可识别5种缺陷:虚焊、桥连、少锡、偏移、气泡。若使用5个独立离散信号,需占用5个PLC输入点;改用状态位后,仅需1个字节MB2。编码规则:
| 位号 | 含义 | 十六进制值 |
|---|---|---|
| 位0 | 虚焊 | 16#01 |
| 位1 | 桥连 | 16#02 |
| 位2 | 少锡 | 16#04 |
| 位3 | 偏移 | 16#08 |
| 位4 | 气泡 | 16#10 |
当AI同时检测到虚焊和桥连时,写入MB2 := 16#03。PLC侧通过M2.0和M2.1分别触发对应修复机构。该设计将通信数据量从5个位减少到1个字节,且便于在HMI上以十六进制直观显示。
3.4 三类数据的对比与选型决策
核心原理
选型决策的核心依据是AI输出的语义粒度和PLC控制需求。若AI输出是“合格/不合格”的二分类,离散信号足够;若输出是连续数值(如温度预测),必须用寄存器;若输出是多个互斥或并存的类别,状态位更高效。
对比分析表
| 维度 | 离散信号(BOOL) | 寄存器(INT/REAL) | 状态位(位组合) |
|---|---|---|---|
| 存储单位 | 1 bit | 16/32 bit | 8/16 bit(打包) |
| 信息量 | 2种状态 | 连续数值 | 2^n种组合 |
| 刷新速度 | 最快(随扫描周期) | 中等(需一致性处理) | 快(整字节写入) |
| 诊断能力 | 弱(仅知0/1) | 强(可看趋势) | 中(可解析具体位) |
| 通信开销 | 最低 | 较高 | 低 |
| 典型应用 | 急停、门锁、OK/NG | 温度、压力、坐标 | 缺陷类型、设备状态机 |
选型决策流程
- 第一步:判断AI输出是否为“是/否”判定?是→离散信号。
- 第二步:判断是否需要数值参与PID调节或趋势记录?是→寄存器。
- 第三步:判断是否存在≥3个互斥状态需要同时传输?是→状态位。
- 第四步:若混合需求,采用“寄存器+状态位”组合,如用寄存器传置信度,用状态位传类别。
常见误区与规避
误区2:在PLC中频繁读写REAL寄存器而不考虑一致性。应使用“一致性数据块”或“冻结”机制。
误区3:状态位编码无文档。若维护人员不清楚位定义,排障将极其困难。务必在PLC注释和HMI画面中明确位含义。