年初的时候,一个做软件的朋友问我:”你们搞PLC的还在用那种像继电器一样的图编程?”
我说怎么着,你看不上梯形图?梯形图多直观啊,一个电工看两眼就懂了。
他没接话,给我发了个链接——IEC 61131-3第四版的草案。我翻了翻,心里有点不是滋味。
今天跟兄弟们聊聊我对PLC编程语言变化的一点真实想法。
为什么我现在开始认真学ST了
先说背景。我做了十年自动化,从三菱FX系列入门,到西门子S7-1200/1500,中间还接触过基恩士、松下、台达。编程用的最多的就是梯形图(LD),偶尔用一下功能块图(FBD)。结构化文本(ST)以前也接触过,但每次都是”大概看得懂,真要写还是老老实实画梯形图”。
但是今年情况变了。
变化一:越来越多项目的逻辑复杂度超出了梯形图的能力范围。
以前做一台简单的包装机,一个PLC主程序加几个子程序就够了。现在动不动就是多轴伺服控制、视觉检测、数据处理、配方管理、上位机通讯……梯形图处理简单的开关逻辑确实顺手,但碰到数组计算、字符串处理、循环遍历这些需求,画梯形图能画到你怀疑人生。
举个例子:一个项目里需要对100个温度数据做平均值、标准差、剔除异常值,然后用剔除后的数据做PID调节的补偿。用梯形图写,你得建100个数据寄存器,然后一个一个加,写100行ADD指令。用ST写,三行搞定:
FOR i := 1 TO 100 DO sum := sum + TempData[i]; END_FOR; avg := sum / 100;
变化二:新出的PLC对ST的支持越来越好。
西门子博途从V16开始对SCL(西门子版本的ST)进行了大改,支持指针、结构体、甚至部分面向对象的写法。三菱的GX Works3也对ST做了增强。以前ST在三菱上写起来各种掣肘,数据类型不支持、语法检查不友好,现在基本成熟了。
变化三:行业标准在推。
IEC 61131-3第四版虽然还没正式发布,但草案里明确增加了对面向对象编程(OOP)的支持,包括方法、属性、继承等概念。这说明国际标准组织也认为,PLC编程需要向现代软件工程靠拢。而且越来越多的跨国企业甲方在招标文件里明确要求程序使用ST语言编写,理由是”可读性更好、便于全球团队维护”。
ST语言到底好在哪,差在哪
说实话,我一开始是抵制的。画了十年梯形图了,突然让我写代码,我心里是抗拒的。
但硬着头皮学了一个月之后,不得不承认,有些场景下ST确实比梯形图好用:
好处一:数据处理能力碾压。
上面说的温度数组处理只是一个例子。还有就是配方管理,32种口味的参数以结构体数组的形式存在ST里,读写都清晰。用梯形图实现同样的功能,你得用间接寻址加指针,写出来自己都看不懂。
好处二:程序结构化程度高。
ST可以写函数、功能块、方法,代码可以复用。同一个通讯协议驱动,写好一个FB,后面每个项目都能拉出来用。梯形图的复用性就差很多,基本靠复制粘贴。
好处三:适合团队协作。
梯形图每个人画出来的风格都不一样。同样的控制逻辑,老王画的跟小张画的可能完全两种风格。ST代码至少可以通过规范约束代码风格,比如变量命名规则、注释格式、缩进要求。代码审查也比看梯形图方便。
但ST的缺点也很明显:
缺点一:电工看不懂了。
以前一个梯形图打印出来,车间电工在设备出故障的时候自己就能查。换成ST代码,电工看两眼就放弃了,什么问题都得找工程师。这对一些小型工厂来说是个很现实的负担。
缺点二:调试不方便。
梯形图在线监控的时候能直观地看到哪条”路”通了(高亮显示),ST的在线监控没那么直观。虽然博途和其他IDE也能显示变量的实时值,但一眼看过去没有梯形图那么一目了然。
缺点三:学习曲线陡。
干了十年的老工程师,让他从头学ST,比年轻人学梯形图难多了。我一同事今年44岁,做电气设计了二十年,博途装好一个月了还没开始写ST,说”看着那个IF…THEN…ELSE就头大”。
我的建议:不要非此即彼
学了这段时间,我最大的收获是:梯形图和ST不是二选一,而是看场景切换着用。
我现在写程序的风格是:
简单的启停逻辑、互锁保护、手动操作→用梯形图。维修电工看着方便,排查故障也快。
复杂的数据处理、算法运算、通讯协议解析→用ST。代码简洁、效率高、不容易出错。
通用的功能块(PID控制、伺服控制、通讯驱动)→用ST写成可以复用的FB。
这样混搭下来,既保留了梯形图在上层逻辑上的直观优势,又发挥了ST在底层数据处理上的效率。
IEC 61131-3第四版还有什么新东西
我翻了一下第四版草案,除了前面说的面向对象支持,还有几个值得关注的变化:
1. 加强了对C语言和Python的互操作性。
未来可能在PLC里直接调用C写的动态库,或者在ST里嵌入Python脚本。这个如果真的落地,对工控行业的影响会非常大——意味着成千上万现成的Python库(OpenCV做视觉、Pandas做数据分析、scikit-learn做机器学习)可以直接在PLC里用。
2. 加强了信息安全的要求。
草案里增加了对PLC代码安全编码规范的指导,包括输入验证、访问控制、安全通讯等。这也是响应这几年工控安全事件频发的趋势。
3. 增加了对多核处理器的支持。
现在的PLC很多都是多核CPU了,但编程的时候还是单线程思维。第四版尝试引入多任务并行编程的规范,这在高端PLC上已经开始有了(比如西门子1500的多任务OB),但标准化还不够。
说几句大实话
我知道很多兄弟跟我一样,做了十几年梯形图,突然说要学新东西心里是不太舒服的。但静下来想想,这行一直在变,从继电器到PLC,从梯形图到ST,从单机到网络化,从硬PLC到软PLC……每次变化都淘汰一批人,但也给愿意学的人带来了新机会。
我今年也在慢慢学,每天下班抽半个小时看看ST的文档,写几个小功能试试。说实话,写顺了之后,ST那种”用代码控制一台机器”的感觉,说实话还挺爽的。
你们公司现在用梯形图多还是ST多?有没有在学新语言?评论区聊聊。