什么是Modbus
什么是Modbus
1. Modbus如何工作
Modbus是通過設(shè)備之間的幾根連線來傳遞數(shù)據(jù),最簡單的設(shè)置就是主站和從站之間用一跟串口線相連。數(shù)據(jù)通過一串0或者1來傳遞,也就是位。0為正電壓,1為負(fù)電壓。位數(shù)據(jù)傳遞速度非常快,常見的傳輸速度為9600波特(即9600bits/s).
2. 標(biāo)準(zhǔn)Modbus怎么存儲數(shù)據(jù)
信息存儲在從站的四個不同的表中。兩個表存儲數(shù)字量,稱為線圈;兩個表存儲模擬量,稱為寄存器。線圈和寄存器分別有一個只讀,另一個可讀寫。每個表可存儲9999個值。線圈是一位的,地址從0000到270E;寄存器是一個字的(16位,2字節(jié))地址也是從0000到270E.
| 1-9999 | 0000 to 270E | Read-Write | Discrete Output Coils |
| 10001-19999 | 0000 to 270E | Read-Only | Discrete Input Contacts |
| 30001-39999 | 0000 to 270E | Read-Only | Analog Input Registers |
| 40001-49999 | 0000 to 270E | Read-Write | Analog Output Holding Registers |
線圈/寄存器編號可以看做是位置的名字,它們不出現(xiàn)在實(shí)際發(fā)送的信息當(dāng)中,數(shù)據(jù)地址(Data Address)出現(xiàn)在實(shí)際發(fā)送的信息中。
舉個例子,第一個Holding Register的編號為40001,數(shù)據(jù)地址為0000.這兩個數(shù)字的區(qū)別在于偏移量。
3. 什么是從站ID
在網(wǎng)絡(luò)中,每一個從機(jī)分配一個唯一的設(shè)備地址,從1到247.當(dāng)主機(jī)請求數(shù)據(jù)時,發(fā)送的信息的第一個字節(jié)就是從機(jī)地址,這樣,從機(jī)接收到第一個字節(jié)后就知道是否忽略信息。
4. 什么是功能碼
主機(jī)發(fā)送的第二個字節(jié)就是功能碼。這個功能碼告訴從機(jī)需要訪問哪個表,是向這個表中寫數(shù)據(jù)還是讀數(shù)據(jù)。
| 01(01 hex) | Read | Discrete Output Coils |
| 05(05 hex) | Write single | Discrete Output Coil |
| 15(0F hex) | Write multiple | Discrete Output Coils |
| 02(02 hex) | Read | Discrete Input Contacts |
| 04(04 hex) | Read | Analog Input Registers |
| 03(03 hex) | Read | Analog Output Holding Registers |
| 06(06 hex) | Write single | Analog Output Holding Register |
| 16(10 hex) | Write multiple | Analog Output Holding Registers |
5. 什么是CRC
CRC即循環(huán)冗余校驗(yàn)碼(Cyclic Redundancy check),是在每一個發(fā)送的信息后面加上的兩字節(jié),用于檢驗(yàn)發(fā)送和接受是否出錯。信息中的每一個字節(jié)都用于計算CRC。接受設(shè)備同時計算CRC,然后與發(fā)送方計算的CRC進(jìn)行比較,如果兩者不同,則產(chǎn)生錯誤。
6. Modbus發(fā)送指令和回應(yīng)的格式
Modbus發(fā)送指令和回應(yīng)的格式
| Discrete Output Coils 0xxxx | FC01 | FC05 | FC15 |
| Discrete Input Contacts 1xxxx | FC02 | NA | NA |
| Analog Input Registers 3xxxx | FC04 | NA | NA |
| Analog Output Holding Registers 4xxxx | FC03 | FC06 | FC16 |
注:FC表示Function Code
eg1.
數(shù)據(jù)請求:
11 01 0013 0025 0E84
11: 從機(jī)地址 (0x11 = 17 )
01: 功能碼01(讀線圈狀態(tài))
0013: 線圈首地址(0x0013=19,+1偏移量=#20線圈)
0025: 要讀的線圈數(shù) (0x25 = 37, 20~56 )
0E84: CRC校驗(yàn)和
回應(yīng)
11 01 05 CD6BB20E1B 45E6
11: 從機(jī)地址 (0x11 = 17 )
01: 功能碼01(讀線圈狀態(tài))
05:后面的字節(jié)數(shù)(37/8=5字節(jié))
CD:線圈27 - 20 (1100 1101)
6B: 線圈35 - 28 (0110 1011)
B2: 線圈43 - 36 (1011 0010)
0E: 線圈51 - 44 (0000 1110)
1B: 3空格和線圈56 - 52 (0001 1011)
45E6: CRC校驗(yàn)和
其他例子與此類似,不再贅述。
參考資料:simplyModbus
轉(zhuǎn)載于:https://www.cnblogs.com/zhengkang/p/4891131.html
總結(jié)
- 上一篇: 看了几期综艺,为什么感觉angelaba
- 下一篇: poj 3678 Katu Puzzle