-
您的位置:
- 網(wǎng)站首頁
- > 物聯(lián)百科
- > 技術(shù)問答
您的位置:
Modbus 通過多條線在設(shè)備之間傳輸數(shù)據(jù),其中最簡單的設(shè)置是使用串行電纜連接主機(jī)和從機(jī)。數(shù)據(jù)以 0 或 1 的字符串傳輸,一個(gè)數(shù)字就是一個(gè)比特。0代表正電壓,而1代表負(fù)電壓。比特?cái)?shù)據(jù)傳輸速度非常快,常見的傳輸速度為9600波特(即9600 bits/s)。
信息存儲(chǔ)在從站的四個(gè)不同表中。兩個(gè)表存儲(chǔ)數(shù)字量,稱為線圈;另外兩個(gè)表存儲(chǔ)模擬量,稱為寄存器。對(duì)于線圈和寄存器,一個(gè)是只讀的,一個(gè)是可讀寫的。每個(gè)表可以存儲(chǔ) 9999 個(gè)值。線圈為一位,地址為0000~270E;寄存器為一個(gè)字(16 位,2 字節(jié)),地址也是從 0000 到 270E。
線圈/寄存器編號(hào) | 數(shù)據(jù)地址 | 類型 | 表名 |
1-9999 | 0000 到 270E | 讀寫 | 離散輸出線圈 |
10001-19999 | 0000 到 270E | 只讀 | 離散輸入觸點(diǎn) |
30001-39999 | 0000 到 270E | 只讀 | 模擬輸入寄存器 |
40001-49999 | 0000 到 270E | 讀寫 | 模擬輸出保持寄存器 |
Coil/Register 的數(shù)量可以看作是地址的名稱,它們不會(huì)出現(xiàn)在實(shí)際發(fā)送的消息中。數(shù)據(jù)地址在實(shí)際發(fā)送的消息中。
比如第一個(gè)Holding Register的編號(hào)是40001,它的數(shù)據(jù)地址是0000,這兩個(gè)編號(hào)的區(qū)別是因?yàn)槠屏俊?/span>
在網(wǎng)絡(luò)中,每個(gè)從機(jī)都被分配了一個(gè)唯一的設(shè)備地址,范圍從 1 到 247。當(dāng)主機(jī)請(qǐng)求數(shù)據(jù)時(shí),發(fā)送的消息的第一個(gè)字節(jié)是從機(jī)地址。這樣,從機(jī)接收到第一個(gè)字節(jié)后,就知道是否需要忽略后續(xù)信息。
主機(jī)發(fā)送的第二個(gè)字節(jié)是功能碼。該功能碼告訴slave需要訪問哪個(gè)表,是往表中寫數(shù)據(jù)還是從表中讀數(shù)據(jù)。
有趣的代碼 | 行動(dòng) | 表名 |
01(01 十六進(jìn)制) | 讀 | 離散輸出線圈 |
05(05 六角) | 寫單 | 離散輸出線圈 |
15(0F 十六進(jìn)制) | 寫多個(gè) | 離散輸出線圈 |
02(02 十六進(jìn)制) | 讀 | 離散輸入觸點(diǎn) |
04(04 六角) | 讀 | 模擬輸入寄存器 |
03(03 六角) | 讀 | 模擬輸出保持寄存器 |
06(06 六角) | 寫單 | 模擬輸出保持寄存器 |
16(10 六角) | 寫多個(gè) | 模擬輸出保持寄存器 |
CRC代表Cyclic Redundancy check,就是在每條消息發(fā)送后增加兩個(gè)字節(jié),以檢查發(fā)送或接收是否有錯(cuò)誤。消息的每個(gè)字節(jié)都用于計(jì)算 CRC。接收器在接收數(shù)據(jù)時(shí)計(jì)算 CRC。然后,它將計(jì)算結(jié)果與發(fā)送方計(jì)算的 CRC 進(jìn)行比較。如果兩者不同,則會(huì)發(fā)生錯(cuò)誤。
數(shù)據(jù)地址 | 讀 | 寫單 | 寫多個(gè) |
離散輸出線圈 0xxxx | FC01 | FC05 | FC15 |
離散輸入觸點(diǎn) 1xxxx | FC02 | 不適用 | 不適用 |
模擬輸入寄存器 3xxxx | FC04 | 不適用 | 不適用 |
模擬輸出保持寄存器 4xxxx | FC03 | FC06 | FC16 |
注:FC 代表功能代碼
數(shù)據(jù)請(qǐng)求:
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
數(shù)據(jù)響應(yīng)
11 01 05 CD6BB20E1B 45E6
11:從地址(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個(gè)空格和線圈56-52 (0001 1011)
45E6:CRC