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

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

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

3天內不再提示

簡單介紹Modbus RTU協議

小麥大叔 ? 來源:小麥大叔 ? 2024-05-09 09:13 ? 次閱讀

背景

介紹modbus rtu之前,我們可以了解到,Modbus是施耐德電氣公司,于1979年發明的,是全球第一個真正用于工業現場的總線協議。四十多年過去了,現在仍然被廣泛使用在各個工業控制領域。除了這個協議很穩定的原因之外:

免費;

方便部署和維護;

對供應商來說,修改移動本地的比特或字節沒有很多限制;

modbus 是OSI模型第七層上的應用層報文傳輸協議,OSI定義了開放系統的層次結構、層次之間的相互關系以及各層所包括的可能的任務,作為一個框架來協調和組織各層所提供的服務。

OSI參考模型并沒有提供一個可以實現的方法,而是描述了一些概念,用來協調進程間通信標準的制定。即OSI參考模型并不是一個標準,而是一個在制定標準時所使用的概念性框架。

modbus在OSI模型中,可以描述為下圖;

5716f730-0d58-11ef-a297-92fbcf53809c.png

modbus osi模型中的位置

EIA485/TIA485就是RS485,隨著技術不斷發展,485標準目前是電信行業協會(TIA)維護,所以名稱為TIA-485,當然工程師及應用指南仍繼續用RS-485來稱呼也是沒問題的;

下面我們來介紹一些串行鏈路協議。

Modbus 串行鏈路協議

Modbus串行鏈路協議是一個主從模式(主機和從機),半雙工的數據傳輸協議,485標準通常需要兩條線,在某一個確定時刻,有一個主機和從機進行通訊。

主從模式:通常總線上有一個主機和多個從機,每個從機有唯一的ID,主機通過ID進行尋址從機,然后進行數據傳輸;

半雙工傳輸:相對應半雙工的是全雙工,全雙工運行發送數據接收數據同時發生,所以半雙工就不難理解了,同一時刻只能進行發送數據,或者只能接收數據;

整體的結構圖如下所示;

5756c9f0-0d58-11ef-a297-92fbcf53809c.png

一個485總線的主從模式

這里我們還要明確幾點:

從機無法主動向從機發送數據,只有在主機發送數據給從機(發送請求),然后從機接收到主機發送的數據之后,再回傳數據給主機;具體如下所示;

578eadf2-0d58-11ef-a297-92fbcf53809c.png

主從模式

正如前面所提到的,modbus是半雙工傳輸的,即主機發送數據的時候,是不能接收數據的,所以這里總共分為兩步來進行。

主機發送數據的方式有兩種,一個是 1對1,一個是1對多,也就是我們常說的廣播形式,所有從機都可以收到主機發送的數據;

1對1 只需要發送數據給特定地址的從機即可,廣播只需要把發送地址設置為0即可,所以廣播地址為0;

這里我們已經大致了解了主機和從機之間的數據傳輸的情況,下面我們就再來介紹一下數據傳輸的具體格式;

傳輸模式

57c55366-0d58-11ef-a297-92fbcf53809c.png

先來說說Modbus有兩種傳輸模式,RTU傳輸模式和ASCII傳輸模式;

RTU傳輸:Remote Terminal Unit模式在Modbus中消息由十六進制組成,數據密度高,吞吐率高;

ASCII傳輸:消息由ASCII 字符發送效率不及RTU模式,無法使用RTU模式的定時管理時,使用ASCII模式;

比如:0x12會被整合成兩個字符發送:0x31和0x32發送,

因為 0x31等于字符1;0x32等于字符2

下面我們會主要介紹modbus RTU。

幀格式

在講幀格式之前,首先我們想象一下,人與人之間的對話,最基本單元是漢字,然后相互交流就用漢字組成的句子,比如下面的對話;

老板問:中午吃什么?

小樟說:吃飯吧!

所以機器之間的通信也是類似的,我們可以把字節當作最基本的數據單元,然后由字節組成句子,也就是通信幀;

但是現在情況出現了變化,對話的人里,除了小樟,還有一個小紅,這時候,為了明確和誰說話,就需要在對話前面加上名字:

老板:小樟,中午吃面嗎?

小樟:老板,吃飯去吧。

小紅,沒有叫他,語言柚子;

所以我們繼續回到modbus的數據幀格式,這里的協議定義了一個基礎通信層的簡單協議數據單元(PDU),具體如下圖所示;

59137eaa-0d58-11ef-a297-92fbcf53809c.png

所以這里基本分為四個部分,地址域功能碼數據差錯校驗(CRC/LRC),統稱為ADU (Application Data Unit),基本上進行傳輸的數據都要滿足這個格式,作為一個完整的幀,對照前面老板的對話內容,我們這里可以簡單的理解一下:

地址域:可以理解成 具體和誰說話

功能碼:可以理解成 具體動作,比如 去做,來拿,去吃 等等;

數據:可以理解成 具體內容,比如 面,飯 等等,也可以是其他,這里配合上下文,所以是吃的東西;

差錯校驗:可以理解成,說出來的話必須可以讓人理解,不然別人聽不懂啊;實際上在協議中通常使用CRC或LRC保證傳輸的數據沒有錯誤;

下面我們再深入分析一下;

PDU

Modbus PDU(protocol data unit)格式被定義為一個功能代碼,后面跟著一組關聯的數據。

該數據的大小和內容由功能代碼定義,整個PDU(功能代碼和數據)的大小不能超過253個字節。

每個功能代碼都有一個特定的行為,從設備可以根據所需的應用程序行為靈活地實現這些行為。

PDU規范定義了數據訪問和操作的核心概念;但是,從設備可能會以規范中未明確定義的方式處理數據。

地址域

地址域占用一個字節,所以一般來說尋址范圍是0~255,一般在系統中用1~147,其他地址暫時保留,另外,同一個總線上的從機,每個地址必須唯一。

其中0是廣播地址;

下面是Freemodbus的一個從機初始化代碼,0x02就是這個從機的地址,

eMBInit(MB_RTU,0x02,3,115200,MB_PAR_NONE);

功能碼

功能碼占一個字節,所以范圍是 0~255,協議中規定了功能碼分為三類:公共功能碼,用戶自定義功能碼,保留功能碼。整體如下所示;

59483050-0d58-11ef-a297-92fbcf53809c.png

公共功能碼必須保證它的唯一性,這是由Modbus組織已經規定好,并且具有一致性測試的功能碼,所以在一定程度上,它保證了協議的可復用性。

由上表可知,公共功能碼分為四種,分別是:

離散量輸入:只讀類型,單位:bit;

線圈:讀寫類型,單位:bit;

輸入寄存器:只讀類型,單位:字節;

保持寄存器:讀寫類型,單位:字節;

下面是移植Freemodbus協議,從機上需要對這四個公共功能碼處理的回調函數:

//輸入寄存器量
eMBErrorCodeeMBRegInputCB(UCHAR*pucRegBuffer,USHORTusAddress,USHORTusNRegs)
{
eMBErrorCodeeStatus=MB_ENOERR;
returneStatus;
}
//保持寄存器量
eMBErrorCode
eMBRegHoldingCB(UCHAR*pucRegBuffer,USHORTusAddress,USHORTusNRegs,
eMBRegisterModeeMode)
{
eMBErrorCodeeStatus=MB_ENOERR;
returneStatus;
}

//線圈數量
eMBErrorCode
eMBRegCoilsCB(UCHAR*pucRegBuffer,USHORTusAddress,USHORTusNCoils,
eMBRegisterModeeMode)
{
eMBErrorCodeeStatus=MB_ENOERR;
returneStatus;
}

//離散輸入數量
eMBErrorCode
eMBRegDiscreteCB(UCHAR*pucRegBuffer,USHORTusAddress,USHORTusNDiscrete)
{
eMBErrorCodeeStatus=MB_ENOERR;
returneStatus;
}

底層如何傳輸

我們先看一下最底層modbus數據是如何發送的,沒錯,看到RS485和232,那我們自然想到了串口。

所以最根本的數據格式可以參考一下串口數據的定義,也就是我們說的起始位,數據位,校驗位,數據位;具體如下所示;

5996e36c-0d58-11ef-a297-92fbcf53809c.png

所以這里我們可以規定一下:

起始位+數據位+校驗位(可選)+ 停止位 等于一個字符;因此這里可以通過串口的波特率去計算出單個字符所需要的時間。

然后我們再看一下,modbus幀是如何發送的?

在RTU模式中,幀之間的間隔至少為3.5個字符的空閑時間間隔,以便于表示幀的開始和幀的結束,所以如果想自己整一個modbus rtu就需要一個定時器去結算空閑時間的長度。

59d1ea98-0d58-11ef-a297-92fbcf53809c.png

3.5字符時間

整個數據必須以連續的字符流進行發送,如果兩個字符之間的長度等于1.5個字符時間,則認為幀消息不完整,則認為設備不該接收該消息,具體如下所示;

5a1ec142-0d58-11ef-a297-92fbcf53809c.png

1.5字符時間

這里需要注意的是RTU需要定時器中斷的參與,所以,1.5字符時間和3.5字符時間的檢測,在串口通訊速率很高的時候,需要高頻率得進入中斷,這就會增加系統開銷。

所以通常在波特率低于19200的時候,可以嚴格遵守1.5和3.5字符時間的規定。

如果波特率大于19200的時候,需要滿足兩個固定時間即可:

1.5字符時間:750 us;

3.5字符時間:1.75ms;

總結

本文簡單介紹了modbus rtu協議,包括串行鏈路通信,幀格式以及硬件鏈路層的消息格式。



審核編輯:劉清

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

    關注

    31

    文章

    5343

    瀏覽量

    120348
  • RS-485
    +關注

    關注

    11

    文章

    684

    瀏覽量

    84273
  • ModBus協議
    +關注

    關注

    3

    文章

    177

    瀏覽量

    33425
  • CRC校驗
    +關注

    關注

    0

    文章

    84

    瀏覽量

    15209
  • RTU
    RTU
    +關注

    關注

    0

    文章

    413

    瀏覽量

    28678

原文標題:一文搞懂 Modbus RTU 協議

文章出處:【微信號:knifewheat,微信公眾號:小麥大叔】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    【新手上路】Labview與modbus RTU協議的問題

    傳感器是modbus RTU協議 怎么用Labview采集信號?
    發表于 05-17 09:54

    Modbus TCP轉Modbus RTU的實現

    使用ZLSN2040、NETCOM2040實現Modbus TCP到Modbus RTU的轉化。1.Modbus TCP與Modbus
    發表于 08-10 10:04

    基于Modbus RTU的串口調試軟件的實現

    摘 要:文中介紹Modbus RTU通訊協議的特點,闡述了該協議在VC2005編程環境下串口調試軟件的具體實現方法。并編制了相關的程序,該
    發表于 12-18 19:18

    modbus協議講解modbus-rtu以及modbus-tcp協議詳解

    modbus協議講解modbus-rtu以及modbus-tcp協議詳解,見附件。
    發表于 03-01 10:14

    Modbus-RTU協議模式學習下載

    1.Modbus定義: 是一種串行通信協議,一開始是為使用PLC(即可編程邏輯控制器)設備通信而發表,已成為工業上通信協議的標準,是工業電子設備間常用連接方式。2.Modbus協議組成
    發表于 07-02 06:12

    Modbus RTU通訊協議相關資料下載

    Modbus RTU通訊協議中OSI模型,數據鏈路層和應用層是通訊關鍵部分。
    發表于 11-30 08:29

    Modbus-RTU協議包括哪些呢

    Modbus-RTUModbus 一個工業上常用的通訊協議、一種通訊約定。Modbus協議包括RTU、ASCII、TCP。其中MODBUS-RTU
    發表于 02-16 07:43

    如何快速實現Modbus RTUModbus TCP協議轉換?

    Modbus協議是工業現場串口設備之間常用的連接方式,其中最常見的就是Modbus RTUModbus TCP兩種。許多工廠需要將現場各種不同型號設備的數據都能夠通過一個上位機軟件或
    發表于 08-18 18:36

    Modbus_RTU協議在S7-200中的應用

    介紹Modbus_RTU協議在S7-200中的應用
    發表于 03-28 18:03 ?21次下載

    485-Modbus-RTU通訊協議

    Modbus RTU通信協議解讀,本協議采用主從問答方式。
    發表于 10-12 16:05 ?48次下載

    Modbus-RTU協議

    Modbus-RTUModbus 一個工業上常用的通訊協議、一種通訊約定。Modbus協議包括RTU、ASCII、TCP。其中MODBUS-RTU
    發表于 12-20 18:48 ?39次下載
    <b class='flag-5'>Modbus-RTU</b><b class='flag-5'>協議</b>

    MODBUS RTU傳輸模式介紹

    上期我們學習了,第一篇MODBUS協議基本介紹,今天我們來研究第二篇MODBUS RTU傳輸模式介紹
    的頭像 發表于 07-19 15:58 ?5624次閱讀
    <b class='flag-5'>MODBUS</b> <b class='flag-5'>RTU</b>傳輸模式<b class='flag-5'>介紹</b>

    MODBUS RTU詳細解釋

    Modbus 一個工業上常用的通訊協議、一種通訊約定。Modbus 協議包括 RTU、ASCII、TCP。其中
    發表于 01-12 16:39 ?9次下載

    Modbus-RTU通訊協議是什么?

    Modbus-RTU通訊協議是一種串行通訊協議,它可以用于連接不同類型的設備,以實現遠程監控和控制。Modbus協議包括RTU、ASCII、
    的頭像 發表于 05-23 15:06 ?607次閱讀

    Profibus PA轉Modbus RTU協議網關

    捷米特JM-RTU-PA網關將Profibus PA和Modbus RTU專用通訊協議橋接的協議轉換設備。符合
    的頭像 發表于 09-25 11:47 ?316次閱讀
    Profibus PA轉<b class='flag-5'>Modbus</b> <b class='flag-5'>RTU</b><b class='flag-5'>協議</b>網關
    主站蜘蛛池模板: 亚洲一区免费看| 一级做性色a爱片久久片| 免费福利影院| 国产chinesehd精品酒店| 精品免费视在线观看| 热re66久久精品国产99热| 在线天堂视频| 日韩一卡 二卡 三卡 四卡 免费视频 | 免费大片a一级一级| 亚洲欧美日韩另类精品一区二区三区| 天堂在线精品| 六月丁香婷婷天天在线| 二十年等一人小说在线观看| 天天干天天色综合| 2018天天操夜夜操| 流不尽奶水的大乳h| 特级一级全黄毛片免费| 久久婷婷国产综合精品| 夜夜爽夜夜操| а8天堂资源在线官网| 精品成人| 欧美在线免费| 91色蝌蚪| 97人人做人人添人人爱| 激情三级视频| 狠狠躁夜夜躁人人爽天天3| 天堂8在线官网| 亚洲高清一区二区三区| 色综合久久一区二区三区| 久久99久久精品免费思思6| 天天免费视频| 中文久草| 久久久久久久综合色一本| 国产小视频在线高清播放| 成人aaa| 免费黄色a视频| 天天做天天爱天天干| h国产| 色爱综合网| 2022欧美高清中文字幕在线看| 亚洲最新|