【万泉河】那些你们舍不得割舍的M变量
有一些同行,不会客观思考道理。
总把自己的喜好掺加在里面。
所以,你道理讲了半天,他都懂,也都赞成。 但到了末了, 他会按照自己的喜好,留个例外,再打个折扣,然后,你前面讲的所有道理都白扯了。
比如上一篇《【万泉河】在S7-1200/1500的FB中,如何获取CPU启动首次循环的状态?》的评论:
这位朋友的回复里面,除了他歪曲了标准化的含义, 把固定约定当成了标准化之外, 还有一个主要的原因是,这些功能全局变量用得爽啊!
谁都知道爽,我也爽了十几年。
但到了标准化架构,有多不爽已经阐述过多次了。 做好的标准程序块,使用之前还要提前打许多埋伏,也同样违背了高内聚低耦合的原则,在耦合层多了一些额外的工作。
那么我们逐个来分析,如何实现这些以往用着很爽的功能性M变量的替代。
M1.0 FirstScan 首次循环
这是上文重点讲解过的,此文无需赘述。
但其实却是所有变量中最重要的,最难搞的。 如果说它的实现很水,其实后面的所有变量,都比它水还水。
M1.1 诊断状态已更改
没用过,不知道有啥用。所以没必要研究替代方案。
M1.2 始终为1, M1.3始终为0
这在FC/FB中很容易实现,定义两个BOOL的temp临时变量,分别为N1, N0, 函数块开始时,梯形图第一段,赋值一下,即可。
同样逻辑还有多种方法实现,大同小异。
这是所有PLC兼容的通用做法,然而在PORTAL中,增加了常量变量,只需要在常量中定义了,分别给设置了默认值1和0,连逻辑都不需要写了。
通常,梯形图逻辑中使用常1和常0,是为了屏蔽一些调试中作废的功能。但因为这些逻辑还有可能再用到,就没舍得删除。
而如果因为变量定义的原因,不小心这俩功能变量没激活,导致垃圾逻辑又复活了,那才是非常恶心的。
我上篇文章发布后,评论里面有个朋友的回复,就是吃了大亏。
MB0 时钟存储器字节,8个脉冲信号
这8个脉冲信号,区别只是频率不同,从10Hz到0.5Hz不等。
其中, 最有用的也就是1Hz的那个位,可以用于指示灯的闪烁,0.5亮+0.5灭。
而其它的7个位, 其实都很少用到。
而其实,这些变量虽然多,但功能其实还不够用。真正的工程应用中,工艺要求远比这几个简单变量所能提供的复杂。比如它的占空比是固定的50%,当需要变化的占空比的时候,就无能为力了。
而其实,对脉冲还有更复杂的要求。比如在除尘器行业,有多个脉冲阀,运行的时候,需要各个脉冲阀轮流间歇动作。
为此,我们特别编制了PSV功能块,需要的时候调用一下。功能块最多可以带6个脉冲,然而脉冲的维度可以设置,脉冲的工作时间/空闲时间也可以设置。除了除尘器用到之外,即便只需要一个0.5/0.5的脉冲,那也只需要调用一个PSV,维度设置为1,时间参数分别设置0.5/0.5即可。
这里把这个PSV函数分享给大家。 只不过, 由于其中使用的定时器是我改造过的,时间格式直接用的浮点数,之前有文章表达过的。所以单独一个块编译不成功,各位只需要看懂原理,自己也可以简单实现。
大家也可以看到, 6维脉冲,启停步骤一共12步,但我也没有使用所谓更高效的循环功能。 就这么最原始的一步步重复逻辑写下来了。 印证了我一直的主张,PLC逻辑里大部分的循环是没必要的!
当然, 我也知道,这个逻辑还可以更简化些,可以少占用一些系统资源。但在没发生PLC资源匮乏的情况下,暂时还没兴趣去升级改造它。
不过,要改也没多难,需要的时候,稍微花点心思而已。标准化模块化的设计架构就这么简单,不会因为一个模块的改动而整个楼都塌了。
得到示例程序的方法:
关注公众号《PLC标准化编程》,后台回复PSV,即可得到下载链接。
程序是用PORTAL V16环境做的,建议还在坚持用15, 14,乃至13SP1的同行们尽早升级吧!同时给大家辟个谣,传说PORTAL越升级,对电脑性能要求越高的说法不存在,我这儿V16跑在2013年的旧本子的虚拟机里,溜的很, 啥问题都没有!
所以传说V17很快要面世了, 等大家有了以后别忘了第一时间分享给我,我第一时间就升级,学习新功能!
不过为了照顾暂时还没有V16软件,又急迫想一睹为快的朋友, 程序块我也打印成了PDF, 一并放在分享文件夹中了。