<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開(kāi)發(fā)網(wǎng)

      電子開(kāi)發(fā)網(wǎng)電子設(shè)計(jì) | 電子開(kāi)發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
      搜索: 您現(xiàn)在的位置: 電子開(kāi)發(fā)網(wǎng) >> 電子開(kāi)發(fā) >> PLC基礎(chǔ)入門(mén)教程 >> 正文

      手把手帶你搞懂Modbus通信協(xié)議 報(bào)文格式詳解

      作者:佚名    文章來(lái)源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時(shí)間:2022-09-01

      摘要:昨天有小伙伴在群里問(wèn)關(guān)于Modbus通信協(xié)議的,大家都比較積極地解答,所以今天果子哥總結(jié)一下關(guān)于Modbus相關(guān)的知識(shí),適合正在入門(mén)的小伙伴“食用”。同樣還是理論+實(shí)戰(zhàn)的方式解答,大佬勿噴。

      1.什么是Modbus?

      顧名思義,它是一個(gè)bus,即總線協(xié)議。比如串口協(xié)議、IIC協(xié)議、SPI都是通信協(xié)議。你接觸到這種協(xié)議,相信你所處的行業(yè)是工業(yè)方面或者你的產(chǎn)品用于工業(yè)。

      好了,現(xiàn)在知道了大概知道了,這是一個(gè)總線協(xié)議,是一個(gè)mod什么的公司發(fā)表的一個(gè)通信協(xié)議。那為什么要用這個(gè)呢? 答案就是他們都在用,你就得學(xué),啊哈哈!

      正經(jīng)的說(shuō),它被工業(yè)領(lǐng)域所接受的原因是它具備一下三個(gè)優(yōu)點(diǎn)

      • 公開(kāi)發(fā)表并且無(wú)版權(quán)要求
      • 易于部署和維護(hù)
      • 對(duì)供應(yīng)商來(lái)說(shuō),修改移動(dòng)本地的比特或字節(jié)沒(méi)有很多限制

      簡(jiǎn)單的概括,就是免費(fèi)+簡(jiǎn)單+方便修改!

      歸納:Modbus就是一種用在工業(yè)上的簡(jiǎn)單協(xié)議!

      2.Modbus用來(lái)干什么?

      用兩個(gè)字概括:通信

      是的,所有協(xié)議都是用來(lái)通信的,協(xié)議的制定就是讓兩個(gè)人根據(jù)這個(gè)協(xié)議看懂傳來(lái)的一組數(shù)據(jù)。比如我給你一個(gè)6666,你要是沒(méi)有協(xié)議,就只知道這是6666,而有了協(xié)議,你就知道了這是在問(wèn)我是不是大佬?當(dāng)然,也可以表示其他意思,具體什么意思就看你協(xié)議怎么制定!

      歸納:Modbus用來(lái)通信嘍,是個(gè)人都知道!

      3.Modbus的內(nèi)容是什么?

      大致分為以下幾種:

      • Modbus-RTU
      • Modbus-ASCII
      • Modbus-TCP

      以上三種協(xié)議,一個(gè)設(shè)備只會(huì)有一種協(xié)議,如果你的設(shè)備使用的是Modbus-RTU,只需查看以下對(duì)應(yīng)部分,一般來(lái)說(shuō)大部分的設(shè)備都是Modbus-RTU協(xié)議的。

      4.通訊過(guò)程

      Modbus是主從方式通信,也就是說(shuō),不能同步進(jìn)行通信,總線上每次只有一個(gè)數(shù)據(jù)進(jìn)行傳輸,即主機(jī)發(fā)送,從機(jī)應(yīng)答,主機(jī)不發(fā)送,總線上就沒(méi)有數(shù)據(jù)通信。(所以說(shuō),這也算是一個(gè)缺點(diǎn)了)

      舉例1: 一個(gè)總線上有一個(gè)主機(jī),多個(gè)從機(jī),主機(jī)查詢其中一個(gè)從機(jī),首先你必須得這些從機(jī)分配地址(這樣才能知道哪個(gè)從機(jī),而且每個(gè)地址必須唯一),分配好地址后,主機(jī)要查詢,然后數(shù)據(jù)下發(fā)(數(shù)據(jù)內(nèi)容下面會(huì)介紹),從機(jī)得到主機(jī)發(fā)送的數(shù)據(jù),然后對(duì)應(yīng)地址的從機(jī)回復(fù),主機(jī)得到從機(jī)數(shù)據(jù),這樣就是一個(gè)主機(jī)到從機(jī)的通信過(guò)程,是不是很簡(jiǎn)單呢?

      舉例2: 就像打電話,你得知道對(duì)方的電話(這就是唯一地址),然后你打電話過(guò)去,相當(dāng)于主機(jī)查找從機(jī),然后對(duì)方接通電話,給你回復(fù)(返回?cái)?shù)據(jù));正常是這樣的。

      如果這時(shí)候,對(duì)方正在打電話,你應(yīng)該聽(tīng)到的是"sorry,you…"這一串英文,說(shuō)明對(duì)方忙,但是Modbus總線不能判斷對(duì)方是否忙,也沒(méi)有對(duì)應(yīng)的仲裁機(jī)制,好了你又知道了一個(gè)缺點(diǎn)了!但是,你可以在用軟件的辦法進(jìn)行適當(dāng)?shù)奶幚頂?shù)據(jù)!

      5 Modbus-RTU協(xié)議

      設(shè)備必須要有RTU協(xié)議!這是Modbus協(xié)議上規(guī)定的,且默認(rèn)模式必須是RTU,ASCII作為選項(xiàng)。(也就是說(shuō),一般的設(shè)備只有RTU這個(gè)協(xié)議,ASCII一般很少)所以說(shuō),一般學(xué)習(xí)Modbus協(xié)議,只需要了解RTU的協(xié)議,ASCII作為學(xué)習(xí)的了解就足夠了。

      1、幀結(jié)構(gòu)

      幀結(jié)構(gòu) = 地址 + 功能嗎 + 數(shù)據(jù) + 校驗(yàn)

      • 地址: 占用一個(gè)字節(jié),范圍0-255,其中有效范圍是1-247,其他有特殊用途,比如255是廣播地址(廣播地址就是應(yīng)答所有地址,正常的需要兩個(gè)設(shè)備的地址一樣才能進(jìn)行查詢和回復(fù))。

      • 功能碼:占用一個(gè)字節(jié),功能碼的意義就是,知道這個(gè)指令是干啥的,比如你可以查詢從機(jī)的數(shù)據(jù),也可以修改數(shù)據(jù),所以不同功能碼對(duì)應(yīng)不同功能。

      • 數(shù)據(jù):根據(jù)功能碼不同,有不同結(jié)構(gòu),在后續(xù)的實(shí)例中有說(shuō)明。

      • 校驗(yàn):為了保證數(shù)據(jù)不錯(cuò)誤,增加這個(gè),然后再把前面的數(shù)據(jù)進(jìn)行計(jì)算看數(shù)據(jù)是否一致,如果一致,就說(shuō)明這幀數(shù)據(jù)是正確的,我再回復(fù);如果不一樣,說(shuō)明你這個(gè)數(shù)據(jù)在傳輸?shù)臅r(shí)候出了問(wèn)題,數(shù)據(jù)不對(duì)的,所以就拋棄了。

      2、實(shí)戰(zhàn)

      只談理論大家可能不太明白,下面舉一個(gè)例子。記住Modbus-RTU協(xié)議一般我們用的最多功能碼就是0306,大部分都是用modbus來(lái)查詢傳感器上的信息用03查詢功能碼,如果需要修改傳感器寄存器的值就用06修改功能碼,其他的不需要過(guò)多關(guān)注,學(xué)多了你也記不住,哈哈哈!

      2.1 查詢功能碼0x03

      功能描述:現(xiàn)在我是主機(jī),我要查詢從機(jī)地址為1的數(shù)據(jù)。我現(xiàn)在用電腦的modbus調(diào)試助手來(lái)代替注意,stm32來(lái)代替從機(jī)。

       

      我需要發(fā)送以下數(shù)據(jù):

      主機(jī)發(fā)送: 01 03 00 00 00 01 84 0A
      從機(jī)回復(fù): 01 03 02 19 98 B2 7E
      

      那么這一組數(shù)據(jù)是什么意思呢?

      從上面的結(jié)構(gòu)圖中,可以看出,主機(jī)發(fā)送的數(shù)據(jù)大致是 地址+功能碼+數(shù)據(jù)+校驗(yàn);

      所以解析如下:

      發(fā)送數(shù)據(jù)解析

      modbus發(fā)送數(shù)據(jù)解析 

      01-地址,也就是你傳感器的地址
      03-功功能碼,03代表查詢功能,查詢傳感器的數(shù)據(jù)
      00 00-代表查詢的起始寄存器地址.說(shuō)明從0x0000開(kāi)始查詢。這里需要說(shuō)明以下,Modbus把數(shù)據(jù)存放在寄存器中,通過(guò)查詢寄存器來(lái)得到不同變量的值,一個(gè)寄存器地址對(duì)應(yīng)2字節(jié)數(shù)據(jù)
      00 01-代表查詢了一個(gè)寄存器.結(jié)合前面的00 00,意思就是查詢從0開(kāi)始的1個(gè)寄存器值
      84 0A-循環(huán)冗余校驗(yàn),是modbus的校驗(yàn)公式,從首個(gè)字節(jié)開(kāi)始到84前面為止;
      

      回復(fù)數(shù)據(jù)解析

      modbus回復(fù)數(shù)據(jù)解析 

      01-地址,也就是你傳感器的地址
      03-功功能碼,03代表查詢功能,查詢傳感器的數(shù)據(jù)。這里要注意的是注意發(fā)給從機(jī)的功能碼是啥,從機(jī)就要回復(fù)同樣的功能碼,如果不一樣說(shuō)明這一幀數(shù)據(jù)有錯(cuò)誤
      02-代表后面數(shù)據(jù)的字節(jié)數(shù),因?yàn)樯厦嬲f(shuō)到,一個(gè)寄存器有2個(gè)字節(jié),所以后面的字節(jié)數(shù)肯定是2*查詢的寄存器個(gè)數(shù);
      19 98-寄存器的值是19 98,結(jié)合發(fā)送的數(shù)據(jù)看出,01這個(gè)寄存器的值為19 98
      B2 7E-循環(huán)冗余校驗(yàn)
      

      好了,是不是很簡(jiǎn)單呢?基本流程就是:

      • 發(fā)送:從機(jī)的地址+我要干嘛的功能碼+我要查的寄存器的地址+我要查的寄存器地址的個(gè)數(shù)+校驗(yàn)碼

      • 回復(fù):從機(jī)的地址+主機(jī)發(fā)我的功能碼+要發(fā)送給主機(jī)數(shù)據(jù)的字節(jié)數(shù)+數(shù)據(jù)+校驗(yàn)碼

      就是這么簡(jiǎn)單!

      2.2 修改功能碼0x06

      如果我要修改從機(jī)的數(shù)據(jù)呢?那么這個(gè)協(xié)議有嗎,答案是Yes!

      1、修改-0x06功能碼

      主機(jī)發(fā)送: 01 06 00 00 00 01 48 0A
      從機(jī)回復(fù): 01 06 00 00 00 01 48 0A
      

      誒,看上去怎么一樣的啊?是不是錯(cuò)了?答案是這是正確的;

      發(fā)送數(shù)據(jù)解析

      modbus發(fā)送數(shù)據(jù)解析 

      01-主機(jī)要查詢的從機(jī)地址
      06-功能碼,06代表修改單個(gè)寄存器功能,修改有些不同,有修改一個(gè)寄存器和修改多個(gè)寄存器;
      00 00-代表修改的起始寄存器地址.說(shuō)明從0x0000開(kāi)始.
      00 01-代表修改的值為00 01.結(jié)合前面的00 00,意思就是修改0號(hào)寄存器值為00 01;
      48 0A-循環(huán)冗余校驗(yàn),是modbus的校驗(yàn)公式,從首個(gè)字節(jié)開(kāi)始到48前面為止;
      

      回復(fù)數(shù)據(jù)解析

      modbus回復(fù)數(shù)據(jù)解析 

      01-從機(jī)返回給主機(jī)自己的地址,說(shuō)明這就是主機(jī)查的從機(jī)
      06-功能碼,代表修改單個(gè)寄存器功能,主機(jī)發(fā)啥功能碼,從機(jī)就必須回什么功能碼;
      00 00-代表修改的起始寄存器地址.說(shuō)明是0x0000.
      00 01-代表修改的值為00 01.結(jié)合前面的00 00,意思就是修改0號(hào)寄存器值為00 01;
      48 0A-循環(huán)冗余校驗(yàn),是modbus的校驗(yàn)公式,從首個(gè)字節(jié)開(kāi)始到48前面為止;
      

      如果回復(fù)的一樣,說(shuō)明這個(gè)數(shù)據(jù)是修改成功的;如果功能碼不是06,而是別的,說(shuō)明從機(jī)回復(fù)的數(shù)據(jù)有誤,主機(jī)可以做相應(yīng)的處理。

      2、修改-0x10功能碼

      如果我要修改多個(gè)寄存器,難道用06發(fā)好幾次,這樣不會(huì)太傻了嗎?所以modbus RTU協(xié)議包含了修改連續(xù)多個(gè)寄存器的方法,就是功能碼為0x10;這個(gè)大家自己去查詢,基本和上面的數(shù)據(jù)格式差不多。

      歸納

      Modbus-RTU協(xié)議只需要看懂功能碼0x030x060x10這三個(gè)基本的就已經(jīng)足夠了;分別回想下其數(shù)據(jù)域部分:

      0x03–主機(jī)需要發(fā)送起始地址+寄存器數(shù)量,從機(jī)回復(fù)總字節(jié)數(shù)+數(shù)據(jù)

      0x06–主機(jī)發(fā)送起始地址+數(shù)據(jù)內(nèi)容(因?yàn)槟阒恍枰薷囊粋(gè),所以起始地址就是所要修改的地址),從機(jī)返回起始地址+數(shù)據(jù)內(nèi)容(發(fā)現(xiàn)居然一樣!)

      0x10–主機(jī)發(fā)送起始地址+寄存器個(gè)數(shù)+總字節(jié)數(shù)+數(shù)據(jù),從機(jī)返回起始地址+寄存器數(shù)量

      6 Modbus-ACSII協(xié)議

      一般只需要了解RTU協(xié)議,因?yàn)榍懊嬗姓f(shuō)過(guò),必須要有RTU協(xié)議的,所以只需要了解了RTU協(xié)議,就可以讀出設(shè)備信息了,至于ACSII協(xié)議,做個(gè)大概了解

      1.幀形式

      對(duì)于RTU協(xié)議,比如RTU發(fā)送一個(gè)字節(jié):0x12;ASCII協(xié)議則需要發(fā)送2個(gè)字節(jié):一個(gè)字節(jié)代表ASCII碼1,一個(gè)代表ASCII碼2,即0x310x32,才能代表0x12。所以,ASCII協(xié)議的效率比較低。但是ASCII更符合串口打印查看,因?yàn)榇诎l(fā)送的數(shù)據(jù)一般都是文本模式(ASCII),比如用RTU協(xié)議,你發(fā)送06串口可以把06正常顯示出來(lái),但是用ACSII協(xié)議,你發(fā)送06串口是不能正常顯示的,因?yàn)?6是不可顯示字符。

      modbus幀形式 

      從上面的圖中,看出:

      1)比RTU多了起始段:,多個(gè)結(jié)束符CRLF

      2)地址和功能都變成了2個(gè)字節(jié)

      3)數(shù)據(jù)部分更加繁瑣,但是更符合人們的查看;

      2.歸納

      由于Modbus-RTU和Modbus-ACSII都是基于232和485鏈路的,所以其通訊模式半雙工,一般是主機(jī)和從機(jī)的模式。其差別就是其字節(jié)的格式不同,一個(gè)是16進(jìn)制的數(shù)據(jù),一個(gè)是ASCII數(shù)據(jù)。ASCII多了幀頭和幀尾,也就是說(shuō)可以有用這個(gè)頭尾判斷一幀字節(jié)來(lái)判斷是否結(jié)束;而RTU沒(méi)有幀頭和幀尾,所以協(xié)議里明確兩幀之間要大于3.5個(gè)字節(jié)時(shí)間間隔,作為一幀結(jié)束的判斷依據(jù)。對(duì)于RS485來(lái)說(shuō),總線上一般允許最大32個(gè)設(shè)備。

      備注

      最后再補(bǔ)充點(diǎn):Modbus從設(shè)備的回應(yīng)數(shù)據(jù)格式是:1、回應(yīng)的數(shù)據(jù)包與主機(jī)查詢的數(shù)據(jù)包格式一致。從機(jī)正常回應(yīng)時(shí):功能碼與主機(jī)發(fā)送的功能碼一致(1-127)
      如果異常回應(yīng)時(shí):功能碼要在收的主機(jī)的功能碼的基礎(chǔ)上加128。不要問(wèn)為啥加128,你去問(wèn)造協(xié)議的那一幫人吧!

      因?yàn)殡娔X只支持USB,所以我們需要把USB轉(zhuǎn)TTL串口,再轉(zhuǎn)成485接口之后與單片機(jī)相連,這是硬件最基本的,但是也需要注意。

      最后修改了一下串口調(diào)試助手,加了一個(gè)CRC校驗(yàn)的功能,后臺(tái)回復(fù):Modbus-ly,就可以獲取。

      Tags:Modbus,通信協(xié)議  
      責(zé)任編輯:admin
      相關(guān)文章列表
      梯形圖實(shí)例 儀表與西門(mén)子PLC Modbus通訊實(shí)例稱重儀表 指令MBUS_M
      西門(mén)子plc與modbus設(shè)備進(jìn)485通信詳解(modbus多機(jī)輪詢)讀取儀表
      寄存器PLC地址與寄存器modbus協(xié)議地址 三菱FX系列西門(mén)子s7系列pl
      Modbus協(xié)議基本知識(shí) Modbus地址范圍對(duì)應(yīng)表
      Modbus-RTU協(xié)議解析
      MODBUS常用功能碼學(xué)習(xí)及實(shí)例 modbus報(bào)文格式
      Modbus如何遠(yuǎn)距離傳輸? Modbus物聯(lián)網(wǎng)
      Modbus和RS485的關(guān)系是什么?
      Modbus RS485接線方法  modbus接線方法 終端電阻
      MODBUS調(diào)試工具(modscan32)使用說(shuō)明-MODBUS調(diào)試工具(modscan32)如
      RS-485終端電阻怎么接?485終端電阻接法解析
      modbus通訊 RS-485終端電阻的重要性
      Modbus功能碼詳解 讀取線圈、保持寄存器
      modbus協(xié)議地址和常用功能碼,modbus詳解
      Modbus功能碼介紹
      Modbus網(wǎng)關(guān)的概念/功能/作用/特點(diǎn)
      Modbus-RTU通訊協(xié)議03功能碼詳解——小白一看就會(huì)的協(xié)議解析
      西門(mén)子plc SMART200 通過(guò)Modbus讀取溫濕度傳感器數(shù)據(jù)梯形圖實(shí)例
      實(shí)現(xiàn)PLC與多臺(tái)變頻器的MODBUS/RTU通信   MODBUS協(xié)議報(bào)文格式
      西門(mén)子plc modbus地址詳解
      s7-200與計(jì)算機(jī)modbus通訊案例,西門(mén)子S7-200 Smart Modbus通信介
      Modbus通訊協(xié)議簡(jiǎn)介
      電力儀表怎么設(shè)置modbus ,電力-MODBUS_RTU通訊規(guī)約
      MODBUS規(guī)約報(bào)文解析
      modbus rtu六種功能碼詳細(xì)解析
      ModBus通信協(xié)議
      modbus通訊協(xié)議功能碼一覽_ModBus功能碼定義
      西門(mén)子200SMART主站輪詢MODBUS通信指令案例_梯形圖實(shí)例
      在通信程序中,如何實(shí)現(xiàn)PLC與多臺(tái)變頻器的MODBUS/RTU通信?
      MODBUS-RTU數(shù)據(jù)幀格式、報(bào)文實(shí)例
      請(qǐng)文明參與討論,禁止漫罵攻擊,不要惡意評(píng)論、違禁詞語(yǔ)。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個(gè)字
      [ 查看全部 ] 網(wǎng)友評(píng)論
      推薦文章
      最新推薦
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁(yè)面
      下到頁(yè)底
      晶體管查詢
      主站蜘蛛池模板: 中文字幕人成无码人妻综合社区| 开心五月激情综合婷婷| 狠狠色综合久久婷婷色天使| 亚洲综合小说另类图片动图| 亚洲私人无码综合久久网| 国产精品一区二区综合| 久久91精品久久91综合| 无码国内精品久久综合88| 精品第一国产综合精品蜜芽| 六月婷婷国产精品综合| 国产精品激情综合久久| 亚洲综合色丁香麻豆| 99综合电影在线视频好看| 婷婷五月综合激情| 情人伊人久久综合亚洲| 丁香六月激情综合| 婷婷久久久五月综合色| 亚洲综合色丁香婷婷六月图片| 综合色就爱涩涩涩综合婷婷| 五月天婷五月天综合网在线| 狠狠色丁香久久婷婷综合图片| 久久久综合亚洲色一区二区三区| 国产综合无码一区二区色蜜蜜| 久久婷婷五月综合国产尤物app | 六月婷婷激情综合| 色综合色狠狠天天综合色| 亚洲伊人色欲综合网| 久久亚洲欧洲国产综合| 丁香五月亚洲综合深深爱| 亚洲综合图色40p| 久久综合噜噜激激的五月天| 99久久综合狠狠综合久久一区| 狠狠色丁香久久综合婷婷| 青青草原综合久久| 色综合天天综合狠狠| 狠狠色成人综合网图片区| 国产精品亚洲综合网站| 狠狠色丁香久久综合婷婷| 亚洲人成伊人成综合网久久| 日韩综合在线观看| 国产AV综合影院|