0728 【万泉河】谈虎色变双线圈再谈再变
时间非常巧,正好3个月前,也是28日,我写过一篇文章
《0428 【万泉河】PLC编程:谈虎色变双线圈》
https://www.ad.siemens.com.cn/club/bbs/PostStory.aspx?a_id=1759880&b_id=80&s_id=157&num=57#anch
可谓是挠到了一些同行的痒痒肉。
发布后,众多资深同行,网友,跟我纠缠辩论,最终我做了一系列80双联开关公用灯的例子出来,各主流PLC品牌的例子都做了,就是要证明用常人眼中以为的双线圈的错误方式, 也可以做出正确的控制程序, 然而程序的结构形式可以更优雅。感兴趣的读者可以去找到那篇文章,以及找到自己熟悉的品牌PLC的例子程序去学习了解。
然而那篇文章及例子,并没有如愿达到在同行中统一认识的结果。 太多人被传统认知给绑架, 已经形成了习惯,习惯于见到双线圈就谈虎色变了。 当然,也让我认识到了烟台方法和同行们之间差距的起点,即烟台方法的思维方式是基于计算机编程的。 而很多同行, 还是以继电器逻辑的思维方式来对待PLC编程。
这种传统固化的认知很难被改变,包括一些跟我学习了很久烟台方法的学员。 我前一篇文章《0724 【万泉河】烟台方法前进之路:在信捷PLC中实现FB功能》中描述的例子程序, 发给了一位学员,请他参考。
他拿到后,很短时间就来问我:万老师, 你写的这个信捷例子程序会不会导致双线圈错误?
我直接晕倒。
等于是我前面写谈虎色变的文章白写了,这边见了仍然照样谈虎色变。
所以, 感觉到必须再来第二轮的关于双线圈的科普。 还是以平常大家见得较多的SMART200来举例。 而其实其他所有品牌的PLC道理也全都完全一样。 因为所有的PLC运行机理都是一样的。
比如一个简单的逻辑:
我们可以从中间砍断, 用中间继电器(中间变量)过渡一下:
逻辑功能是完全等效的。
这是只有一个输出点的情况, 然而,也可以完全扩展到更多的输出点(比如80个,800个)。
那么所使用的中间继电器是否需要挨个儿也更换到不同的M点呢?不需要!你完全可以从头到尾全部都是用同一个M0.0。即:
而这个时候,如果观察M0.0, 就看到了貌似存在传统的双线圈错误。 如果我们不是在做PLC程序, 而是在接线做控制盘柜,使用的中间继电器,这样的线路当然是有错误的, 必须逻辑重复多少次, 就耗费同样数量的中间继电器。
然而, 这里是PLC, 是微型计算机,同样的问题就不存在。所以虽然我们还按照传统的命名方式称呼M0.0为中间继电器, 然而它其实早就不是简单的软的中间继电器了, 它是变量,计算机内存中的一个变量。
上面的程序本身是完全可以正确执行的, 只不过有一点,这个M变量在同一个周期内, 数值经过了无数次的写和读,变化了无数次,然而我们并不关心它在每一个环节的具体值。 当然,如果关心, 则可以在特定的步中间, 把这个值读取出来,送到另外的变量中进行监控。
还有一个问题, 这个变量的值被污染了。即, 如果同一个CPU中同时还有传统方法写的程序, 其中用到了这个M点, 那么对边的程序逻辑就被干扰了, 要出错了。
这种问题也会遇到。比如有一些烟台方法的学员,遇到一些改造项目,需要在原设备程序中增加一些模块增加一些新功能。 而自己已经开发了成熟稳定的库函数,希望能直接使用,而不愿意被逼无奈回到老的方法以实现跟老程序的兼容, 那就需要做些处理。
其实也很简单,在使用之前先把M变量值备份保护,使用之后再恢复。 可以整体一次备份保护, 也可以多次备份恢复。
如:
其中V区是新程序规划到的一片数据区域中的某个点,而这个具体的点的地址并不重要,它只实现了辅助数据保存的功能。 同样可以使用同一个地址,也可以使用不同的地址, 取决于模块本身的需求。
有擅长挑刺找茬的读者会质疑, 你这里分明没有模块,怎么还口口声声讲到模块呢?
嗯, 别急, 上面只是在讲原理,原理掌握之后,就可以用到模块中了。
比如各个PLC型号的子程序,接口数量都有限制, 有的甚至没有接口,甚至只有跳转, 如信捷以及更新在研究的禾川。
总之,在实际应用中, 总有需要扩展函数的接口数量。 那么最终实现方式:
不管是备份模块, 还是数据恢复模块, 以及库函数中, 都是对同样的公共变量进行各种运算操作,实现需要的逻辑功能。
因为变量相同, 所以函数可以模块化,可以被重复调用。而不是每个调用时使用的变量不同,而导致函数模块的内容各不相同,而只能分别单独写逻辑。
今天, 学员跟我探讨了读程序的心得:
学员:
万老师,我这几天出差在外,抽空看了信捷这个程序,似乎看懂了又没看懂
在过去所有的PLC方面的书,或者老师讲课,都没有这样的编程方法。而你的方法让我一下子就大受启发,看了就猛拍大腿叫绝:原来还可以这样做?!
Iterwan:
所有的写plc书的都只是抄厂家手册而已。
学员:
是啊
学员:
我反思了一下,从一开始时PLC教材说双线圈输出会导致程序只执行最后一次的结果,然后所有的老师学生都自然而然地避免双线圈写法,用置位复位来代替
Iterwan:
而有的人连置位复位都不敢用呢, 只用线圈, 只用启保停。
学员:
在你之前,真的没见有人这样用线圈。
Iterwan:
是你没见过。但也确实大部分人都不敢。
Iterwan:
天生畏惧。
学员:
这个习惯可能源自于三菱PLC有程序检查功能,双线圈报错
学员:
所以大家都避免用这种方式
Iterwan:
也不是。太多人并没用过三菱
学员:
其实就是大部分人的认知能力局限了
学员:
总觉得线圈就是拿来当输出用
学员:
根本没想到还有别的用法
Iterwan:
线圈的本质是变量赋值,无非是bool类型的变量
Iterwan:
变量还要禁止多次写操作赋值,被IT看到了会不会被认为是神经病?
Iterwan:
你们想不到这样用法根源上还是对PLC这种运行机制不够了然于胸。
或许有人会嘲笑, 你的学员水平也太弱鸡了, 这种简单的道理都不懂。
弱不弱每个人回顾下自己写过的程序,客观比较一下。 不管怎样, 整个行业针对双线圈问题写多篇文章并引起巨大争论的好像只有我自己,支持和认同的只在少数,而反对阵营却声势浩大,各种大佬云集各种挑错, 总不能埋汰那些反对我文章理论的大佬, 也全都连我的学员的水平都不如吧?
所以,如果有人真心觉得文章的观点和方法很简单, 那么请站出来支持,而不是无原则的反对。反对的声浪越大, 证明行业集体的认知越低, 差距越大。
最后再指出下所谓挑错的问题,有大佬拿自以为发现的错误当自己发现了一击致命的绝杀技洋洋得意的。
技术领域, 最好的验证错误的方式是实践。 理论如果有错误, 会在实际设计的成果中体现, 会在设备中出错导致不能正确运行, 如果运行中的错误人不能发现, 那么错误会体现到生产的产品中,会生产出废品。 ,比如如果是养猪场的设备,生产对象是猪, 那么猪会发现错误,猪会受伤, 会死亡。 所以发现原则性理论错误的门槛非常低,不会比猪高。
楼主最近还看过