Modbus那些事


Modbus在江湖上已經有三十多年的歷史了,最先由莫迪康(Modicon)1979年發明,因其簡單實用,且易開發,迅速贏得了工程師的喜好,已應用到成千上萬的控制器中,目前也成爲我國國家標準工業通訊協議中的重要一員。微信

記得第一次接觸Modbus是在08,09年間,那時正值新能源發電大力興起之時,爲了響應國家節能減排的號召,一時間,大量的單位開始研發光伏發電,Modbus也成了光伏逆變器必配的一種通信協議。當第一次面對開發這個協議軟件的時候,我是手足無措,由於不懂,因此無知,因而就晚上大量查閱網上資料,白天寫程序調試,最後終於成功將Modbus協議引入逆變器。自此,對Modbus有了初步的認識。其實軟件的流程圖就在協議的文檔中,只要紮實理解了協議的描述,就能開發出Modbus通信軟件。網絡

Modbus具備如下幾個特色:spa

1)標準、開放,用戶能夠免費、放心地使用Modbus協議,目前,支持Modbus的廠家超過幾百家,支持Modbus的產品超過幾百種。.net

2Modbus能夠支持多種電氣接口,如RS-232RS422RS-485等,還能夠在各類介質上傳送,如雙絞線、光纖、無線等。調試

3Modbus的幀格式簡單、緊湊,通俗易懂。用戶使用容易,廠商開發簡單。接口

MODBUS 是一個請求/應答協議,而且提供功能碼規定的服務。經常使用的有圖片

Modbus ASCII開發

Modbus RTU文檔

Modbus TCP/IPget

RTU是必需要支持的,其他可選,Modbus RTU 最大爲 256 字節

若是你留意就會發現,其實市場上的產品,好多並非徹底遵照Modbus標準,有的硬件工程師對電氣標準也不是很清楚,其實Modbus對電纜規格,長度,以及波特率,終端電阻,接地,鏈接器,通訊狀態的LED指示,都有電氣標準,我一直有一個觀點,若是有既有的標準,那麼你的開發就應該建議按照標準來執行。

有興趣的童鞋能夠看看你接觸到的是否按照了標準來執行,舉個簡單的例子,標準中對LED指示的要求。


RTU模式的軟件實現上,

默認的通訊配置是波特率9600bps8位數據位,偶校驗,一位中止位。

奇校驗和無校驗是可選的。系統必須支持默認的配置,而且對配置錯誤有異常管理。

由發送設備將 Modbus報文構造爲帶有已知起始和結束標記的幀。這使設備能夠在報文的開始接收新幀,而且知道什麼時候報文結束。不完整的報文必須可以被檢測到而錯誤標誌必須做爲結果被設置。在RTU模式,報文幀由時長至少爲 3.5 個字符時間的空閒間隔

在軟件的實現上,主要是對幀開始,幀結束的中斷,串口接收中斷的實現,在高波特率的狀況下,必須嚴格按照標準的要求實現幀檢測,協議文檔中都有狀態機和流程圖供開發工程師參考,每種波特率,對發送方,要求其精度必須高於1%,而對接收方,必須容許2%偏差。Modbus報文幀格式以下:


另一點須要注意的就是Modbus是大端模式,就是好比一個16位的電流有效值,是先發送高字節,在發送低字節,但在CRC校驗域切記是先發送低字節,在發送高字節,每一個字節是先發送低位在發送高位,以下圖所示。


對異常診斷的管理是每個通信協議都要求的,常常會有工程師只注意實現正常通訊的功能,對異常的管理不重視,這樣在通訊異常的時候,就不便主機的診斷。


本文部分圖片來自網絡,圖片版權歸原做者全部



本文分享自微信公衆號 - 嵌入式程序猿(InterruptISR)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索