文章目录

ST仿真测试方法:使用 PLCSIM 验证ST逻辑 without 硬件连接

发布于 2026-03-20 08:51:51 · 浏览 3 次 · 评论 0 条

ST仿真测试方法:使用 PLCSIM 验证ST逻辑 without 硬件连接

在工业自动化项目中,结构化文本(Structured Text,简称 ST)是 IEC 61131-3 标准下最接近高级编程语言的 PLC 编程方式,广泛用于复杂算法、运动控制、PID 调优和数据处理等场景。但 ST 代码一旦写入真实控制器并接入现场设备,调试风险高、停机成本大、问题复现难。因此,在不连接任何物理硬件的前提下,完成对 ST 逻辑的完整功能验证,是保障系统可靠性的关键前置环节。西门子 TIA Portal 集成的 PLCSIM Advanced(或经典 PLCSIM)为此提供了零硬件依赖的闭环仿真环境。以下为可直接执行的实操指南。


一、前提条件确认

确保本地开发环境满足以下全部要求:

  1. 安装 TIA Portal V16 或更高版本(推荐 V18,兼容性更广);
  2. 已安装对应版本的 PLCSIM Advanced 4.0 或以上(若使用 S7-1500/ET 200SP 控制器);
  3. 若仅用经典 PLCSIM(适用于 S7-1200/1500 基础仿真),需确认 CPU 型号支持(如 CPU 1511-1 PNCPU 1214C DC/DC/DC);
  4. 项目中已创建一个 S7-1500 或 S7-1200 控制器设备,且硬件配置与目标现场一致(特别是固件版本);
  5. ST 程序已编写完成,无编译错误(编译通过是仿真的硬性前提)。

✅ 验证方式:在项目树中右键控制器 → 选择“编译” → 查看“输出”窗口中是否显示“0 个错误,0 个警告”。


二、启用仿真运行模式(无需硬件)

  1. 切换控制器运行模式:在项目树中展开控制器 → 展开“设备配置” → 双击“属性” → 切换到“常规”选项卡 → 在“运行模式”下拉菜单中选择 “仿真”
  2. 禁用硬件诊断检查:在同一属性页中,取消勾选 “在启动时检查硬件配置”
  3. 保存并重新加载设备配置:点击“确定” → 弹出提示时选择“是” → 等待配置重载完成;
  4. 启动仿真实例:右键控制器 → 选择“启动仿真” → 系统自动调起 PLCSIM(或 PLCSIM Advanced)窗口;
  5. 确认仿真状态:观察 PLCSIM 窗口右上角状态栏,显示 “RUN” 且 CPU 指示灯为绿色,表示仿真控制器已就绪。

⚠️ 注意:若弹出“无法启动仿真”的提示,请检查 Windows 系统服务 S7OLM 是否已启动(Win + R → 输入 services.msc → 找到 Siemens S7OLM → 右键“启动”并设为“自动”)。


三、ST 逻辑仿真测试四步法(纯软件闭环)

步骤 1:监控 ST 变量实时值

  1. 打开监控表:在项目树中右键控制器 → 选择“监控表” → 新建一个空白监控表;
  2. 添加待测变量:在监控表第一列输入变量全路径,例如:
    • Main.DB_Motor.speed_setpoint
    • Main.FB_PID.Output
    • Main.GVL_System.bEmergencyStop

      ✅ 提示:可直接从 ST 程序编辑器中拖拽变量名至监控表,避免拼写错误;

  3. 启用强制监控:勾选监控表左上角的 “启用监控” 按钮(图标为绿色眼睛);
  4. 观察变化:修改 ST 中某变量赋值语句(如 speed_setpoint := 1200;),保存后点击“下载到仿真” → 监控表立即刷新数值。

步骤 2:在线修改变量以模拟输入信号

  1. 在监控表中定位输入变量(如 Main.IW_Sensor.valueMain.IX_StartButton);
  2. 双击该变量值单元格 → 输入期望值(如 TRUE15016#A5F0);
  3. 按回车确认 → 系统自动将该值写入仿真 CPU 的输入映像区;
  4. 观察 ST 程序响应:检查关联输出变量是否按逻辑正确更新(如 QX_MotorOn 是否变为 TRUE)。

✅ 技巧:对布尔型变量,可右键单元格 → 选择“切换值”快速翻转 TRUE/FALSE;对整型变量,支持十六进制输入(前缀 16#)、浮点数(如 3.14159)。

步骤 3:设置断点单步调试 ST 代码

  1. 打开 ST 程序块(如 MainFB_PID);
  2. 在目标行左侧灰色边栏点击 → 设置红色断点(如 IF bStart AND NOT bRunning THEN 行);
  3. 启用在线调试:点击工具栏 “启用在线访问”(图标为电脑+闪电)→ 再点击 “启动调试”(虫子图标);
  4. 触发断点:通过步骤 2 修改输入变量,使程序执行流到达断点行;
  5. 单步执行:点击 “单步进入”(F7)逐行执行,或 “单步跳过”(F8)跳过函数调用;
  6. 查看局部变量:在“调试”视图中展开“局部变量”,实时观察 iCounterrTemp 等中间变量值变化。

⚠️ 注意:断点仅在“调试”模式下生效;若程序未触发断点,检查输入条件是否满足,或尝试在首行加断点确认调试通道正常。

步骤 4:批量注入测试用例(脚本化验证)

当逻辑涉及多工况(如温度区间判断、多段速切换),手动测试效率低。此时可用 TIA Portal 内置的“测试序列”功能实现自动化:

  1. 新建测试序列:在项目树中右键控制器 → “添加新对象” → “测试序列”;
  2. 定义输入变量组:在测试序列编辑器中,点击“添加输入变量”,填入:
    • IW_TempSensor → 类型 INT → 初始值 25
    • IX_ModeSelect → 类型 BYTE → 初始值 16#01
  3. 添加测试步骤:点击“添加步骤”,设置:
    • 步骤 1:IW_TempSensor = 85,延时 500 ms
    • 步骤 2:IX_ModeSelect = 16#02,延时 300 ms
    • 步骤 3:IW_TempSensor = 120,延时 200 ms
  4. 关联输出断言:在每步末尾点击“添加断言”,例如:
    • 步骤 1 后断言:QX_FanHigh = TRUE
    • 步骤 3 后断言:QW_AlarmCode = 16#0005
  5. 运行测试:点击“开始测试” → 查看结果面板中各步“通过/失败”状态及实际输出值。

✅ 优势:一次运行覆盖 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;

✅ 验证方法:

  • 在监控表中同时添加 rSPrPVrPIDOutrOutputLimitedrOutputDeadband
  • 先设 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 := TRUEbDoorClosed := FALSEbEmergencyStop := FALSEbMaintenanceOverride := FALSE
  • 此时 bMotorEnable 应为 FALSE
  • 再设 bDoorClosed := TRUEbMotorEnable 立即变为 TRUE
  • 接着设 bStartButton := TRUEbMotorRun 变为 TRUE
  • 最后设 bStopButton := TRUEbMotorRun 立即变回 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 功能:

  1. 在 PLCSIM Advanced 界面中点击 “IO Configuration”
  2. 添加虚拟模块:例如 6ES7 134-6GD00-0BA1(AI 4x13bit);
  3. 双击该模块 → 在“Channel 0 Value”中输入 12000(对应 12 mA);
  4. 在 TIA Portal 中,该通道地址自动映射为 IW64(取决于插槽位置);
  5. ST 程序中直接读取 IW64,即可获得仿真模拟量输入。

✅ 优势:无需外部信号发生器,即可验证滤波算法、量程转换(如 (IW64 - 4000) * 100.0 / 16000.0)等。


七、验证完成后的交付物清单

每次 ST 仿真测试结束后,应归档以下内容以备审查:

  • 编译通过的 .awl(ST 源码)文件;
  • 监控表截图(含关键变量多工况下的稳定值);
  • 断点调试过程日志(导出为 .txt,含时间戳与变量快照);
  • 测试序列执行报告(.html 文件,含通过率、失败步骤详情);
  • 仿真环境配置说明(TIA Portal 版本、PLCSIM 版本、CPU 型号与固件)。

完成上述全部步骤后,ST 逻辑已在完全隔离于物理硬件的环境中通过功能、边界、连锁与时序验证。此时可放心将程序下载至真实控制器,大幅降低现场调试周期与风险。

评论 (0)

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

扫一扫,手机查看

扫描上方二维码,在手机上查看本文