故事作者:万泉河

最近创作

看看TA的故事

0428 【万泉河】PLC编程:谈虎色变双线圈

已锁定

万泉河

  • 帖子

    10887
  • 精华

    132
  • 被关注

    900

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

0428 【万泉河】PLC编程:谈虎色变双线圈

4229

73

2022-04-28 22:25:08

0428 【万泉河】PLC编程:谈虎色变双线圈

 

双线圈问题是PLC行业独有的问题。如果把这个名词讲给没有接触过PLC的IT程序员, 对方一定蒙逼,不知所云。

 

所以,可以算作是PLC工程师相比IT工程师掌握的为数不多的行业门槛。

 

很多人引以为傲, 而同时也有很多人提及双线圈就谈虎色变。

 

对程序中有可能出现双线圈忧心忡忡。

 

看来是入门学习PLC的时候,被某些培训老师给惊吓着了。 留下了病根。

 

而有一些品牌如三菱的编程软件,在编译过程中会频繁冒出双线圈警告,无疑在同行中也加深了这种忧虑。

 

以为是完全不可触及的禁区。

 

而其实,是个很简单的小问题。

 

双线圈问题的描述是基于梯形图语言的:即在整个PLC的程序范围内,对同一个Q点的输出线圈()指令只能有一次。 不要超过两次。 如果超过两次,就很有可能程序有BUG。 因为两次线圈()之中的某一次会无效。

 

线圈指令的本质是赋值。

 

是对某个开关量的Q点,赋值以计算后的结果1或者0。

 

即如果程序中有连续两次赋值:

Q:=1;

Q:=0;

则最终执行的结果是0,前面的1的赋值部分,被冲掉了。

 

所以, 除非你有意这样写程序,否则检查中发现这样的语句,就需要小心一点,有可能有错误。

 

我们这里讲线圈的本质是赋值,但反过来却未必成立。 赋值指令却未必是线圈(),因为还有(S)/(R)置位/复位指令。即,后两者并不是线圈,当说到双线圈的时候,唯一特指的就是只有()。

 

(S)/(R)置位/复位指令的本质是条件赋值。

 

所以,线圈指令的本质其实是无条件赋值。 警惕双线圈其实是要你警惕两次以上的无条件赋值。

比如

Q:=I;

这是赋值。

而如果用SR指令写,其实是IF/THEN的条件判断,以文本表达为:

IF I=TRUE THEN

Q:=TRUE;

ELSE

Q:=FALSE;

END_IF;

 

上述两种程序写法是完全等效的,效果完全一样。然而如果遇到两次需要写操作的场合,而且两次写操作不能合并, 只能分在两个不同的位置。前一种:

Q:=I1;

Q:=I2;

 

程序是有错误,而且无法解决。

 

而后一种,则可以各自增加上升沿下降沿的判断,最终分别实现

IF I1=TRUE  AND  I1_SAVE=FALSE THEN

Q:=TRUE;

IF I1=FALSE  AND  I1_SAVE= TRUE  THEN

Q:=FALSE;

I1_SAVE:=I1;

………….

 

IF I2=TRUE AND I2_SAVE=FALSE THEN

Q:=TRUE;

IF I2=FALSE  AND  I2_SAVE= TRUE  THEN

Q:=FALSE;

I2_SAVE:=I2;

 

这样的程序,大致实现了I1和I2分别为TRUE时,都可以点亮Q。 而不必非要把程序逻辑拼在一个段落中, 用OR语句来实现。

 

注意, 这里的逻辑还是只是大致实现。 是假设I1和I2的变化不会同时发生的情况下。

 

如果有同时发生, 而且发生时间片段有重叠,那么还需要更复杂的处理。

 

在我的新书《PLC标准化编程原理与方法》CH5.6.1一节中有详细介绍。

 

总之,对于双线圈难题的解决方案是:不要用线圈。

 

S/R不是线圈。


此文后续:

0512 【万泉河】破除双线圈禁忌:系列直播讲座计划


https://mp.weixin.qq.com/s/ydd12l-kmL2tmZm3nDaPvg


 


0428 【万泉河】PLC编程:谈虎色变双线圈 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

网友专栏

共有3232条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。