Modbus協(xié)議概念最詳細(xì)介紹
★一文認(rèn)識Modbus協(xié)議;
”
1 什么是Modbus?
2 主從模式
3 協(xié)議的分類
3.1 Modbus ASCII
3.2 Modbus RTU
3.3 Modbus TCP
3.4 Modbus Plus
4 libmodbus
5 freemodbus
6 總結(jié)
1 什么是Modbus?
Modbus是Modicon(施耐德)公司于1979年開發(fā)的串行通信協(xié)議。它最初設(shè)計用于公司的可編程邏輯控制器(PLC)。Modbus是一種開放式協(xié)議,支持使用RS232/RS485/RS422協(xié)議的串行設(shè)備,同時還支持調(diào)制解調(diào)器。它的簡單性以及制造商可以免費將其納入其產(chǎn)品的事實使其成為連接工業(yè)電子設(shè)備的最流行的方法。Modbus比其他通信協(xié)議使用的更廣泛的主要原因有以下幾點:
公開發(fā)表并且無著作權(quán)要求; 易于部署和維護(hù); 對供應(yīng)商來說,修改移動本地的比特或字節(jié)沒有很多限制;
Modbus通過設(shè)備之間的串行線進(jìn)行數(shù)據(jù)傳輸。最簡單的設(shè)置是使用一根串行電纜連接兩個設(shè)備(主設(shè)備和從設(shè)備)上的串行端口。數(shù)據(jù)以稱為比特的1和0的序列發(fā)送。每個位都作為電壓發(fā)送。0被發(fā)送為正電壓,1被發(fā)送為負(fù)電壓。如下圖所示;

2 主從模式
Modbus解決了通過串行線路在電子設(shè)備之間發(fā)送信息的問題。該協(xié)議在遵循該協(xié)議的體系結(jié)構(gòu)中實現(xiàn)主/從模型。Modbus主站(Master)負(fù)責(zé)從其他設(shè)備(Slave)請求信息。標(biāo)準(zhǔn)Modbus網(wǎng)絡(luò)中有一個Modbus主站。具體如下圖所示;

主設(shè)備向從設(shè)備請求信息,最多大約可達(dá)到240個 . 每個從設(shè)備都有自己唯一的從設(shè)備地址標(biāo)識(Slave Address)。除了從從設(shè)備請求信息之外,主設(shè)備還可以寫入從設(shè)備的內(nèi)部寄存器。
3 協(xié)議的分類
Modbus的應(yīng)用十分廣泛,特別是在工業(yè)控制領(lǐng)域,具體如下圖所示;

我們可以看到最常用Modbus協(xié)議總共有以下四種:Modbus ASCII, Modbus RTU, Modbus Plus,Modbus TCP;
具體如下圖所示;
3.1 Modbus ASCII
當(dāng)設(shè)備設(shè)置為使用ASCII(美國信息交換標(biāo)準(zhǔn)代碼)模式在MODBUS串行線上進(jìn)行通信時,消息中的每個8位字節(jié)將作為兩個ASCII 4位字符發(fā)送。當(dāng)物理通信鏈路或設(shè)備的功能不允許符合RTU計時器管理要求時,使用此模式。所以此模式的效率不如RTU,因為每個字節(jié)需要兩個字符。示例:字節(jié)0x7D編碼為兩個字符:0x35和0x42(在ASCII表中為0x37 ='7',而0x44 ='D')。
3.2 Modbus RTU
Modbus RTU是一種緊湊的,采用二進(jìn)制表示數(shù)據(jù)的方式;因為使用二進(jìn)制編碼和CRC錯誤檢查的結(jié)合使得Modbus RTU適用于工業(yè)應(yīng)用,因為它比ASCII字符的替代方案更有效地傳輸。在Modbus RTU與ASCII之間進(jìn)行選擇時,如果考慮性能,則RTU是首選。
3.3 Modbus TCP
Modbus TCP 是在TCP/IP網(wǎng)絡(luò)上運行的Modbus的實現(xiàn),旨在允許Modbus ASCII / RTU協(xié)議在基于TCP / IP的網(wǎng)絡(luò)上傳輸。Modbus / TCP將Modbus消息嵌入TCP / IP幀內(nèi)。盡管實現(xiàn)起來非常簡單,但是與網(wǎng)絡(luò)相關(guān)的特性增加了一些挑戰(zhàn)。例如,由于Modbus主機(jī)期望并要求在一定時間范圍內(nèi)對其輪詢做出響應(yīng),因此必須考慮TCP / IP網(wǎng)絡(luò)的不確定性(和其他方面)。Modbus ASCII和Modbus TCP之間的主要區(qū)別在于,Modbus ASCII所需的LRC錯誤檢查由IP層執(zhí)行。
★對于以上
”TCP/RTU/ASCII的這三種通信協(xié)議在數(shù)據(jù)模型和功能調(diào)用上都是相同的,只有封裝方式是不同的。
3.4 Modbus Plus
Modbus有一個擴(kuò)展版本Modbus Plus(Modbus+或者M(jìn)B+),不過此協(xié)議是Modicon專有的,和Modbus不同。它需要一個專門的協(xié)處理器來處理類似HDLC的高速令牌旋轉(zhuǎn)。它使用1Mbit/s的雙絞線,并且每個節(jié)點都有轉(zhuǎn)換隔離設(shè)備,是一種采用轉(zhuǎn)換/邊緣觸發(fā)而不是電壓/水平觸發(fā)的設(shè)備。連接Modbus Plus到計算機(jī)需要特別的接口,通常是支持ISA(SA85),PCI或者PCMCIA總線的板卡。[^1]
4 libmodbus
libmodbus是一個多平臺的modbus開源庫,適用于Linux,Mac OS X,F(xiàn)reeBSD,QNX和Win32等操作系統(tǒng);可以根據(jù)Modbus協(xié)議發(fā)送和接收數(shù)據(jù)。支持RTU(串行)和TCP(以太網(wǎng))通信。官網(wǎng):libmodbus.orgGithub:github.com/stephane/libmodbus/
5 freemodbus
FreeModbus是嵌入式系統(tǒng)的Modbus ASCII / RTU和Modbus TCP實現(xiàn)。它提供了Modbus應(yīng)用協(xié)議v1.1a的實現(xiàn), ? 并支持Modbus over Serial Line Specification 1.0中定義的RTU / ASCII傳輸模式 ?。從版本0.7開始,F(xiàn)reeModbus也支持Modbus / TCP。0.9版為使用lwIP ?TCP / IP堆棧的嵌入式系統(tǒng)添加了第一個Modbus / TCP端口 ?。官網(wǎng):https://www.embedded-experts.atGithub:https://github.com/cwalter-at/freemodbus
FreeModbus是一款開源的Modbus協(xié)議棧,但是只有從機(jī)開源,主機(jī)源碼是需要收費的。同時網(wǎng)上也沒有發(fā)現(xiàn)比較好的開源的Modbus主機(jī)協(xié)議棧,所以才開發(fā)這款支持主機(jī)模式的FreeModbus協(xié)議棧。本版FreeModbus版本號更改為V1.6,特性如下:
新增加的主機(jī)源碼與原有從機(jī)的風(fēng)格及接口保持一致; 支持主機(jī)與從機(jī)在同一協(xié)議棧運行; 支持實時操作系統(tǒng)及裸機(jī)移植; 為應(yīng)用提供多種請求模式,用戶可以選擇阻塞還是非阻塞模式,自定義超時時間等,方便應(yīng)用層靈活調(diào)用; 支持所有常用的Modbus方法。
Github:https://github.com/armink/FreeModbus_Slave-Master-RTT-STM32
6 總結(jié)
本文簡單介紹了modbus協(xié)議,以及modbus的種類以及相互之間的區(qū)別,目前沒有深入到各個協(xié)議的細(xì)節(jié),只做了一個概覽。筆者能力和水平有限,文中難免存在錯誤和紕漏,請大佬不吝賜教。

