『7x24小时有问必答』
亲爱的工控小伙伴们,大家好!
很多工程师在学习 ST 一段时间之后,都会进入一个阶段:
开始研究一些“高级写法”。
比如:
数组
结构体
面向对象(OOP)
但有一个很有意思的现象:
有些人用了这些东西之后,程序变得更清晰
但也有人写完之后,程序更难维护了
于是很多人会问:
ST 到底要不要用高级特性?
我的经验是:
高级  ST  的本质不是语法,而是控制复杂度。
如果你只是为了“写得高级”,那十有八九会翻车。
今天我们就聊聊这三个最常见的东西到底该怎么用。

---

一、数组不是偷懒,是规模化

很多人第一次用数组,通常是为了省代码。
比如:
Motor[1]Motor[2]Motor[3]Motor[4]
这样写确实比:
Motor1Motor2Motor3Motor4
更整齐。
但数组真正的价值,其实不是这个。
而是:
规模化。
在很多设备里,你会遇到这样的情况:
多工位设备
多轴系统
多模块设备
比如一台设备有12 个工位
如果不用数组,你可能会写成这样:
Station1Station2Station3...Station12
代码会迅速膨胀。
但如果用数组:
Station[1..12]
很多逻辑就可以统一处理。
例如:
FOR  i  :=  1  TO  12  DO      Station.Run();END_FOR
这时候你会发现:
数组不是偷懒,而是工程规模管理工具。
再配合 FB,就会非常清晰:
Station  : ARRAY[1..12] OF FB_Station;

---

二、结构体 = 工程语言

在很多 PLC 程序里,经常能看到这种变量:
RobotStartRobotBusyRobotErrorRobotPartIDRobotSpeed
变量一多,问题就来了:
这些数据到底属于谁?
很难看出来。
这时候结构体就非常有用。
例如:
Robot  : ST_Robot
内部结构:
STRUCT      Command      Status      ParameterEND_STRUCT
这样所有相关数据都会被组织在一起。
在工程项目里,我通常有一个简单原则:
所有“成组的数据”,一律用 STRUCT。
比如:
设备命令:
MachineCmd
设备状态:
MachineStatus
设备参数:
MachinePara
结构体的好处是:
数据清晰
结构稳定
扩展容易
慢慢你会发现:
STRUCT 其实就是工程语言。

---

三、OOP 只用一半就够了

很多 ST 新手接触 OOP 后,会特别兴奋。
开始研究:
继承
多态
接口
但在自动化项目里,我一直有一个建议:
OOP  用一半就够了。
为什么?
因为自动化系统最重要的不是“优雅”。
而是:
稳定。

---

① 封装:强烈推荐
封装是 OOP 最实用的一部分。
例如:
FB_AxisFB_RobotFB_Station
每个模块都是一个独立系统。
内部逻辑全部封装起来。
外部只通过接口调用。
这是非常好的结构。

---

② 继承:谨慎使用
继承在理论上很优雅。
但在 PLC 项目里,经常会出现:
调试困难
结构复杂
修改影响面太大
所以如果项目规模不大,其实没必要过度使用继承。

---

③ 多态:慎之又慎
多态在软件工程里很常见。
但在 PLC 项目里,很容易让程序:
可读性下降。
现场调试时,最怕的就是:
看代码看不懂。
所以很多时候:
简单结构反而更稳定。

---

四、一个很重要的工程原则

很多人学习高级 ST 时,会有一个误区:
觉得代码越高级越好。
但在自动化工程里,我一直遵循一个原则:
稳定 > 优雅
如果一个结构:
所有人都能看懂
调试方便
修改安全
那它就是好结构。
不需要为了“高级”而复杂化。

---

小总结

高级 ST 的核心,其实不是语法。
而是:
控制系统复杂度。
三个简单原则:
1⃣数组用于规模化系统
2⃣结构体用于组织数据
3⃣OOP主要用封装
记住一句话:
自动化程序最重要的不是“写得漂亮”,而是“跑得稳定”。

---

ST 编程指南 · 系列
本文属于《ST编程指南》系列文章
这个系列主要分享:
ST 程序结构设计
自动化项目工程经验
一线调试总结
如果你正在做:
Codesys
TwinCAT
IEC61131-3
欢迎关注,一起交流学习。

---

——— END ———
关注阿凡工控分享
持续分享工控一线经验

---

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码