4. 在线监视程序逻辑
当一台设备出现“该动没动、不该动却动了、动作顺序错乱、动作时间不对”这类问题时,仅靠I/O指示灯和趋势曲线往往只能判断“结果不对”,却难以回答“程序为什么这样执行”。Studio 5000 提供的在线监视能力,正是把控制器内部真实执行状态映射到程序视图上的关键手段。本节围绕三种常用语言视图——梯形图(LAD)、功能块图(FBD)、结构化文本(ST)——以及交叉引用和标签监视,说明如何从“看到现象”走到“定位到具体逻辑条件”。
一、在线监视的本质:把控制器内存状态叠加到程序视图
进入在线状态(Online)并切换到“Run”模式后,Studio 5000 会持续读取控制器中的标签值,并把它们叠加显示在程序编辑器的逻辑元素上。需要先明确一个参照约定:在线监视显示的是控制器当前扫描周期内的实时值,而不是历史值。因此,当某个条件在极短时间内通断时,屏幕上看到的可能是“已经稳定”的状态,需要借助趋势或强制手段才能捕捉。
三种语言视图的监视表现不同:
- 梯形图:能流(rung condition)以绿色高亮表示导通,指令框、线圈、比较指令的输入输出端会显示当前值;未导通的梯级保持灰色。
- 功能块图:每个功能块的输入引脚、输出引脚旁直接显示数值,连线以颜色和粗细表示信号流动,布尔量常用绿/灰区分。
- 结构化文本:不能像图形语言那样“点亮”逻辑,但可以在监视窗口中观察变量值,或使用“Quick Watch”把光标停在变量上查看当前值。
理解这一点很重要:在线监视不是“看程序”,而是“看程序正在用什么数据执行”。定位异常时,真正有价值的是标签值、指令状态和使能条件,而不是代码文本本身。
二、梯形图在线监视:顺着能流找断点
梯形图是最直观的在线监视语言。当某个输出没有按预期动作时,第一步是在线观察该输出线圈所在梯级:如果整条梯级没有绿色能流,说明条件不满足;如果能流到达线圈但线圈仍为灰色,则要检查线圈类型(OTE、OTL、OTU)和是否有后续梯级覆盖。
以一个常见的电机启动控制为例,假设输出标签为 Motor_Run(对应 O:0/3),其梯级逻辑为:
XIC Start_PB XIC Stop_PB XIC OL_Fault OTE Motor_Run
──┤ ├──────────────────┤/├──────────────────┤/├──────────────────( )──
I:0/0 I:0/1 I:0/2 O:0/3
在线监视时,如果 Motor_Run 不导通,可以逐段观察:Start_PB 是否为 1?Stop_PB 是否误为 1(常闭点断开)?OL_Fault 是否触发?这种“顺着能流从右往左找断点”的方法,是梯形图在线诊断最核心的操作。需要注意的是,常闭触点在线显示为绿色时表示该位为 0(未动作),灰色时表示该位为 1(已动作),这与很多初学者的直觉相反,必须先在现场确认。
三、功能块图在线监视:看信号流与使能状态
功能块图适合处理模拟量、PID、计算和联锁逻辑。在线监视时,每个功能块的输入引脚和输出引脚旁会直接显示当前数值,例如一个 PID 块的 PV、SP、OUT 会实时刷新。如果设备动作异常与模拟量有关,FBD 视图比 LAD 更容易看出“哪个输入不对”。
例如某温度控制回路中,PID 块输出 OUT 始终为 0,而 PV 明显低于 SP。此时应检查:PID 块的 EN 使能端是否为 1?Manual 模式是否被置位?PV 的工程单位换算是否正确?这些信息在 FBD 在线视图中都能直接看到,不需要额外打开标签监视窗口。
FBD 在线监视的一个实用技巧是:把关键中间变量引出到监视窗口,与 FBD 视图并排显示。这样既能看信号流方向,又能看具体数值,避免在多个窗口之间反复切换。
四、结构化文本在线监视:用 Quick Watch 和监视窗口看表达式
结构化文本没有图形化的能流显示,但可以通过两种方式在线观察:一是把光标停在变量上,使用 Quick Watch 查看当前值;二是打开监视窗口(Watch Window),把关键变量、表达式甚至数组元素加入列表,持续刷新。
ST 在线诊断的关键在于把复杂表达式拆解成可观察的中间变量。例如下面这段逻辑:
IF (Start_PB AND NOT Stop_PB AND NOT OL_Fault) THEN
Motor_Run := 1;
ELSIF Fault_Reset THEN
Motor_Run := 0;
END_IF;
如果 Motor_Run 没有置位,可以在监视窗口中分别观察 Start_PB、Stop_PB、OL_Fault 三个布尔量,判断是哪一个条件不满足。对于更复杂的表达式,建议在程序中临时增加中间变量(如 Start_Condition),把复合条件拆开,便于在线观察。诊断完成后应移除临时变量,避免影响正式逻辑。
五、交叉引用:从标签反查所有使用位置
交叉引用(Cross Reference)是定位“谁改了这个标签”的关键工具。在标签上右键选择“Cross Reference”,Studio 5000 会列出该标签在程序中的所有使用位置,包括:所在例程、梯级号或行号、使用方式(XIC、XIO、OTE、OTL、OTU、MOV、COP 等)、以及是读还是写。
实际诊断中,交叉引用最常见的用途是:
- 发现重复写入:同一个输出标签在多个梯级中被 OTE 或 MOV 写入,导致后一个梯级覆盖前一个结果。
- 发现隐藏复位:某个输出被一个不显眼的 OTU 或 Fault_Reset 逻辑复位,而主逻辑看起来完全正常。
- 确认输入来源:某个输入标签是否被其他例程或 HMI 写入,导致现场信号与程序看到的值不一致。
交叉引用的结果需要结合在线监视一起看:交叉引用告诉你“哪里可能改”,在线监视告诉你“此刻是否真的改了”。两者结合,才能把范围从“整个程序”缩小到“某一条梯级或某一个功能块”。
六、标签监视与趋势:捕捉瞬态与顺序问题
对于动作顺序错乱、动作时间不对、动作抖动这类问题,单靠静态在线监视往往不够,因为异常可能只持续几十毫秒。此时应使用标签监视窗口配合趋势(Trend)功能:把相关输入、中间变量、输出同时加入趋势,设置合适的采样周期(例如 10 ms 或 20 ms),触发条件设为异常输出或关键中间变量,然后复现故障。
观察趋势时重点关注三件事:先后顺序(哪个信号先到、哪个后到)、时间间隔(是否超出或短于设定延时)、抖动次数(是否存在反复通断)。例如某气缸动作异常,趋势显示 Solenoid_Out 在 200 ms 内通断 5 次,而程序中并无脉冲逻辑,则很可能是输入信号抖动或扫描周期与外部信号不同步导致,需要进一步检查输入滤波或改用上升沿触发。
七、定位设备动作异常的实用判断顺序
综合以上工具,可以把定位过程归纳为一条可复用的判断链:先确认异常输出标签的在线值,再用交叉引用列出所有写入位置,然后在线观察对应梯级或功能块的条件链,最后用标签监视或趋势验证瞬态行为。判断时注意区分四类根因:逻辑条件不满足(输入、互锁、使能)、时序问题(延时、扫描周期、信号抖动)、数据问题(数值范围、单位、数据类型)、硬件问题(模块、接线、执行机构)。只有把根因归到正确类别,后续处理才不会走偏。