发表于:2021/2/10 21:59:10
#0楼
【万泉河】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标准什么区别的时候, 鼓足勇气给了个评价:大垃圾。而后得到了很多认同,有同行纷纷表示支持我这种判断。
我们从此以后对其更标准的评价是, 面条。
方便面。
昨天, 有网友在微信群里转发了一篇文章《面向对象就是一个错误!》,链接在这里:
吓了一跳, 也太耸人听闻了。 赶紧打开浏览了一下,原来是老概念了,这次又改头换面, 专门博人眼球来了。
只不过, 以前还只在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标准什么区别的时候, 鼓足勇气给了个评价:大垃圾。而后得到了很多认同,有同行纷纷表示支持我这种判断。
我们从此以后对其更标准的评价是, 面条。
方便面。
PLC标准化编程