4. I/O点表与信号定义
I/O点表是虚拟联调工程的“数据字典”,它决定了PLC程序、HMI画面、机器人接口、虚拟仿真模型之间能否对得上号。点表一旦出现命名冲突、方向写反、量纲缺失或安全属性遗漏,联调阶段就会出现“信号明明接通了,设备动作却相反”“模拟量数值差10倍”“急停信号被普通逻辑覆盖”等典型故障。本节围绕数字量、模拟量、脉冲量和总线信号四类对象,说明点表应如何定义命名、方向、量纲与安全属性,并给出可直接用于联调的字段组织方式。
一、四类信号的本质差异决定字段设计
数字量(DI/DO)只有0/1两种状态,核心字段是有效电平、常开/常闭、滤波时间与安全等级。例如“急停按钮”在电气上常用常闭触点,PLC侧DI点应定义为“0=已按下,1=未按下”,若点表只写“急停输入”,联调时极易把逻辑写反。模拟量(AI/AO)是连续量,必须写清量纲、量程、工程上下限、原始码值与工程值的换算关系,例如4~20mA对应0~1000mm,PLC原始码0~27648,则工程值= (原始码/27648)×(1000-0)+0。脉冲量(PI/PO)关注频率、占空比、计数方向与每脉冲当量,例如伺服编码器A/B相脉冲,每转2500脉冲,则1个脉冲对应0.144°。总线信号(如PROFINET、EtherCAT、Modbus TCP)不是单点,而是一段过程映像或报文,必须定义站号、槽号、偏移地址、数据类型、字节序与刷新周期。
二、命名规则:让机器和人都能读懂
推荐采用“区域_设备_功能_类型”的分段命名,例如Line1_Robot1_Grip_Close_DO。分段之间用下划线,避免空格和中文,保证在PLC、仿真软件、数据库和脚本中都能直接引用。命名中必须体现方向:输入用_DI或_AI,输出用_DO或_AO,脉冲用_PI或_PO,总线用_BUS。同一功能在不同设备上应保持后缀一致,例如所有夹爪闭合输出都叫_Grip_Close_DO,这样批量生成映射脚本时才能用正则统一处理。
对于总线信号,命名要包含站号和偏移,例如PN_St3_Slot1_IB0_RobotStatus_BUS。这样在虚拟联调时,即使PLC变量名与仿真模型端口名不同,也能通过点表中的“站号+偏移”快速定位到具体字节。命名一旦确定,应在点表、PLC符号表、HMI标签库和仿真模型端口表中同步冻结,任何一方修改都必须走变更记录。
三、方向定义:从“谁产生、谁消费”出发
方向不是看信号在电气上往哪流,而是看“谁产生、谁消费”。以PLC为参照:传感器、按钮、机器人状态反馈进入PLC,定义为IN;PLC输出到继电器、阀岛、机器人使能,定义为OUT。虚拟联调中,仿真模型替代了部分真实设备,方向仍以PLC为参照,但要在点表中增加“虚拟/实物”标记,例如Source=Sim或Source=Real。这样当仿真模型输出一个Clamp_Closed_DI时,联调人员能立刻知道这是虚拟反馈,不是真实传感器。
方向写反的典型后果是:PLC输出Conveyor_Start_DO,仿真模型却把它当成输入,导致输送带永远不动。排查时先看点表方向列,再核对PLC变量声明是%Q还是%I,最后检查仿真模型端口是input还是output,三者必须一致。
四、量纲与换算:模拟量和脉冲量的关键字段
模拟量点表必须包含:物理量名称、单位、量程、工程上下限、原始码范围、换算公式、滤波时间、报警上下限。以压力变送器为例:量程0~10bar,输出4~20mA,PLC模拟量模块原始码0~27648。则工程值计算公式为:
工程值(bar) = (原始码 / 27648) × (10 - 0) + 0
若原始码 = 13824,则工程值 = 5.0 bar
报警上限 = 8.0 bar,报警下限 = 0.5 bar
脉冲量点表要写清每转脉冲数、每脉冲当量、计数方向定义和零点偏移。例如编码器2500P/R,机械减速比1:10,则电机转10圈对应25000脉冲,对应负载轴1圈。若点表只写“编码器脉冲”,联调时无法判断位置换算是否正确。总线信号则要写清数据类型(BOOL、INT、DINT、REAL)、字节序和刷新周期,例如PROFINET IO的Input 4 Bytes,偏移0~3,大端,刷新周期4ms。
五、安全属性:点表中不可妥协的一列
安全属性用于标记该信号是否参与安全逻辑、是否必须优先处理、是否允许被普通逻辑覆盖。建议至少分为三级:安全级(急停、安全门、超程限位)、联锁级(压力超限、温度超限、伺服使能)、普通级(指示灯、普通按钮)。安全级信号在虚拟联调中必须单独映射到安全PLC或安全仿真模块,不能与普通逻辑混在一个周期任务中。点表中应增加“安全等级”“失效安全值”“响应时间”三列。例如急停信号失效安全值为0(按下即断开),响应时间≤100ms;普通指示灯失效安全值可忽略。
六、可直接使用的点表字段模板
下表给出四类信号共用的字段结构,实际项目中可按设备类型增减列。建议用Excel或CSV维护,联调前导出为JSON供仿真脚本读取。
| 字段 | 数字量示例 | 模拟量示例 | 脉冲量示例 | 总线示例 |
|---|---|---|---|---|
| 变量名 | Line1_Clamp_Close_DO | Line1_Press_Force_AI | Axis1_Encoder_PI | PN_St3_IB0_RobotStatus_BUS |
| 方向 | OUT | IN | IN | 读 |
| 数据类型 | BOOL | INT | DINT | BYTE[4] |
| 量纲/单位 | 0/1 | bar | 脉冲 | — |
| 量程/范围 | — | 0~10bar | 0~25000 | 偏移0~3 |
| 有效电平/换算 | 高有效 | 4~20mA→0~10bar | 2500P/R | 大端 |
| 安全等级 | 普通 | 联锁 | 联锁 | 看门狗 |
| 失效安全值 | 0 | 0bar | 保持 | 超时清零 |
| 虚拟/实物 | Sim | Sim | Real | Sim |
点表完成后,用一段简单脚本做一致性检查:变量名是否重复、方向是否与PLC声明一致、模拟量上下限是否覆盖报警值、安全级信号是否都有失效安全值。检查通过后再进入虚拟联调,能避免大量低级错误。点表不是一次性文档,联调过程中每次信号变更都要回写点表并记录版本,否则仿真模型与PLC程序会逐渐失配。