組態王通過modbus與第三方設備通訊,如何實現字節或字的交換?

用戶4474642174


組態王軟件是工業自動化行業應用的界面軟件,主要面向現場應用適合現場工程人員、FAE等編程,內置常用的通訊模塊、常用的界面組件等。通過RS232接口、RS485接口和以太網口可以和其他設備完成數據通信。

Modbus協議主要有兩個版本RTU和TCP/IP,RTU可以通過RS485接口實現,TCP/IP可以通過以太網口實現,這兩種協議都是工控行業、自動化行業常用的。下面以RS485接口、Modbu-RTU來介紹數據通信的過程。

Modub-RTU協議的具體內容

該協議是主從方式的通訊方式,有一個主機可以掛接多個從機,每個從機具有唯一的地址用來辨識身份,並通過不通的功能碼來實現所要讀取/寫入的內容。作為簡單的應用,主要涉及到0x03讀保持寄存器功能碼、0x06預置單個寄存器功能碼、0x10預置多個寄存器功能碼等。

讀保持寄存器功能碼0x03

當主機發送03功能碼時,表明主要想要獲取從機某個寄存器裡的內容,一條完成的命令包括主機發送的數據和從機回覆的數據,分別舉例如下:

主機發送: 01 03 00 32 00 02 xx xx

主機回覆: 01 03 04 a5 d4 1812 xx xx

數據和字節含義如下圖所示。

主機所發送的命令表示,想要讀取1號從機從0x32開始的2個寄存器的內容,而從機回覆0x32和0x33寄存器內的數據,總共4個字節。最後兩個字節是校驗碼。

預置單個寄存器功能碼0x06

06功能碼是主機用來向從機的某個寄存器寫數據的,一次智能操作一個寄存器。主機所發送的數據舉例如下:

主機發送:01 06 00 32 12 32 xx xx

主機發送的數據和字節含義如下圖所示。

該功能碼,從機所回覆的數據和主機下發的數據是一致的。該條指令的含義為:主機想給1號從機的0x32寄存器中寫入0x1232數據,最後所跟的是校驗碼。

預置多個寄存器功能碼0x10

16功能碼也是寫寄存器但是與06所不同的是,該功能碼可以連續寫多個寄存器,主機下發的數據結構為:地址、功能碼、寄存器起始地址、寄存器個數、要寫入數據的字節數、數據、校驗碼等。從機回覆的數據格式為:地址、功能碼、寄存器起始地址、寄存器個數、校驗碼等。

數據格式舉例和字節含義如下圖所示。

所表示的含義是,從0x0034開始連續寫入四個字節的數據到2個寄存器中,最後兩個字節是校驗碼。

以上三個功能碼都是非常常用的,除此之外,還有很多個功能碼,每個功能碼都代表不通的含義,以上數據都是需要編程來實現的。

以上就是這個問題的回答,感謝留言、評論、轉發。更多電子設計、硬件設計、單片機等內容請關注本頭條號:玩轉嵌入式。感謝大家。


分享到:


相關文章: