在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Modbus通信協議全面詳解

GReq_mcu168 ? 來源:CSDN ? 作者:Z小旋 ? 2022-05-06 14:39 ? 次閱讀

本文旨在讓您對Modbus有一個很直觀的了解,總結關于Modbus相關的知識,非常適合初學的同學,同時如有錯誤,歡迎修改意見和建議。

什么是協議

在了解什么是Modbus之前,我們先來看下什么是協議

協議是一個漢語詞匯,讀音為xié yì,意思是共同計議,協商;經過談判、協商而制定的共同承認、共同遵守的文件。

簡單地說,在我們的單片機之間互相通信,以及單片機和上位機通信中,規定了不同的內容規范,這個規范是通信的雙方都需要遵守的,這樣就可以實現兩者的通信。

而這個協議規范可以有很多種,來適應不同的設備以及通信要求等,我們常見的就有IIC SPI UART串口通信協議等等。而Modbus也是一個串行通信協議。

bf518388-cd04-11ec-bce3-dac502259ad0.png

什么是RS-485 RS-232

我們在看Modbus的時候,經常會看到485串口,232串口,這些是什么呢?

RS232RS485是一種電平標準

數據在通信雙方之間傳輸,本質是傳輸物理的電平 比方說傳輸5V的電壓 -1V的電壓信號,這些物理信號在傳輸過程中會受到很多干擾,比方說你傳輸一個5V的電壓,到了接收端可能就變成了4.8V,并且通信的雙方高低電平的參考電壓可能不同。

那么這個時候就需要一個電平標準,來判斷多少V的電壓是高電平 1,多少V的電壓是低電平 0 這就誕生了 RS-485 RS-232

RS232:是電子工業協會(Electronic Industries Association,EIA) 制定的異步傳輸標準接口,同時對應著電平標準和通信協議(時序),其電平標準:+3V~+15V對應0,-3V~-15V對應1。

全雙工

邏輯1:-15V–5V

邏輯0:+3V–+15V

bf6f41f2-cd04-11ec-bce3-dac502259ad0.png

RS485:RS485是一種串口接口標準,為了長距離傳輸采用差分方式傳輸,傳輸的是差分信號,抗干擾能力比RS232強很多。兩線壓差為-2~-6V表示0,兩線壓差為+2~+6V表示1

半雙工

邏輯1:+2V~+6V

邏輯0:-2V~ -6V

注意485的電平指的是485-A和485-B兩根傳輸線,兩線間的電壓差。而不是傳輸線上的電壓

bf8f3c6e-cd04-11ec-bce3-dac502259ad0.png

如果還想繼續了解可以看博主的這個博文:

USB轉串口 TTL RS-232 RS-485 COM口 UART區別

也就是RS-485電平標準確定傳輸過來的數據是0還是1,在此基礎上,這些字節數據根據modbus通信協議來進行數據的交互傳輸。

硬件層協議:解決0和1的可靠傳輸,常有RS232、RS485、CAN、IIC、SPI …

軟件層協議:解決傳輸目的,常有Modbus、TCP/IP、CANopen …

bfbd8538-cd04-11ec-bce3-dac502259ad0.png

Modbus協議說明

Modbus誕生于1979年 莫迪康公司 后來被施耐德電氣公司收購。Modbus提供通用語言用于彼此通信的設備和設備。

Modbus已經成為工業領域通信協議的業界標準,并且現在是工業電子設備之間常用的連接方式。Modbus作為目前工業領域應用最廣泛的協議

最簡單的說,Modbus就是一個總線通信協議,像IIC SPI這種,但是他不依賴于硬件總線

Modbus之所以使用廣泛,是有他的優點的

Modbus協議標準開放、公開發表且無版權要求

Modbus協議支持多種電氣接口,包括RS232、RS485、TCP/IP等,還可以在各種介質上傳輸,如雙絞線、光纖、紅外、無線等

Modbus協議消息幀格式簡單、緊湊、通俗易懂。用戶理解和使用簡單,廠商容易開發和集成,方便形成工業控制網絡

舉一個簡單的例子,我們常用的IIC通信協議,需要在物理上連接iic總線,然后加上拉電阻,規定好物理層的高低電平。

bfe060c6-cd04-11ec-bce3-dac502259ad0.png

而 Modbus協議是一種應用層報文傳輸協議,協議本身并沒有定義物理層,定義了控制器能夠認識和使用的消息結構,不管它們是經過何種網絡進行通信的。所以能夠適應多種電氣接口,因此使用非常廣泛。

Modebus通信過程

注意Modbus是一主多從的通信協議

Modbus通信中只有一個設備可以發送請求。其他從設備接收主機發送的數據來進行響應,從機是任何外圍設備,如I/O傳感器,閥門,網絡驅動器,或其他測量類型的設備。從站處理信息和使用Modbus將其數據發送給主站。

也就是說,不能Modbus同步進行通信,主機在同一時間內只能向一個從機發送請求,總線上每次只有一個數據進行傳輸,即主機發送,從機應答,主機不發送,總線上就沒有數據通信。

從機不會自己發送消息給主站,只能回復從主機發送的消息請求。

c004978e-cd04-11ec-bce3-dac502259ad0.png

并且,Modbus并沒有忙機制判斷,比方說主機給從機發送命令, 從機沒有收到或者正在處理其他東西,這時候就不能響應主機,因為modbus的總線只是傳輸數據,沒有其他仲裁機制,所以需要通過軟件的方式來判斷是否正常接收。

舉例

現在,我們來探討Modbus數據傳輸的方式,可以簡單地理解成打電話。并且是單向通信的打電話

主機發送數據,首先需要從機的電話號碼(區分每個從機,每個地址必須唯一),告訴從機打電話要干什么事情,然后是需要發送的內容,最后再問問從機,我說的話你都聽清楚了沒有呀,沒有聽錯吧?

然后從機這里,得到了主機打過來的電話,從機回復主機需要的內容,主機得到從機數據,這樣就是一個主機到從機的通信過程

就好比老師和你打電話,老師撥通了你的電話號,然后老師跟你說,小王呀,我這里需要你給我發東西,發的內容是上周的一周總結,你說好的,然后打開你電腦的文件夾,把你的周報發給老師,這就是一個通信過程。

Modbus存儲區

既然從機存儲數據,那么肯定要有一個存儲區,那就需要文件操作,我們都知道這文件可以分為只讀(-r)和讀寫(-wr)兩種類型

并且存儲的數據類型可以分為 :布爾量 和 16位寄存器

布爾量比如IO口的電平高低,燈的開關狀態等。

16位寄存器比如 傳感器的溫度數據,存儲的密碼等。

Modbus協議規定了4個存儲區 分別是0 1 3 4區 其中1區和4區是可讀可寫,1區和3區是只讀。

c047c356-cd04-11ec-bce3-dac502259ad0.png

并且Modbus還給每個區都劃分了地址范圍 主機向從機獲取數據時,只需要告訴從機數據的起始地址,還有獲取多少字節的數據,從機就可以發送數據給主機

Modbus數據模型規定了具體的地址范圍,每一個從機,都有實際的物理存儲,跟modbus的存儲區相對應,主機讀寫從機的存儲區,實際上就是對從機設備對應的實際存儲空間進行讀寫。

c064f85e-cd04-11ec-bce3-dac502259ad0.png

Modbus協議類型

在上面我們已經說明了Modbus可以在各種介質上傳輸,那么他的傳輸模式也分為三種。包括ASCII、RTU(遠程終端控制系統)、TCP三種報文類型

串行端口存在多個版本的Modbus協議,而最常見的是下面四種:

Modbus-Rtu

Modbus-Ascii

Modbus-Tcp

ModbusPlus

Modbus RTU是一種緊湊的,十六進制表示數據的方式,Modbus ASCII是一種采用Ascii碼表示數據,并且每個8Bit 字節都作為兩個ASCII字符發送的表示方式。

RTU格式后續的命令/數據帶有循環冗余校驗的校驗和,而ASCII格式采用縱向冗余校驗的校驗和。

Modbus協議使用串口傳輸時可以選擇RTU或ASCII模式,并規定了消息、數據結構、命令和應答方式并需要對數據進行校驗。ASCII 模式采用LRC校驗,RTU模式采用16 位CRC校驗。通過以太網傳輸時使用TCP,這種模式不使用校驗,因為TCP協議是一個面向連接的可靠協議。

c097feac-cd04-11ec-bce3-dac502259ad0.png

當然常用的就是RTU模式,ASCII一般很少

舉一個簡單的例子,如果我們需要發送一個數字10 那么RTU模式下,只需要發送0x0A 總線上傳輸數據形式為:0000 1010

而ASCII碼模式則將數據1和0轉為’1’和’0’,需要發送0x31(1) 0x30(0)兩個字節數據。總線上傳輸數據形式為:0011 0001 0011 0000

詳細的我們等下再闡述

Modbus-RTU協議

Modbus報文幀結構

一個報文就是一幀數據,一個數據幀就一個報文:指的是一串完整的指令數據,本質就是一串數據。

Modbus報文是指主機發送給從機的一幀數據,其中包含著從機的地址,主機想執行的操作,校驗碼等內容

Modbus協議在串行鏈路上的報文格式如下所示:

c0cfba36-cd04-11ec-bce3-dac502259ad0.png

c0f4d78a-cd04-11ec-bce3-dac502259ad0.png

從機地址: 每個從機都有唯一地址,占用一個字節,范圍0-255,其中有效范圍是1-247,其中255是廣播地址(廣播就是對所有從機發送應答)

功能碼: 占用一個字節,功能碼的意義就是,知道這個指令是干啥的,比如你可以查詢從機的數據,也可以修改從機的數據,所以不同功能碼對應不同功能.

數據: 根據功能碼不同,有不同功能,比方說功能碼是查詢從機的數據,這里就是查詢數據的地址和查詢字節數等。

校驗: 在數據傳輸過程中可能數據會發生錯誤,CRC檢驗檢測接收的數據是否正確

Modbus功能碼

Modbus規定了多個功能,那么為了方便的使用這些功能,我們給每個功能都設定一個功能碼,也就是指代碼。

Modbus協議同時規定了二十幾種功能碼,但是常用的只有8種,用于對存儲區的讀寫,如下表所示:

c1122bb4-cd04-11ec-bce3-dac502259ad0.png

當然我們用的最多的就是03和06 一個是讀取數據,一個是修改數據。

CRC校驗

錯誤校驗(CRC)域占用兩個字節包含了一個16位的二進制值。CRC值由傳輸設備計算出來,然后附加到數據幀上,接收設備在接收數據時重新計算CRC值,然后與接收到的CRC域中的值進行比較,如果這兩個值不相等,就發生了錯誤。

比如主機發出01 06 00 01 00 17 98 04, 98 04 兩個字節是校驗位,那么從機接收到后要根據01 06 00 01 00 17 再計算CRC校驗值,從機判斷自己計算出來的CRC校驗是否與接收的CRC校驗(98 04主機計算的)相等,如果不相等那么說明數據傳輸有錯誤,這些數據就不能要。

CRC校驗流程:

1、預置一個16位寄存器為0FFFFH(全1),稱之為CRC寄存器。

2 、把數據幀中的第一個字節的8位與CRC寄存器中的低字節進行異或運算,結果存回CRC寄存器。

3、將CRC寄存器向右移一位,最高位填以0,最低位移出并檢測

4 、如果最低位為0:重復第三步(下一次移位);如果最低位為1:將CRC寄存器與一個預設的固定值(0A001H)進行異或運算。

5、重復第三步和第四步直到8次移位。這樣處理完了一個完整的八位。

6 、重復第2步到第5步來處理下一個八位,直到所有的字節處理結束。

7、最終CRC寄存器的值就是CRC的值。

此外還有一種利用預設的表格計算CRC的方法,它的主要特點是計算速度快,但是表格需要較大的存儲空間,該方法此處不在闡述

c12c2960-cd04-11ec-bce3-dac502259ad0.png

下面我們來看詳細的發送和接收數據:

1、主機對從機讀數據操作

主機發送報文格式如下:

c155674e-cd04-11ec-bce3-dac502259ad0.png

含義:

0x01:從機的地址

0x03:查詢功能,讀取從機寄存器的數據

0x00 0x01:代表讀取的起始寄存器地址.說明從0x0001開始讀取.

0x00 0x01:查詢的寄存器數量為0x0001個 Modbus把數據存放在寄存器中,通過查詢寄存器來得到不同變量的值,一個寄存器地址對應2字節數據; 寄存器地址對應著從機實際的存儲地址

0xD5 0xCA:循環冗余校驗 CRC

從機回復報文格式如下:

c176a60c-cd04-11ec-bce3-dac502259ad0.png

含義:

0x01:從機的地址

0x03:查詢功能,讀取從機寄存器的數據

0x02:返回字節數為2個 一個寄存器2個字節

0x00 0x17:寄存器的值是0017

0xF8 0x4A:循環冗余校驗 CRC

2、主機對從機寫數據操作

主機發送報文格式如下:

c1a02e14-cd04-11ec-bce3-dac502259ad0.png

含義:

0x01:從機的地址

0x06:修改功能,修改從機寄存器的數據

0x00 0x01:代表修改的起始寄存器地址.說明修改0x0001-0x0003的存儲內容

0x00 0x17:要修改的數據值為0017

0x98 0x04:循環冗余校驗 CRC

從機回復報文格式如下:

c1c2314e-cd04-11ec-bce3-dac502259ad0.png

含義:

0x01:從機的地址

0x06:修改功能,修改從機寄存器的數據

0x00 0x01:代表修改的起始寄存器地址.說明是0x0000

0x00 0x17:修改的值為0017

0x98 0x04:循環冗余校驗 CRC

從機的回復和主機的發送是一樣的,如果不一樣說明出現了錯誤

Modbus-ACSII協議

在消息中的每個字節都作為兩個ASCII字符發送

十六進制的0-F 分別對應ASCII字符的0…9,A…F

也就是0x30~0x3A 0x41~0x46

c1f00196-cd04-11ec-bce3-dac502259ad0.png

下方是ascii的報文幀

1個字節起始位

2個字節地址位

2個字節功能位

n個數據位,最小的有效位先發送

LRC(縱向冗長檢測) 注意校驗方式不同

結束符

c269d480-cd04-11ec-bce3-dac502259ad0.png

可以看到數據部分更加繁瑣,正常我們使用都是用RTU格式,ASCII碼格式有了解即可。

c282dc96-cd04-11ec-bce3-dac502259ad0.png

總結:

ModbusASCII有開始字符(和結束字符(CR LF),可以作為一幀數據開始和結束的標志,而ModbusRTU沒有這樣的標志,需要用時間間隔來判斷一幀報文的開始和結束,協議規定的時間為3.5個字符周期,就是說一幀報文開始前,必須有大于3.5個字符周期的空閑時間,一幀報文結束后,也必須要有3.5個字符周期的空閑時間否則就會出現粘包的情況。

注意:針對3.5個字符周期,其實是一個具體時間,但是這個時間跟波特率相關。

在串口通信中,1個字符包括1位起始位、8位數據位(一般情況)、1位校驗位(或者沒有)、1位停止位(一般情況下),因此1個字符包括11個位,那么3.5個字符就是38.5個位,波特率表示的含義是每秒傳輸的二進制位的個位,因此如果是9600波特率,3.5個字符周期=/960038.5=0.00401s1000=4.01ms

Modbus-TCP協議

我們首先看下Modbus-TCP和Modbus-ACSII的區別

Modbus-TCP并不需要從從機地址,而是需要MBAP報文頭

并且不需要差錯校驗,因為TCP本身就具有校驗差錯的能力

MBAP報文頭格式如下:

其中事務處理表示符合協議標識符我們正常使用設置為0即可 長度為6個字節 0x0006

簡單來說,也就是Modbus-TCP是在Modbus-ACSII的基礎上,去掉校驗,然后加上五個字節的0和一個06

最后附上 Modbus標準協議手冊鏈接

Modbus標準協議手冊

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6040

    文章

    44602

    瀏覽量

    637036
  • 通信協議
    +關注

    關注

    28

    文章

    905

    瀏覽量

    40355
  • MODBUS
    +關注

    關注

    28

    文章

    1817

    瀏覽量

    77171

原文標題:詳解Modbus通信協議

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    詳解REST API通信協議

    的一環。 為了實現這一目標,我們采用了多種通信協議,包括MQTT、OPC UA、AMQP和REST API,它們共同構成了智能通信的堅實基礎。本期內容,讓我們聚焦REST API通信協議,探索它如何在IIoT領域中發揮關鍵作用。
    的頭像 發表于 01-17 12:40 ?60次閱讀
    <b class='flag-5'>詳解</b>REST API<b class='flag-5'>通信協議</b>

    總線通信協議解析及應用

    在現代計算機系統中,總線通信協議扮演著至關重要的角色。它們定義了數據如何在處理器、內存、輸入/輸出設備等組件之間傳輸。 總線通信協議的基本概念 總線通信協議是一組規則,它規定了數據在系統總線上的傳輸
    的頭像 發表于 12-31 10:07 ?143次閱讀

    RS232接口通信協議詳解 如何測試RS232接口的性能

    RS232接口通信協議詳解 RS232接口通信協議是一種廣泛應用的串行通信協議,它規定了數據在設備之間的傳輸方式和格式。以下是RS232接口通信協議
    的頭像 發表于 12-18 18:03 ?764次閱讀

    上位機通信協議詳解 嵌入式上位機設計流程

    上位機通信協議詳解 上位機通信協議是指上位機(通常是指具有強大計算能力和數據處理能力的計算機系統)與下位機(如傳感器、執行器等)之間進行數據交換和通信所遵循的規則和標準。以下是對幾種常
    的頭像 發表于 12-04 10:21 ?953次閱讀

    PLC控制系統的通信協議解析

    的基本概念 通信協議是一組規則,定義了數據如何在不同的設備之間傳輸。在PLC控制系統中,這些協議包括物理層、數據鏈路層、網絡層、傳輸層和應用層等多個層次。 常見的PLC通信協議 Modbus
    的頭像 發表于 11-08 09:46 ?1120次閱讀

    串口屏Modbus通訊協議詳解

    Modbus是一種開放的通信協議,廣泛應用于工業自動化領域。它定義了消息結構和設備間的通信方式,支持多種物理層網絡,如RS-232、RS-485等。本文將詳細介紹如何在串口屏上實現Modbus
    的頭像 發表于 10-20 14:23 ?1610次閱讀

    PROFINET通信協議是什么

    PROFINET通信協議是一種專為工業自動化領域設計的基于以太網的實時通信協議。以下是對PROFINET通信協議的詳細解析,包括其定義、特點、體系結構、工作原理、通信方式、應用領域以及
    的頭像 發表于 09-25 18:13 ?2228次閱讀

    Modbus協議網關簡介

    在工業自動化領域,設備間的通信與數據交換是實現高效、智能控制的關鍵。Modbus協議作為一種廣泛應用的通信協議,自1971年由Modicon公司首次推出以來,便以其標準、開放、支持多種電氣接口等特點
    的頭像 發表于 09-23 14:51 ?300次閱讀
    <b class='flag-5'>Modbus協議</b>網關簡介

    簡單認識UART通信協議

    UART(Universal Asynchronous Receiver/Transmitter,通用異步收發傳輸器)通信協議是一種常見的串行通信協議,廣泛應用于計算機、嵌入式系統、傳感器、無線通信
    的頭像 發表于 07-25 18:07 ?1516次閱讀

    說明白了,Modbus RTU通信協議解析-成都電路板單片機開發

    Modbus協議在工業控制、電氣、電子領域是個很常見的一種通信協議,很多遇見的傳感器、控制器、變頻器、驅動器之類的基本都支持該協議,常見到什么程度呢,就是你看到的一個設備如果支持串口通信
    發表于 06-30 22:28

    Modbus和Profibus協議有什么區別

    隨著工業自動化技術的不斷發展,各種通信協議應運而生,以滿足不同設備和系統之間的數據交換需求。其中,Modbus和Profibus作為兩種廣泛應用的工業通信協議,在工業控制領域發揮著重要作用。本文將對
    的頭像 發表于 05-29 16:53 ?3974次閱讀

    RS485通信協議的特性和應用范圍

    隨著工業自動化和物聯網技術的飛速發展,數據通信協議的重要性日益凸顯。RS485通信協議作為一種廣泛應用于工業自動化領域的串行通信協議,其穩定性和可靠性得到了廣泛的認可。本文將對RS485通信協
    的頭像 發表于 05-23 16:27 ?1830次閱讀

    高速串行通信協議詳解

    高效、穩定、可靠的特點,成為了現代通信領域的重要組成部分。本文將對高速串行通信協議進行詳細解析,以期為讀者提供全面深入的了解。
    的頭像 發表于 05-16 16:45 ?860次閱讀

    Modbus協議網關是什么?Modbus協議網關的功能

    Modbus協議網關是一種專門用于工業自動化環境中的網絡設備,其主要功能是實現不同通信協議之間的轉換,尤其是將基于Modbus協議的設備或系統與使用其他協議的設備、控制系統或信息系統連
    的頭像 發表于 04-11 15:51 ?787次閱讀

    工業控制通信協議的報文幀分別是什么樣的?

    工業控制常用到不同的通信協議MODBUS,CAN,CANOPEN,PROFIBUS,PROFINET,ETNERNET,ETHERCAT,SPI,PPI,工業以太網等等,協議,就是兩臺設備交換數據
    發表于 01-19 14:46
    主站蜘蛛池模板: 日本免费人成黄页在线观看视频| 日本三级高清| 天天躁日日躁狠狠躁中文字幕老牛| 日本wwwwwwwww| 永久免费品色堂| 蕾丝视频成人★在线观看| 亚洲精品你懂的| 68日本xxxxxxxxx| 99自拍视频| 免费福利在线播放| 天天干天天干天天干天天| 国产 麻豆| 久久精品视频免费观看| 日本不卡高清免费v日本| 欧美精品啪啪| 日本成人视屏| 国内真实下药迷j在线观看| 欧美一级在线免费观看| 午夜乩伦| 亚州黄色网址| 一个人看aaaa免费中文| 美女扒开尿口给男人看的让 | 天堂中文在线网| 亚洲综合激情六月婷婷在线观看| 亚洲地址一地址二地址三| 色噜噜噜噜噜| 色综合久久久久久久久五月性色| 亚洲国产香蕉视频欧美| 日本一线a视频免费观看| 久久伊人男人的天堂网站| 成人av.com| 18视频免费网址在线观看| aaa免费视频| 97综合视频| 久久久久国产免费| 黄色网址免费在线| 国产精品免费看久久久| 国产精品久久精品福利网站| 一女被多男玩很肉很黄文| 亚洲国产网址| 久久9热|