2.3 位逻辑指令

位逻辑指令用于二进制数的逻辑运算,二进制数只有0和1这两个数,1相当于编程元件的线圈通电,0相当于线圈断电。位逻辑运算的结果(Result of Logic Operation)简称为RLO。

2.3.1 触点指令

(1)触点线圈 在语句表中,用A(AND,与)指令来表示串联的常开触点。用O(OR,或)指令来表示并联的常开触点。触点指令中变量的数据类型为BOOL(布尔)型。常开触点对应的地址位为1状态时,该触点闭合。

在语句表中,用AN(AND NOT,与非)来表示串联的常闭触点,用ON(OR NOT,或非)来表示并联的常闭触点,触点符号中间的“/”表示常闭,常闭触点对应的地址位为0状态时该触点闭合。

输出指令“=”将RLO写入地址位、输出指令与线圈相对应。驱动线圈的电路接通时,有“能流”流过线圈,RLO=1,对应的地址位为1状态,反之则RLO=0,对应的地址位为0状态。线圈应放在梯形图的最右边。下面是图2-12对应的语句表,其中的L20.0是用来保存运算结果的局域变量,局域变量只能在程序所在的逻辑块中使用。将梯形图转换为语句表时,局域变量L20.0是自动分配的。

  A (
  A  I0.0
  AN          I0.1
  O          I0.2
  )  
  A          I0.3
  ON          C5
  -          L20.0
  A          L20.0
  =          Q4.3
  A          L20.0
  =          Q4.4
  A          L20.0
  AN          I3.4
  =          Q4.6

图2-12 触点与输出指令

(2)取反触点 取反触点的中间有“NOT”,用来将它左边电路的逻辑运算结果RLO取反(见图2-13),该运算结果若为1则变为0,为0则变为1,该指令没有操作数。换句话说,能流到达该触点时即停止流动;若能流未到达该触点,该触点给右侧供给能流。图2-13中左边的两个触点均闭合时,Q4.5的线圈断电。

图2-13 取反触点

(3)电路块的串联和并联 电路块的串、并联电路如图2-14、图2-15所示。触点的串并联指令只能将单个触点与其他触点电路串并联。逻辑运算时采用先“与”(串联)后“或”(并联)的规则,例如(I0.0+M3.3),(M0.0+I0.2)。要想将图2-14中由I0.5和I0.2的触点组成的串联电路与它上面的电路并联,需要在两个串联电路块对应的指令之间使用没有地址的O指令。

图2-14 电路块的并联

图2-15 电路块的串联

将电路块串联时,应将需要串联的两个电路块用括号括起来,并在左括号之前使用A指令,就像对单独的触点使用A指令一样。电路块用括号括起来后,在括号之前还可以使用AN、N、ON、X和XN指令。

表2-8给出了位逻辑指令。

表2-8 位逻辑指令  

(4)中线输出指令 中线输出是一种中间赋值元件,用该元件指定的地址来保存它左边电路的逻辑运算结果(RLO位,或能流的状态)。中间标有“#”号的中线输出线圈与其他触点串联,就像一个插入的触点一样,中线输出只能放在梯形图的中间,不能接在左侧的垂直“电源线上”,也不能放在电路最右端结束的位置,图2-16(a)可以用中线输出指令等效为图2-16(b)。

图2-16 中线输出指令

如果该指令使用局域数据区(L区)的地址,在逻辑块(FC、FB和OB)的变量声明表中,该地址应声明为“TEMP”类型。下面是图2-16中第一行对应的语句表。

  A  I0.0
  AN          I0.1
  =          M0.1
  A          M0.1
  A          I0.3
  =          Q4.3

(5)异或指令与同或指令 异或指令的助记符为X,图2-17是异或指令的等效电路。图2-17中的I0.0和I0.2的状态不同时,运算结果RLO为1,反之为0。

图2-17 异或

同或指令的助记符为XN,图2-18是同或指令的等效电路。图2-18中的I0.0和I0.2的状态相同时,运算结果RLO为1,反之为0。

图2-18 同或

2.3.2 输出类指令

(1)赋值指令 赋值指令(=)将逻辑运算结果RLO写入指定的地址位,对应于梯形图中的线圈。

(2)置位与复位

①S(SET置位或置1)指令:将指定的地址位置位(变为1并保持)。

②R(Recst,复位或置0)指令:将指定的地址位复位(变为0并保持)。

如果图2-19中I0.1的常开触点接通,Q4.3变为1并保持该状态,即使I0.1的常开触点断开,它也仍然保持1状态。I0.3的常开触点闭合时,Q4.3变为0,并保持该状态,即使I0.3的常开触点断开,它也仍然保持0状态,如果被指定复位的是定时器(T)或计数器(C),将清除定时器和计数器的定时/计数当前值,并将它们的地址位复位。

图2-19 置位与复位

(3)RS触发器 如果图2-20左边的R输入I0.4为1且S输入I0.6为0,RS复位置位触发器被复位,M0.0与Q4.1均为0状态。如果S输入法I0.6为1且R输入I0.4为0,用被置位M0.0与Q4.1均为1状态,如果两个输入信号的状态均为1,因为先执行复位指令,后执行置位指令,执行完后RS触发器被复位,M0.0与Q4.1均为1状态。

图2-20 RS触发器与SR触发器

(4)SR触发器 如果图2-20右边的S输入I0.2为1且R输入I0.5为0,SR置位复位触发器被置位,M0.1与Q4.3均为1状态。如果R输入I0.5为1且S输入I0.2为0,则触发器被复位,M0.1与Q4.3均为0状态,如果两个输入均为1,因为先执行置位指令,后执行复位指令,执行完后SR触发器被复位,M0.1与Q4.3均为0状态。

2.3.3 其他指令

(1)RLO边沿检测指令 图2-21中的I0.3和I0.0组成的串联电路由断开变为接通时中间标有“P”的上升沿检测线圈左边的RLO(逻辑运算结果)由0变为1(即波形的上升沿),检测到一次正跳变,能流将在一个扫描周期内流过检测元件,Q4.5的线圈仅在这一个扫描周期内“通电”。检测元件的地址(例如图2-21中的M0.0和M0.1)为边沿存储位,用来储存上一次循环的RLO。在波形图中,用高电平表示1状态。

图2-21 上升沿与下降沿检测

图2-21中的I0.3和I0.0组成的串联电路由接通变为断开时,中间标有“N”的检测元件左边的RLO由1变为0(即波形的下降沿),检测到一次负跳变,能流将在一个扫描周期内流过检测元件,Q4.3的线圈仅在这一个扫描周期内“通电”。

正/负跳变语句的助记符分别为FP(Poritive RLO Edge,上升沿)和FN(Negative RLO Edge,下降沿)。下面是图2-21对应的语句表程序:

Network1:

   A  I0.3
   A          I0.0
   FP          M0.0
   =          Q4.5

Network2:

   A          I0.3
   A          I0.0
   FN          M0.1
   =          Q4.3

(2)信号边沿检测指令 ROS是单个地址位提供的信号的上升沿检测(Positive RLO Edge Detection)指令,如果图2-22中I0.1的常开触点接通,且I0.2由0变为1(即输入信号I0.2的上升沿),Q4.3的线圈“通电”一个扫描周期,M0.0为边沿存储位,用来存储上一次循环时I0.2的状态。

NEG是单个地址位提供的信号的下降沿检测(Negative RLO Edge Detection)指令,如图2-22中I0.3的常开触点接通,且I0.4由1变为0(即输入信号I0.4的下降沿),Q4.5的线圈“通电”一个扫描周期,M0.1为边沿存储位,用来存储上一次循环时I0.4的状态。

图2-22 上升沿检测与下降沿检测

下面是图2-22中右图对应的语句表程序,其中的BLD指令与梯形图的显示有关。

  A   I0.3
  A(
  A          I0.4
  RLD         M0.0
  FN          M0.1
  )
  =          Q4.3

【例2-1】 设计故障信息显示电路,若故障信号I0.0为1,使Q4.0控制的指示灯以1Hz的闪烁。操作人员按复位按钮I0.1后,如果故障已经消失,指示灯熄灭。如果没有消失,指示灯转为常亮,直到故障消失。

故障信息显示电路如图2-23所示,在设置CPU的属性时,令M0.1为时钟存储器字节,其中的M1.5提供周期为1s的时钟脉冲,出现故障时,将I0.0提供的故障信号用M0.1锁存起来,使Q4.0控制的指示灯以1Hz的频率闪烁。按复位按钮I0.1后,将故障锁存信号M0.1复位为0状态,如果这时故障已经消失,指示灯熄灭。如果没有消失,M0.1的常闭触点与I0.0的常开触点组成的串联电路使指示灯转为常亮,直至故障消失,I0.0变为0状态。

图2-23 故障信息指示

(3)将RLO保存 R寄存器 SAVE指令(见图2-24)将RLO保存到状态字的BR位,首次检查位“/FC”不会被复位,由于这个原因,在下一个网络中,BR位的状态将参加“与”逻辑运算。

图2-24 保存RLO

建议一般不要用SAVE指令保存RLO,并在本逻辑块或下一个逻辑块中检查保存的BR位的值,因为在保存和检查操作之间,BR的值可能已被很多指令修改了。

但是在退出逻辑块之前可以使用SAVE指令,因为使能ENO(即BR位)被设置为RLO位的值,要以用于块的错误检查。

(4)SET与CLR指令 SET与CLR(Clear)指令将RLO(逻辑运算结果)置位或复位,紧接在它们后面的赋值语句中的地址将变为1状态或0状态。

  SET    //将RLO置位
  =           M0.2   //M0.2的线圈通电
  CLR      //将RLO复位
  =           Q4.7   //Q4.7的线圈断电