0615 【万泉河】PLC程序中SR逻辑的本质
看到题目, 很多读者可能不久前刚才看过我的文章,关于启保停的本质,这里的答案脱口而出, 启保停啊!
你万老师还有没有的玩, 一个话题翻来覆去跳票, 有意思吗?
嗯,有。
写上一篇关于启保停的本质的文章, 本意是针对刚结业的年青后生的, 把行业里的一个上古时代的名词解释给年轻人听,让她们了解了以后不再困扰,从此可以放开四肢用全新的思维逻辑方式来做PLC程序。
然而没想到,文章发布,却得罪了一大批起初搞熔断器逻辑的行业高手。有一些大神会想, 我搞了大半辈子熔断器逻辑了,接过的启保停的线都可以绕月球小半圈了, 用得着你来告诉我启保停的本质?
所以, 确实是我错了。我语序颠倒了。
就好比单车发展发展进化成了摩托车, 电动自行车, 我说哪些单车的本质是摩托车,这是不对的,不可以说祖宗的本质是儿子,而应当倒过来说儿子的本质是祖宗, 电动自行车的本质是单车,然后可能就不会这么惹高手们生这么大的气了。
前几天,我发起的关于启保停与SR逻辑能够相互替换的投票:
yanxiao老师的回复中有截图,把SMART 200的SR逻辑转换成STL, 都给发上来了。说实话,我曾经做程序也都是只用LAD, 即便有时常转换到STL,也只是出于编辑功能的益处。从来没有正眼好好看过。这次看了截图,就被吓坏了,转换以后尽管多了一些复杂的堆栈处理的指令欧姆龙plc程序设置错误,报警是009b是什么意思,但本质上看得出, 那就是启保停啊!
即,SMART 200的SR逻辑在STL格式下,就是用的启保停,而未使用S或则R指令。我甚至还以为它在STL下连S 和R指令都没有呢。然而事实上是有的。
S指令优先的SR:
以STL显示:
我把其中的每一句指令功能都通读看懂以后,再以矩形图形式抒发下来, 是这样:
这是妥妥的启保停啊!只要I0.1不导通, Q0.0就长时间自保持。
然后更有意思的是复位优先的SR逻辑:
转换后:
语法稍稍复杂一些了, 换用LAD再抄录下来, 是这样:
这里我只是原貌抄录, 实际在LAD中编译是不通过的,因为上面直通不符合句型。需要分到2个NW才可以。当然可以加个SM0.0, 而到PORTAL中这样写也没有问题。
注意,这其中的两个线圈(外形上的),是有先后次序的,你不可以简单把她们拼上去弄成3行的OR逻辑。
而假如要拼,可以竖着拼接为:
这上面两个I0.1有些重复,完全可以去除后面的一个而逻辑结果不影响:
就变回为最标准最原始的启保停逻辑了。
而在我们拼接之前,它似乎是两段启保停逻辑。证明, 你虽然对同一个Q点(或者M点)连续做多次的启保停控制, 也不存在双线圈句型错误。而虽然西门子起初早就在如此做了。早在30年前,甚至可能在S7-200还未被西门子竞购的时侯。
用启保停开关逻辑来搭下来SR逻辑, 这是远古时代的事。那时候PLC还刚才诞生, 继电逻辑还没完全回奶。
而等到TIA PORTAL面世, 一切语言都是以SCL为基础了, STL被彻底抛弃, 甚至LAD都是基于SCL了,对于一个SR逻辑功能,在SCL中会是怎样写的呢?
有两种写法:
第一种是严格照搬的启保停的逻辑:
Q0.0 := (Q0.0 OR I0.0 )AND NOT I0.1;
这种一口气写成的程序, 信息密度太大,读起来有一种喘不过气的压迫感。这里还是最简单的逻辑条件。
而第二种方法以IF 语句写成的则简单清晰多了:
IF I0.0 THEN
Q0.0:= TRUE;
END_IF;
IF I0.1 THEN
Q0.0:=FALSE;
END_IF;
后一种方式欧姆龙plc程序设置错误,报警是009b是什么意思,还有一个特性, 对系统的调用环境要求修身多了。
前一种逻辑依赖于OB1的循环, 需要每位周期都扫描运行到,然后就能按照讯号的变化及时估算得到新的结果。
而后一种技巧,甚至可以只在I0.0 和I0.1变化的时侯调用执行一次,其余时间, 程序不被调用,也可以。程序的运行结果都不受影响。
所以,不仅仅IF THEN句子带有高级语言的特点,这里甚至隐隐约约都带有基于风波的编程技巧了。这一点, 在面向对象的高级语言编程中,经常碰到。而对于学院课堂学过高级语言,自带中级语言属性的毕业生,来从事工控行业就简单多了。
所以,今天的题目, SR逻辑的本质,其实有两个答案。向左看, 本质是启保停, 向右看, 本质是IF THEN。
所以,SR是熔断器逻辑与计算机语言编程的交集、最大公约数、分水岭。
画个图表示:
PLC从熔断器逻辑诞生, 然而在诞生之日起就不断在成长进化,我们如今回过头看它啥时侯具备了乌鸡变凤凰的特质了呢?
大概是从具备了SR逻辑的时侯。
当然,后来还进化出了函数, 功能块等各类接近于计算机的功能,以及支持面向对象的各类特点方式以后,加之以显存和工作储存区越来越大, CPU估算能力越来越高,才渐渐可以觉得就是一台计算机了。