Modbus規(guī)范(修改稿V2)_第1頁
Modbus規(guī)范(修改稿V2)_第2頁
Modbus規(guī)范(修改稿V2)_第3頁
Modbus規(guī)范(修改稿V2)_第4頁
Modbus規(guī)范(修改稿V2)_第5頁
已閱讀5頁,還剩123頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、GB/T ××××××××Modbus規(guī)范(修改稿V2)前 言-串行鏈路和TCP/IP上的MODBUS標準介紹該標準包括兩個通信規(guī)程中使用的MODBUS應用層協(xié)議和服務規(guī)范:·串行鏈路上的MODBUSMODBUS串行鏈路取決于TIA/EIA標準:232-F和485-A。·TCP/IP上的MODBUSMODBUS TCP/IP取決于IETF標準:RFC793和RFC791有關。串行鏈路和TCP/IP上的MODBUS是根據(jù)相應ISO層模型說明的兩個通信規(guī)程。下圖強調指出了該標準的主要部分。綠色方框表

2、示規(guī)范?;疑娇虮硎疽延械膰H標準(TIA/EIA和IETF標準)。MODBUS標準分為三部分。第一部分(“Modbus協(xié)議規(guī)范”)描述了MODBUS事物處理。第二部分(“MODBUS報文傳輸在TCP/IP上的實現(xiàn)指南”)提供了一個有助于開發(fā)者實現(xiàn)TCP/IP上的MODBUS應用層的參考信息。第三部分(“MODBUS報文傳輸在串行鏈路上的實現(xiàn)指南”)提供了一個有助于開發(fā)者實現(xiàn)串行鏈路上的MODBUS應用層的參考信息。第一部分:Modbus協(xié)議第一部分:Modbus協(xié)議1 引言1.1 范圍MODBUS是OSI模型第7層上的應用層報文傳輸協(xié)議,它在連接至不同類型總線或網絡的設備之間提供客戶機/服務

3、器通信。自從1979年出現(xiàn)工業(yè)串行鏈路的事實標準以來,MODBUS使成千上萬的自動化設備能夠通信。目前,繼續(xù)增加對簡單而雅觀的MODBUS結構支持。互聯(lián)網組織能夠使TCP/IP棧上的保留系統(tǒng)端口502訪問MODBUS。MODBUS是一個請求/應答協(xié)議,并且提供功能碼規(guī)定的服務。MODBUS功能碼是MODBUS請求/應答PDU的元素。本文件的作用是描述MODBUS事務處理框架內使用的功能碼。1.2 規(guī)范性引用文件1RFC791,互聯(lián)網協(xié)議,Sep81 DARPA2MODBUS協(xié)議參考指南 Rev J,MODICON,1996年6月,doc#PI_MBUS_300MODBUS是一項應用層報文傳輸協(xié)

4、議,用于在通過不同類型的總線或網絡連接的設備之間的客戶機/服務器通信。目前,使用下列情況實現(xiàn)MODBUS:以太網上的TCP/IP。各種媒體(有線:EIA/TIA-232-E、EIA-422、EIA/TIA-485-A;光纖、無線等等)上的異步串行傳輸。MODBUS PLUS,一種高速令牌傳遞網絡。圖1:MODBUS通信棧2 縮略語ADU 應用數(shù)據(jù)單元HDLC 高級數(shù)據(jù)鏈路控制HMI 人機界面IETF 因特網工程工作組I/O 輸入/輸出設備IP 互連網協(xié)議MAC 介質訪問控制MB MODBUS協(xié)議MBAP MODBUS協(xié)議PDU 協(xié)議數(shù)據(jù)單元PLC 可編程邏輯控制器TCP 傳輸控制協(xié)議3 背景概

5、要MODBUS協(xié)議允許在各種網絡體系結構內進行簡單通信。圖2:MODBUS網絡體系結構的實例每種設備(PLC、HMI、控制面板、驅動程序、動作控制、輸入/輸出設備)都能使用MODBUS協(xié)議來啟動遠程操作。在基于串行鏈路和以太TCP/IP網絡的MODBUS上可以進行相同通信。一些網關允許在幾種使用MODBUS協(xié)議的總線或網絡之間進行通信。4 總體描述4.1 協(xié)議描述MODBUS協(xié)議定義了一個與基礎通信層無關的簡單協(xié)議數(shù)據(jù)單元(PDU)。特定總線或網絡上的MODBUS協(xié)議映射能夠在應用數(shù)據(jù)單元(ADU)上引入一些附加域。圖3:通用MODBUS幀啟動MODBUS事務處理的客戶機創(chuàng)建MODBUS應用數(shù)

6、據(jù)單元。功能碼向服務器指示將執(zhí)行哪種操作。MODBUS協(xié)議建立了客戶機啟動的請求格式。用一個字節(jié)編碼MODBUS數(shù)據(jù)單元的功能碼域。有效的碼字范圍是十進制1-255(128-255為異常響應保留)。當從客戶機向服務器設備發(fā)送報文時,功能碼域通知服務器執(zhí)行哪種操作。向一些功能碼加入子功能碼來定義多項操作。從客戶機向服務器設備發(fā)送的報文數(shù)據(jù)域包括附加信息,服務器使用這個信息執(zhí)行功能碼定義的操作。這個域還包括離散項目和寄存器地址、處理的項目數(shù)量以及域中的實際數(shù)據(jù)字節(jié)數(shù)。在某種請求中,數(shù)據(jù)域可以是不存在的(0長度),在此情況下服務器不需要任何附加信息。功能碼僅說明操作。如果在一個正確接收的MODBUS

7、 ADU中,不出現(xiàn)與請求MODBUS功能有關的差錯,那么服務器至客戶機的響應數(shù)據(jù)域包括請求數(shù)據(jù)。如果出現(xiàn)與請求MODBUS功能有關的差錯,那么域包括一個異常碼,服務器應用能夠使用這個域確定下一個執(zhí)行的操作。例如,客戶機能夠讀一組離散量輸出或輸入的開/關狀態(tài),或者客戶機能夠讀/寫一組寄存器的數(shù)據(jù)內容。當服務器對客戶機響應時,它使用功能碼域來指示正常(無差錯)響應或者出現(xiàn)某種差錯(稱為異常響應)。對于一個正常響應來說,服務器僅對原始功能碼響應。圖4:MODBUS事務處理(無差錯)對于異常響應,服務器返回一個與原始功能碼等同的碼,設置該原始功能碼的最高有效位為邏輯1。圖5 MODBUS事務處理(異常

8、響應)F 注釋:需要管理超時,以便明確地等待可能不會出現(xiàn)的應答。串行鏈路上第一個MODBUS執(zhí)行的長度約束限制了MODBUS PDU大小(最大RS485ADU=256字節(jié))。因此,對串行鏈路通信來說,MODBUS PDU=256-服務器地址(1字節(jié))-CRC(2字節(jié))253字節(jié)。從而:RS232 / RS485 ADU = 253字節(jié)+服務器地址(1 byte) + CRC (2字節(jié)) = 256字節(jié)。TCP MODBUS ADU = 249字節(jié)+ MBAP (7字節(jié)) = 256字節(jié)。MODBUS協(xié)議定義了三種PDU。它們是:l MODBUS請求PDU,mb_req_pdul MODBUS響

9、應PDU,mb_rsp_pdul MODBUS異常響應PDU,mb_excep_rsp_pdu定義mb_req_pdu為:mb_req_pdu = function_code, request_data,其中function_code - 1個字節(jié) MODBUS功能碼request_data - n個字節(jié),這個域與功能碼有關,并且通常包括諸如可變參考、變量、數(shù)據(jù)偏移量、子功能碼等信息。定義mb_rsp_pdu為:mb_rsp_pdu = function_code, response_ data,其中function_code - 1個字節(jié) MODBUS功能碼response_data - n

10、個字節(jié),這個域與功能碼有關,并且通常包括諸如可變參考、變量、數(shù)據(jù)偏移量、子功能碼等信息。定義mb_excep_rsp_pdu為:mb_excep_rsp_pdu = function_code, request_data,其中function_code - 1個字節(jié) MODBUS 功能碼 + 0x80exception_code - 1個字節(jié),在下表中定義了MODBUS異常碼。4.2 數(shù)據(jù)編碼l MODBUS使用一個big-Endian 表示地址和數(shù)據(jù)項。這意味著當發(fā)射多個字節(jié)時,首先發(fā)送最高有效位。例如:寄存器大小 值16 比特 0x1234 發(fā)送的第一字節(jié)為 0x12 然后0x34 F 注

11、釋:更詳細的信息參見1。4.3 MODBUS數(shù)據(jù)模型MODBUS以一系列具有不同特征表格上的數(shù)據(jù)模型為基礎。四個基本表格為:基本表格對象類型訪問類型內容離散量輸入單個比特只讀I/O系統(tǒng)提供這種類型數(shù)據(jù)線圈單個比特讀寫通過應用程序改變這種類型數(shù)據(jù)輸入寄存器16-比特字只讀I/O系統(tǒng)提供這種類型數(shù)據(jù)保持寄存器16-比特字讀寫通過應用程序改變這種類型數(shù)據(jù)輸入與輸出之間以及比特尋址的和字尋址的數(shù)據(jù)項之間的區(qū)別并沒有暗示任何應用操作。如果這是對可疑對象核心部分最自然的解釋,那么這種區(qū)別是可完全接受的,而且很普通,以便認為四個表格全部覆蓋了另外一個表格。對于基本表格中任何一項,協(xié)議都允許單個地選擇6553

12、6個數(shù)據(jù)項,而且設計那些項的讀寫操作可以越過多個連續(xù)數(shù)據(jù)項直到數(shù)據(jù)大小規(guī)格限制,這個數(shù)據(jù)大小規(guī)格限制與事務處理功能碼有關。很顯然,必須將通過MODBUS處理的所有數(shù)據(jù)放置在設備應用存儲器中。但是,存儲器的物理地址不應該與數(shù)據(jù)參考混淆。要求僅僅是數(shù)據(jù)參考與物理地址的鏈接。MODBUS功能碼中使用的MODBUS邏輯參考數(shù)字是以0開始的無符號整數(shù)索引。l MODBUS模型實現(xiàn)的實例下例實例示出了兩種在設備中構造數(shù)據(jù)的方法??赡苡胁煌慕Y構,這個文件中沒有全部描述出來。每個設備根據(jù)其應用都有它自己的數(shù)據(jù)結構。實例1:有4個獨立塊的設備下例實例示出了設備中的數(shù)據(jù)結構,這個設備含有數(shù)字量和模擬量、輸入量和

13、輸出量。由于不同塊中的數(shù)據(jù)不相關,每個塊是相互獨立。按不同MODBUS功能碼訪問每個塊。圖6:帶有獨立塊的MODBUS數(shù)據(jù)模型實例2:僅有1個塊的設備在這個實例中,設備僅有1個數(shù)據(jù)塊。通過幾個MODBUS功能碼可能得到一個相同數(shù)據(jù),或者通過16比特訪問或1個訪問比特。圖7:僅帶有1個塊的MODBUS數(shù)據(jù)模型4.4 MODBUS事務處理的定義下列狀態(tài)圖描述了在服務器側MODBUS事務處理的一般處理過程。圖8:MODBUS事務處理的狀態(tài)圖一旦服務器處理請求,使用合適的MODBUS服務器事務建立MODBUS響應。根據(jù)處理結果,可以建立兩種類型響應:l 一個正MODBUS響應: 響應功能碼 = 請求功

14、能碼l 一個MODBUS異常響應(參見第6.14節(jié)):l 用來為客戶機提供處理過程中與被發(fā)現(xiàn)的差錯相關的信息;l 響應功能碼 = 請求功能碼 + 0x80;l 提供一個異常碼來指示差錯原因。5 功能碼分類有三類MODBUS功能碼。它們是:公共功能碼l 是較好地被定義的功能碼,l 保證是唯一的,l MODBUS組織可改變的,l 公開證明的,l 具有可用的一致性測試,l MB IETF RFC中證明的,l 包含已被定義的公共指配功能碼和未來使用的未指配保留供功能碼。用戶定義功能碼l 有兩個用戶定義功能碼的定義范圍,即65至72和十進制100至110。l 用戶沒有MODBUS組織的任何批準就可以選擇

15、和實現(xiàn)一個功能碼l 不能保證被選功能碼的使用是唯一的。l 如果用戶要重新設置功能作為一個公共功能碼,那么用戶必須啟動RFC,以便將改變引入公共分類中,并且指配一個新的公共功能碼。保留功能碼l 一些公司對傳統(tǒng)產品通常使用的功能碼,并且對公共使用是無效的功能碼。圖9:MODBUS功能碼分類5.1 公共功能碼定義功能碼碼子碼(十六進制)頁數(shù)據(jù)訪問物理離散量輸入讀輸入離散量020211內部比特讀線圈010110比特訪問或寫單個線圈050516物理線圈寫多個線圈150F37輸入存儲器讀輸入寄存器040414讀多個寄存器03031316比特訪問內部存儲器寫單個寄存器060617或寫多個寄存器161039物

16、理輸出存儲器讀/寫多個寄存器231747屏蔽寫寄存器221646文件記錄訪問讀文件記錄2061442寫文件記錄2161544封裝接口讀設備識別碼43142B6 功能碼描述6.1 01 (0x01)讀線圈一個遠程設備中,使用該功能碼讀取線圈的1至2000連續(xù)狀態(tài)。請求PDU詳細說明了起始地址,即指定的第一個線圈地址和線圈編號。從零開始尋址線圈。因此尋址線圈1-16為0-15。根據(jù)數(shù)據(jù)域的每個比特將響應報文中的線圈分成為一個線圈。指示狀態(tài)為1= ON 和0= OFF。第一個數(shù)據(jù)字節(jié)的LSB(最低有效位)包括在詢問中尋址的輸出。其它線圈依次類推,一直到這個字節(jié)的高位端為止,并在后續(xù)字節(jié)中從低位到高位

17、的順序。如果返回的輸出數(shù)量不是八的倍數(shù),將用零填充最后數(shù)據(jù)字節(jié)中的剩余比特(一直到字節(jié)的高位端)。字節(jié)數(shù)量域說明了數(shù)據(jù)的完整字節(jié)數(shù)。請求PDU功能碼1個字節(jié)0x01起始地址2個字節(jié)0x0000 至0xFFFF線圈數(shù)量2個字節(jié)1至2000(0x7D0)響應PDU功能碼1個字節(jié)0x01字節(jié)數(shù)1個字節(jié)N*線圈狀態(tài)N個字節(jié)nN或N+1*N輸出數(shù)量/8,如果余數(shù)不等于0,那么 N = N+1錯誤功能碼1個字節(jié)功能碼0x80異常碼1個字節(jié)01或02或03或04這是一個請求讀離散量輸出20-38的實例:請求響應域名(十六進制)域名(十六進制)功能起始地址Hi起始地址Lo輸出數(shù)量Hi輸出數(shù)量Lo01功能字節(jié)數(shù)

18、輸出狀態(tài)27-20輸出狀態(tài)35-28輸出狀態(tài)38-3601000313CD006B1305將輸出27-20的狀態(tài)表示為十六進制字節(jié)值CD,或二進制1100 1101。輸出27是這個字節(jié)的MSB,輸出20是LSB。通常,將一個字節(jié)內的比特表示為MSB位于左側,LSB位于右側。第一字節(jié)的輸出從左至右為27至20。下一個字節(jié)的輸出從左到右為35至28。當串行發(fā)射比特時,從LSB向MSB傳輸: 20 . . . 27、28 . . . 35等等。在最后的數(shù)據(jù)字節(jié)中,將輸出狀態(tài)38-36表示為十六進制字節(jié)值05,或二進制0000 0101。輸出38是左側第六個比特位置,輸出36是這個字節(jié)的LSB。用零填

19、充五個剩余高位比特。注:用零填充五個剩余比特(一直到高位端)。圖10:讀取線圈狀態(tài)圖6.2 02 (0x02)讀離散量輸入在一個遠程設備中,使用該功能碼讀取離散量輸入的1至2000連續(xù)狀態(tài)。請求PDU詳細說明了起始地址,即指定的第一個輸入地址和輸入編號。從零開始尋址輸入。因此尋址輸入1-16為0-15。根據(jù)數(shù)據(jù)域的每個比特將響應報文中的離散量輸入分成為一個輸入。指示狀態(tài)為1= ON 和0= OFF。第一個數(shù)據(jù)字節(jié)的LSB(最低有效位)包括在詢問中尋址的輸入。其它輸入依次類推,一直到這個字節(jié)的高位端為止,并在后續(xù)字節(jié)中從低位到高位的順序。如果返回的輸入數(shù)量不是八的倍數(shù),將用零填充最后數(shù)據(jù)字節(jié)中的

20、剩余比特(一直到字節(jié)的高位端)。字節(jié)數(shù)量域說明了數(shù)據(jù)的完整字節(jié)數(shù)。請求PDU功能碼1個字節(jié)0x02起始地址2個字節(jié)0x0000至0xFFFF輸入數(shù)量2個字節(jié)1至2000(0x7D0)響應PDU功能碼1個字節(jié)0x82字節(jié)數(shù)1個字節(jié)N*輸入狀態(tài)N*×1個字節(jié)*N輸出數(shù)量/8,如果余數(shù)不等于0,那么 N = N+1錯誤差錯碼1字節(jié)0x82異常碼1字節(jié)01或02或03或04這是一個請求讀取離散量輸入197-218的實例:請求響應域名(十六進制)域名(十六進制)功能起始地址Hi起始地址Lo輸出數(shù)量Hi輸出數(shù)量Lo02功能字節(jié)數(shù)輸入狀態(tài)204-197輸入狀態(tài)212-205輸入狀態(tài)218-2130

21、20003C4AC00DB1635將離散量輸入狀態(tài)204-197表示為十六進制字節(jié)值AC,或二進制1010 1100。輸入204是這個字節(jié)的MSB,輸入197是這個字節(jié)的LSB。將離散量輸入狀態(tài)218-213表示為十六進制字節(jié)值35,或二進制0011 0101。輸入218位于左側第3比特,輸入213是LSB。注:用零填充2個剩余比特(一直到高位端)。圖11:讀離散量輸入的狀態(tài)圖6.3 03 (0x03)讀保持寄存器在一個遠程設備中,使用該功能碼讀取保持寄存器連續(xù)塊的內容。請求PDU說明了起始寄存器地址和寄存器數(shù)量。從零開始尋址寄存器。因此,尋址寄存器1-16為0-15。將響應報文中的寄存器數(shù)據(jù)

22、分成每個寄存器有兩字節(jié),在每個字節(jié)中直接地調整二進制內容。對于每個寄存器,第一個字節(jié)包括高位比特,并且第二個字節(jié)包括低位比特。請求功能碼1個字節(jié)0x03起始地址2個字節(jié)0x0000至0xFFFF寄存器數(shù)量2個字節(jié)1至125(0x7D)響應功能碼1個字節(jié)0x03字節(jié)數(shù)1個字節(jié)2×N*寄存器值N*×2個字節(jié)*N寄存器的數(shù)量錯誤差錯碼1個字節(jié)0x83異常碼1個字節(jié)01或02或03或04這是一個請求讀寄存器108-110的實例:請求響應域名(十六進制)域名(十六進制)功能高起始地址低起始地址高寄存器編號低寄存器編號03功能字節(jié)數(shù)寄存器值Hi(108)寄存器值Lo(108)寄存器值H

23、i(109)寄存器值Lo(109)寄存器值Hi(110)寄存器值Lo(110)0300066B02002B0300000064將寄存器108的內容表示為兩個十六進制字節(jié)值02 2B,或十進制555。將寄存器109-110的內容分別表示為十六進制00 00和00 64,或十進制0和100。圖12:讀保持寄存器的狀態(tài)圖6.4 04(0x04)讀輸入寄存器在一個遠程設備中,使用該功能碼讀取1至大約125的連續(xù)輸入寄存器。請求PDU說明了起始地址和寄存器數(shù)量。從零開始尋址寄存器。因此,尋址輸入寄存器1-16為0-15。將響應報文中的寄存器數(shù)據(jù)分成每個寄存器為兩字節(jié),在每個字節(jié)中直接地調整二進制內容。對

24、于每個寄存器,第一個字節(jié)包括高位比特,并且第二個字節(jié)包括低位比特。請求功能碼1個字節(jié)0x04起始地址2個字節(jié)0x0000至0xFFFF輸入寄存器數(shù)量2個字節(jié)0x0001至0x007D響應功能碼1個字節(jié)0x04字節(jié)數(shù)1個字節(jié)2×N*輸入寄存器N*×2個字節(jié)*N輸入寄存器的數(shù)量錯誤差錯碼1個字節(jié)0x84異常碼1個字節(jié)01或02或03或04這是一個請求讀輸入寄存器9的實例:請求響應域名(十六進制)域名(十六進制)功能起始地址Hi起始地址Lo輸入寄存器數(shù)量Hi輸入寄存器數(shù)量Lo04功能字節(jié)數(shù)輸入寄存器9 Hi輸入寄存器9 Lo0400020800000A01將輸入寄存器9的內容表示

25、為兩個十六進制字節(jié)值00 0A,或十進制10。圖13:讀輸入寄存器的狀態(tài)圖6.5 05 (0x05)寫單個線圈在一個遠程設備上,使用該功能碼寫單個輸出為ON或OFF。請求數(shù)據(jù)域中的常量說明請求的ON/OFF狀態(tài)。十六進制值FF 00請求輸出為ON。十六進制值00 00請求輸出為OFF。其它所有值均是非法的,并且對輸出不起作用。請求PDU說明了強制的線圈地址。從零開始尋址線圈。因此,尋址線圈1為0。線圈值域的常量說明請求的ON/OFF狀態(tài)。十六進制值0XFF00請求線圈為ON。十六進制值0X0000請求線圈為OFF。其它所有值均為非法的,并且對線圈不起作用。正常響應是請求的應答,在寫入線圈狀態(tài)之

26、后返回這個正常響應。請求功能碼1個字節(jié)0x05輸出地址2個字節(jié)0x0000至0xFFFF輸出值2個字節(jié)0x0000至0x00響應功能碼1個字節(jié)0x05輸出地址2個字節(jié)0x0000至0xFFFF輸出值2個字節(jié)0x0000至0xFF00錯誤差錯碼1個字節(jié)0x85異常碼1個字節(jié)01或02或03或04這是一個請求寫線圈173為ON的實例:請求響應域名(十六進制)域名(十六進制)功能輸出地址Hi輸出地址Lo輸出值Hi輸出值Lo05功能輸出地址Hi輸出地址Lo輸出值Hi輸出值Lo050000ACACFFFF0000圖14:寫單個輸出狀態(tài)圖6.6 06 (0x06)寫單個寄存器在一個遠程設備中,使用該功能碼

27、寫單個保持寄存器。請求PDU說明了被寫入寄存器的地址。從零開始尋址寄存器。因此,尋址寄存器1為0。正常響應是請求的應答,在寫入寄存器內容之后返回這個正常響應。請求功能碼1個字節(jié)0x06寄存器地址2個字節(jié)0x0000至0xFFFF寄存器值2個字節(jié)0x0000至0xFFFF響應功能碼1個字節(jié)0x06寄存器地址2個字節(jié)0x0000至0xFFFF寄存器值2個字節(jié)0x0000至0xFFFF錯誤差錯碼1個字節(jié)0x86異常碼1個字節(jié)01或02或03或04這是一個請求將十六進制00 03寫入寄存器2的實例:請求響應域名(十六進制)域名(十六進制)功能寄存器地址Hi寄存器地址Lo寄存器值Hi寄存器值Lo06功能

28、輸出地址Hi輸出地址Lo輸出值Hi輸出值Lo060000010100000303圖15:寫單個寄存器狀態(tài)圖6.7 15 (0x0F) 寫多個線圈在一個遠程設備中,使用該功能碼強制線圈序列中的每個線圈為ON或OFF。請求PDU說明了強制的線圈參考。從零開始尋址線圈。因此,尋址線圈1為0。請求數(shù)據(jù)域的內容說明了被請求的ON/OFF狀態(tài)。域比特位置中的邏輯“1”請求相應輸出為ON。域比特位置中的邏輯“0”請求相應輸出為OFF。正常響應返回功能碼、起始地址和強制的線圈數(shù)量。請求PDU功能碼1個字節(jié)0x0F起始地址2個字節(jié)0x0000至0xFFFF輸出數(shù)量2個字節(jié)0x0001至0x07B0字節(jié)數(shù)1個字節(jié)

29、N*輸出值N*×1個字節(jié)*N輸出數(shù)量/8,如果余數(shù)不等于0,那么 N = N+1響應PDU功能碼1個字節(jié)0x0F起始地址2個字節(jié)0x0000至0xFFFF輸出數(shù)量2個字節(jié)0x0001至0x07B0錯誤差錯碼1個字節(jié)0x8F異常碼1個字節(jié)01或02或03或04這是一個請求從線圈20開始寫入10個線圈的實例:請求的數(shù)據(jù)內容為兩個字節(jié):十六進制CD 01 (二進制1100 1101 0000 0001)。使用下列方法,二進制比特對應輸出。比特:1 1 0 0 1 1 0 1 0 0 0 0 0 0 0 1輸出:27 26 25 24 23 22 21 20 29 28傳輸?shù)牡谝蛔止?jié)(十六進

30、制CD)尋址為輸出27-20,在這種設置中,最低有效比特尋址為最低輸出(20)。傳輸?shù)南乱蛔止?jié)(十六進制01)尋址為輸出29-28,在這種設置中,最低有效比特尋址為最低輸出(28)。應該用零填充最后數(shù)據(jù)字節(jié)中的未使用比特。請求響應域名(十六進制)域名(十六進制)功能起始地址Hi起始地址Lo輸出數(shù)量Hi輸出數(shù)量Lo字節(jié)數(shù)輸出值Hi輸出值Lo0F功能起始地址Hi起始地址Lo輸出數(shù)量Hi輸出數(shù)量Lo0F0000131300000A0A02CD01圖16:寫多個輸出的狀態(tài)圖6.8 16 (0x10) 寫多個寄存器在一個遠程設備中,使用該功能碼寫連續(xù)寄存器塊(1至約120個寄存器)。在請求數(shù)據(jù)域中說明了

31、請求寫入的值。每個寄存器將數(shù)據(jù)分成兩字節(jié)。正常響應返回功能碼、起始地址和被寫入寄存器的數(shù)量。請求PDU功能碼1個字節(jié)0x10起始地址2個字節(jié)0x0000至0xFFFF寄存器數(shù)量2個字節(jié)0x0001至0x0078字節(jié)數(shù)1個字節(jié)2×N*寄存器值N*×2個字節(jié)值*N寄存器數(shù)量響應PDU功能碼1個字節(jié)0x10起始地址2個字節(jié)0x0000至0xFFFF寄存器數(shù)量2個字節(jié)1至123(0x7B)錯誤差錯碼1個字節(jié)0x90異常碼1個字節(jié)01或02或03或04這是一個請求將十六進制00 0A和01 02寫入以2開始的兩個寄存器的實例:請求響應域名(十六進制)域名(十六進制)功能起始地址Hi起

32、始地址Lo寄存器數(shù)量Hi寄存器數(shù)量Lo字節(jié)數(shù)寄存器值Hi寄存器值Lo寄存器值Hi寄存器值Lo10功能起始地址Hi起始地址Lo寄存器數(shù)量Hi寄存器數(shù)量Lo10000001010000020204000A0102圖17:寫多個寄存器狀態(tài)圖6.9 20 (0x14) 讀文件記錄使用該功能碼進行文件記錄讀取。根據(jù)字節(jié)數(shù)量提供所有請求數(shù)據(jù)長度,并且根據(jù)寄存器提供所有記錄長度。文件是記錄的結構。每個文件包括10000個記錄,尋址這些記錄為十進制0000至9999或十六進制0X0000至0X270F,例如尋址記錄12為12。該功能可以讀取多個參考組。這些組可以是分散的(不連續(xù)的),但每組中的參考必須是連續(xù)的

33、。用含有7個字節(jié)的獨立“子請求”域定義每個組:參考類型:1個字節(jié)(必須規(guī)定為6)文件號:2個字節(jié)文件中的起始記錄號:2個字節(jié)被讀出的記錄長度:2個字節(jié)被讀取的寄存器數(shù)量不能超過MODBUS報文允許的長度:256個字節(jié),這個寄存器數(shù)量與預期響應中的所有其它域組合。正常響應是一系列“子響應”,與“子請求”一一對應。字節(jié)數(shù)域是所有“子響應”中的全部組合字節(jié)數(shù)。另外,每個“子響應”都包括一個表示自身字節(jié)數(shù)的域。請求PDU功能碼1個字節(jié)0x14字節(jié)數(shù)1個字節(jié)0x07至0xF5字節(jié)子請求x,參考類型1個字節(jié)06子請求x,文件號2個字節(jié)0x0000至0xFFFF子請求x,記錄號2個字節(jié)0x0000至0x27

34、0F子請求x,記錄長度2個字節(jié)N子請求x+1,響應PDU功能碼1個字節(jié)0x14響應數(shù)據(jù)長度1個字節(jié)0x07至0xF5子請求x,文件響應長度1個字節(jié)0x07至0xF5子請求x,參考類型1個字節(jié)6子請求x,記錄數(shù)據(jù)N×2個字節(jié)子請求x+1,錯誤差錯碼1個字節(jié)0x94異常碼1個字節(jié)01或02或03或04或08這是一個請求從遠程設備讀取兩個參考組的實例:組1包括文件4中的2個寄存器,以寄存器1開始(地址0001)。組2包括文件3中的2個寄存器,以寄存器9開始(地址0009)。請求響應域名(十六進制)域名(十六進制)功能14功能14字節(jié)數(shù)0C響應數(shù)據(jù)長度0E子請求1,參考類型06子請求1,文件

35、響應長度05子請求1,文件號Hi00子請求1,參考類型06子請求1,文件號Lo04子請求1,紀錄數(shù)據(jù)Hi0D子請求1,記錄號Hi00子請求1,紀錄數(shù)據(jù)LoFE子請求1,紀錄號Lo01子請求1,紀錄數(shù)據(jù)Hi00子請求1,記錄長度Hi00子請求1,紀錄數(shù)據(jù)Lo20子請求1,紀錄長度Lo02子請求2,文件響應長度05子請求2,參考類型06子請求2,參考類型06子請求2,文件號Hi00子請求2,紀錄數(shù)據(jù)Hi33子請求2,文件號Lo03子請求2,紀錄數(shù)據(jù)LoCD子請求2,記錄號Hi00子請求2,紀錄數(shù)據(jù)Hi00子請求2,紀錄號Lo09子請求2,紀錄數(shù)據(jù)Lo40子請求2,記錄長度Hi00子請求2,紀錄長度

36、Lo02圖18:讀文件記錄狀態(tài)圖6.9.1 21 (0x15) 寫文件記錄使用該功能碼進行文件記錄寫入。根據(jù)字節(jié)數(shù)量提供所有請求數(shù)據(jù)長度,并且根據(jù)16比特字的數(shù)量提供所有記錄長度。文件是記錄的結構。每個文件包括10000個記錄,尋址這些記錄為十進制0000至9999或十六進制0X0000至0X270F,例如尋址記錄12為12。該功能可以寫多個參考組。這些組可以是分散的,即不連續(xù)的,但每組內的參考必須是連續(xù)的。用含有7個字節(jié)和數(shù)據(jù)的獨立“子請求”域定義每個組:參考類型:1個字節(jié)(必須規(guī)定為6)文件號:2個字節(jié)文件中的起始記錄號:2個字節(jié)被寫入的記錄長度:2個字節(jié)被寫入的數(shù)據(jù):每個寄存器為2字節(jié)。

37、被寫入的寄存器數(shù)量不能超過MODBUS報文允許的長度:256個字節(jié),這個寄存器數(shù)量與詢問中的所有其它域組合。正常響應是請求的應答。請求PDU功能碼1個字節(jié)0x14請求數(shù)據(jù)長度1個字節(jié)0x07至0xF5子請求x,參考類型1個字節(jié)06子請求x,文件號2個字節(jié)0x0000至0xFFFF子請求x,記錄號2個字節(jié)0x0000至0x270F子請求x,記錄長度2字節(jié)N子請求x,記錄數(shù)據(jù)N×2個字節(jié)子請求x+1,響應PDU功能碼1個字節(jié)0x15響應數(shù)據(jù)長度1個字節(jié)子請求x,參考類型1個字節(jié)06子請求x,文件號2個字節(jié)0x0000至0xFFFF子請求x,記錄號2個字節(jié)0x0000至0xFFFF子請求x

38、,記錄長度2個字節(jié)0x0000至0xFFFF N子請求x,記錄數(shù)據(jù)N×2個字節(jié)子請求x+1,錯誤差錯碼1個字節(jié)0x95異常碼1個字節(jié)01或02或03或04或08這是一個請求將一個參考組寫入遠程設備的實例:組包括文件4中的3個寄存器,以寄存器7開始(地址0007)。請求響應域名(十六進制)域名(十六進制)功能15功能15請求數(shù)據(jù)長度0D請求數(shù)據(jù)長度0D子請求1,參考類型06子請求1,參考類型06子請求1,文件號Hi00子請求1,文件號Hi00子請求1,文件號Lo04子請求1,文件號Lo04子請求1,記錄號Hi00子請求1,記錄號Hi00子請求1,紀錄號Lo07子請求1,紀錄號Lo07子

39、請求1,記錄長度Hi00子請求1,記錄長度Hi00子請求1,紀錄長度Lo03子請求1,紀錄長度Lo03子請求1,記錄數(shù)據(jù)Hi06子請求1,記錄數(shù)據(jù)Hi06子請求1,記錄數(shù)據(jù)LoAF子請求1,記錄數(shù)據(jù)LoAF子請求1,記錄數(shù)據(jù)Hi04子請求1,記錄數(shù)據(jù)Hi04子請求1,記錄數(shù)據(jù)LoBE子請求1,記錄數(shù)據(jù)LoBE子請求1,記錄數(shù)據(jù)Hi10子請求1,記錄數(shù)據(jù)Hi10子請求1,寄存器數(shù)據(jù)Lo0D子請求1,寄存器數(shù)據(jù)Lo0D圖19:寫文件記錄狀態(tài)圖6.10 22 (0x16) 屏蔽寫寄存器該功能碼用于通過利用AND屏蔽、OR屏蔽以及寄存器內容的組合來修改特定保持寄存器的內容。使用這個功能設置或清除寄存器

40、中的單個比特。請求說明了被寫入的保持寄存器、AND屏蔽使用的數(shù)據(jù)以及OR屏蔽使用的數(shù)據(jù)。從0開始尋址寄存器。因此,尋址寄存器1-16為0-15。功能的算法為:結果= (當前內容AND And_Mask) OR (Or_Mask AND And_Mask)例如:十六進制二進制當前內容 = 12 0001 0010And_Mask = F21111 0010Or_Mask = 250010 0101And_Mask =0D0000 1101結果=170001 0111注:如果Or_Mask值為零,那么結果是當前內容和And_Mask的簡單邏輯AND(與)。如果And_Mask值為零,結果等于Or_

41、Mask值。可以使用讀保持寄存器功能(功能碼03)讀出寄存器的內容。于是,當控制器掃描它的用戶邏輯程序時,隨后可以改變寄存器的內容。正常的響應是請求的應答。在已經寫入寄存器之后,返回響應。請求PDU功能碼1個字節(jié)0x16參考地址2個字節(jié)0x0000至0xFFFFAnd_Mask2個字節(jié)0x0000至0xFFFFOr_Mask2個字節(jié)0x0000至0xFFFF響應PDU功能碼1個字節(jié)0x16參考地址2個字節(jié)0x0000至0xFFFFAnd_Mask2個字節(jié)0x0000至0xFFFFOr_Mask2個字節(jié)0x0000至0xFFFF錯誤差錯碼1個字節(jié)0x96異常碼1個字節(jié)01或02或03或04這是一

42、個利用上述屏蔽值在遠程設備中對寄存器5的屏蔽寫入實例。請求響應域名(十六進制)域名(十六進制)功能16功能16參考地址Hi00參考地址Hi00參考地址Lo04參考地址04And_Mask Hi00And_Mask Hi00And_MaskF2And_MaskF2Or_Mask Hi00Or_Mask Hi00Or_Mask25Or_Mask25圖20:屏蔽寫保持寄存器狀態(tài)圖6.11 23 (0x17) 讀/寫多個寄存器在一個單獨MODBUS事務中,這個功能碼實現(xiàn)了一個讀操作和一個寫操作的組合。從零開始尋址保持寄存器。因此,尋址保持寄存器1-16為0-15。請求說明了起始地址、被讀取的保持寄存器

43、號和起始地址、保持寄存器號以及被寫入的數(shù)據(jù)。在寫數(shù)據(jù)域中,字節(jié)數(shù)說明隨后的字節(jié)號。正常響應包括被讀出的寄存器組的數(shù)據(jù)。在讀數(shù)據(jù)域中,字節(jié)數(shù)域說明隨后的字節(jié)數(shù)量。請求PDU功能碼1個字節(jié)0x17讀起始地址2個字節(jié)0x0000至0xFFFF讀的數(shù)量2個字節(jié)0x0001至近似0x0076寫起始地址2個字節(jié)0x0000至0xFFFF寫的數(shù)量2個字節(jié)0x0001至近似0x0076寫字節(jié)數(shù)1個字節(jié)2×N*寫寄存器值N*×2個字節(jié)*N寫的數(shù)量響應PDU功能碼1個字節(jié)0x17字節(jié)數(shù)1個字節(jié)2×N*讀寄存器值N*×2個字節(jié)*N讀的數(shù)量錯誤差錯碼1個字節(jié)0x97異常碼1個字

44、節(jié)01或02或03或04這是一個請求從寄存器4開始讀六個寄存器并且從寄存器15開始讀三個寄存器的實例:請求響應域名(十六進制)域名(十六進制)功能17功能17讀起始地址Hi00字節(jié)數(shù)0C讀起始地址Lo03讀寄存器值Hi00讀的數(shù)量Hi00讀寄存器值LoFE讀的數(shù)量Lo06讀寄存器值Hi0A寫起始地址Hi00讀寄存器值LoCD寫起始地址Lo0E讀寄存器值Hi00寫的數(shù)量Hi00讀寄存器值Lo01寫的數(shù)量Lo03讀寄存器值Hi00寫字節(jié)數(shù)06讀寄存器值Lo03寫寄存器值Hi00讀寄存器值Hi00寫寄存器值LoFF讀寄存器值Lo0D寫寄存器值Hi00讀寄存器值Hi00寫寄存器值LoFF讀寄存器值Lo

45、FF寫寄存器值Hi00寫寄存器值LoFF圖21:讀/寫多個寄存器狀態(tài)圖6.12 43 (0x2B)讀設備識別碼這個功能碼允許讀取與遠程設備的物理描述和功能描述相關的識別碼和附加報文。將讀設備識別碼接口模擬為一個地址空間,這個地址空間由一組可尋址數(shù)據(jù)元素組成。數(shù)據(jù)元素是被叫對象,并且對象Id確定這個數(shù)據(jù)元素。接口由3種對象組成:l 基本設備識別碼。所有此種對象都是必備的:廠商名稱、產品代碼和修訂本號。l 正常設備識別碼。除基本數(shù)據(jù)對象以外,設備提供了附加的和可選擇的識別碼以及數(shù)據(jù)對象描述。按標準定義所有種類的對象,但是這種對象的執(zhí)行是可選的。l 擴展設備識別碼。除正常數(shù)據(jù)對象以外,設備提供了附加

46、的和可選的識別碼以及專用數(shù)據(jù)描述。所有這些數(shù)據(jù)都是與設備有關的。對象Id對象名稱/描述類型M/O種類0x00廠商名稱ASCII字符串強制的基本0x01產品代碼ASCII字符串強制的0x02主要修訂本ASCII字符串強制的0x03VendorUrlASCII字符串可選的規(guī)則0x04產品名稱ASCII字符串可選的0x05模式名稱ASCII字符串可選的0x06用戶應用名稱ASCII字符串可選的0x070x7F保留可選的0x800xFF可選擇地定義專用對象范圍0x800xFF與產品有關相關設備可選的擴展請求PDU功能碼1個字節(jié)0x2BMEI類型1個字節(jié)0x0EReadDevId碼1個字節(jié)01/02/0

47、3/04對象id1個字節(jié)0x00至0xFF響應PDU功能碼1個字節(jié)0x2BMEI類型1個字節(jié)0x0EReadDevId代碼1個字節(jié)01/02/03/04一致性等級1個字節(jié)隨后更多1個字節(jié)00/FF下一個對象Id1個字節(jié)對象ID號對象號1個字節(jié)對象ID的列表1個字節(jié)對象長度1個字節(jié)對象值1個字節(jié)錯誤功能碼1字節(jié)0xAB:Fc 0x2B+0x80MEI類型1字節(jié)14異常碼1字節(jié)01、02、03、04請求參數(shù)描述:指配號為14的MODBUS封裝接口識別讀識別碼請求。定義四種訪問類型:01:請求獲得基本設備識別碼(流訪問)02:請求獲得正常設備識別碼(流訪問)03:請求獲得擴展設備識別碼(流訪問)04

48、:請求獲得特定識別碼對象(專用訪問)在識別碼數(shù)據(jù)不適合單獨響應的情況下,可以需要幾個請求/響應事務處理。對象id字節(jié)給出了獲得的第一個對象識別碼。對于第一個事物處理來說,客戶機必須設置對象id為0,以便獲得設備識別碼數(shù)據(jù)的開始。對于下列事務來說,客戶機必須設置對象id為前面響應中服務器的返回值。如果對象id不符合任何已知對象,那么服務器象指向對象0那樣響應(從頭開始)。在單個訪問的情況下:ReadDevId代碼04,請求中的對象id給出了獲得的對象識別碼。如果對象id不符合任何已知對象,那么服務器返回一個異常碼02(非法數(shù)據(jù)地址)的異常響應。響應參數(shù)描述:功能碼:功能碼43(十進制)0x2B (十六進制)MEI類型:為設備識別碼接口指配號的14 (0x0E) MEI類型ReadDevId碼:與請求ReadDevId碼相同:01、02、03或04一致性等級:設備的識別碼一致性等級和支持訪問的類型01:基本識別碼(僅流訪問)02:正常識別

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論