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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

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

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

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

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

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

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

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

8、響應(yīng))F 注釋:需要管理超時,以便明確地等待可能不會出現(xiàn)的應(yīng)答。串行鏈路上第一個MODBUS執(zhí)行的長度約束限制了MODBUS PDU大?。ㄗ畲驲S485ADU=256字節(jié))。因此,對串行鏈路通信來說,MODBUS PDU=256-服務(wù)器地址(1字節(jié))-CRC(2字節(jié))253字節(jié)。從而:RS232 / RS485 ADU = 253字節(jié)+服務(wù)器地址(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、應(yīng)PDU,mb_rsp_pdul MODBUS異常響應(yīng)PDU,mb_excep_rsp_pdu定義mb_req_pdu為:mb_req_pdu = function_code, request_data,其中function_code - 1個字節(jié) MODBUS功能碼request_data - n個字節(jié),這個域與功能碼有關(guān),并且通常包括諸如可變參考、變量、數(shù)據(jù)偏移量、子功能碼等信息。定義mb_rsp_pdu為:mb_rsp_pdu = function_code, response_ data,其中function_code - 1個字節(jié) MODBUS功能碼response_data - n

10、個字節(jié),這個域與功能碼有關(guān),并且通常包括諸如可變參考、變量、數(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ù)項(xiàng)。這意味著當(dāng)發(fā)射多個字節(jié)時,首先發(fā)送最高有效位。例如:寄存器大小 值16 比特 0x1234 發(fā)送的第一字節(jié)為 0x12 然后0x34 F 注

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

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

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

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

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

16、理輸出存儲器讀/寫多個寄存器231747屏蔽寫寄存器221646文件記錄訪問讀文件記錄2061442寫文件記錄2161544封裝接口讀設(shè)備識別碼43142B6 功能碼描述6.1 01 (0x01)讀線圈一個遠(yuǎn)程設(shè)備中,使用該功能碼讀取線圈的1至2000連續(xù)狀態(tài)。請求PDU詳細(xì)說明了起始地址,即指定的第一個線圈地址和線圈編號。從零開始尋址線圈。因此尋址線圈1-16為0-15。根據(jù)數(shù)據(jù)域的每個比特將響應(yīng)報文中的線圈分成為一個線圈。指示狀態(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)響應(yīng)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的實(shí)例:請求響應(yīng)域名(十六進(jìn)制)域名(十六進(jìn)制)功能起始地址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)表示為十六進(jìn)制字節(jié)值CD,或二進(jìn)制1100 1101。輸出27是這個字節(jié)的MSB,輸出20是LSB。通常,將一個字節(jié)內(nèi)的比特表示為MSB位于左側(cè),LSB位于右側(cè)。第一字節(jié)的輸出從左至右為27至20。下一個字節(jié)的輸出從左到右為35至28。當(dāng)串行發(fā)射比特時,從LSB向MSB傳輸: 20 . . . 27、28 . . . 35等等。在最后的數(shù)據(jù)字節(jié)中,將輸出狀態(tài)38-36表示為十六進(jìn)制字節(jié)值05,或二進(jìn)制0000 0101。輸出38是左側(cè)第六個比特位置,輸出36是這個字節(jié)的LSB。用零填

19、充五個剩余高位比特。注:用零填充五個剩余比特(一直到高位端)。圖10:讀取線圈狀態(tài)圖6.2 02 (0x02)讀離散量輸入在一個遠(yuǎn)程設(shè)備中,使用該功能碼讀取離散量輸入的1至2000連續(xù)狀態(tài)。請求PDU詳細(xì)說明了起始地址,即指定的第一個輸入地址和輸入編號。從零開始尋址輸入。因此尋址輸入1-16為0-15。根據(jù)數(shù)據(jù)域的每個比特將響應(yīng)報文中的離散量輸入分成為一個輸入。指示狀態(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)響應(yīng)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的實(shí)例:請求響應(yīng)域名(十六進(jìn)制)域名(十六進(jìn)制)功能起始地址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表示為十六進(jìn)制字節(jié)值A(chǔ)C,或二進(jìn)制1010 1100。輸入204是這個字節(jié)的MSB,輸入197是這個字節(jié)的LSB。將離散量輸入狀態(tài)218-213表示為十六進(jìn)制字節(jié)值35,或二進(jìn)制0011 0101。輸入218位于左側(cè)第3比特,輸入213是LSB。注:用零填充2個剩余比特(一直到高位端)。圖11:讀離散量輸入的狀態(tài)圖6.3 03 (0x03)讀保持寄存器在一個遠(yuǎn)程設(shè)備中,使用該功能碼讀取保持寄存器連續(xù)塊的內(nèi)容。請求PDU說明了起始寄存器地址和寄存器數(shù)量。從零開始尋址寄存器。因此,尋址寄存器1-16為0-15。將響應(yīng)報文中的寄存器數(shù)據(jù)

22、分成每個寄存器有兩字節(jié),在每個字節(jié)中直接地調(diào)整二進(jìn)制內(nèi)容。對于每個寄存器,第一個字節(jié)包括高位比特,并且第二個字節(jié)包括低位比特。請求功能碼1個字節(jié)0x03起始地址2個字節(jié)0x0000至0xFFFF寄存器數(shù)量2個字節(jié)1至125(0x7D)響應(yīng)功能碼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的實(shí)例:請求響應(yīng)域名(十六進(jìn)制)域名(十六進(jìn)制)功能高起始地址低起始地址高寄存器編號低寄存器編號03功能字節(jié)數(shù)寄存器值Hi(108)寄存器值Lo(108)寄存器值H

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

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

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

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

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

28、輸出地址Hi輸出地址Lo輸出值Hi輸出值Lo060000010100000303圖15:寫單個寄存器狀態(tài)圖6.7 15 (0x0F) 寫多個線圈在一個遠(yuǎn)程設(shè)備中,使用該功能碼強(qiáng)制線圈序列中的每個線圈為ON或OFF。請求PDU說明了強(qiáng)制的線圈參考。從零開始尋址線圈。因此,尋址線圈1為0。請求數(shù)據(jù)域的內(nèi)容說明了被請求的ON/OFF狀態(tài)。域比特位置中的邏輯“1”請求相應(yīng)輸出為ON。域比特位置中的邏輯“0”請求相應(yīng)輸出為OFF。正常響應(yīng)返回功能碼、起始地址和強(qiáng)制的線圈數(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響應(yīng)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í)例:請求的數(shù)據(jù)內(nèi)容為兩個字節(jié):十六進(jìn)制CD 01 (二進(jìn)制1100 1101 0000 0001)。使用下列方法,二進(jìn)制比特對應(yīng)輸出。比特: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é)(十六進(jìn)

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

31、請求寫入的值。每個寄存器將數(shù)據(jù)分成兩字節(jié)。正常響應(yīng)返回功能碼、起始地址和被寫入寄存器的數(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ù)量響應(yīng)PDU功能碼1個字節(jié)0x10起始地址2個字節(jié)0x0000至0xFFFF寄存器數(shù)量2個字節(jié)1至123(0x7B)錯誤差錯碼1個字節(jié)0x90異常碼1個字節(jié)01或02或03或04這是一個請求將十六進(jìn)制00 0A和01 02寫入以2開始的兩個寄存器的實(shí)例:請求響應(yīng)域名(十六進(jìn)制)域名(十六進(jìn)制)功能起始地址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ìn)行文件記錄讀取。根據(jù)字節(jié)數(shù)量提供所有請求數(shù)據(jù)長度,并且根據(jù)寄存器提供所有記錄長度。文件是記錄的結(jié)構(gòu)。每個文件包括10000個記錄,尋址這些記錄為十進(jìn)制0000至9999或十六進(jìn)制0X0000至0X270F,例如尋址記錄12為12。該功能可以讀取多個參考組。這些組可以是分散的(不連續(xù)的),但每組中的參考必須是連續(xù)的

33、。用含有7個字節(jié)的獨(dú)立“子請求”域定義每個組:參考類型:1個字節(jié)(必須規(guī)定為6)文件號:2個字節(jié)文件中的起始記錄號:2個字節(jié)被讀出的記錄長度:2個字節(jié)被讀取的寄存器數(shù)量不能超過MODBUS報文允許的長度:256個字節(jié),這個寄存器數(shù)量與預(yù)期響應(yīng)中的所有其它域組合。正常響應(yīng)是一系列“子響應(yīng)”,與“子請求”一一對應(yīng)。字節(jié)數(shù)域是所有“子響應(yīng)”中的全部組合字節(jié)數(shù)。另外,每個“子響應(yīng)”都包括一個表示自身字節(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,響應(yīng)PDU功能碼1個字節(jié)0x14響應(yīng)數(shù)據(jù)長度1個字節(jié)0x07至0xF5子請求x,文件響應(yīng)長度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這是一個請求從遠(yuǎn)程設(shè)備讀取兩個參考組的實(shí)例:組1包括文件4中的2個寄存器,以寄存器1開始(地址0001)。組2包括文件3中的2個寄存器,以寄存器9開始(地址0009)。請求響應(yīng)域名(十六進(jìn)制)域名(十六進(jìn)制)功能14功能14字節(jié)數(shù)0C響應(yīng)數(shù)據(jù)長度0E子請求1,參考類型06子請求1,文件

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

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

37、被寫入的寄存器數(shù)量不能超過MODBUS報文允許的長度:256個字節(jié),這個寄存器數(shù)量與詢問中的所有其它域組合。正常響應(yīng)是請求的應(yīng)答。請求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,響應(yīng)PDU功能碼1個字節(jié)0x15響應(yīng)數(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這是一個請求將一個參考組寫入遠(yuǎn)程設(shè)備的實(shí)例:組包括文件4中的3個寄存器,以寄存器7開始(地址0007)。請求響應(yīng)域名(十六進(jìn)制)域名(十六進(jìn)制)功能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,紀(jì)錄號Lo07子請求1,紀(jì)錄號Lo07子

39、請求1,記錄長度Hi00子請求1,記錄長度Hi00子請求1,紀(jì)錄長度Lo03子請求1,紀(jì)錄長度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屏蔽以及寄存器內(nèi)容的組合來修改特定保持寄存器的內(nèi)容。使用這個功能設(shè)置或清除寄存器

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

41、Mask值??梢允褂米x保持寄存器功能(功能碼03)讀出寄存器的內(nèi)容。于是,當(dāng)控制器掃描它的用戶邏輯程序時,隨后可以改變寄存器的內(nèi)容。正常的響應(yīng)是請求的應(yīng)答。在已經(jīng)寫入寄存器之后,返回響應(yīng)。請求PDU功能碼1個字節(jié)0x16參考地址2個字節(jié)0x0000至0xFFFFAnd_Mask2個字節(jié)0x0000至0xFFFFOr_Mask2個字節(jié)0x0000至0xFFFF響應(yīng)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、個利用上述屏蔽值在遠(yuǎn)程設(shè)備中對寄存器5的屏蔽寫入實(shí)例。請求響應(yīng)域名(十六進(jìn)制)域名(十六進(jìn)制)功能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) 讀/寫多個寄存器在一個單獨(dú)MODBUS事務(wù)中,這個功能碼實(shí)現(xiàn)了一個讀操作和一個寫操作的組合。從零開始尋址保持寄存器。因此,尋址保持寄存器1-16為0-15。請求說明了起始地址、被讀取的保持寄存器

43、號和起始地址、保持寄存器號以及被寫入的數(shù)據(jù)。在寫數(shù)據(jù)域中,字節(jié)數(shù)說明隨后的字節(jié)號。正常響應(yīng)包括被讀出的寄存器組的數(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ù)量響應(yīng)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開始讀三個寄存器的實(shí)例:請求響應(yīng)域名(十六進(jìn)制)域名(十六進(jìn)制)功能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è)備識別碼這個功能碼允許讀取與遠(yuǎn)程設(shè)備的物理描述和功能描述相關(guān)的識別碼和附加報文。將讀設(shè)備識別碼接口模擬為一個地址空間,這個地址空間由一組可尋址數(shù)據(jù)元素組成。數(shù)據(jù)元素是被叫對象,并且對象Id確定這個數(shù)據(jù)元素。接口由3種對象組成:l 基本設(shè)備識別碼。所有此種對象都是必備的:廠商名稱、產(chǎn)品代碼和修訂本號。l 正常設(shè)備識別碼。除基本數(shù)據(jù)對象以外,設(shè)備提供了附加的和可選擇的識別碼以及數(shù)據(jù)對象描述。按標(biāo)準(zhǔn)定義所有種類的對象,但是這種對象的執(zhí)行是可選的。l 擴(kuò)展設(shè)備識別碼。除正常數(shù)據(jù)對象以外,設(shè)備提供了附加

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

47、3/04對象id1個字節(jié)0x00至0xFF響應(yīng)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:請求獲得基本設(shè)備識別碼(流訪問)02:請求獲得正常設(shè)備識別碼(流訪問)03:請求獲得擴(kuò)展設(shè)備識別碼(流訪問)04

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

溫馨提示

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

評論

0/150

提交評論