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

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

3天內(nèi)不再提示

上位機實戰(zhàn)應用之Modbus通信是什么

汽車電子技術(shù) ? 來源: dotNet工控上位機 ? 作者:新閣教育付工 ? 2023-02-22 15:34 ? 次閱讀

圖片

**前言

**

圖片

算了一下,今年是我跟Modbus相識的第10年,從最開始的簡單應用到協(xié)議了解,從協(xié)議開發(fā)到協(xié)議應用,這個陪伴了10年的協(xié)議,它一直沒變,變的只是我對它的理解和認識。

我一直認為Modbus協(xié)議的存在有它的歷史意義,也就是說即使沒有Modbus,也可能會出一個ABUS、DBUS之類的協(xié)議,因為控制器與控制器之間通信,一個標準協(xié)議,會大大提供開發(fā)效率。

因此,現(xiàn)在國產(chǎn)的各種品牌PLC,比如臺達、匯川、信捷等,這些PLC都是支持Modbus協(xié)議,也就是說,學會了Modbus協(xié)議,我們可以很輕松與這些PLC實現(xiàn)數(shù)據(jù)通信。

文章有點長,感謝大家耐心閱讀,文末有福利!

Modbus協(xié)議能夠成為工業(yè)領(lǐng)域應用最廣泛的協(xié)議,它必須具備以下幾個特點:

1、免費:這個是最大的前提,任何產(chǎn)品都是一樣,只有通過免費才能獲取到前期最大的使用量。

2、簡單:Modbus協(xié)議幀格式簡單緊湊,用戶容易理解,廠商容易集成。

3、接口:Modbus協(xié)議只是一種規(guī)約,屬于應用層的協(xié)議,因此不僅可以應用在串口(485/232/422),也可以在以太網(wǎng)、光纖、藍牙、無線上傳輸。

圖片

**存儲區(qū)分類

**

圖片

我一般介紹Modbus協(xié)議的時候,喜歡站在Modbus規(guī)約制定者的角度,結(jié)合一些事物來對比說明,這樣對很多人來說,可能會更加容易理解。

假設(shè)沒有Modbus協(xié)議,我們想要制定一個協(xié)議,我們首先要明確,協(xié)議的目的是為了數(shù)據(jù)傳輸,因此,為了更好地存儲不同的數(shù)據(jù)類型,我們會將布爾和非布爾的數(shù)據(jù)分開存儲,因此,就有了線圈和寄存器的概念。

線圈和寄存器,這個經(jīng)常被很多人詬病,認為不應該這么翻譯,感覺不容易理解。從電氣角度來看,在電氣控制回路中,一般都是靠接觸器或中間繼電器來實現(xiàn)控制,接觸器或中繼最終靠的是線圈的得電和失電來控制觸點閉合和斷開,因此用線圈表示布爾量;而寄存器在計算機中,就是用來存儲數(shù)據(jù)的,因此非布爾的數(shù)據(jù)放在寄存器里。

這個可以跟PLC的存儲區(qū)來進行對比,西門子的I/Q/M都是線圈,V/T/C/DB都是寄存器,三菱的X/Y都是線圈,D/W/H都是寄存器,歐姆龍的CIO是線圈,D/W/H是寄存器。

以西門子為例,雖然I和Q都表示線圈,但是他們的分工是不同的,I表示輸入,Q表示輸出,輸入意味著該存儲區(qū)里的值必須由外部設(shè)備接入,是只讀的,輸出表示輸出結(jié)果給外部設(shè)備,是可讀可寫的。

因此,Modbus的線圈和寄存器應該也按照只讀、讀寫來進一步細分,因此這就形成了Modbus的存儲區(qū),如下表所示:

序號 讀寫 存儲類型 存儲區(qū)名稱
1 只讀 線圈 輸入線圈
2 讀寫 線圈 輸出線圈
3 只讀 寄存器 輸入寄存器
4 讀寫 寄存器 保持寄存器

圖片

**存儲區(qū)代號

**

圖片

然而,上面表格里的存儲區(qū)名稱是一個全稱,開發(fā)和使用中使用全稱會比較麻煩,因此需要給他們?nèi)€別名,就像西門子的I/Q/M一樣,這些都是西門子給存儲區(qū)取的一個代號,所以Modbus也要給這些存儲區(qū)取一個代號,干脆直接用數(shù)字吧,于是,就有了下面的規(guī)定:

存儲區(qū)名稱 存儲區(qū)代號
輸入線圈 1區(qū)
輸出線圈 0區(qū)
輸入寄存器 3區(qū)
保持寄存器 4區(qū)

這個其實就跟我們的姓名和小名一樣,姓名是正式場合使用,日常場合,我們一般可以使用小名。

圖片

**存儲區(qū)范圍

**

圖片

無論是什么存儲區(qū),都會有一個范圍的限制,就像西門子的M區(qū)可能最大到8192,三菱的X區(qū)最大到2048,Modbus的每個存儲區(qū)也應該規(guī)定一個范圍,不能無限制使用。

Modbus是這么規(guī)定的,每個存儲區(qū)的最大范圍是65536,這個范圍是很大的。

我們再以三菱的X區(qū)為例,如果最大范圍是2048,那么意味著我們只能訪問X0-X2047這些地址,我們這里說的X0、X2047,就是我們常說的PLC地址,那么這個地址是怎么組成的呢?它是由存儲區(qū)編號加上一個地址索引組成,我們把這樣的PLC地址,理解為絕對地址,后面的地址索引,理解為相對地址。

所謂絕對地址,就是我們僅僅通過一個地址名稱,就能知道是什么存儲區(qū)的第幾個數(shù)據(jù),而這個第幾個,就是我們說的相對地址,因此絕對地址是唯一的,相對地址,每個存儲區(qū)都有。

那么對于Modbus來說,我們的絕對地址和相對地址是怎么樣的呢?

我們?nèi)匀蛔駨墓剑航^對地址=區(qū)號+相對地址。

但是也會有一些不一樣的地方,以保持型寄存器為例,第一個絕對地址是400001,這個地方不是400000,這個是由Modbus規(guī)約決定的,其它存儲區(qū)也是類似的。

因此,Modbus存儲區(qū)范圍如下圖所示:

圖片

正如上文所說,65536這個范圍是很大的,但在實際使用中,我們一般用不了這么多地址,一般情況下,10000以內(nèi)就已經(jīng)足夠我們使用了,因此,為了方便起見,我們有一種短的地址模型,如下圖所示:

圖片

圖片

**功能碼

**

圖片

功能碼這個概念,我們可以這么去理解,先回到我們的初衷,協(xié)議的目的是為了數(shù)據(jù)傳輸,也就是為了讀取數(shù)據(jù)和寫入數(shù)據(jù),我們已經(jīng)確定好4個存儲區(qū),存儲不同的數(shù)據(jù)類型,那么接下來我們就要對這些存儲區(qū)進行讀寫,那么可能會產(chǎn)生很多種不同的行為,比如讀取輸入線圈存儲區(qū)、讀取輸出線圈存儲區(qū),這就是兩種不同的行為,同樣的,如果用讀取輸入線圈存儲區(qū)、讀取輸出線圈存儲區(qū),會比較麻煩,那么我們干脆給每種形成指定一個代號,那么這種代號就是功能碼。

我們再來探討一下,究竟有多少種不同的行為呢?

讀取和寫入是2種行為,存儲區(qū)有4個,但是我們知道輸入線圈和輸入寄存器是只讀的,因此不能進行寫入,除去這2種的話,應該會產(chǎn)生6種不同的行為,如下圖所示:

行為序號 具體行為
1 讀取輸入線圈
2 讀取輸出線圈
3 讀取輸入寄存器
4 讀取保持寄存器
5 寫入輸出線圈
6 寫入保持寄存器

然而,Modbus規(guī)約將寫入輸出線圈和寫入保持寄存器這2種行為,又進一步做了細分,包括寫入單個和寫入多個,因此原來的6種行為就變成了8種行為,同時給每種行為設(shè)置一個代號,就形成了下圖所示的功能碼列表:

功能碼 功能說明
0x01 讀取輸出線圈
0x02 讀取輸入線圈
0x03 讀取保持寄存器
0x04 讀取輸入寄存器
0x05 寫入單個線圈
0x06 寫入單個寄存器
0x0F 寫入多個線圈
0x10 寫入多個寄存器

Modbus規(guī)約中的功能碼其實不止這8個,還有一些功能碼是用于診斷或異常碼,但是一般很少使用,這8種功能碼是最主要的核心功能碼。

圖片

**協(xié)議分類

**

圖片

Modbus嚴格來說,是一個標準化的規(guī)約,而不是一個具體協(xié)議。我們常說的設(shè)備A和設(shè)備B之間通過Modbus協(xié)議來通信,這句話其實是不嚴謹?shù)摹?/p>

Modbus規(guī)約上有三種不同的協(xié)議報文幀,分別是ModbusRtu、ModbusAscii、ModbusTcp。

一般來說,ModbusRtu和ModbusAscii是運行在串口上的協(xié)議,ModbusTcp是運行

在以太網(wǎng)上的協(xié)議,但是這并非絕對的,我們也可以將ModbusRtu、ModbusAscii運行在以太網(wǎng)或光纖上使用,同樣的,在串口網(wǎng)絡(luò)里,我們也可以使用ModbusTcp的協(xié)議,因為協(xié)議只是一種規(guī)范,并不限制通信介質(zhì)。

圖片

**報文格式

**

前面我們說了Modbus有三種不同的協(xié)議,分別是ModbusRtu、ModbusAscii、ModbusTcp,那么這三種協(xié)議的報文格式也是不同的,下面分別對這三種協(xié)議的報文格式進行說明:

  1. ModbusRtu的報文格式如下:

第一部分:從站地址,占1個字節(jié)

第二部分:功能碼,占1個字節(jié)

第三部分:數(shù)據(jù)部分,占N個字節(jié)

第四部分:校驗部分,CRC校驗,占2個字節(jié)

  1. ModbusAscii的報文格式如下:

第一部分:開始字符(:)

第二部分:從站地址,占2個字節(jié)

第三部分:功能碼,占2個字節(jié)

第四部分:數(shù)據(jù)部分,占N個字節(jié)

第五部分:校驗部分,LRC校驗,占2個字節(jié)

第六部分:結(jié)束字符(CR LF)

  1. ModbusTcp的報文格式如下:

第一部分:事務(wù)處理標識符,占2個字節(jié)

第二部分:協(xié)議標識符,占2個字節(jié)

第三部分:長度,占2個字節(jié)

第四部分:單元標識符,占1個字節(jié)

第五部分:功能碼,占1個字節(jié)

第六部分:數(shù)據(jù)部分,占N個字節(jié)

圖片

調(diào)試軟件

Modbus學習成本很低,因為協(xié)議是公開免費的,我們可以直接獲取到《Modbus中文協(xié)議文檔》。

同時,也有很多調(diào)試軟件可以進行仿真調(diào)試,因此我們可以在不購買任何硬件的情況下,就把Modbus協(xié)議學好。

Modbus調(diào)試軟件可以通過本公眾號后臺回復201直接獲取 。

Modbus 學習必須要配合相關(guān)的調(diào)試軟件,可以達到事半功倍的效果,Modbus

學習必備的三大神器分別是 ModbusPoll、ModbusSlave 及 VSPD,ModbusPoll 軟件主要用于仿真 Modbus主站或 Modbus 客戶端,ModbusSlave 軟件主要用于仿真 Modbus 從站或 Modbus 服務(wù)器,而 VSPD 全稱 Configure Virtual Serial Port Driver,是用來給電腦創(chuàng)建虛擬串口使用的。

即使我們想要結(jié)合硬件,支持Modbus協(xié)議的設(shè)備也有很多,各種品牌PLC、各種品牌的儀表、各種溫濕度傳感器、流量計等都可以很好地支持Modbus協(xié)議。

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制器
    +關(guān)注

    關(guān)注

    113

    文章

    16580

    瀏覽量

    180463
  • ModBus協(xié)議
    +關(guān)注

    關(guān)注

    3

    文章

    179

    瀏覽量

    33701
  • ABUS
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    14177
收藏 人收藏

    評論

    相關(guān)推薦

    上位通過Modbus轉(zhuǎn)Profinet網(wǎng)關(guān)與變頻器通訊應用在卷材機上案例

    通過Modbus轉(zhuǎn)Profinet網(wǎng)關(guān)(XD-MDPN100)上位機能夠直接與卷材機上的變頻器進行通信,實時地獲取卷材的運行狀態(tài)、控制參數(shù)等信息。
    的頭像 發(fā)表于 12-02 11:21 ?1149次閱讀
    <b class='flag-5'>上位</b><b class='flag-5'>機</b>通過<b class='flag-5'>Modbus</b>轉(zhuǎn)Profinet網(wǎng)關(guān)與變頻器通訊應用在卷材機上案例

    TCP通信協(xié)議-Labview上位

    現(xiàn)在用單片進行信息采集,通過GPRS模塊上傳到PC,用Labview做上位,TCP通信協(xié)議,想請教一下,TCP通信協(xié)議和
    發(fā)表于 12-10 08:58

    如何去實現(xiàn)ModBUs Poll上位和單片之間的通信

    如何去實現(xiàn)ModBUs Poll上位和單片之間的通信?實現(xiàn)ModBUs Poll
    發(fā)表于 09-18 06:01

    STM32F103與上位是如何實現(xiàn)MODBUS通信

    Modbus是什么?STM32F103與上位是如何實現(xiàn)MODBUS通信的?
    發(fā)表于 12-13 07:03

    基于Modbus TCP的MCGS上位軟件教程

    配置設(shè)備參數(shù)圖1.IP地址配置成上位同一個網(wǎng)段,例如安裝上位軟件的上位ip地址為192.
    發(fā)表于 08-09 14:24

    上位與PLC的通信與監(jiān)控設(shè)計

    上位與PLC的通信與監(jiān)控設(shè)計:本文簡要的介紹了CPM2A的上位通信以及實現(xiàn)
    發(fā)表于 11-14 12:57 ?46次下載

    上位MODBUS RTU多從站通訊的VB程序

    上位MODBUS RTU多從站通訊的VB程序,實現(xiàn)上位與下位之間的數(shù)據(jù)傳輸。
    發(fā)表于 10-12 16:05 ?77次下載

    C#上位實戰(zhàn)開發(fā)指南

    C#上位實戰(zhàn)開發(fā)指南
    發(fā)表于 11-22 19:25 ?0次下載

    ModBus RTU上位與PLC通信

    一、預備知識 二、上位經(jīng)RS485接口與PLC通信 1、概述 2、西門子觸摸屏“站號”設(shè)置 3、溫度讀取與寫入 1)PLC參數(shù)表的介紹 2)上位機電腦通過“調(diào)試助手”發(fā)送指
    發(fā)表于 04-17 11:40 ?8次下載
    <b class='flag-5'>ModBus</b> RTU<b class='flag-5'>上位</b><b class='flag-5'>機</b>與PLC<b class='flag-5'>通信</b>

    上位開發(fā)新手指南(二)上位通信

    上位開發(fā)中,串口通信和TCP通信是兩種常見的通信方式。串口通信是指通過串口將數(shù)據(jù)發(fā)送和接收到
    發(fā)表于 05-08 11:37 ?8次下載
    <b class='flag-5'>上位</b><b class='flag-5'>機</b>開發(fā)新手指南(二)<b class='flag-5'>上位</b><b class='flag-5'>機</b><b class='flag-5'>通信</b>

    上位開發(fā)——Modbus到底有多快

    前面寫了一篇關(guān)于基于Modbus讀取運動控制卡的文章,發(fā)現(xiàn)很多小伙伴對Modbus的實時性比較感興趣,想知道上位開發(fā)種 Modbus
    發(fā)表于 05-10 11:10 ?0次下載
    <b class='flag-5'>上位</b><b class='flag-5'>機</b>開發(fā)——<b class='flag-5'>Modbus</b>到底有多快

    PLC MODBUS通信協(xié)議的應用及編程

    現(xiàn)為大家講解一下MODBUS的應用,現(xiàn)在工業(yè)控制上位和下位通信大部分采用通信協(xié)議為
    的頭像 發(fā)表于 06-25 10:25 ?3207次閱讀
    PLC <b class='flag-5'>MODBUS</b><b class='flag-5'>通信</b>協(xié)議的應用及編程

    上位通過Modbus轉(zhuǎn)Profinet網(wǎng)關(guān)與CGV300變頻器通訊配置案例

    上位通過Modbus轉(zhuǎn)Profinet網(wǎng)關(guān)(XD-MDPN100)與CGV300變頻器通訊的案例可以實現(xiàn)兩個不同的通信協(xié)議之間的互聯(lián)互通。在這個案例中,
    的頭像 發(fā)表于 10-26 09:13 ?963次閱讀
    <b class='flag-5'>上位</b><b class='flag-5'>機</b>通過<b class='flag-5'>Modbus</b>轉(zhuǎn)Profinet網(wǎng)關(guān)與CGV300變頻器通訊配置案例

    上位通過Modbus轉(zhuǎn)Profinet網(wǎng)關(guān)與變頻器Modbus通訊配置案例

    上位與變頻器Modbus通訊是通過Modbus轉(zhuǎn)Profinet網(wǎng)關(guān)來實現(xiàn)的。這個網(wǎng)關(guān)可以理解為一個通信翻譯器,負責將
    的頭像 發(fā)表于 10-25 20:55 ?1071次閱讀
    <b class='flag-5'>上位</b><b class='flag-5'>機</b>通過<b class='flag-5'>Modbus</b>轉(zhuǎn)Profinet網(wǎng)關(guān)與變頻器<b class='flag-5'>Modbus</b>通訊配置案例

    上位通信協(xié)議詳解 嵌入式上位機設(shè)計流程

    通信協(xié)議的介紹: Modbus 概述 :Modbus是一種串行通信協(xié)議,廣泛應用于工業(yè)自動化領(lǐng)域。它定義了上位
    的頭像 發(fā)表于 12-04 10:21 ?1874次閱讀