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