有關MODBUS RTU通訊

MODBUS是一個通訊協議。相當於我們說普通話還是用方言來表達我們的意思 。它是在RS485硬體基礎上實現的。RS485就相當於我們的嗓子,一個發聲器官。至於你用這個嗓子發出什麼聲音,隨你高興。當然如果每個人都按自己的愛好去發音,那就沒法交流了。所以各種協議應運而生,就是給大家建議一個標準的發音用來能夠相互交流。MODBUS協議是其中一個,還有USS(西門子主張的標準),DP通訊等等。只是MODBUS協議簡單明瞭,通用性更強相容性更好,被廣泛接受了。他就成為串列埠通訊應用最廣泛的協議。到現在幾乎沒有那個儀表不支援這個通訊協議的。

這個協議是一個主從通訊協議。一個系統內只允許有一個主站。相當於一個公司只能有一個領導。除了這個領導以外任何其它人都不能主動發出任何訊息,只能被動地接受來自領導的命令或詢問。也就是說領導點名問你了你才能說話。否則你就夾著尾巴做人吧!

MODBUS通訊的基本幀組成,有一個固定的模式,如下:

站號(BYTE) 功能碼(BYTE) 資料(N個BYTE) CRC校驗(2個BYTE)

但我們的填寫SMART讀寫功能塊MSG的時候是沒有填寫功能碼的,這是為什麼?其實最終生成幀,發到總線上的時候是有的。只是他在MSG這個塊內自動生成了。它是根據MSG功能塊的一個管腳Addr填寫不同的值來決定用那個功能碼的。對照如下:

0xxxxx 對應的功能碼是01H,代表要讀取從站的輸出線圈的狀態。

1xxxxx 對應的功能碼是02H,代表要讀取從站的輸入開關量的狀態。

等等,不一一列舉了,網上關於這方面的文章很多。需要注意的是,這個協議的本質是自由口協議。每個裝置對於這些功能碼不一定支援的,在實際工程中要注意看裝置的資料。最常見的就是有些裝置是不支援寫多個數據的,也就是功能碼16H,這個時候你要給從站寫資料就要注意,資料長度只能是1,那怕你要寫10個數據也要一個一個MSG功能塊去呼叫,而每次寫的資料長度只能是1。當然SMART系統的PLC裡寫這個MSG庫的工程師也考慮到這個問題了,所以在它的高階引數裡有一個引數,可以強制使用06H這個功能碼也對從站進行寫入操作。

感謝各位的關注和支援!也非常榮幸和你的交流討論技術問題!