Pages - Menu

2016年6月27日 星期一

Modbus RTU通訊(1)

前陣子都是寫單純的rs232或rs485的資料讀取(丟個指令,然後收資料)
,或I/O控制,
modbus的通訊,一年多前寫過,然後最近測的時候,完全忘光。
最後終於弄出來,紀錄一下…方便 抄寫 記憶
基本的序列埠開啟關閉就不說了,
如果有不清楚的請自行google。
廠商丟給我的格式長這付德性
發送 01 03 01 02 00 02 64 37
會得到回傳的值。 01 03 04 ….2C 6A 1A
於是推斷,他要傳的應該是16進位(Hex)
但一般寫modbus的話使用 SerialPort.Write(Byte(),int32,int32)
傳送byte的資料過去,你也只能傳byte 陣列。
看廠商的發送格式,怎樣看都不是字串吧..
如果是字串的話,例如:泓格(icpdas)的機器,#01
回到本題,要丟byte的話,則要注意byte的格式宣告 Byte Data Type
官方文件寫明了,『存放不帶正負號的 8 位元 (1 位元組) 整數,範圍從 0 到 255。』
所以,這個只能存數字。但16進位怎麼辦呢?當然是…轉成10進位
測試時期當然用小算盤先算一算。會得到下面這樣。


Dim byttrs(7) As Byte byttrs(0) = 1   'device id
byttrs(1) = 3  'function code
byttrs(2) = 1  'start add
byttrs(3) = 2  'start add
byttrs(4) = 0  'length
byttrs(5) = 2   'length
byttrs(6) = 100
byttrs(7) = 55

如要直接使用程式計算,請參考 Hex轉換
最後,寫入,收工。
SerialPort3.Write(byttrs, 0, byttrs.Length)
下次再來寫接收資料..


沒有留言:

張貼留言