-
1 # 練就一身本領
-
2 # 控制研究控
PLC中的加法指令,其實是很簡單的指令,我也多次的回答過相似的問題,但是今天既然來答了,還是多說一些,或者說盡量說一些之前沒有說過的知識點。
還是以Micro/win軟體中的加法指令來說明,請看下圖:
西門子200PLC中的加法指令是分為整數和浮點數去歸類指令的,總共有3個加法指令,還是對照圖片來說:
ADD_I就是一個整數加法指令,可以看到IN1+IN2=VW0,這裡你寫VW2,4,6或者MW20,30也都是可以的,看你自己的喜歡。只要求運算元是一個16位的字型變數,也就是整數變數。---整數又分為有符號和無符號,在無符號時16位的表示範圍是0-65535,而當是有符號時16位整數的表示範圍就是-32768--+32767。而軟體預設是有符號的(這個也是可以驗證的,你把65535給到VW20,監控的時候顯示-1),所以VW0=32768就超範圍了,也就是溢位了,SM1.1就接通了。---SM1.1是系統提供的特殊暫存器,我在之前的問答中說過這個點的作用。
還需要強調的是ADD_I這裡顯示紅色,是因為它是在編譯時候未檢查出的錯誤,而執行之後出錯了,這裡顯示紅色的直接結果就是ENO不能輸出了,所以M0.0是OFF狀態!
繼續向下看,ADD_DI指令是雙整數的加法指令。雙整數是32位的,所以它的無符號表示範圍有42億多,我之前的問答中也回答過類似的問題,就不細說了。可以看到這裡32767+1=32768就沒有出錯,但是結果是VD4=32768,VD4在這個指令中是雙整數。
繼續向後,ADD_R指令是浮點數加法指令,也就是實數加法指令。在西門子200PLC中浮點數指令也是32位的,因此這裡VD4顯示成了NAN,NAN的意思是非法的意思,之前我還說過一個INF是無窮大的意思。雖然非法資料,但是在這個指令下並沒有造成致命錯誤,因此ENO還是輸出了,M0.1就接通了。--這裡的ENO的意思是左母線的能流從EN流入,指令執行沒有錯誤,能流就從ENO流出。
最後,一行就是兩個小數相加,注意這裡我實際輸入的值是1.1415926,系統自動改成1.141593了,因此只能保留小數點後邊6位。
就說這麼多了,西門子200中的加法指令就是實現2個運算元的相加,但是每種運算元有自己的資料範圍和格式,當整數裝不下的時候,就要去考慮長整數,還有實數是小數點後只能有6位有效。所以說,指令雖然簡單,基礎的知識如果沒有記牢,在使用中同樣會出現問題。
回覆列表
(1)資料傳送指令的輸入資料可以是負數,這個沒有問題的,具體你可以編一個小程式,然後線上執行,透過狀態表觀察V區中的資料;(2)可以,不要忘了,負整數也是整數,不是補碼形式保持的,如16位資料,可以有有符號16位整數(最高位是1時表示負數,代表符號位),無符號16位整數,最高位是數字位。可以用MOV_B將-2傳到VB100中,前提是儲存-2的變數是一個帶符號的8位整形變數。;(3)ADD_I是16位整數相加(字相加),ADD_DI是32位整數相加(雙字相加);(4)是的,相加的結果超過了25536(這個數字可能記錯了),超過了16位整數導致計算結果溢位,所以要用ADD_DI;如果你要學習,還是直接檢視西門子PLC的幫助最好,西門子的幫助做的非常好,一定要常按F1,非常有用。如果你是win7安裝micwin無法開啟幫助,試試這個,Windowsupdate安裝即可