1.逻辑运算指令
逻辑运算指令包括16位的逻辑与指令WAND(FNC 26)、逻辑或指令WOR(FNC 27)、逻辑异或指令WXOR(FNC 28),以及32位的DAND、DOR、DXOR指令。这些指令以位为单位作相应的运算。
逻辑运算指令将源操作数(S1·)和(S2·)的对应位作与、或、异或位逻辑运算。与、或位逻辑运算的输入/输出关系见表3-4。
“与”运算时如果两个源操作数的同一位均为1,则目标操作数的对应位为1,否则为0。
“或”运算时如果两个源操作数的同一位均为0,则目标操作数的对应位为0,否则为1。
“异或”运算时如果两个源操作数的同一位不相同,则目标操作数的对应位为1,否则为0。
源操作数(S1·)和(S2·)为常数K时,指令自动地将它转换为二进制数,然后进行逻辑运算。
2.反相传送指令与求补码指令
反相传送指令CML(FNC 14)将源软元件中的数据逐位取反,即1→0,0→1,逐位作“非”运算,并将运算结果传送到指定的目标软元件。
求补码指令NEG(FNC 29)只有目标操作数,必须采用脉冲执行方式。它将(D·)指定的数的每一位取反后再加1,结果存于同一软元件,求补码指令实际上是绝对值不变的改变符号的操作。
FX系列PLC的有符号数用二进制补码的形式来表示,最高位为符号位,正数时该位为0,负数时该位为1,求负数的补码后得到它的绝对值。
3.逻辑运算指令基本功能的仿真实验
打开随书光盘中的例程“逻辑运算”后,打开GX Simulator,图4-54中的程序被下载到仿真PLC。单击工具条上的按钮 ,打开软元件批量监视视图,从D0开始监视。采用默认的监视形式“位&字”和16位显示方式(见图4-55),设置“数值”为十六进制。
图4-54 逻辑运算指令
双击表格第一行的D0,打开软元件测试对话框。将各指令的源操作数设置为4位十六进制的整数,在软元件测试对话框的“位软元件”区输入X0,将它强制为ON,执行图4-54中的逻辑运算指令,图4-55给出了指令执行的结果。
WAND指令的源操作数D0和D1的最低两位均为1,所以“与”运算的目标软元件D2 的最低两位为1。D0和D1的第2位和第3位中至少有一个为0,所以D2的对应位为0。
图4-55 逻辑运算的软元件批量监视视图(www.xing528.com)
WOR指令的源操作数D3和D4的第2、第A、第D和第F位均为0,所以“或”运算的目标软元件D5的这几位均为0。D3和D4其他的每一位中,至少有一个为1,所以D5的这些位为1。
WXOR指令的源操作数D6和D7的第0位、第3位和第C位均为0,第4位和第6位均为1,所以“异或”运算的目标软元件D8的这5位均为0。D6和D7其他各位同一位均不相同,所以D8的这些位为1。
取反传送指令CML的目标软元件D10的各位是将源软元件D9的各位分别取反(1变为0,0变为1)后得到的。
D11求补码得到的二进制数的各位是将它原来各位的0、1值取反,在最低位加1后得到的。将软元件批量监视视图的数值格式改为十进制,双击软元件监视视图的X窗口中的X0,改变它的状态。在它的上升沿,可以看到求补指令的操作数D11的绝对值不变,仅符号改变。
4.用WAND指令将指定位清零
使用逻辑与指令WAND,可以将某个16位整数或32位整数的指定位清零,其他位保持不变。
图4-56的WAND指令中的十六进制常数H3FFC的最高2位和最低2位二进制数为0,其余各位为1。与D12中的数作与运算后,目标软元件D13的最高2位和最低2位二进制数均为0,其余各位与D12的相同。
5.用WOR指令将指定位置位
使用逻辑或指令WOR,可以将某个字或双字的指定位置为1,其他位保持不变。
图4-56的WORP指令中的十六进制常数H9的第0位和第3位为1,其余各位为0。在做仿真实验时,在软元件批量监视视图中设置D14的值。双击X2,在它的上升沿执行WORP指令。可以看到,不管D14的第0位和第3位为0或1,逻辑或运算后目标软元件D15的第0位和第3位总是为1,其他位与D14的相同。
6.用字异或指令判断有哪些位发生了变化
两个相同的字作异或运算后,运算结果的各位均为0。图4-56中的WXOR指令对本扫描周期的K4X30(X30~X47)的值,以及保存在D16中的上一扫描周期的K4X30的值作字异或运算。如果这两个扫描周期某个输入继电器的状态未变,则目标操作数D17对应位的值为0。反之则D17对应位的值为1。执行完WXOR指令后,将本扫描周期K4X30的值保存到D16,供下一扫描周期的异或运算使用。
在做仿真实验时,可以看到,X30~X47各位的状态不变时,逻辑异或指令WXOR的目标软元件D17的各位均为0。
双击软元件监视视图的X窗口的X30~X47中的某一位,改变它的ON/OFF状态。D17中异或运算结果的对应位应变为1,持续的时间只有一个扫描周期(一闪而过),D17的其他位则为0。
可以用求ON位总数指令SUM(FNC 43)来求D17中同时为1的位数,即状态同时变化的位的个数。用编码指令ENCO(FNC 42)来求D17中为1(即状态变化的位)的最高位在字中的位置。
图4-56 逻辑运算指令的应用
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。