• <del id="qqie6"><sup id="qqie6"></sup></del>
  • <tfoot id="qqie6"></tfoot>
  • <ul id="qqie6"></ul>
  • 上海實潤實業有限公司
    中級會員 | 第14年

    15821569256

    科普:Modbus通訊協議

    時間:2021/7/7閱讀:492
    分享:

    科普:Modbus通訊協議

    ModBus網絡是一個工業通信系統,由帶智能終端的可編過程控制器和計算機通過公用線路或局部專用線路連接而成。其系統結構既包括硬件、亦包括軟件。它可應用于各種數據采集和過程監控。

    ModBus網絡只有一個主機,所有通信都由他發出。網絡可支持247個之多的遠程從屬控制器,但實際所支持的從機數要由所用通信設備決定。采用這個系統,各PC可以和中心主機交換信息而不影響各PC執行本身的控制任務。

    了解Modbus通訊協議是怎么回事,在現場就可以用各種第三方的小軟件做通訊測試了。

    Modbus協議包括ASCIIRTU、TCP等,并沒有規定物理層。此協議定義了控制器能夠認識和使用的消息結構,而不管它們是經過何種網絡進行通信的。標準的Modicon控制器使用RS232C實現串行的Modbus。ModbusASCII、RTU協議規定了消息、數據的結構、命令和就答的方式,數據通訊采用Maser/Slave方式,Master端發出數據請求消息,Slave端接收到正確消息后就可以發送數據到Master端以響應請求;Master端也可以直接發消息修改Slave端的數據,實現雙向讀寫。Modbus協議需要對數據進行校驗,串行協議中除有奇偶校驗外,ASCII模式采用LRC校驗,RTU模式采用16CRC校驗,但TCP模式沒有額外規定校驗,因為TCP協議是一個面向連接的可靠協議。另外,Modbus采用主從方式定時收發數據,在實際使用中如果某Slave站點斷開后(如故障或關機),Master端可以診斷出來,而當故障修復后,網絡又可自動接通。因此,Modbus協議的可靠性。

    對于ModbusASCIIRTUTCP協議來說,其中TCPRTU協議非常類似,我們只要把RTU協議的兩個字節的校驗碼去掉,然后在RTU協議的開始加上50和一個6并通過TCP/IP網絡協議發送出去即可。

    1通訊傳送方式:

    通訊傳送分為獨立的信息頭,和發送的編碼數據。以下的通訊傳送方式定義也與ModBusRTU通訊規約相兼容:

    初始結構 = ≥4字節的時間

    地址碼 = 1 字節

    功能碼 = 1 字節

    數據區 = N 字節

    錯誤校檢 = 16CRC

    結束結構 = ≥4字節的時間

    地址碼:地址碼為通訊傳送的個字節。這個字節表明由用戶設定地址碼的從機將接收由主機發送來的信息。并且每個從機都有具有一個地址碼,并且響應回送均以各自的地址碼開始。主機發送的地址碼表明將發送到的從機地址,而從機發送的地址碼表明回送的從機地址。

    功能碼:通訊傳送的第二個字節。ModBus通訊規約定義功能號為1127。本儀表只利用其中的一部分功能碼。作為主機請求發送,通過功能碼告訴從機執行什么動作。作為從機響應,從機發送的功能碼與從主機發送來的功能碼一樣,并表明從機已響應主機進行操作。如果從機發送的功能碼的高位為1(比如功能碼大與此同時127),則表明從機沒有響應操作或發送出錯。

    數據區:數據區是根據不同的功能碼而不同。數據區可以是實際數值、設置點、主機發送給從機或從機發送給主機的地址。

    CRC碼:二字節的錯誤檢測碼。

    2通訊規約:

    當通訊命令發送至儀器時,符合相應地址碼的設備接通訊命令,并除去地址碼,讀取信息,如果沒有出錯,則執行相應的任務;然后把執行結果返送給發送者。返送的信息中包括地址碼、執行動作的功能碼、執行動作后結果的數據以及錯誤校驗碼。如果出錯就不發送任何信息。

    1.信息幀結構

    地址碼 功能碼 數據區 錯誤校驗碼

    8 8 N × 8 16

    地址碼:地址碼是信息幀的字節(8),從0255。這個字節表明由用戶設置地址的從機將接收由主機發送來的信息。每個從機都必須有一個地址碼,并且只有符合地址碼的從機才能響應回送。當從機回送信息時,相當的地址碼表明該信息來自于何處。

    功能碼:主機發送的功能碼告訴從機執行什么任務。表1-1列出的功能碼都有具體的含義及操作。

    數據區:數據區包含需要從機執行什么動作或由從機采集的返送信息。這些信息可以是數值、參考地址等等。例如,功能碼告訴從機讀取寄存器的值,則數據區必需包含要讀取寄存器的起始地址及讀取長度。對于不同的從機,地址和數據信息都不相同。

    錯誤校驗碼:主機或從機可用校驗碼進行判別接收信息是否出錯。有時,由于電子噪聲或其它一些干擾,信息在傳輸過程中會發生細微的變化,錯誤校驗碼保證了主機或從機對在傳送過程中出錯的信息不起作用。這樣增加了系統的安全和效率。錯誤校驗采用CRC-16校驗方法。

     

    注:信息幀的格式都基本相同:地址碼、功能碼、數據區和錯誤校驗碼。

    2.錯誤校驗

    冗余循環碼(CRC)包含2個字節,即16位二進制。CRC碼由發送設備計算,放置于發送信息的尾部。接收信息的設備再重新計算接收到信息的 CRC碼,比較計算得到的CRC碼是否與接收到的相符,如果兩者不相符,則表明出錯。

    3Modbus支持的功能碼:

    1

    讀取線圈狀態

    取得一組邏輯線圈的當前狀態(ON/OFF)

    2

    讀取輸入狀態

    取得一組開關輸入的當前狀態(ON/OFF)

    3

    讀取保持寄存器

    在一個或多個保持寄存器中取得當前的二進制值

    4

    讀取輸入寄存器

    在一個或多個輸入寄存器中取得當前的二進制值

    5

    強置單線圈

    強置一個邏輯線圈的通斷狀態

    6

    預置單寄存器

    把具體二進值裝入一個保持寄存器

    7

    讀取異常狀態

    取得8個內部線圈的通斷狀態,這8個線圈的地址由控制器決定

    8

    回送診斷校驗

    把診斷校驗報文送從機,以對通信處理進行評鑒

    9

    編程(只用于484

     

    使主機模擬編程器作用,修改PC從機邏輯

    10

    控詢(只用于484

    可使主機與一臺正在執行長程序任務從機通信,探詢該從機是否已完成其操作任務,僅在含有功能碼9的報文發送后,本功能碼才發送

    11

    讀取事件計數

    可使主機發出單詢問,并隨即判定操作是否成功,尤其是該命令或其他應答產生通信錯誤時

    12

    讀取通信事件記錄

    可是主機檢索每臺從機的ModBus事務處理通信事件記錄。如果某項事務處理完成,記錄會給出有關錯誤

    13

    編程(184/384 484 584

    可使主機模擬編程器功能修改PC從機邏輯

    14

    探詢(184/384 484 584  

    可使主機與正在執行任務的從機通信,定期控詢該從機是否已完成其程序操作,僅在含有功能13的報文發送后,本功能碼才得發送

    15

    強置多線圈

    強置一串連續邏輯線圈的通斷

    16

    預置多寄存器

    把具體的二進制值裝入一串連續的保持寄存器

    17

    報告從機標識

    可使主機判斷編址從機的類型及該從機運行指示燈的狀態

    18884MICRO 84

    可使主機模擬編程功能,修改PC狀態邏輯

    19

    重置通信鏈路

    發生非可修改錯誤后,是從機復位于已知狀態,可重置順序字節

    20

    讀取通用參數(584L

    顯示擴展存儲器文件中的數據信息

    21

    寫入通用參數(584L

    把通用參數寫入擴展存儲文件,或修改之

    2264

    保留作擴展功能備用

    6572

    保留以備用戶功能所用

    留作用戶功能的擴展編碼

    73119

    非法功能

    120127

    保留

    留作內部作用

    128255

    保留

    用于異常應答

    4功能碼命令詳解:

    在這些功能碼中較長使用的是12、3、45、6號功能碼,使用它們即可實現對下位機的數字量和模擬量的讀寫操作。

    101號命令,讀可讀寫數字量寄存器(線圈狀態):

    計算機發送命令:[設備地址] [命令號01] [起始寄存器地址高8] [8] [讀取的寄存器數高8] [8] [CRC校驗的低8] [CRC校驗的高8]

    例:[11][01][00][13][00][25][CRC][CRC]

    意義如下:

    <1>設備地址:在一個485總線上可以掛接多個設備,此處的設備地址表示想和哪一個設備通訊。例子中為想和17(十進制的17是十六進制的11)通訊。

    <2>命令號01:讀取數字量的命令號固定為01。

    <3>起始地址高8位、低8位:表示想讀取的開關量的起始地址(起始地址為0)。比如例子中的起始地址為19。

    <4>寄存器數高8位、低8位:表示從起始地址開始讀多少個開關量。例子中為37個開關量。

    <5>CRC校驗:是從開頭一直校驗到此之前。

    設備響應:[設備地址] [命令號01] [返回的字節個數][數據1][數據2]...[數據n] [CRC校驗的高8] [CRC校驗的低8]

    例:[11][01][05][CD][6B][B2][0E][1B] [CRC] [CRC]

    意義如下:

    <1>設備地址和命令號和上面的相同。

    <2>返回的字節個數:表示數據的字節個數,也就是數據1,2...n中的n的值。

    <3>數據1...n:由于每一個數據是一個8位的數,所以每一個數據表示8個開關量的值,每一位為0表示對應的開關斷開,為1表示閉合。比如例子中,表示20(索引號為19)開關閉合,21號斷開,22閉合,23閉合,24斷開,25斷開,26閉合,27閉合...如果詢問的開關量不是8的整倍數,那么后一個字節的高位部分無意義,置為0。

    <4>CRC校驗同上。

    205號命令,寫數字量(線圈狀態):

    計算機發送命令:[設備地址] [命令號05] [需下置的寄存器地址高8] [8] [下置的數據高8] [8] [CRC校驗的低8] [CRC校驗的高8]

    例:[11][05][00][AC][FF][00][CRC][CRC]

    意義如下:

    <1>設備地址和上面的相同。

    <2>命令號:寫數字量的命令號固定為05。

    <3>需下置的寄存器地址高8位,低8位:表明了需要下置的開關的地址。

    <4>下置的數據高8位,低8位:表明需要下置的開關量的狀態。例子中為把該開關閉合。注意,此處只可以是[FF][00]表示閉合[00][00]表示斷開,其他數值非法。

    <5>注意此命令一條只能下置一個開關量的狀態。

    設備響應:如果成功把計算機發送的命令原樣返回,否則不響應。

    3、03號命令,讀可讀寫模擬量寄存器(保持寄存器):

    計算機發送命令:[設備地址] [命令號03] [起始寄存器地址高8] [8] [讀取的寄存器數高8] [8] [CRC校驗的高8] [CRC校驗的低8]

    例:[11][03][00][6B][00][03] [CRC][CRC]

    意義如下:

    <1>設備地址和上面的相同。

    <2>命令號:讀模擬量的命令號固定為03

    <3>起始地址高8位、低8位:表示想讀取的模擬量的起始地址(起始地址為0)。比如例子中的起始地址為107

    <4>寄存器數高8位、低8位:表示從起始地址開始讀多少個模擬量。例子中為3個模擬量。注意,在返回的信息中一個模擬量需要返回兩個字節。

    設備響應:[設備地址] [命令號03] [返回的字節個數][數據1][數據2]...[數據n] [CRC校驗的高8] [CRC校驗的低8]

    例:[11][03][06][02][2B][00][00][00][64] [CRC] [CRC]

    意義如下:

    <1>設備地址和命令號和上面的相同。

    <2>返回的字節個數:表示數據的字節個數,也就是數據1,2...n中的n的值。例子中返回了3個模擬量的數據,因為一個模擬量需要2個字節所以共6個字節。

    <3>數據1...n:其中[數據1][數據2]分別是第1個模擬量的高8位和低8位,[數據3][數據4]是第2個模擬量的高8位和低8位,以此類推。例子中返回的值分別是5550,100。

    <4>CRC校驗同上。

    4、06號命令,寫單個模擬量寄存器(保持寄存器):

    計算機發送命令:[設備地址] [命令號06] [需下置的寄存器地址高8] [8] [下置的數據高8] [8] [CRC校驗的高8] [CRC校驗的低8]

    例:[11][06][00][01][00][03] [CRC] [CRC]

     

    意義如下:

    <1>設備地址和上面的相同。

    <2>命令號:寫模擬量的命令號固定為06。

    <3>需下置的寄存器地址高8位,低8位:表明了需要下置的模擬量寄存器的地址。

    <4>下置的數據高8位,低8位:表明需要下置的模擬量數據。比如例子中就把1號寄存器的值設為3。

    <5>注意此命令一條只能下置一個模擬量的狀態。

    設備響應:如果成功把計算機發送的命令原樣返回,否則不響應。

    5、16號命令,寫多個模擬量寄存器(保持寄存器):

    計算機發送命令:[設備地址] [命令號16] [需下置的寄存器地址高8] [8] [數據數量高8] [數據數量低8] [下置的數據高8] [8][……][……] [CRC校驗的高8] [CRC校驗的低8]

    例:[11][16][00][01][00][01][00][05] [CRC] [CRC]

    意義如下:

    <1>設備地址和上面的相同。

    <2>命令號:寫模擬量的命令號固定為16。

    <3>需下置的寄存器地址高8位,低8位:表明了需要下置的模擬量寄存器的地址。

    <4>需下置的數據數量高8位,低8位:表明了需要下置的數據數量,這里為1。

    <5>下置的數據高8位,低8位:表明需要下置的模擬量數據。比如例子中就把1號寄存器的值設為5。

    設備響應:如果成功把計算機返回的如下命令,否則不響應。

    設備響應:[設備地址] [命令號16] [需下置的寄存器地址高8] [8] [數據數量高8] [數據數量低8] [CRC校驗的高8] [CRC校驗的低8],如上例返回:

    [11][16][00][01][00][01] [CRC] [CRC]

    科普:Modbus通訊協議

    會員登錄

    ×

    請輸入賬號

    請輸入密碼

    =

    請輸驗證碼

    收藏該商鋪

    X
    該信息已收藏!
    標簽:
    保存成功

    (空格分隔,最多3個,單個標簽最多10個字符)

    常用:

    提示

    X
    您的留言已提交成功!我們將在第一時間回復您~
    在線留言
    主站蜘蛛池模板: 亚洲欧美成人网| 国产成人手机高清在线观看网站 | 国产成人精品无码专区| 成人嗯啊视频在线观看| 国产成人午夜高潮毛片| 中文国产成人精品久久96| 成人欧美一区二区三区的电影 | 国产成人精品无码免费看| 亚洲AV无码成人精品区狼人影院| 成人精品一区二区三区校园激情| 国产国产成人精品久久| 鲁大师成人一区二区三区| 国产精品成人亚洲| 欧美成人精品一区二区| 国产成人亚洲综合一区| 成人免费公开视频| 91成人在线观看视频| 国产v片成人影院在线观看| 成人午夜精品视频在线观看| 亚洲AV午夜成人片| 国产成人精品午夜福利| 欧美成人免费一区二区| 中文国产成人精品久久app| 国产成人亚洲精品无码车a| 成人怡红院视频在线观看| 成人片黄网站色大片免费| 3d成人免费动漫在线观看| 午夜电影成人福利| 国产成人午夜福利在线播放| 成人久久精品一区二区三区| 成人观看天堂在线影片| 色偷偷成人网免费视频男人的天堂| 国产成人AV综合色| 国产成人av一区二区三区不卡| 国产成人精品日本亚洲专区6| 成人影院wwwwwwwwwww| 欧美国产成人精品一区二区三区| 久久婷婷成人综合色| 久久久久亚洲av成人网人人软件| 久久精品成人无码观看56| 亚洲精品国产成人|