今天想和大家分享,如何從無到有寫一個Modbus TCP client端,在網路上找的資料也是少之又少,多半都會找到NModbus使用教學,但如果你想要自己寫一個Modbus不想使用別人寫好的可以參考一下我的

code, 筆者的code只是純粹分享,如有不完整的地方請多多包涵。不過大致上我都測試過了,應該是沒問題的。

我習慣的寫法會將libaray與主程式分開,所以我會先建立一個類別庫將需要叫用的類別都寫在此處。

那...開始吧!!

第一個我們先建立一個連線需要用的class

於此類別的建構子中加入以下

modbus.PNG

使用Timer來當作測試連線的心跳

heartbeats.PNG

此方法為TCP接收訊息處

received.PNG

這樣就會連線囉,但是透過此通訊方式只是完成TCP的部分,傳送訊息時要有Modbus的格式來傳送才會是ModbusTCP

點此下載 Modbus Spec

Modbus protocol總共有4總資料型態

mod.PNG

 

 

注意到只有要有input 都是指說其形態是唯獨,沒有的就是可以讀也可以寫。

以下為Modbus開頭MBAP

MBAP.PNG

以下為我製作MBAP的方式(我知道圖片中藍色的藍打錯 懶得改圖就將就囉~)

 

Header.PNG

再來就是將command與header結合起來組成一個byte陣列再發送至TCP write stream (以下是我自己組合的方式)

sendmsg.PNG

這樣基本上大致上的功能就完成了...

下一篇我會再接續講解如何建立常用的方法,將其方法作為command

 

創作者介紹
創作者 我叫小信信的部落格 的頭像
我叫小信信

我叫小信信的部落格

我叫小信信 發表在 痞客邦 留言(0) 人氣( 7218 )