邏輯運(yùn)算指令有什么作用?
閱讀:1355 發(fā)布時(shí)間:2021-4-29
這類指令是對(duì)字節(jié)、字或雙字的各位分別同時(shí)進(jìn)行邏輯運(yùn)算的指令。有的PLC沒有字節(jié)邏輯運(yùn)算指令。
S7-200的取反(求反碼)指令將輸入變量中的二進(jìn)制數(shù)逐位取反,即各位由0變?yōu)?,由1變?yōu)?(見圖4-17a),并將結(jié)果裝入輸出地址中。
參與“與”運(yùn)算的兩個(gè)操作數(shù)的同一位均為1時(shí),運(yùn)算結(jié)果的對(duì)應(yīng)位為1,否則為0。
參與“或”運(yùn)算的兩個(gè)操作數(shù)的同一位均為0時(shí),運(yùn)算結(jié)果的對(duì)應(yīng)位為0,否則為1。
參與“異或”(Exclusive Or)運(yùn)算的兩個(gè)操作數(shù)的同一位不同時(shí),運(yùn)算結(jié)果的對(duì)應(yīng)位為1,否則為0。


(1)求整數(shù)的絕對(duì)值
PLC的負(fù)數(shù)用2的補(bǔ)碼的形式來表示,最高位為1時(shí)該位為0,為1時(shí)該位為負(fù)數(shù),將負(fù)數(shù)求補(bǔ)(各位取反后加1)得到它的絕對(duì)值。
FX系列有求二進(jìn)制數(shù)補(bǔ)碼的指令NEG,因?yàn)镾7-200沒有求補(bǔ)碼的指令,需要用取反和加1這兩條指令來實(shí)現(xiàn)。在下面的程序中,如果VW10中的數(shù)不是負(fù)數(shù),比較觸點(diǎn)斷開,不會(huì)執(zhí)行取反和加1指令。
LDW< VW10,O ∥如果VWlO中為負(fù)數(shù)
INVW VWlO ∥VW10逐位取反
INCW VWlO ∥加1得到VWlO的絕對(duì)值
(2)將字或字節(jié)中的某些位置為0
圖4-17b中變量VB1的各位與十六進(jìn)制常數(shù)FOH相“與”,因?yàn)?6# FO的高4位為1,低4位為0,所以運(yùn)算結(jié)束后VB1的低4位被清0,高4位不變。
(3)將字或字節(jié)中的某些位置為1 圖4-17c中變量VB3的各位與十六進(jìn)制常數(shù)16# OB(即二進(jìn)制常數(shù)0000 1011)相“或”,16#OB的高4位為0,運(yùn)算結(jié)束后VB3的高4位不變。因?yàn)槌?shù)16# OB的第3、第1和第0位為,1,不論VB3這幾位為0還是為1,運(yùn)算結(jié)束后Ⅵ粥這幾位都被置為1。
(4)判斷有哪些位發(fā)生了變化
兩個(gè)相同的字節(jié)異或運(yùn)算后運(yùn)算結(jié)果的各位均為0。假設(shè)VB5和VB6中是在不同時(shí)刻采集的8位數(shù)字量的狀態(tài),對(duì)它們異或運(yùn)算后的結(jié)果如果不是全0,說明有的位的狀態(tài)發(fā)生了變化。狀態(tài)發(fā)生了變化的位的異或結(jié)果為1。
兩個(gè)相同的字節(jié)異或運(yùn)算后運(yùn)算結(jié)果的各位均為0。假設(shè)VB5和VB6中是在不同時(shí)刻采集的8位數(shù)字量的狀態(tài),對(duì)它們異或運(yùn)算后的結(jié)果如果不是全0,說明有的位的狀態(tài)發(fā)生了變化。狀態(tài)發(fā)生了變化的位的異或結(jié)果為1。
(5)異或校驗(yàn)
為了檢驗(yàn)通信過程中接收到的數(shù)據(jù)是否正確,將接收到的需要校驗(yàn)的各字節(jié)作異或運(yùn)算,并將異或的結(jié)果(異或校驗(yàn)碼)作為報(bào)文的一部分發(fā)送到接收方。接收方計(jì)算出接收到的數(shù)據(jù)的異或校驗(yàn)碼,并與發(fā)送方傳送過來的校驗(yàn)碼比較,如果不同,可以判斷通信出錯(cuò),要求發(fā)送方重發(fā)