通信Modbus是如何工作的?
學(xué)電子需要掌握一些常見(jiàn)的通信協(xié)議,Modbus就屬其中一種,Modbus在現實(shí)生活中應用非常廣泛,很多工業(yè)電子設備的系統中基本都有它的存在。
今天針對初學(xué)描述關(guān)于一些Modbus常見(jiàn)的問(wèn)題。
什么是Modbus?
Modbus 是由 Modicon 公司(現施耐德),于1979年針對 PLC 開(kāi)發(fā)的一種通信協(xié)議,當時(shí)主要用于工業(yè)電子設備之間聯(lián)網(wǎng)通信。

Modbus 是一種應用層通信息協(xié)議,位于 OSI(開(kāi)放式系統互聯(lián)通信)模型的第 7 層。它在不同類(lèi)型的總線(xiàn)或網(wǎng)絡(luò )上連接的設備之間提供客戶(hù)端/服務(wù)器通信。
Modbus 是由一個(gè) Master(主機) 和最多 247 個(gè) Slave(從機)組成的通信網(wǎng)絡(luò )。
更多關(guān)于Modbus的介紹,可以參看:
https://modbus.org/
Modbus干什么用?
Modbus 是一種開(kāi)放的通信協(xié)議,你可以免費將其應用到你的設備中,而無(wú)需支付版稅。
Modbus 是一種廣泛使用的標準通信協(xié)議,你和其他廠(chǎng)家的設備,如果都遵循 Modbus 標準協(xié)議,就可以進(jìn)行通信傳輸數據。
Modbus是如何工作的?
Modbus 通常底層基于 UART 串口485進(jìn)行通信,最簡(jiǎn)單的一個(gè)主設備和一個(gè)從設備通信,就是通過(guò)串口Tx和Rx進(jìn)行收發(fā)數據。

底層串口的通信,就是大家熟悉的“0”“1”通信,在這個(gè)基礎上,添加 Modbus 通信協(xié)議,方便解析協(xié)議和多設備組網(wǎng)。
一主多從,在從設備中都有唯一的地址,通過(guò)解析從機地址,主機就能和對應的從機進(jìn)行通信。
什么是Modbus ASCII?
Modbus ASCII是Modbus協(xié)議中的一種傳輸方式,對應的還有另外一種
Modbus RTU傳輸方式。
施耐德電氣(Schneider Electric)收購了Modicon公司之后,有推出了Modbus TCP協(xié)議。

協(xié)議格式:

什么是從機地址?
從機地址(或從站ID),就是為每一個(gè)從設備分配的唯一地址,方便主機建立通信時(shí)進(jìn)行識別,從機地址在出廠(chǎng)時(shí)就會(huì )設置好。
什么是功能碼?
功能碼是 Modbus 通信協(xié)議中的一項,主機發(fā)送的第二個(gè)字節就是功能碼。就是你看到的讀寫(xiě)線(xiàn)圈寄存器那些內容。
下面貼幾個(gè)常見(jiàn)功能碼:

什么是CRC?
正規的通信協(xié)議基本都有校驗碼,目的就是為了確保傳輸的數據沒(méi)有錯誤。像校驗和、CRC校驗等是嵌入式設備通信協(xié)議常見(jiàn)的校驗碼。
Modbus使用CRC循環(huán)冗余校驗,其校驗信息位于消息末尾的兩個(gè)字節。
這里推薦閱讀文章《自定義串口通信協(xié)議》中文末校驗相關(guān)的內容。
參考:
http://www.simplymodbus.ca/crc.xls
什么是字/字節排序?
字節排序就是先存儲(傳輸)高字節,還是先傳輸低字節。比如:0x1234,它是兩個(gè)字節,傳輸時(shí)通常是分0x12和0x34傳輸。
在通信中,會(huì )牽涉到一個(gè)字節排序的問(wèn)題,但在Modbus 規范中并未準確定義數據在寄存器中的存儲方式。
Modbus標準協(xié)議沒(méi)有具體約定,就需要開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程中人為約定先傳輸高字節,還是低字節。
最后
Modbus是一種應用非常廣泛的標準通信協(xié)議,工業(yè)自動(dòng)化、電子、嵌入式等這些專(zhuān)業(yè)的同學(xué),建議都抽時(shí)間學(xué)習一下。
由于時(shí)間有限,本文只介紹了一些基礎內容,更多介紹和協(xié)議具體內容,請到官網(wǎng)深入了解。
https://modbus.org/
評論