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


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