梯形图直观,但复杂逻辑写起来又长又难维护。三菱的 GX Works3 支持 ST(结构化文本),适合处理运算、循环、状态机这类梯形图不擅长的场景。迁移时有几个坑值得提前知道。
第一,扫描周期的影响不一样
梯形图是每个扫描周期顺序执行全部逻辑,ST 里如果写了 FOR 循环,循环体内的执行时间会直接加到扫描周期上。一个 1000 次的循环里有复杂运算,扫描周期可能从 5ms 涨到 20ms,定位控制就会失步。
解决办法:把重计算放到低速任务里,或者拆成状态机分多个周期执行。别在高速任务里写大循环。
第二,变量声明的作用域要理清
ST 的变量有局部和全局之分。在 FB(功能块)内部声明的是局部变量,每次调用独立;在全局变量表里声明的是全局。混用会导致「改了这里那里也变了」的诡异问题。
建议:FB 内部一律用局部变量,需要外部读写的用 VAR_INPUT / VAR_OUTPUT 显式声明。别图省事全用全局。
第三,数据类型不匹配会静默出错
梯形图里 MOV 指令搬数据不看类型,16 位和 32 位混着来也能跑,只是结果可能不对。ST 里类型检查更严,但隐式转换仍然存在。比如 INT 除以 INT,结果是 INT,小数部分直接丢掉。
涉及长度、速度、位置的计算,统一用 REAL。涉及计数器的用 DINT。别让编译器替你猜。
迁移策略
不要整段重写。先把最复杂的那几个功能块用 ST 重写,验证无误后再逐步扩大。梯形图和 ST 在同一个项目里可以混用,按块选择最合适的语言。
调试
GX Works3 支持在 ST 里设断点和单步。用起来比梯形图的在线监视舒服,尤其是嵌套逻辑。学会用这个,排查效率能翻倍。
本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。