工业控制扫描周期:输入映像为何会过期
PLC程序每个周期都执行完成,并不表示逻辑使用的就是现场当前状态。工业控制中的短脉冲误判,常由输入映像的时间陈旧与不同周期任务之间的单次触发丢失共同造成。
典型PLC在扫描开始或指定刷新点,把物理输入复制到过程映像,程序随后读取这份稳定快照。好处是同一扫描内多次读取同一地址不会前后矛盾,代价是信号在刷新后才变化时,要等到下一次扫描才可见。实际响应还包含远程I/O采样、网络更新、任务排队和输出刷新,不能用一项程序执行时间代表端到端延迟。若输入脉宽短于整条采集链的最坏更新时间,信号可能在两次采样之间完整出现又消失,逻辑从未看见它。
立即读取物理输入可以减少部分陈旧,却会破坏快照一致性。一个联锁条件在程序前半段读到断开、后半段又读到闭合,顺序逻辑便可能在同一扫描内走过互相矛盾的分支。对高速计数、编码器零位或窄脉冲传感器,更可靠的方法是由输入模块硬件锁存边沿或计数,再让PLC读取保持后的事件。分布式站点若支持源端时间戳,应同时传递质量位和采样时刻,控制器才能判断数据是刚采到、延迟到达,还是通信恢复后重新发布的旧值。
设计时先为每类输入规定允许陈旧时间,而不是统一追求最短扫描。急停等安全信号应进入独立安全链路;高速工艺触发交给硬件捕获;温度、液位等慢变量则可接受较低刷新率。测试可让脉冲相位相对扫描周期连续移动,覆盖恰好落在刷新边界两侧的情况,并记录模块采样、网络到达和任务读取的时间戳。若只在固定相位重复触发,样机可能次次通过,却把最容易漏采的窗口完全避开。
跨任务单次触发是另一类时序漏洞。工业控制项目常用快速任务检测上升沿,再把一个保持一周期的布尔量交给慢速顺序任务;若快速任务在慢任务两次执行之间置位又复位,慢任务便永远看不到事件。反过来,慢任务产生的单周期脉冲被快速任务读取多次,又可能让计数或命令重复执行。单次触发块内部的前态变量若被两个任务共同调用,还会因执行顺序不同而改变检测结果。
跨周期传递应使用事件语义,而非脉冲宽度碰运气。生产者可递增单调计数器或写入序列号,消费者保存最后处理值,只要两者不同就知道有新事件;需要逐个处理时,还应配置有界队列。简单置位保持也可用,但必须由唯一消费者确认后清除,并保证置位与清除是原子操作。共享数据要明确所有权,避免两个任务同时写同一状态字。对于可合并事件,例如刷新画面,计数器只需表示有新版本;对于不可丢的工件到位,队列深度则要按最坏阻塞时间计算。
验证跨任务逻辑时,应扫描任务相位、优先级和执行时间,而不是只看标称周期。故意让通信诊断、日志写入或在线修改拉长低优先级任务,观察事件是否丢失、重复或乱序。控制器重启和程序下载也要检查计数器初值,防止消费者把旧序列号当成新事件。若使用保持位,需测试消费者异常停运时是否一直占用以及恢复后是否误执行积压命令。最终监控项至少包括事件产生数、消费数、队列高水位和数据年龄,让偶发漏触发能够在运行记录中被定位。
因此,扫描周期只是时序预算的一部分。先按信号速度选择映像、锁存或时间戳,再用可确认的事件机制跨任务传递,工业控制逻辑才能在不同相位下保持一致。





