登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:0707 【万泉河】更具程序员思维的U8轮巡题目答案

点击:957 回复:15

0707 【万泉河】更具程序员思维的U8轮巡题目答案
我在上个月出了一道关于U8设备轮巡的题目《0609 【万泉河】宁做小白勿做小黑,一道测试题检测你是否适合做程序员》。
有不了解题目原委的跳转找到原文阅读了解。 本文不再赘述。
我在前文中描述:
PLC工程师们的能力划分,大概会分几种:
1, 做不出这样的功能的程序,只能做普通的电气逻辑控制应用。
2, 可以用复杂的梯形图完成这样的功能,比如工位数量稍微少一点的。 数量多的太复杂就搞不定了。
3, 可以在上面约定的FB的空间里实现。
但我对3的描述有些太笼统了。 主要我对大家的脑回路估计不够。
在回复和讨论里面, 一些思路确实遵循在FB空间内实现,但大都是在为完成作业本身而被迫无奈实现,然而实现的手法全部不够优雅。完全没有程序员该有的模块化的思想。有一些回复,虽然也主动把自己做的方法源程序贴出来了,但是不是符合程序员的标准,还需要对比比较下再判定。
下面把我自己的解题思路写出来,后面也会提供我做的程序。作为对提交过答案的网友的鼓励。
我的思路:
首先,这个题目一定是渐进增长来的,即,我们开始按固定顺序做了一套控制,后来工艺要求顺序可变。 而固定顺序的控制已经做好了,再完全推倒重来重新做很显然就太耗费脑细胞了。 也造成太多的经验浪费。 原本已经调试通过的程序逻辑,因为要求改变,就废掉了,新的程序还需要重新逐步调试。太不划算了。
上一波题目出来之后,回复里面有批评没有考虑故障和报警处理的,意思是问题考虑不全面。首先,这只是例子,出题的目的是实现算法,而不是为了什么全面。 其次,真实的应用中,故障和报警当然要有,然而也是在完成了基础的功能算法之后。而且,按照模块化的设计架构,这些大部分工作也应该单独的模块实现。 即这里做的顺序或者变序轮询的功能,完全可以做到封装固定不变。 那种基础算法功能还没搞定,或者只在口头上夸夸其谈的,却过早考虑其他方面,其实也是没有模块化编程思维的体现。
你过早考虑太多,最终所有功能在一个模块里实现, 那么即便能实现,这个模块也是一锅粥,根本不具备模块化特性。工艺有个风吹草动,稍微变化一点,前面做的逻辑算法全都白费,又要从头再来。比如把电机换为气缸,或者高级点,换成伺服,这里的逻辑就都用不上了。又要另起炉灶从头再来,下一个项目又要支出和上一个项目几乎等同的工作量和出差时间。
这是整个工控行业大家习以为常的现状。也正是我批评不够模块化,不具程序员思维的所在。
所以,模块化的设计方法一定是先有固定顺序的控制,然后再在其基础上做升级,实现可变顺序,而后再次封装成块。
即我提出的最终的FB的接口形式。
即:首先要完成一个固定顺序的控制FB, 然后对这个FB不改变的基础上,再进一步封装改造,继承其原有的功能,再增加可变顺序部分的功能,最终成为接口约定的FB。这才是模块化设计的思路。
那么我们首先要有一个固定顺序的FB1:
附件 FB1.jpg
其中位号不关心顺序了, 只对应了设备是否投入。 比如我这里缺省值为2#00111111, 那么代表了从右向左即从低位到高位,分别为1,2,3,4,5,6投运,而7,8不投入。
在启动信号到来后Q1-Q8依次序按需求投入运行。即为固定顺序的轮巡。
调试测试完成后,进行封装,然后再造一个可变顺序的FB2:
附件 FB2.jpg
 外部接口如前文所述,完全一样。 而在静态变量中多了一个多重背景,调用了固定顺序顺控的FB1。
通过在此FB2中的逻辑腾挪,将原本的固定顺序升级改造为了可变次序顺控。
上周,有一位JAVA出身的程序员因为现在也要从事一些工控方面的编程,从网上看到了我的PLC标准化编程的文章,大为赞同,瞬即参加了烟台方法的学习营。加入后就先问我, 在PORTAL里面是不是不支持面向对象的继承功能?如何实现?
我跟他讲,把FB外面再套一层,就可以实现利用原有对象功能,并再增加新的功能逻辑。如本节介绍所述。就是继承。 而其实我在专著《PLC标准化编程原理与方法》中也早有讲解。建议他还是要同步阅读书中内容,才更有利于学习掌握烟台方法全部技能。
我在前一文中提及的要举办的讲座,没能开成。 主要是响应不够热烈,那对我来说就又失去了动力。可能又是题目超前了些,超越了一些同行新手的需求。于是整理了此文, 把整体思路释放给大家,有兴趣的可以参考实现。
记住,真正的程序员不仅仅是做到能把逻辑功能实现,甚至只在口头上把思路描述的天花乱坠,就叫程序员了。  要真的做出来,而且要模块化的做出来,才算。 是否真正的模块化,跟别人对比一下自己内心就可以有结论。
我这里把这两个FB做出来了, 并分别做了调试演示。 因为我以前项目中就实现过,所以其实都没费多少力气。 我甚至都懒得去找旧的项目的代码去参考和移植,而是直接新写的了。 然而仍然一次成功,代码写完之后下载到PLC中就运行成功了。 我自己也觉得很神奇。也没再详细调教,说不定其中还有bug。
这个算法对我自己来说,是近些年掌握了烟台方法标准化的技能之后,才逐渐发展起来的。 或者说,是打通烟台方法所有技能路线上的关键一个环节。 以前不能模块化实现功能,以前只能在主程序中硬拼逻辑的做法,终于可以成功跨越了。所以对我来说是一个比较重要的门槛。相信对同行们也是脑子中一直绕不开的死结。
我这里可以把程序的源代码分享给大家。 但是我近2年来分享的代码的过程中,遇到的了太多的喷子,各种角度喷的都有。拿到我的代码,非但不能好好学习,反而各种喷, 甚至造谣污蔑我。比如拿到80模拟量的程序,就造谣我只会做模拟量, 拿到80变频器的程序,就造谣我只会变频器骗小白。 令我非常上火。
所以,这个代码的获得需要有门槛,以后我也会把释放的代码尽量都添加门槛,我们需要用门槛把真正的求学者和喷子们分开拉开差距, 让学习者可以持续学习进步,让喷子们一直停在原地喷好了。想想一些出道十几、二十几年的老工程师,因为只会喷,因为不会学习,被后来更善于学习的年轻后辈轻松超越,这场景一定很喜感。
请在微信公众号中得到获取方式。当然,我认为前提是,没有我的代码, 你们看了我上面的介绍,也仍然可以自行实现。 所以不要因为有门槛就骂娘,骂我从技术上卡了你们的脖子。
附件 FB1.jpg
附件 FB2.jpg
23-07-17 22:24
写了那么长一大段,不就是举例举烂掉的多泵轮训么,这个论坛都套路过很多次了。
这个你可以参考一下论坛讨论是用的欧姆龙编程,比你简洁多了。
别分享代码了,即使你贴钱的也别分享了,你的水平能上升的空间也太巨大了。
23-07-19 05:01
万老师不是说不用定时器的吗表情
23-07-19 08:38
万老师这是又要出来挣恰饭钱了嘛
23-07-19 09:07

引用 bnnyygy 在 2023/7/19 8:38:29 发言【内容省略】

说嘴打嘴~估计他没听说过
23-07-19 09:30
记得万老师说过,不用T,M
23-07-19 10:16
学習!
23-07-19 10:59
自己打脸,好疼表情
23-07-19 16:01
理论比较强大,实际问题解决作用不太大。
23-07-19 17:50
怎么用了这么多定时器呀!我想到了流水彩灯,可能会节省很多定时器,太浪费定时器了!
23-07-19 20:16

上一页下一页

工控新闻

更多新闻资讯