以下內(nèi)容由深圳市綜科智控科技開發(fā)有限公司整理編輯: 前言:很多同學在PLC開發(fā)過程中,因為數(shù)據(jù)類型選擇錯誤而出現(xiàn)得到的數(shù)據(jù)和期望的數(shù)據(jù)不一致的情況,例如:我們在讀取模擬量采集讀數(shù)的時候,可能會發(fā)現(xiàn)數(shù)據(jù)小于32767時都是對的,但是一旦大于這個值就變成了負數(shù);還有些時候,PLC在和第三方采集器通信時,會出現(xiàn)接收的數(shù)據(jù)順序和發(fā)送方數(shù)據(jù)存在高低位顛倒的情況,這是怎么回事呢,讓我們來一起來解開這里的謎團。
位:最小的存儲單位,非0則1,表達兩個狀態(tài)。
字節(jié):每8個位組成一個字節(jié)。這樣一個字節(jié)可以表達2的8次方(256)個狀態(tài),大于256個狀態(tài)怎么表示?那就字。
字:2個字節(jié)組成一個字,有16個位。這樣一個字可以表達2的16次方(65536)個狀態(tài),大于65536個狀態(tài)怎么表示? 那就用 雙字。
雙字:2個字組成一個雙字,有32個位。這樣一個雙字可以表達2的32次方(429496729狀態(tài))。
雙整(32位又稱雙字)=2個整數(shù)(2*16位)
整數(shù)(16位又稱字)=2個字節(jié)(2*8位)
字節(jié)(8位)=8個位
舉個例子說明,以西門子為例:
VD0(雙整)=VW0,VW1(整數(shù))=VB0,VB1,VB2,VB3(字)=V0.0~V3.7(位)一共32個位 所以稱32位雙整! 西門子表達比較特殊,理解如下: 例如:VB100 B表示1個字節(jié)=8個位
8個位為VB100.0--VB100.7, 一個字節(jié)是VB100。 VW100 W表示2個字節(jié)=16個位 =字 16個位為VB100.0--VB100.7,VB100.8--VB100.15, 二個字節(jié)(字)是VB100,VB101. VD100 D表示4個字節(jié)=32個位=雙字 32個位為VB100.0--VB100.7,VB100.8--VB100.15, VB100.16-- VB100.23, VB100.24--VB100.32, 4個字節(jié)(雙字)是 VB100,B101,VB102,VB103 一個32位組成的雙字,其0-31位共32位用VD10表示的話,那么要表達0-15位組成的字,就是VW12;要表達16-31位組成的字,就是VW10;要表達0-7位組成的字節(jié),就是VB13;要表達8-15位組成的字節(jié),就是VB12;要表達16-23位組成的字節(jié),就是VB11;要表達24-31位組成的字節(jié),就是VB10。
無符號整數(shù) 十進制數(shù)值范圍 0到65535 十六進制數(shù)值范圍16#0000到16#FFFF 有符號整數(shù) 十進制數(shù)值范圍 -32768到+32767 十六進制數(shù)值范圍16#8000到16#7FFF
1、無符號整數(shù)和有符號整數(shù)之分?
一個16位數(shù),分為WORD數(shù)據(jù)類型與INT數(shù)據(jù)類型。前者無符號,后者為有符號。
通常情況下WORD用于邏輯運算,INT用于數(shù)學運算;即WORD與INT在用法上沒有什么區(qū)別(WORD可做數(shù)學運算,INT也可作邏輯運算)。
2、如vw100我怎么讓它成為無符號整數(shù)寄存器?
不是什么寄存器,寄存器的概念在此不做解釋。vw100如果做為WORD數(shù)據(jù)類型就是無符號。
3、WORD數(shù)據(jù)類型與INT數(shù)據(jù)類型數(shù)據(jù)范圍:
WORD數(shù)據(jù):0-65535;
INT數(shù)據(jù)類型:-32768-+32767.。
4、如果數(shù)值超過65535怎么辦呢? 同上所述,原理一樣,只不過數(shù)類型變成DWORD和DINT而已。
|