Modbus 總結學習
Modbus 是一個基于 RS485 的工業(yè)標準通訊協議,廣泛的應用在工業(yè)控制中,主要的 應用還是在 PLC 等等設備中。詳細的概念這里就不做說明,只對使用進行詳細說明
1、modbus 的一些特點
(1)、在同一個 modbus 網絡中,只能有 1 臺主機,多臺從機。
(2)、modbus 從機才需要地址,主機沒有地址,不需要初始化地址
(3)、modbus 有的通訊都是由主機發(fā)起的,也就是說從機不可能主動發(fā)數據給從機。modbus 是主從的,只能主問從答,從機不能主動上送。
2、modbus 有兩種通信方式:
(1)、RTU 的方式 --- 這個是我們的使用的方式,下面說有的介紹都是基于 RTU 這種方式 (2)、ASCLL 碼的方式 --- 他的數據字節(jié)是 7bit 位,我們普通的 mcu 不太好實現。另外市場上 用的比較少。所以這種方式,這里不做研究
二、RTU 模式
1、RTU 模式的數據幀格式說明
(1)、起始位和結束符是一樣的
(2)、T1-T2-T3-T4 代表的意思?
這個問題是針對于 modbus rtu 協議的,這是 modbus rtu 協議的數據格式。其中 T1-T2-T3-T4 表示 4 個字節(jié)的通訊間隔。在 modbus rtu 協議中要求每個數據包的前后有至少傳輸 3.5 個字 節(jié)的時間間隔,用來間隔多條數據
(3)、CRC16 校驗參照別人現成的就可以了,不詳細深究
(4)、設備地址:這個好理解。Modbus 主機的地址不需要設定,從機的地址可設定為 1~247。
(5)、功能代碼:參見下面的詳細說明
(6)、數據:參見下面詳細說明
2、RTU模式下如何判斷數據的開始
三、功能代碼說明
1、常用功能代碼
(1)、03 功能代碼。這個功能代碼就是讀取指定的寄存器的數據。
==>其實說白了,這里面的寄存器是自己所定義的。
==>應用到我們的產品中,其實就是讀取系統(tǒng)的狀態(tài)、以及文件總數等等數據.
==>也就是我們所說的查詢功能。
(2)、06 功能代碼。這個功能代碼就是寫入數據到寄存器中。
==>其實說白了,這個就是主機發(fā)送數據,而從機接受到之后,寫入到自己設定的寄存器中。
==>應用到我們的產品中,其實就是主機發(fā)送一個指令給我們芯片,而我們的芯片將這個指令存儲到所建立的寄存器 buffer 中,再對這個指令進行相應的動作
==>也就是我們常說的“控制功能”
四、舉例說明
1、06 功能碼
如圖:我們的 USB 轉 485 模塊虛擬出的是 COM5,波特率 9600,無校驗位,數據位是 8 位,
1 位停止位,設備地址假設為 1。
(1)、寫寄存器的時候,如果我們要把 01 寫到一個地址是 0000 的寄存器地址里,點一下“寫
入”,就會出現發(fā)送指令:01 06 00 00 00 01 48 0A。 (2)、我們來分析一下這幀數據,其中 01 是設備地址,06 是功能碼,代表寫寄存器這個功 能,后邊跟 00 00 表示的是要寫入的寄存器的地址,00 01 就是要寫入的數據,48 0A 就是 CRC 校驗碼,這是軟件自動算出來了。
(3)、而根據 Modbus 協議,當寫寄存器的時候,從機成功完成該指令的操作后,會把主機 發(fā)送的指令直接返回,我們的調試精靈會接收到這樣一幀數據:01 06 00 00 00 01 48 0A。
2、03 功能碼
假如我們現在要從寄存器地址 0002 開始讀取寄存器,并且讀取的數量是 2 個。如上圖
(1)、點一下“讀出”,就會出現發(fā)送指令:01 03 00 02 00 02 65 CB。
(2)、其中 01 是設備地址,03 是功能碼,代表寫寄存器這個功能,00 02 就是讀寄存器的起 始地址,后一個 00 02 就是要讀取 2 個寄存器的數值,65 CB 就是 CRC 校驗。 (3)、而接收到的數據是:01 03 04 00 00 00 00 FA 33。其中 01 是設備地址,03 是功能碼,
04 代表的是后邊讀到的數據字節(jié)數是 4 個,00 00 00 00 分別是地址為 00 02 和 00 03 的寄存 器內部的數據,而 FA 33 就是 CRC 校驗了。751697315
五、配置文件的說明
1、如上圖,我們新建的一個 read.cfg 文件,里面填入的數字是“030010”,代表含義如下
(1)、第1位 0,代表的意思是按鍵模式配置為 0,詳細的功能請查找表格
(2)、第二位 3 和第三位 0,共同組成了音量為 30 級,如果這里為 21 的話,是 21 級音量
(3)、第四位 0 和第五位 1,共同組成了 modbus 的設備地址,這里地址設定為 01 地址 如果要設定為 10 地址的話,這里兩位填入 10 即可
(4)、后一位代表的是 busy 腳輸出信號,
01 06 00 01 00 00 D8 0A --- 代表下一曲的命令
01 06 00 03 00 02 F8 0B --- 指定播放第二曲
6、測試說明
我們有的 modbus 的指令測試,都是通過電腦端的工具測試的,使用的是“MODBUS 調試助手.exe”,這個軟件可以問我們索取
測試說明如下:
我們只需要用到 03 和 06 這兩個功能碼
測試我們所設定的地址為 02
完全支持 modbus 的標準協議
1、測試 06 功能碼
Modbus 對于 06 功能碼要求:從機收到數據之后,將主機發(fā)送的數據再次發(fā)給主機,作 為從機收到主機的指令的應答
(1)、0x01 指令測試
這里 modbus 主機發(fā)送的數據是“02 06 00 01 00 00 D8 39 ” 代表的含義是:指定下一曲播放
(2)、0x03 指令測試
這里 modbus 主機發(fā)送的數據是“02 06 00 03 00 02 F8 38 ” 代表的含義是:按照物理順序指定第二段語音播放
(3)、0x08 指令測試
這里 modbus 主機發(fā)送的數據是“02 06 00 08 00 02 89 FA” 代表的含義是:按照物理順序指定第二段語音循環(huán)播放
(4)、0x0F 指令測試
這里 modbus 主機發(fā)送的數據是“02 06 00 0F 01 01 79 AA ” 代表的含義是:指定 01 文件夾下面的 001xxx.mp3 文件播放
聯系人:李曙光
手 機:17266260250
郵 箱:Lur@yxin18.com
公 司:廣州悅欣電子科技有限公司
地 址:廣州市花都區(qū)商業(yè)大道334號