0531【万泉河】PLC工程师该有多痛恨垃圾程序?
前天看了一篇公众号文章,在声讨一套PLC程序
文章的题目:《说PLC标准化编程不重要的,这个程序你接手吗?》
而我一看, 这只不过是一份比较潦草的垃圾程序,根本与标准化扯不上任何关系呀!这个程序现在看起来使用的变量乱飞,变量的符号名以及程序块的命名都比较随性。
然后后面还有人大骂:这是防御性编程,故意为了让别人看不懂吗!
说起垃圾程序,我还是比较有经验的,有一定的发言权。本文就对这个问题分析一下。
不过在开始之前先对垃圾程序的概念做个定义。 与垃圾程序对应的是垃圾食品。很多人对垃圾食品的定义也不清楚。 以为人们丢弃到垃圾桶和下水道里的食物残渣是垃圾食品。 那些只是垃圾,根本算不上食品。所以也更不是什么垃圾食品了。
通常讲的垃圾食品,是那些可以食用,甚至方便可口,令人上瘾,偶尔食用也无碍,然而长时间单一食用,会引发身体健康问题的,才是垃圾食品。
现在的大型商超里的餐馆,通常会有一些不限量无限次取用的小零食,爆米花,锅巴,廉价水果,冰淇淋等等,放眼一看,全部都是垃圾食品。
而垃圾程序,首先是可以正常运行的程序。有许多同行经常用好猫坏猫论推导的结论:能让设备正常运行的程序,就是好程序。 这些仅仅满足于设备能运行的程序,就是垃圾程序。 可想而知,持有这种观点的程序员,他们自己的作品,无一例外都是垃圾程序。 即装载在设备内部的时候,看起来可以设备运行正常。 然而一旦拿出来公开到阳光下,就暴露了原来都是垃圾程序。 如文首截图的程序一样。
不过一上来,我先要发表一些观点来维护垃圾程序。 借用一个为人处世的鸡汤逻辑,所有的垃圾程序,无非两种情况:不在乎和不得已。
先说不在乎。
我们最早玩的PLC都是绝对地址编程,即便有注释也主要靠变量后面的注释文本,且不说一些用手操器编程的小型PLC如LOGO等压根连符号表和注释都没有,就靠绝对地址搭出来的梯形图逻辑,你能非要判定是垃圾程序?人家,或者你自己,分明是不在乎的嘛!
比如我经常用SMART 200演示一段起保停逻辑:
我不相信谁接手不了这样的垃圾程序,拿到手里或者换自己来做的时候还要另起炉灶自己再做一遍。
有的人会认为,你这样一台设备的简单逻辑这样做当然正常,但如果一个更复杂的系统,设备数量多了以后还这样做,是不是就不够规范了,就太垃圾了?
就凭PLC系统的复杂度,就那么点逻辑,你非要说1套设备与5套设备与80套设备有啥不同?大部分不过是简单的数量的叠加而已。难度并没有增加,怎么就接受不了了呢?
比如,一个温室大棚,用一个小型PLC可以如上简单控制,如果有1000个大棚,控制方案有可能是同样型号的PLC用1000台,也有可能换个方案,用一台大型PLC实现,然后还有必要用不同的编程规范实现?
分明是不必要的嘛!
而这个大型PLC如果是S7-1500,那么PORTAL中编程的时候,所有的变量都必须有符号名。 即便你不去专门整理符号名,系统也会自动分配一个。 管你用不用看不看,都会有。 那么如果在调试程序过程中根本用不到符号,管它分配的名字是啥样的呢,只需要关注绝对地址自己就够用了,那就会出现上面的程序的情况。
所以,从我换位思考的经验,这种做法完全可以理解。
然后再讲不得已。
咱们每个人入门的时候,做的项目,所编制的程序,特别是一些小型项目,都是这样的做法做出来的。 所有人之间并没有明显的区别。 然后你如果看到这样的程序就痛恨, 那我想问一下每个人自己,当你入行10年后,翻看自己10年前的作品的时候,会对自己痛恨不已吗?如果觉得自己那个时候刚入门,做事情还没学会规范,觉得可以谅解。 那么凭什么换个人,自己带的学生,后辈,做出来与自己水平几乎相当的程序,就痛恨到咬牙切齿呢?水平所限,能力所限,只能做到这个样子了嘛!
当然, 如果每个人都有这样的上进心,都能日三省自己,发现自己技能上的不足,有羞耻心,然后每天学习提高,最终士别三日当刮目相待,自己今日的程序可以比三日前的做法有明显的提高,自己也有勇气批判反对自己曾经的做法,那这样的人,绝对前途无量。
然而怕就怕的是,世间的很多人在这件事上是持有双重标准的。 骂别人的时候起劲,而对待自己则无比宽容。 别人的程序因为自己读不懂,就骂是垃圾程序,总能从中挑出来不符合自己习惯的做法,然后就判定对方垃圾。 而如果是自己做的,哪怕是十几年前做的,因为符合自己一贯的习惯,各种处理方法自己都特别熟悉, 甚至其实十几年来都没改进过,都仍然一个套路,但因为对自己要宽容,就能接受。而双方的程序放到一起, 还不见得谁比谁更优秀,谁比谁更垃圾呢!很有可能是两个作者交换一下作品,都判对方垃圾。而换个第三者来看,你们俩做的都是垃圾。
所以, 所有痛骂垃圾程序的,通常是因为自己看不懂。 而且,有可能是,通过痛骂对方程序垃圾,而掩盖自己看不懂对方程序的尴尬。
PLC行业不同于软件行业,通常一套PLC系统的软件设计,整个生命周期内,都是一个人足以完成。即从设计到调试到维护,都不需要多人协作。也就是说,通常情况下,不管是符号名还是注释,都是写给自己看的。 用自己看得懂的语言,自己习惯的表达方式,只要自己看了晓得怎么回事都足够了。你没必要像软件行业一样要求自己,所有符号和注释都要规范英文表达,因为整个项目可能是几十上百个软件工程师协作完成,自己所做的只是庞大项目中的一个小模块,只实现其中的一小点功能,而且实施过程也要经过多道流程,不同的人CODEREVIEW,测试等等。
而PLC系统不管是规模还是复杂度,都差的远得很,完全不在一个量级。
就像,每个人的内裤都是穿给自己看的,目标对象并不是外人。
而偶尔,一些特殊的原因,比如中途换人,或者设备运行多年之后维护的需要,换了个人接手来解读原始的程序, 那也只是相当于一不小心看到了别人的隐私部位。别人大或者小,丑或者嫩,你顶多是尝试理解并适应,然后解决现有的问题。而断没有指责的理由。 就像别人扒开了你的内裤,也断然没理由骂你小一样。
叫我说,越是水平高的工程师,对于越低水平的程序,就该有越高的包容度。就好比书法课的老师,那些书法大师们, 在审视刚刚入门的小学生,或者书法水平远不如自己的新手的作品的时候,断没有开骂的理由的。 你顶多是可以在比较中获取一些内心的优越感。
站的境界越高,俯视的视角看下来,对方的一些幼稚的蹩脚的处理方法你纵然有可能会心一笑,但更应该是谅解他这样做的原因。 而不是阴谋论的以为对方这样做的做法是为了背刺自己。想想看,对方做程序的时候,以及现场调试的时候,针对的是现场出现的问题,目的是能让设备尽早运转,自己好尽早结束出差回家。连设备能否运转正常都还搞不定呢!哪有额外的心思对付你。
何况,那个时候你还不存在呢!你接手到这个程序,通常都是很长时间以后了, 甚至5年10年20年,先预设了一个自己的位置,然后猜测对方某些做法是针对你的,这个阴谋论的回路是不是也太长了点?所以,通常不管是骂对方垃圾程序还是骂对方预设阴谋,其实都是等同于在承认自己的水平不如对方。
建议同行们以后少骂别人的垃圾程序,即便真的垃圾程序, 也不要骂。
有人会说了, 你万老师不也经常指责这个那个程序是垃圾程序吗?没错,但我只是客观评价,我绝不痛恨,绝不会对对方恨铁不成钢,也绝不会动辄怀疑对方是故意埋坑。 我更多的是理解对方的做法,那是他当时的技能水平所决定的,即,要么是不在乎,要么就是不得已。
也包括我自己10多年前做的程序做法,我现在也都深知那里面有多垃圾。 但我不会对自己有多痛恨。我只是原谅自己当时的技能水平不够而已。同时也庆幸自己一直在学习,一直在进步,庆幸自己找到了不再写垃圾程序的技能方法,而且还可以传授给更多的其他人。
原文作者质问的这样的程序谁愿意接的问题,其实答案很显然。 你只要从事这个行业,只要接手别人的遗留工作或者是维护项目, 就不可避免要遇到自己不习惯的垃圾程序。 接不接的原因只在于自己有能力搞懂或者没能力搞懂。除此之外没有别的选择了。 你断没有可能站在自己的立场上,要求原始设计者,在10年前就按照你的审美观和规范,来完成整个项目,以适应今天的你来接手。这有点时空穿越。
很多烟台方法的学员,自从学习了烟台方法之后,眼光变刁钻了,放眼看去包括自己曾经做过的程序,全都是垃圾程序。 然后很多同行也以为我非常痛恨垃圾程序。 其实远非如此。相反的是,我反而更愿意挑战垃圾程序。经常有一些改造项目或者修复漏洞的项目需求,对方会希望我给全盘否定,用烟台方法重写。而我主张的是,如果要用烟台方法重写,就要关注这个设备还有多少后续同样的类型,即我做下来的代码库,还有多少重复使用的机会。 如果根本没有,根本就是当下这一条产线要恢复运行或者增加功能的需求,我是不会同意整体重写的,我情愿去理解原有程序基础上修复漏洞和增加功能。
我曾经有写过一篇文章,【万泉河】PLC垃圾程序解读赏析(一)
https://mp.weixin.qq.com/s/hKVMzzr8YbQZ3AXxEkyUNg
这篇文章是5年前写的了, 未发在这个公众号,也未统计在338篇技术文章目录里。 肯定还有很多这样的文章被遗漏了。 欢迎大家发现并提醒我。
在那篇文章里,我批评了西门子官方帮助文件中的例子程序。 而其实我一直想分享的是一套我曾经经手的一套昆腾PLC的程序。那是我心目中的NO2的垃圾程序,NO1的更早,更找不到了。 而这套NO2今天终于找到了。 是用CONCEPT 2.6写的,有兴趣的读者可以对本文打赏10元后跟我私信索取。
那个程序有多垃圾,我只讲述一个槽点让大家感受一下,里面有整数的比较,要判断千位的数字相等,然而作者不会使用整数相等指令,活生生用8421码做了逐位比较,而且程序中多处比较,就这部分的代码就有好几百句。 没有子程序,全部都是代码平铺的。
读那套程序,我挣了6万元。 真的只是读。 原本项目改造后系统不能正常运行了。以为需要修改程序的,但我通读了之后,找到了方法,在其上位机组态王的界面中做了些参数设定就搞定了。那个昆腾的CPU叫一个讨厌,虽然有3个通讯口,但只有一个RS232口可用,组态王和编程电脑只能有一个在线。而程序功能必须通过组态王来控制,所以我先是读了10天搞不定,后来回家后找朋友借了套有以太网口的PLC,监控配合,很快找到了原因。
那套系统时间久远,原本应该用16DI和16DO模块分别7-8块,就可以实现的,但为了省卡件,柜内用了复杂的继电器逻辑,最终只用了1块16DI和1块16DO。卡件上面省了些钱,但给后来的维护带来了无穷的后患。 那个电厂后来又有一次改造,还有人又再次联系到我,希望这部分我能帮忙处理,我直接建议他们,把柜子全毁了重新做吧!十多万就能搞定。而如果非要我再来解读这套程序,即便不包含任何硬件,我开价至少要30万,因为实在太头疼了。这电厂为啥又来找到我,可能他们这个系统上线十多年,遇到的设备商工程师无数,也就我一个人真的给读懂了。
前天,有人咨询要购买烟台方法的培训项目, 其实是一套标准架构开发的样板示范项目,对方问,如果不满意是否可以退货?
我直接拒绝:那不行。 软件产品,不能以买家主观的满意为标准。 否则任何人只要铁定不满意,那岂不是就可以白嫖了?
你可以来评判,我给的样例项目有多少垃圾的地方,有多少地方的处理方法,不如你掌握的方法或者你所见过的别人的处理方法更高效更简洁,我自己写文章所讲述的不用M和T,不用UDT, 不用交叉索引等各种技能,有没有真的实现。
如果我所言为虚,直接收集证据法庭上告我好了。 6000元已经值得立案了。
曾经在工控论坛,有一个嘴硬的家伙不服, 我给他开出的条件,他所熟悉日系的不管三菱还是OMRON的PLC, 5万块的赌注,他给我一套PLC程序,我给翻译移植到不用MT,后来那家伙怂了,不敢再应战了。
总的来说,烟台方法的程序,就有这个底气评价为最不垃圾的程序。 不管谁来评判, 你,我,或者任何第三方。 所以才敢卖出这样的行业第一高价。
https://mp.weixin.qq.com/s/pLWMc5LgEkY1dAFoQ44YRw
楼主最近还看过