ST仿真测试方法:使用 PLCSIM 验证ST逻辑 without 硬件连接
在工业自动化项目中,结构化文本(Structured Text,简称 ST)是 IEC 61131-3 标准下最接近高级编程语言的 PLC 编程方式,广泛用于复杂算法、运动控制、PID 调优和数据处理等场景。但 ST 代码一旦写入真实控制器并接入现场设备,调试风险高、停机成本大、问题复现难。因此,在不连接任何物理硬件的前提下,完成对 ST 逻辑的完整功能验证,是保障系统可靠性的关键前置环节。西门子 TIA Portal 集成的 PLCSIM Advanced(或经典 PLCSIM)为此提供了零硬件依赖的闭环仿真环境。以下为可直接执行的实操指南。
一、前提条件确认
确保本地开发环境满足以下全部要求:
- 安装 TIA Portal V16 或更高版本(推荐 V18,兼容性更广);
- 已安装对应版本的 PLCSIM Advanced 4.0 或以上(若使用 S7-1500/ET 200SP 控制器);
- 若仅用经典 PLCSIM(适用于 S7-1200/1500 基础仿真),需确认 CPU 型号支持(如
CPU 1511-1 PN、CPU 1214C DC/DC/DC); - 项目中已创建一个 S7-1500 或 S7-1200 控制器设备,且硬件配置与目标现场一致(特别是固件版本);
- ST 程序已编写完成,无编译错误(编译通过是仿真的硬性前提)。
✅ 验证方式:在项目树中右键控制器 → 选择“编译” → 查看“输出”窗口中是否显示“0 个错误,0 个警告”。
二、启用仿真运行模式(无需硬件)
- 切换控制器运行模式:在项目树中展开控制器 → 展开“设备配置” → 双击“属性” → 切换到“常规”选项卡 → 在“运行模式”下拉菜单中选择 “仿真”;
- 禁用硬件诊断检查:在同一属性页中,取消勾选 “在启动时检查硬件配置”;
- 保存并重新加载设备配置:点击“确定” → 弹出提示时选择“是” → 等待配置重载完成;
- 启动仿真实例:右键控制器 → 选择“启动仿真” → 系统自动调起 PLCSIM(或 PLCSIM Advanced)窗口;
- 确认仿真状态:观察 PLCSIM 窗口右上角状态栏,显示 “RUN” 且 CPU 指示灯为绿色,表示仿真控制器已就绪。
⚠️ 注意:若弹出“无法启动仿真”的提示,请检查 Windows 系统服务
S7OLM是否已启动(Win + R → 输入services.msc→ 找到 Siemens S7OLM → 右键“启动”并设为“自动”)。
三、ST 逻辑仿真测试四步法(纯软件闭环)
步骤 1:监控 ST 变量实时值
- 打开监控表:在项目树中右键控制器 → 选择“监控表” → 新建一个空白监控表;
- 添加待测变量:在监控表第一列输入变量全路径,例如:
Main.DB_Motor.speed_setpointMain.FB_PID.OutputMain.GVL_System.bEmergencyStop✅ 提示:可直接从 ST 程序编辑器中拖拽变量名至监控表,避免拼写错误;
- 启用强制监控:勾选监控表左上角的 “启用监控” 按钮(图标为绿色眼睛);
- 观察变化:修改 ST 中某变量赋值语句(如
speed_setpoint := 1200;),保存后点击“下载到仿真” → 监控表立即刷新数值。
步骤 2:在线修改变量以模拟输入信号
- 在监控表中定位输入变量(如
Main.IW_Sensor.value、Main.IX_StartButton); - 双击该变量值单元格 → 输入期望值(如
TRUE、150、16#A5F0); - 按回车确认 → 系统自动将该值写入仿真 CPU 的输入映像区;
- 观察 ST 程序响应:检查关联输出变量是否按逻辑正确更新(如
QX_MotorOn是否变为TRUE)。
✅ 技巧:对布尔型变量,可右键单元格 → 选择“切换值”快速翻转
TRUE/FALSE;对整型变量,支持十六进制输入(前缀16#)、浮点数(如3.14159)。
步骤 3:设置断点单步调试 ST 代码
- 打开 ST 程序块(如
Main、FB_PID); - 在目标行左侧灰色边栏点击 → 设置红色断点(如
IF bStart AND NOT bRunning THEN行); - 启用在线调试:点击工具栏 “启用在线访问”(图标为电脑+闪电)→ 再点击 “启动调试”(虫子图标);
- 触发断点:通过步骤 2 修改输入变量,使程序执行流到达断点行;
- 单步执行:点击 “单步进入”(F7)逐行执行,或 “单步跳过”(F8)跳过函数调用;
- 查看局部变量:在“调试”视图中展开“局部变量”,实时观察
iCounter、rTemp等中间变量值变化。
⚠️ 注意:断点仅在“调试”模式下生效;若程序未触发断点,检查输入条件是否满足,或尝试在首行加断点确认调试通道正常。
步骤 4:批量注入测试用例(脚本化验证)
当逻辑涉及多工况(如温度区间判断、多段速切换),手动测试效率低。此时可用 TIA Portal 内置的“测试序列”功能实现自动化:
- 新建测试序列:在项目树中右键控制器 → “添加新对象” → “测试序列”;
- 定义输入变量组:在测试序列编辑器中,点击“添加输入变量”,填入:
IW_TempSensor→ 类型INT→ 初始值25;IX_ModeSelect→ 类型BYTE→ 初始值16#01;
- 添加测试步骤:点击“添加步骤”,设置:
- 步骤 1:
IW_TempSensor = 85,延时500 ms; - 步骤 2:
IX_ModeSelect = 16#02,延时300 ms; - 步骤 3:
IW_TempSensor = 120,延时200 ms;
- 步骤 1:
- 关联输出断言:在每步末尾点击“添加断言”,例如:
- 步骤 1 后断言:
QX_FanHigh = TRUE; - 步骤 3 后断言:
QW_AlarmCode = 16#0005;
- 步骤 1 后断言:
- 运行测试:点击“开始测试” → 查看结果面板中各步“通过/失败”状态及实际输出值。
✅ 优势:一次运行覆盖 20+ 工况,生成 HTML 测试报告(含时间戳、变量快照),无需人工记录。
四、典型 ST 逻辑验证场景与实操示例
场景 1:带限幅与死区的 PID 输出限幅
假设 ST 程序中有如下逻辑片段:
rPIDOut := FB_PID(rSetpoint := rSP, rProcessValue := rPV);
rOutputLimited := LIMIT(LO := 0.0, HI := 100.0, IN := rPIDOut);
rOutputDeadband := IF ABS(rOutputLimited - rLastOutput) > 0.5
THEN rOutputLimited
ELSE rLastOutput;
rLastOutput := rOutputDeadband;
✅ 验证方法:
- 在监控表中同时添加
rSP、rPV、rPIDOut、rOutputLimited、rOutputDeadband; - 先设
rSP := 50.0; rPV := 0.0→ 观察rPIDOut是否快速上升; - 再设
rPV := 49.8→ 计算ABS(rOutputLimited - rLastOutput)是否 ≤ 0.5 →rOutputDeadband应保持不变; - 最后设
rPV := 49.0→ 差值 > 0.5 →rOutputDeadband应更新为新值。
场景 2:多条件连锁启停(安全逻辑)
ST 中常见:
bMotorEnable := (bPowerOK AND bDoorClosed AND NOT bEmergencyStop)
OR bMaintenanceOverride;
bMotorRun := bStartButton AND bMotorEnable AND NOT bStopButton;
✅ 验证方法:
- 使用监控表强制
bPowerOK := TRUE、bDoorClosed := FALSE、bEmergencyStop := FALSE、bMaintenanceOverride := FALSE; - 此时
bMotorEnable应为FALSE; - 再设
bDoorClosed := TRUE→bMotorEnable立即变为TRUE; - 接着设
bStartButton := TRUE→bMotorRun变为TRUE; - 最后设
bStopButton := TRUE→bMotorRun立即变回FALSE。
五、常见问题排查清单
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| PLCSIM 启动失败,报错“S7OLM 服务未运行” | Windows 服务被禁用 | 运行 services.msc → 启动 Siemens S7OLM 并设为自动 |
| 监控表数值不刷新,始终显示“???” | 未启用监控或变量未下载 | 点击监控表左上角“启用监控”按钮;右键控制器 → “下载到设备”(仿真) |
| 断点不触发 | 调试未启用或程序未执行到该块 | 确认已点击“启动调试”;在 ST 块中添加 bDebugFlag := TRUE; 并监控其值 |
| 测试序列中变量值未写入 | 变量地址错误或类型不匹配 | 检查变量路径是否含拼写错误;确认变量声明类型(如 INT vs DINT)与测试序列中定义一致 |
| ST 计算结果与预期不符(如除零、溢出) | 未处理边界条件 | 在 ST 中插入 IF iDenominator <> 0 THEN ... END_IF;;使用 REAL_TO_INT 前加范围检查 |
六、进阶技巧:PLCSIM Advanced 与虚拟现场 IO 映射
若需模拟更真实的信号行为(如 4–20 mA 模拟量波动、脉冲编码器计数),可结合 PLCSIM Advanced 的虚拟 IO 功能:
- 在 PLCSIM Advanced 界面中点击 “IO Configuration”;
- 添加虚拟模块:例如
6ES7 134-6GD00-0BA1(AI 4x13bit); - 双击该模块 → 在“Channel 0 Value”中输入
12000(对应 12 mA); - 在 TIA Portal 中,该通道地址自动映射为
IW64(取决于插槽位置); - ST 程序中直接读取
IW64,即可获得仿真模拟量输入。
✅ 优势:无需外部信号发生器,即可验证滤波算法、量程转换(如
(IW64 - 4000) * 100.0 / 16000.0)等。
七、验证完成后的交付物清单
每次 ST 仿真测试结束后,应归档以下内容以备审查:
- 编译通过的
.awl(ST 源码)文件; - 监控表截图(含关键变量多工况下的稳定值);
- 断点调试过程日志(导出为
.txt,含时间戳与变量快照); - 测试序列执行报告(
.html文件,含通过率、失败步骤详情); - 仿真环境配置说明(TIA Portal 版本、PLCSIM 版本、CPU 型号与固件)。
完成上述全部步骤后,ST 逻辑已在完全隔离于物理硬件的环境中通过功能、边界、连锁与时序验证。此时可放心将程序下载至真实控制器,大幅降低现场调试周期与风险。

暂无评论,快来抢沙发吧!