MODBUS通讯协议详解(基于485)
參考:靈育科技Modbus課程總結
作者:Naunyang
時間:2020-11-23 13:51:58
網址:https://blog.csdn.net/Naunyang/article/details/108740456?spm=1001.2014.3001.5502
參考:MODBUS用于單片機通訊
作者:hillchina
發布時間:2017-02-22 08:25:11
網址:https://www.bilibili.com/video/BV1Bx411y7N5
參考:Modbus協議解析(Modbus-RTU、Modbus-TCP、Modbus-PLUS)
作者:panda@Code 發布時間:2019-07-01 23:44:03
網址:https://blog.csdn.net/panda5_csdn/article/details/94332166?spm=1001.2014.3001.5502
完整視頻及資料下載鏈接: https://pan.baidu.com/s/1AZQKnipbGF63UW2a5TdFZA
提取碼: wzy7
目錄
- 什么是Modbus
- 通訊的硬件層協議機制,主從模式的建立
- 硬件層半雙工通訊方式的實現
- 基于485通訊(硬件層協議)的MODBUS協議(軟件層協議),確定主機尋地址幀格式
- RTU(2進制方式)的機制及數據傳輸實現方式
- ASC(字符方式)的機制及數據傳輸實現方式
- MODBUS從設備回應數據包格式
- MODBUS從機協議實現
- STM32編程實現一個MODBUS從機協議
- MODBUS通訊的硬件層及底層通訊準備
什么是Modbus
顧名思義,他是一個bus,即總線協議,如果你接觸到這種協議,相信你所處的行業很可能是工業方面或者你的產品用于工業。
Modbus是一種串行通信協議,是Modicon公司(現在的施耐德電氣 Schneider Electric)于1979年為使用可編程邏輯控制器(PLC)通信而發表。Modbus已經成為工業領域通信協議的業界標準(De facto),并且現在是工業電子設備之間常用的連接方式。
通訊的硬件層協議機制,主從模式的建立
協議分類:硬件層協議、軟件層協議
硬件層:RS232、RS485 、CAN等 。主要解決硬件傳輸問題,解決如何傳輸0與1的問題(物理上以什么樣的電平、多少伏電壓傳輸,儀表可以測到這個電壓,還有以雙絞線還是什么線傳輸)。交通道路
軟件層協議:傳輸的目的,為什么要傳,傳數據要干啥。Modbus、TCP/IP……交通規則
-
單工模式:只能從一方發送數據到另一方,而不能反過來發。
-
半雙工模式:可以A發送給B,也可以B發送給A,但是不能同時發。
-
主從模式:
(1)在這樣一個系統中,只能有一個主機,其他的都是從機。
(2)系統中的從機都不能主動發信息給主機。
硬件層半雙工通訊方式的實現
主從模式:
(3)系統上電之后,默認狀態,主機,從機都是在監聽狀態;
(4)主機與從機之間的通信,只能由主機發起;
主機要建立起一次通信,要滿足以下要求:
(1)主機要將自己置為發送狀態;
(2)主機要按照預先約定好的格式(比如MODBUS協議格式)發送尋址數據幀,發完之后立刻把自己轉回接收狀態;
(3)尋址完成之后,目標從機要返回給我消息,才能算這次通信成功;
基于485通訊(硬件層協議)的MODBUS協議(軟件層協議),確定主機尋地址幀格式
1、MODBUS是主從模式:
整個系統只能有一個主機,每個從機都有唯一的地址(0-247),0號地址是廣播地址,發送給所有的從機。0號地址尋址,所有從機不回應(相互會沖突嘛);
2、MODBUS主機尋址幀格式:
- (1)RTU方式:也叫16進制方式,或者2進制方式
比如:0x03: 0000 0011 - (2)ASC方式:字符方式(方便調試)
比如:0x03–> 轉換成字符’0’與字符’3’再發送出去;那么就會發
字符’0’(ASCII碼是0x30)的2進制0011 0000 + 字符’3’(ASCII碼0x33)的2進制 0011 0011,最終發送的就是:0011 0000 0011 0011
ASC方式最大的優勢就是方便調試(可打印),整個線路上傳輸的都是ASCII碼,都是可打印字符,可以清楚的知道這個線路上傳輸的是什么,因為ASCII碼中可打印字符是32-126,其他顯示亂碼。
RTU(2進制方式)的機制及數據傳輸實現方式
ASC方式數據幀格式:
從機地址 + 功能碼 + 數據 + 16位CRC校驗
不同的功能碼對應的緊接于功能碼之后的數據是不同的。
比如:03功能碼,是要讀取從機的數據。那么從機要知道從他的存儲器的哪里(哪個地址)開始讀,讀到哪里結束,讀幾個地址長度。
還有一個問題就是:從機怎么知道主機發送完了?
從機以接收數據停止之后開始計時,達到3.5個字節以上的時間就認為主機的尋址幀完成,并開始處理。
3.5個字節轉化成時間計算:
ASC(字符方式)的機制及數據傳輸實現方式
ASC方式數據幀格式:
起始位‘ :’ + 地址(2個字節) + 功能碼(2個字節)+ 數據(1、2…n)+校驗位(LRC校驗)
這些地址、還有功能碼、還有數據為什么是兩個字節呢?
因為是ASC方式,字符的方式。比如:0x03,要發送就要變成:字符’0’ 與’3’
字符’0’ (0x30)的二進制0011 0000是與’3’(0x33)的二進制是:0011 0011就成2個字節了。
這種方式非常冗長,工作少用。
校驗位是從地址開始到數據位的最后結束。
校驗位的計算:把所有的值加起來的和對256取余,然后取反加1 ,就是校驗位。
MODBUS從設備回應數據包格式
(1)回應的數據包與主機查詢的數據包格式一致;
(2)正常回應是,功能碼與主機發送時的功能碼一致(1-127);
(3)異常的回應時,功能碼要在收到的功能碼的基礎上加128
MODBUS從機協議實現
(1)硬件上具備串口(485接口)
(2)硬件上需要一個精確的毫秒級別的定時器
STM32編程實現一個MODBUS從機協議
MODBUS通訊的硬件層及底層通訊準備
總結
以上是生活随笔為你收集整理的MODBUS通讯协议详解(基于485)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 秒跳转html代码,5秒定时跳转指定网页
- 下一篇: 3500份课后答案,很值得收藏,这里只介