創作內容

18 GP

Modbus RTU Transmit - 以 Arduino 為例

作者:貓貓風 ฅ●ω●ฅ│2017-07-29 14:42:15│巴幣:36│人氣:8592
.














Modbus 主要分成兩種 Modbus  ASCii 跟 Modbus RTU

跟篇主要也是在寫 Modbus RTU ,不過是以傳輸功能為主

Modbus傳輸主要為1個Master對多個Slave,此時就用slave (通常是終端 Device)

的ID做識別,如果Master傳輸的ID對應到該Slave的ID,如果格式正確該Slave就會回應

因此在Modbus傳輸中,每個Slave都是被動的,不斷的在監聽是否有收到請求。

首先先講傳輸格式

Master發出 Query封包

Slave ID
  
Fuction
  
Register Addr
  
Request byte
  
CRC
  
01
  
03
  
00
  
00
  
00
  
02
  
C4
  
0B
  

Slave ID通常Device上或Datasheet中都會寫,有一些要自己設定

Fuction功能碼  列幾個常用的

01: 讀取當前 digital out status
02: 讀取當前 digital input status
03: 讀取當前 analog out status
04: 讀取當前 analog input status
05: 寫入單個  digital input value
06: 寫入單個  analog input value
15: 寫入多個  digital input value
16: 寫入多個  analog input value

不過實際上要怎麼用,還是要以 Datasheet 上規範的為主

Register Addr 站存器位置 這部分也是要參照Datasheet 上規範的位置來做存曲
每個區間存的數值都代表不同的意義

Request byte 要求的資料量:  這邊的1byte對應到Slave端回應的 1 word
例如 Master下 00 02  = 向Slave要求 2個word = request 4byte data

CRC 錯誤檢查碼 : 詳細的說明在這篇  Modbus RTU CRC


Slave端回應的封包

Slave  ID
  
Fuction
  
Data  byte
  
data
  
CRC
  
01
  
03
  
04
  
00
  
00
  
00
  
01
  
3B
  
F3
  

前兩Byte都是Echo Master端的訊息

Data byte : 此範例 Master要求 2 words的資料,因此Slave回 4byes

最後是 CRC


在舉一個例子 如果是 寫入 非讀取 Command   Slave端則會 Echo完整的封包內容

Master:
Slave ID
Fuction
Register Addr
Request byte
CRC
01
06
00
00
00
1E
09
C2

Slave:
Slave ID
Fuction
Register Addr
Request byte
CRC
01
06
00
00
00
1E
09
C2


最後如果是Master要求的封包是有問題的,Slave則會回應錯誤封包格式  佔5byte

例如:  

Master:
Slave ID
Fuction
Register Addr
Request byte
CRC
11
03 00 6B 00 03 76 87

如果要求的位置不合法 Slave則會回應如下
Slave ID
  
Fuction
  
Error Code
  
CRC
  
11
  
83
  
02
  
C1
  
34

如果反還是錯誤的封包,Fuction為 83

Error則對應下表,來得知是哪種類型的錯誤

Error Code
  
meaning
  
01
  
不支援的功能
  
02
  
不合法的地址
  
03
  
不合法的數值
  
04
  
Slave 設備失效
  
05
  
命令執行中
  
06
  
Slave忙碌中
  


以下為實際運行結果



首先進入選單會顯示目前要做的功能

輸入2 設定當前流量值為30,

前8byte為Master送出封包  後8byte為Slave返還封包(Echo master端封包)

故意把訊息拆成1個byte 1個byte 呈現方便觀察

最後顯示設定功訊息





接著 讀取當前設定的流量值,Slave返還後解析封包得到當前設定值為30



最後是測試送出不合法訊息



Slave端回應的function為 131 轉換為 16進制為83H 表示是錯誤訊息封包














引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3662059
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:涼涼風|arduino

留言共 9 篇留言

薯條控
<(_ _)>
真的覺得你好厲害喔
好像每天都可以發一篇技術文章..

07-29 14:52

貓貓風 ฅ●ω●ฅ
其實也沒有每天發啦 就心血來潮的時候會寫一下>< 07-29 14:53
貓貓風 ฅ●ω●ฅ
我還有很多不懂的地方 持續學習中 ~07-29 14:53
小希寶寶OuO
猛猛的!!

07-29 14:59

貓貓風 ฅ●ω●ฅ
桑Q 07-29 15:00
雪雪
完全看不懂呢~
不能參與討論,只能推推 (╥﹏╥)

07-29 15:03

貓貓風 ฅ●ω●ฅ
這比較偏網路程式 通訊協定07-29 15:06
Arthur
貓貓風就是厲害 [e35]

07-29 15:16

貓貓風 ฅ●ω●ฅ
[e12]07-29 15:19
小刀
好厲害歐~

07-29 18:56

貓貓風 ฅ●ω●ฅ
[e30]07-29 19:04
珀伽索斯(Ama)
封包的話,這次就有點難了,那我就要好好研究一下

07-29 22:56

貓貓風 ฅ●ω●ฅ
好的~ 有問題在問我吧07-29 22:58
肌肉隊長
求程式碼~~~

12-30 16:23

胡筱熊
請問可以跟您參考程式碼嗎?

02-17 16:27

黃帥帥
請問能否提供程式碼學習,謝謝您

04-01 15:32

我要留言提醒:您尚未登入,請先登入再留言

18喜歡★s1234567 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:C# Modbus RT... 後一篇:knapsack 背包問...

追蹤私訊切換新版閱覽

作品資料夾

hyzgdivina喜歡虹咲的LLer
我的小屋裡有很多又香又甜的Hoenn繪師虹咲漫畫翻譯喔!歡迎LoveLiver來我的小屋裡坐坐~看更多我要大聲說1小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】