4. 数字量输入输出编程
数字量输入/输出(DI/DO)是工业控制器最基础也最常用的 I/O 类型。在 WAGO 控制器(如 PFC200、750 系列)中,DI 模块负责把现场开关、按钮、限位、接近开关等二值信号采集进来,DO 模块则把控制器的逻辑结果以 24V DC 电平输出到继电器、指示灯、电磁阀等执行器。本节围绕四个关键环节展开:模块配置、信号滤波、强制输出和点动调试。
一、DI/DO 模块配置
WAGO 750 系列 I/O 模块通过内部 K-Bus 与控制器通信,每个模块在物理上按插接顺序排列,控制器在启动时自动识别模块类型并分配过程映像地址。以常见的 750-430(8 通道 DI,24V DC)和 750-530(8 通道 DO,24V DC)为例,配置的核心是确认模块在机架中的位置、通道数量以及过程映像中的字节偏移。
在 CODESYS 或 WAGO I/O PRO 中,模块配置通常表现为设备树:控制器节点下挂 K-Bus 扩展模块,每个模块展开后显示其输入/输出通道。配置时需要关注三点:
- 模块顺序与地址映射:过程映像地址按模块插接顺序自动递增。例如第一个 750-430 占用输入字节 0,第二个 750-430 占用输入字节 1;DO 模块同理占用输出字节。若中间插入模拟量模块,数字量模块的字节偏移会相应后移。
- 通道极性:DI 模块通常为漏型/源型兼容,需根据现场传感器类型(PNP/NPN)确认公共端接线。DO 模块为高边输出,输出高电平为 24V DC。
- 诊断与状态:部分模块支持通道级诊断,可在配置中启用短路、过载检测,并将诊断状态映射到输入过程映像的额外字节。
配置完成后,建议在变量表中为每个通道建立符号名,例如 DI_StartBtn AT %IX0.0 : BOOL;、DO_Valve AT %QX0.0 : BOOL;,这样后续编程可读性大幅提升。
二、信号滤波
现场按钮、机械触点、长线缆容易引入抖动和干扰,导致 DI 信号在毫秒级内多次跳变。WAGO 数字量输入模块通常内置硬件滤波,滤波时间常数可通过模块参数设置,常见档位为 0.2ms、1ms、3ms、10ms、20ms。滤波时间越长,抗干扰能力越强,但响应延迟也越大。
选择滤波时间的原则是:滤波时间应大于抖动持续时间,但小于工艺允许的最小信号宽度。例如机械按钮抖动约 5~10ms,可选用 10ms 或 20ms 滤波;而高速计数或编码器信号则需选用 0.2ms 或关闭滤波。
除了硬件滤波,软件端也可做二次确认。例如在 PLC 程序中用定时器对输入信号做 20ms 延时确认:
// 软件滤波示例:输入信号需稳定 20ms 才被确认
TON_1(IN := DI_StartBtn, PT := T#20ms);
IF TON_1.Q THEN
StartBtn_Filtered := TRUE;
ELSE
StartBtn_Filtered := FALSE;
END_IF;
硬件滤波与软件滤波可叠加使用,但总延迟为两者之和,需在响应时间预算中一并考虑。
三、强制输出
强制输出(Force)是调试和排障的重要手段,它允许工程师在不修改程序逻辑的情况下,直接把某个 DO 通道置为 ON 或 OFF。WAGO 控制器在 CODESYS 中支持两种强制方式:
- 强制值(Force Value):将变量强制为指定值,程序无法覆盖,直到取消强制。
- 写入值(Write Value):一次性写入,程序下一扫描周期可覆盖。
强制输出常用于:确认执行器接线是否正确、检查电磁阀是否动作、验证输出模块通道是否损坏。操作时需注意:强制期间程序逻辑对同一通道的写操作会被忽略,因此强制结束后必须及时取消,否则可能造成设备误动作。建议在强制前先确认现场安全,必要时断开执行器负载或切换到手动模式。
四、点动调试
点动(Jog)调试是验证 DO 通道与执行器对应关系的最直接方法。典型做法是:在 HMI 或调试界面上为每个 DO 通道设置一个点动按钮,按下时输出 ON,松开时输出 OFF。这样工程师可以逐个确认“哪个输出对应哪个电磁阀/指示灯”。
点动调试的推荐流程:
- 确认控制器处于停止或手动模式,现场设备处于安全状态。
- 在变量表中找到目标 DO 变量,或通过 HMI 点动按钮触发。
- 观察执行器动作,同时用万用表测量输出端子对 0V 的电压,正常应为 24V DC。
- 记录通道与执行器的对应关系,形成 I/O 清单。
- 全部通道确认后,取消点动,恢复自动模式。
点动调试中常见问题包括:输出指示灯亮但执行器不动作(负载接线或电源问题)、多个输出同时动作(地址映射错误)、输出无法关闭(强制未取消或程序双线圈)。排查时应先看模块 LED,再测端子电压,最后查程序逻辑。
五、综合示例:一个按钮控制一个电磁阀
假设现场有一个启动按钮接在 750-430 的通道 0(%IX0.0),一个电磁阀接在 750-530 的通道 0(%QX0.0)。要求按下按钮电磁阀得电,松开按钮电磁阀失电,且按钮信号需 20ms 滤波。
// 变量声明
VAR
DI_StartBtn AT %IX0.0 : BOOL; // 启动按钮
DO_Valve AT %QX0.0 : BOOL; // 电磁阀
TON_Filter : TON; // 软件滤波定时器
Btn_OK : BOOL; // 滤波后信号
END_VAR
// 软件滤波
TON_Filter(IN := DI_StartBtn, PT := T#20ms);
Btn_OK := TON_Filter.Q;
// 输出控制
DO_Valve := Btn_OK;
调试时,先在 CODESYS 中监控 DI_StartBtn 和 Btn_OK,按下按钮观察两者是否在 20ms 后同步为 TRUE;再监控 DO_Valve,确认输出通道 %QX0.0 的 LED 点亮;最后用万用表测量 DO 模块通道 0 端子对 0V 电压,应为 24V DC。若 LED 亮但电磁阀不动作,检查电磁阀供电和接线;若 Btn_OK 不变化,检查 DI 模块滤波参数是否设置过大或按钮接线是否正确。
掌握 DI/DO 模块配置、信号滤波、强制输出和点动调试这四项技能后,数字量编程的绝大部分现场问题都可以被快速定位和解决。关键在于:配置阶段确保地址映射正确,滤波阶段平衡抗扰与响应,强制和点动阶段始终把安全放在第一位。