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