0609 【万泉河】宁做小白勿做小黑,一道测试题检测你是否适合做程序员
看了一篇公众号文章, 提及的一道PLC编程题,很有意思。 我以前项目中虽然做过,但没有单独提炼成一道题目。所以就没有特别提出过。
当然,他原本的题目太小,不足以满足真实的现场应用需求。 所以我就另起炉灶,完全从头描述了。
假设有N台几乎同样的设备我们这里暂时按最多8台算,比如水泵或者阀, 或者一套工艺单元封装后只接受的启动信号。 所以我们暂时不需要考虑单台设备本身的启停逻辑和故障保护,只在工艺层面探讨问题,那么它们每一台设备其实就是一个BOOL量为代表。 当然在功能完成后还需要再继续做补充完善,所以做题的时候还需要有预留,不能一步到位做死了, 以后没法升级了。 那不行。
工艺的要求是,当收到启动指令后,从1,2,3---8,顺序轮流启动,每台运行时间T1,T2,T3…TN,到最后一台运行完成停止后,即全部停止,等待下一次启动指令。 原题目是要形成循环,然而不是要实现的重点,就暂时先不做了。当然也是可以后续升级。
重点是顺序轮流启动的这个顺序需要是可变的。 比如会在触摸屏中配方给定的方式设定。即上述的顺序12345678, 还有可能是87654321或者12348765, 56781234。总之是不确定的。 运行中需要操作员来确定。 而编程时需要做成灵活的,有接口可以输入。
按照我在文章《0510【万泉河】 工控同行的宇宙观》中的观点:以造物主视角看问题,一个系统,或者一个模块,在输入确定,运行规则确定, 要求的输出确定的情况下,就是必然可以实现的。
那么当下的这个题目, 规则清晰, 输入输出清晰,那么就当然可以实现。 可以用一个FB实现。在FB的小宇宙内随便怎么腾挪乾坤大挪移都可以,只要最终能实现需要的目的。
我这里把这个接口设计一下,

其中顺序是个DINT, 可以表达10位的十进制数值, 那么我们可以用来表示8台以内的序号。 比如默认值我设置为12345600,除了代表前6台设备的启动顺序之外, 还代表了Q7和Q8不参与控制。
即程序块实现的是8台以内的任意数量的控制。
我们假设一个控制系统中共有2组这样的设备序列,分别为8台和6台, 实现的工艺功能是相同的。 那么最终在OB1中的调用:

只要如此对一个FB做2次实例化的调用,即可优雅地实现要求的全部功能。 即题目的全部。
有人会质疑怎么不玩80了, 怎么只玩8了。万老师的标志数字不是80的嘛?
其实只要实现了U8, 那么U80也完全可以同样实现。 80和8的唯一区别是输入接口的表达, 如何便于操作者在HMI上便捷输入。 而至于逻辑本身,并没有多少区别。 有能力者也可以在完成U8以后,顺便搞一下U80。
我写标准编程烟台方法的一些文章和例子, 有一些人看过了,也学到了一些内容。
那么我们就用今天这个例子来测试一下,到底谁是小白。 每一位工控行业的工程师们测试验证一下自己是否适合做程序员。
当然,我并不认为每一位电气工程师都需要有能力做出这样的程序,都要有做程序员的能力,才能胜任电气工程师的岗位。 工业社会,每个人都有自己的特殊擅长的领域,并不需要每个人所有技能全都掌握,那么每个人只需要把自己所掌握的那些的特长技能发挥应用好了, 而自己有短板的部分通过跟他人协作,会善于利用别人的特长为自己服务, 照样可以创造出优秀的工作业绩。
据我观察和估计, PLC工程师们的能力划分,大概会分几种:
1, 做不出这样的功能的程序,只能做普通的电气逻辑控制应用。
2, 可以用复杂的梯形图完成这样的功能,比如工位数量稍微少一点的。 数量多的太复杂就搞不定了。
3, 可以在上面约定的FB的空间里实现。(然而,能实现也并不代表就直接等同于具备了程序员的素质,还要看具体的实现方法)
那么,以后所有同行们,在遇到有人质疑烟台方法骗小白的时候,可以悄悄问一下他本人是不是小白,U8轮巡的程序他自己能不能做出来?
我现在把题目需求和框架做出来,但不打算现在就自己把逻辑给做了。 倒是有烟台方法的学员我给辅导过工程项目,做过的标准化项目里面有这个应用,他可以把我做过的块找到直接套用过来。 烟台方法的学员有长期被此类问题困扰的可以直接问他要答案。
而非烟台方法的学员,其实更需要的是理论。 没有理论方法的支撑, 直接给你答案, 你也会看不懂。 就像很多人看到了80模拟量的标准答案以后不以为然, 以为自己水平更高一样。