审查时用GX Works3的“监控→扫描时间”实时看程序执行时间,发现超过2ms的模块就双击进去分析。
第八重:可测试性 —— “上线前我能模拟80%故障”
痛点:现场没信号,你没法模拟限位开关。只能拿万用表短接,搞不好烧I/O。方案:在程序中预留“仿真模式”开关。当bSimMode := TRUE
时,所有输入量由内部变量代替。这样在GX Works3的仿真器里就能把整个逻辑跑通。审查要点: <ul>●整个程序是否包含一个全局的bSimMode
? ●每个输入量是否有对应的仿真赋值?
●所有输出量在仿真模式下是否被抑制(防止真的驱动设备)?
代码示例(仿真模式):structured text
// 仿真开关定义(全局变量)
// bSimMode : BOOL; // TRUE=仿真模式,FALSE=实际模式
// 实际输入
IF NOT bSimMode THEN
bLimitTop_Actual := %IX100.0; // 实际I/O
bLimitBottom_Actual := %IX100.1;
ELSE
// 仿真输入,来自工程变量“Sim_TopLimit”等
bLimitTop_Actual := Sim_TopLimit;
bLimitBottom_Actual := Sim_BottomLimit;
END_IF;
// 输出抑制
IF NOT bSimMode THEN
%QX200.0 := bAxisZUp; // 实际输出
ELSE
// 仿真时输出到内部变量用于监控
AxisZUp_Sim := bAxisZUp;
END_IF;
`
有了这个,我可以在GX Works3模拟器里手动改Sim_TopLimit
,看状态机是否按预期转移。调试3小时,其中有2小时是在模拟器里跑完所有故障分支。总结:我留下的检查清单
给你一张表,下次审查时逐条打勾:
[table][/table]境界检查项状态命名所有变量带前缀+注释?地址非全局符号?□注释每个FB有Revision历史?变量注释含单位?□状态机用CASE`或SFC而非乱SET?ELSE分支处理?□错误处理每个指令有超时/错误检查?用户报警定义?□模块化重复代码已抽成FB?每个FB输入输出清晰?□版本控制工程有外部版本库?Revision已更新?□性能扫描周期<3ms?循环<100次?□可测试全局仿真开关?所有输入可模拟?□
现在,打开你的GX Works3,找到一年前写的那段程序,对照这张表审查一遍。别怕花时间——你做这件事省下的时间,足够你请整个办公室喝三周下午茶。
最后留个互动问题:你曾经在PLC代码里见过最离谱的命名是什么? 评论区分享,我来看看谁能赢。
推荐阅读
摘要:今天深入学习静态代码分析技术,这是安全审计的核心技能。从 Python AST 模块到检测模式设计,收获满满!
发布于 202603
【优化】Python代码优化与调试技巧
发布于 202603
【Python入门】5分钟搭建开发环境,老手也在用的配置技巧
发布于 202603
KEYWORDS
PLC, GX Works, MELSEC, 三菱
如果你觉得这篇文章有帮助,请点个在看,分享给更多需要的人!
关注我,获取更多实用干货~
有问题欢迎评论区留言交流!
</ul>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!