2. PLC与工业自动化基础
PLC(可编程逻辑控制器)是工业自动化系统的核心控制单元。它替代了传统继电器控制柜,用可编程逻辑实现联锁、顺序、过程与安全控制。理解PLC的工作原理与扫描周期,是后续进行仿真回归测试与流水线验证的基础——因为测试用例的执行时序、I/O状态采样点、断言时机,都直接受扫描机制影响。
一、PLC工作原理:循环扫描与集中采样
PLC采用“循环扫描”工作方式,而非事件驱动的即时响应。其核心思想是:CPU按固定顺序反复执行一段程序,每次执行称为一个扫描周期。一个典型扫描周期包含四个阶段:
- 输入采样:读取所有物理输入端子状态,写入输入映像区(I区)。
- 程序执行:按用户程序顺序逐条运算,读写内部寄存器与输出映像区(Q区)。
- 输出刷新:将输出映像区的值一次性写入物理输出模块。
- 系统处理:通信、诊断、看门狗、后台任务等。
关键点在于:程序执行阶段使用的是输入映像区的“快照”,而不是实时物理输入。因此,若输入信号在采样后、程序执行中发生变化,本次扫描不会感知,需等下一周期。这决定了仿真测试中“注入信号—等待周期—断言输出”的基本节奏。
二、扫描周期与I/O映射:数据流视角
I/O映射是PLC将物理通道与程序变量关联的机制。输入映射把端子状态映射到I区地址(如I0.0、%IX0.0),输出映射把Q区地址映射到端子(如Q0.1、%QX0.1)。程序只操作映像区,物理刷新由系统在固定阶段完成。这种“隔离”带来确定性,也带来一个扫描周期的固有延迟。
下图展示了一个扫描周期内,物理输入、输入映像、程序逻辑、输出映像与物理输出之间的数据流与时间关系:
从图中可见,物理输入在t0被采样,程序在t1~t2执行,输出在t3刷新。若输入在t0之后变化,必须等到下一个周期的t0'才能被程序看到。仿真回归测试中,若断言时机早于输出刷新,就会误判。
三、常见品牌与编程语言
不同品牌的PLC在编程软件、指令系统、地址格式上差异明显,但IEC 61131-3标准定义了五种通用编程语言,主流品牌均支持或部分支持:
| 语言 | 全称 | 特点 | 典型适用 |
|---|---|---|---|
| LD | 梯形图 | 图形化,接近继电器电路,直观易维护 | 离散逻辑、联锁 |
| FBD | 功能块图 | 图形化,以功能块和信号线表达运算 | 模拟量处理、闭环 |
| ST | 结构化文本 | 高级文本,类似Pascal,适合复杂算法 | 计算、循环、状态机 |
| SFC | 顺序功能图 | 状态转移图,步与转换条件清晰 | 顺序控制、流程设备 |
| IL | 指令表 | 低级文本,逐条指令,已逐渐淘汰 | 旧系统维护 |
常见品牌方面:西门子(S7-1200/1500,TIA Portal,支持LAD/FBD/STL/SCL/GRAPH)、罗克韦尔(ControlLogix,Studio 5000,支持Ladder/FBD/ST/Sequential Function Chart)、三菱(FX/Q系列,GX Works,支持梯形图/ST/SFC)、施耐德(Modicon,EcoStruxure,支持LD/FBD/ST/SFC)、欧姆龙(NJ/NX,Sysmac Studio,支持LD/ST)。在仿真回归测试中,需针对不同品牌的地址格式与扫描特性编写适配层。
四、案例场景:一个启动保持回路的扫描行为
以“启动—保持—停止”回路为例,用ST表达:
// 输入: StartBtn(I0.0), StopBtn(I0.1)
// 输出: Motor(Q0.0)
// 内部: RunFlag(M0.0)
IF StartBtn AND NOT StopBtn THEN
RunFlag := TRUE;
END_IF;
IF StopBtn THEN
RunFlag := FALSE;
END_IF;
Motor := RunFlag;
假设StartBtn在扫描周期t0被采样为TRUE,程序执行时RunFlag置位,输出刷新后Motor为TRUE。若StopBtn在t0之后、t1之前按下,本次扫描不会看到,Motor仍保持TRUE,直到下一周期才断开。仿真测试若在t0后立即断言Motor为FALSE,就会失败。正确做法是:注入StopBtn后,至少等待一个完整扫描周期再断言。
五、误区与复盘
- 误区一:把PLC当事件驱动。PLC是周期扫描,输入变化不会立即触发程序,必须等下一周期。测试脚本若按“即时响应”设计,会大量误报。
- 误区二:忽略I/O映射延迟。物理输入到映像区、映像区到物理输出各有一个刷新点,端到端延迟可能达到1~2个周期。
- 误区三:不同品牌地址混用。西门子用I/Q/M,罗克韦尔用Local:1:I.Data,三菱用X/Y/M。仿真适配层必须做地址归一化。
- 误区四:程序执行时间波动。通信负载、中断、大循环会导致周期抖动,测试超时阈值应留有余量。
复盘建议:在仿真回归测试平台中,记录每个用例的“注入时刻—等待周期数—断言时刻—实际周期计数”,形成时序日志。这样一旦出现偶发失败,可以快速判断是逻辑缺陷还是时序采样问题。理解扫描周期与I/O映射,是编写稳定、可重复的PLC回归测试的第一块基石。