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