[西门子] 【万泉河】PLC程序中的面条代码

[复制链接]
查看63479 | 回复0 | 2024-3-13 10:52:08 | 显示全部楼层 |阅读模式
【万泉河】PLC程序中的面条代码

昨天,有网友在微信群里转发了一篇文章《面向对象就是一个错误!》,链接在文末;

被吓了一跳,也太耸人听闻了。赶紧打开浏览了一下,原来是老概念了,这次又改头换面,专门博人眼球来了。

只不过,以前还只在IT界流传,这回跑到PLC编程领域来了。好家伙,我们这儿刚刚打通标准化编程架构,刚刚用上面向对象方法,用得正爽呢,有人直接端着机关枪把后窝给端了:面向对象编程方法是错误的,赶紧投降吧!回到经典编程方法吧。

我以前对这种理论的认知是,一些半吊子的程序员,类的继承和重构的过程中,应用不规范。过分玩弄编程技巧,把挖掘编程语言的漏洞当成高级技能。比如C语言中甚至可以重构+方法,原本的正常的+运算,都可以给重构为*,编译也仍然可以通过,但原本的程序功能就被搅乱了。你以为只需要简单替换方法,少一些代码,实现了通用的功能,但带来了风险,有可能影响到原程序的功能,在不起眼的地方,就有可能带来bug。

但这些,在面向对象功能都不完善的PLC领域,不足畏惧,因为,它还根本不支持。

然而,这次又对其中大为抨击的面条代码搜索了一下相关文章,发现一篇文章讲的比较透彻《jQuery === 面条式代码?》,其中一段话深得我心:

写class并不代表你就是面向对象,面向对象是一种思想而不是你代码的组织形式。

对应到PLC领域,就是:

写FB / AOI 并不代表你就是面向对象,面向对象是一种思想而不是你代码的组织形式。

所以,在PLC编程中,那些不理解标准化架构思想,也人云亦云的做一些FB库函数,然后其实自己用的耦合与内聚不能分清,乱做一团的,可想而知,基本就是一锅意大利面条。

我以前形容为一锅粥的,现在知道了,更规范的词汇是,意大利面条。

在分析面条代码时,文中给出的配图是这样的:



左侧勾勒出的几根线, 确实像极了意大利面条的样子。

而如果把这里面的X,Y,替换为MW10, MW20,这不就是标准的PLC程序么!而区别是,这里的面条还只在本代码页面里缠绕,而很多人写的PLC程序,就是在整个PLC范围内乱缠了。远比上图复杂多了。

而搜索意大利面条,竟然得到了这样的图片:



右侧即为形容面条代码带来的垃圾山架构。说不清理还乱的相互引用关系。而这个图片,说的不就是传统PLC程序中的交叉索引表嘛!



我以前写过文章:《【万泉河】PLC高级编程:抛弃交叉索引》,其实就是指出了这种传统编程方式的落后与混乱。

从此以后,我们可以对这种交叉索引结果使用一个规范名称了,面条。

我们也可以理解了,大部分工控工程师宣扬的底线,绝不愿意修改别人的程序,情愿自己从头写。原来,大家反对的是面条代码啊!

只不过,如果你自己的程序架构与老的架构相比,并没有彻底升级改变,还仍然一样的方法,那无非是一碗意大利面条撤下,换上来一碗乌冬面而已。

无非,这碗乌冬面你自己亲手下的,线索规则暂时还在脑子里记忆的比较清楚。

再来一张乌冬面的图片:



有没有感觉味道会比意面更可口呢?(缠绕越紧密, 味道越丰富哦!)

与众多工程师反对读懂他人的程序对应的是,我最近两年的项目,所请的调试工程师,都是好言相劝他们保守技术秘密,得到程序后,允许把同样的方法用在自己项目中,但不要分享给别人。没办法,不能不许人学啊!

还有合作的公司,就担心,新招来的员工,干不长久,短时间就离职了,却不经意得到了核心代码,对公司损失就大了。

最后,分享一个不知出处的某汽车厂的SICAR标准的程序,请在公众号《PLC标准化编程》后台,回复:“SICAR面条”,得到代码。

我曾经在读过SICAR程序后,在被追问我们推行的标准化编程,与汽车行业流行的SICAR标准什么区别的时候,鼓足勇气给了个评价:大垃圾。而后得到了很多认同,有同行纷纷表示支持我这种判断。

我们从此以后对其更标准的评价是,面条。

方便面。



【链接】面向对象就是一个错误!

【链接】jQuery=== 面条式代码?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则