一、數據單位(數據長度類型)
術語 | 名稱 | 位數 | 所占字節 | 說明 |
---|---|---|---|---|
Bit | 位 | 1 bit | 1/8 Byte | 最小數據單位(0或1) |
B | Byte 字節 | 8 bit | 1 Byte | 字節單位 |
W | Word 字 | 16 bit | 2 Byte | 通常用于整數、狀態字等 |
DW | Double Word 雙字 | 32 bit | 4 Byte | 常用于浮點、雙整數 |
1雙字 = 2字????????1雙字 = 4字節????????1雙字 = 32位
1字 = 2字節????????1字 = 16位
1字節 = 8位
三、存儲區域(Memory Area)
區域 | 名稱 | 說明 | 大小(S7-200 SMART) | 舉例 |
---|---|---|---|---|
I區 | 輸入映射區 | 外部信號輸入 | 1KB | I[字節號].[位號]: (如 I0.0、I2.7) |
Q區 | 輸出映射區 | 外部信號輸出 | 1KB | Q[字節號].[位號] (如 Q0.1、Q5.3) |
M區 | Merker 標志寄存器 | 程序內部臨時變量、 中間狀態存儲 | 4KB | M[字節號].[位號] (如 M0.2、M10.5) |
DB區 | 數據塊 | 用戶自定義數據結構的存儲區 | 128 個 DB 塊, 單個4096 字節(4KB) | DB1.DBX04 (X = Bit)DB1.DBB4 (B = 字節)DB1.DBW4 (W = 字)DB1.DBD4 (D = 雙字) |
T區 | 定時器 | 用于時間控制(接通延時、斷開延時等) | 最多 256 個定時器(T0~T255),支持 1ms、10ms、100ms 分辨率 | |
C區 | 計數器 | 用于計數控制(增計數、減計數、增減計數) | 最多 256 個計數器(C0~C255),計數范圍 0~32767 | |
L區 | 局部變量 | 僅在函數(FC)或功能塊(FB)內部使用,調用時臨時分配 | 每個塊最多 64 字節(512 位) |
四、尋址(讀寫)
在 PLC 中,定位變量通常采用的格式為:
- 格式一:
[存儲區] + [偏移量]
- 格式二:
[存儲區] + [偏移量] + [數據單位]
- 格式三:
[存儲區] + [數據單位] + [偏移量]
- 存儲區:表示變量所在的內存區域(如 I 輸入區、Q 輸出區、M 內存區等)
- 偏移量:變量在該存儲區中的起始地址
- 數據單位:變量的存儲粒度(如 bit、byte、word、dword 等)
例 1:位(bit)尋址 [存儲區] + [偏移量]
數據單位隱含了
I0.3
- I:表示輸入區
- 0:字節偏移量(第 0 個字節)
.
:作用是區分字節地址和位地址- 3:位偏移量(第 3 位)
含義:讀取(或寫入)輸入區第 0 字節的第 3 位的值,例如某個按鈕的開關狀態。
例 2:字節(byte)尋址 [存儲區] + [數據單位] + [偏移量]
QB2
- Q:表示輸出區
- B:數據單位,表字節
- 2:字節偏移量:2(第 2 個字節)
含義:讀取(或寫入)輸出區第 2 個字節的內容,1字節=8個位 即可表示8個輸出繼電器。
例 3:字(word)尋址 [存儲區] + [數據單位] + [偏移量]
MW20
- M:程序內部臨時變量、中間狀態存儲
- W:數據單位,表字
- 20:字節偏移量(從字節 20 開始)
含義:讀取(或寫入)從字節 20 開始的 2 個字節,例如一個整數計數值。
例 4:數據塊(DB)尋址 [存儲區] . [數據單位] + [偏移量 ]
DB1.DBX0.4
(X = Bit)
DB1.DBB4
(B = 字節)
DB1.DBW4
(W = 字)
DB1.DBD4
(D = 雙字)
DB1
:表示數據塊 1(Data Block 1),這本身就是一個存儲區,但它是用戶定義的存儲區。.
:第1個.
相當于“進入”這個數據塊的意思。.
:第2個.
作用是區分字節地址和位地址。
五、擴展:底層內存存儲方式
當多個字節組成一個Word(16位)、Double Word(32位)或更大數據時,低字節和高字節的存放順序是怎樣的???
什么是字節序(Endian)
當多個字節表示一個數據時,存在兩種存儲順序:
類型 | 名稱 | 說明 |
---|---|---|
Little Endian | 小端序 | 最低有效字節存放在低地址,最高有效字節存放在高地址 |
Big Endian | 大端序 | 最高有效字節存放在低地址,最低有效字節存放在高地址 |
例如,假設有一個 字
類型(1字=2字節)數值為 0x1234
,組成字的兩個字節是(按8位分組):
- 高字節(前8位一個字節):
0x12
- 低字節(后8位一個字節):
0x34
類型 | DB0.DBB0 | DB0.DBB1 |
---|---|---|
Little Endian | 0x12 | 0x34 |
Big Endian | 0x34 | 0x12 |
注意:西門子 PLC(如 S7-200 SMART、S7-1200/1500)默認采用小端序存儲。
字節序注意場景
- 正確解析多字節數據(避免數值錯誤)
當你在 PLC 中處理字(Word,16 位)、雙字(DWord,32 位)等多字節數據時,必須遵循小端序規則才能正確拆分或組合字節。 - 確保跨設備通信的數據一致性
PLC 常需與上位機(如 HMI、SCADA)、傳感器、儀表等外部設備交換數據(如溫度、流量等數值),而不同設備可能采用不同的字節序(如部分儀表默認大端序)。 - 正確處理數據塊(DB)的結構化數據
在數據塊中定義數組、結構體等復雜數據類型時,字節序決定了各成員的存儲位置。 - 避免程序調試中的 “隱蔽錯誤”
字節序錯誤屬于 “邏輯正確但結果錯誤” 的隱蔽問題,不影響程序運行,但會導致數據異常(如顯示值錯誤、控制邏輯失效)。
六、擴展: 數據類型(Data Type)
類型 | 名稱 | 位數 | 示例值 |
---|---|---|---|
BOOL | 布爾型 | 1 bit | TRUE / FALSE |
BYTE | 字節 | 8 bit | 16#FF |
WORD | 字(整型) | 16 bit | 16#FFFF |
DWORD | 雙字 | 32 bit | 16#FFFFFFFF |
INT | 有符號整數 | 16 bit | -32768 ~ 32767 |
DINT | 雙字整數 | 32 bit | -21億 ~ 21億 |
REAL | 浮點型 | 32 bit | 3.14, -1.5 |