此協(xié)議適用于無線測控系統(tǒng)中主站與分站之前的數(shù)據(jù)傳輸協(xié)議,如下圖所示的綠色部分的通信。
協(xié)議規(guī)定
1. 當分站收到主站的數(shù)據(jù)請求時,必須要在1秒以內(nèi)作出響應(yīng)。
2. 該協(xié)議是通過包傳輸?shù)模谑且?/span>3.5T無數(shù)據(jù)為包結(jié)束條件,例如在串口波特率1200bp/s下,傳輸3.5個數(shù)據(jù)所需的時間大約為30ms(即3.5T為30ms),收到一個數(shù)據(jù)開始計時,如果收到這個數(shù)據(jù)后30ms內(nèi)沒有再收到下一個數(shù)據(jù),則認為此包結(jié)束,這個數(shù)據(jù)就是這個包的最后一個數(shù)據(jù),之前所收到的所有數(shù)據(jù)就是這包的內(nèi)容。
3. 協(xié)議采用CRC-16校驗(生產(chǎn)多項式x16+x15+ x2+1,簡記式為8005),校驗失敗后這包丟棄不做協(xié)議解析。
4. 超時重發(fā)機制由主站完成,分站無此機制。
5. 傳輸?shù)淖止?jié)序采用“little endian”方式,即我們通常所說的小端朝前(Intel的x86系列CPU結(jié)構(gòu)),這意味著當發(fā)射多個字節(jié)時,首先發(fā)送最低有效位。例要發(fā)送一個整形數(shù)據(jù)(兩個字節(jié))內(nèi)容為0x1234,就先發(fā)送的低字節(jié)為0x34, 然后再0x12,同理浮點型的四個數(shù)據(jù)也是如此發(fā)送。協(xié)議中所有的數(shù)據(jù)都是采用這種字節(jié)序。
每個通信的數(shù)據(jù)包都有捷麥標示頭、通信頭和請求或響應(yīng)內(nèi)容三部分組成,如下圖所示:
捷麥標示頭有兩種協(xié)議頭,普通采集與響應(yīng)類型和分站主動上傳這兩種類型,無論哪種類型,捷麥標示頭固定為6個字節(jié)。具體內(nèi)容如下:
普通采集與響應(yīng)的標示頭為:4F 3F 2F 1F 5F 6F
通信頭的數(shù)據(jù)長度是固定的,一共是18格字節(jié),包含的內(nèi)容如下圖所示:
標示此包數(shù)據(jù)是哪個設(shè)備或者應(yīng)用的,固定為兩個字節(jié)。
例如P5037設(shè)備的設(shè)備號為 10 01,站點測試應(yīng)用的應(yīng)用號為 00 05。
包標示從0開始,請求和響應(yīng)的包標示相同。新包在原有包標示的基礎(chǔ)上加1。重發(fā)時包標示不變(主站對包標示進行加1操作,分站響應(yīng)時,包標示不做任何處理)。占兩個字節(jié)
包長的實際數(shù)值是請求或響應(yīng)的數(shù)據(jù)的字節(jié)數(shù)量,也就是上面協(xié)議整體組成示意圖中的藍色部分的字節(jié)數(shù)量,占兩個字節(jié)(字節(jié)序低字節(jié)在前)。
類型碼 | 定義 | 方向 | 備注 |
00H | 請求 | 主站→分站 | 對分站點的CPU模塊 |
80H | 應(yīng)答 | 分站→主站 | |
02H | 請求 | 主站→分站 | 對分站點的通信管理模塊的存儲器 |
82H | 有存儲內(nèi)容應(yīng)答 | 分站→主站 | 當無存儲內(nèi)容時包長為0,無綠色部分 |
84H | 主動上傳 | 分站→主站 | |
04H | 主動上傳的響應(yīng) | 主站→分站 | |
05H | 主動上傳的響應(yīng)并接下來有請求 | 主站→分站 |
路徑占三個字節(jié),表示這包數(shù)據(jù)的傳輸路徑,用于電臺在中繼時的協(xié)議支持。缺省值(不使用中繼)為 EF FF F0 。
24位(三個字節(jié))的路徑信息中前2個字節(jié)表示數(shù)據(jù)的路徑信息。每一級路徑用4位二進制表示。這4位表示在這一級上中轉(zhuǎn)站的編號。如果這個站是中轉(zhuǎn)站其編號范圍是0―D。共可表達4級樹形路徑。第三個字節(jié)的后4位表示數(shù)據(jù)傳遞的當前路徑級數(shù)。用F表示對應(yīng)的字段無內(nèi)容。用E表示樹形結(jié)構(gòu)的終點。數(shù)據(jù)的結(jié)構(gòu)如下:
備用占兩個字節(jié),用于協(xié)議擴展,缺省值為0x00 0x00。
目的地址表示數(shù)據(jù)包的目的。源地址表示數(shù)據(jù)的來源。每個請求數(shù)據(jù)中的請求對應(yīng)著響應(yīng)數(shù)據(jù)中的一個響應(yīng)。請求和響應(yīng)是成對出現(xiàn)的。
在一個系統(tǒng)中,每一個分站和主站都有唯一的地址。
地址用兩個字節(jié)表示,字節(jié)序采用低字節(jié)在前,比如一個分站的地址為12,那么地址表示為:0C 00。
通信頭部分的CRC校驗,也就是灰色部分的數(shù)據(jù)CRC,不包含“捷麥標示頭”部分和“請求或響應(yīng)數(shù)據(jù)”部分。
該協(xié)議一包可以獲取不同數(shù)據(jù)類型的數(shù)據(jù),獲取的這一小段稱為數(shù)據(jù)段,請求和響應(yīng)的協(xié)議格式如下圖所示:
注意請求內(nèi)容或者響應(yīng)內(nèi)榮包中的“內(nèi)容”字段的長度依據(jù)功能碼等,可能有些功能碼沒有“內(nèi)容”字段。
請求(響應(yīng))總個數(shù):表示數(shù)據(jù)段的總個數(shù),段數(shù)的最大值為20,請求和響應(yīng)是一一對應(yīng)。
數(shù)據(jù)段:每一個數(shù)據(jù)段都是由序號、功能碼、地址偏移、寄存器數(shù)和內(nèi)容構(gòu)成。序號是從1依次增加的,功能碼等參加下文。
內(nèi)容校驗:內(nèi)容CRC是指對包內(nèi)容(請求或者響應(yīng)內(nèi)容)做CRC處理,不包含“捷麥標示頭”部分和“通信頭”部分。
功能碼定義匯總
數(shù)據(jù)類型 | 名稱 | 功能碼意義 | 功能碼(HEX) | 主->主 | |
數(shù)據(jù)訪問 | 1位訪問 | 物理離散輸入 | 讀離散輸入 | 02 | 42/82 |
物理繼電器 | 讀離散輸出 | 01 | 41/81 | ||
寫離散輸出 | 0F | 4F/8F | |||
8位訪問 | 單字節(jié)寄存器 | 讀字節(jié)輸入寄存器 | 33 | 73/B3 | |
讀字節(jié)輸出寄存器 | 34 | 74/B4 | |||
寫字節(jié)輸出寄存器 | 35 | 75/B5 | |||
16位訪問 | 整形寄存器 | 讀整形輸入寄存器 | 04 | 44/84 | |
讀整形輸出寄存器 | 03 | 43/83 | |||
寫整形輸出寄存器 | 10 | 50/90 | |||
32位訪問 | 實數(shù)寄存器 | 讀實數(shù)輸入寄存器 | 36 | 76/B6 | |
讀實數(shù)輸出寄存器 | 37 | 77/B7 | |||
寫實數(shù)輸出寄存器 | 38 | 78/B8 |
01功能代碼是遠程設(shè)備用來讀取離散輸出的1~2000鄰近狀態(tài)。請求協(xié)議數(shù)據(jù)單元詳細說明了離散輸出的起始地址和離散輸出的個數(shù)。離散輸出的地址從0開始。
響應(yīng)信息中的離散輸出被按字節(jié)打包,數(shù)據(jù)字節(jié)的每一位都有一個離散輸出與之相對應(yīng)。狀態(tài)1=ON,0=OFF。起始地址的內(nèi)容被放入數(shù)據(jù)第一字節(jié)的最低有效位,依次類推。
如果返回輸出的位數(shù)不是8的倍數(shù),剩余高位用0補。計數(shù)字節(jié)詳細記錄了完整數(shù)據(jù)字節(jié)的數(shù)量。
請求協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 0x01 |
起始地址 | 2字節(jié) | 0x0000到0xFFFF |
感應(yīng)器數(shù)量 | 2字節(jié) | 1到2000(0x7D0) |
響應(yīng)協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 0x01 |
起始地址 | 2字節(jié) | 0x0000到0xFFFF |
感應(yīng)器數(shù)量 | 2字節(jié) | 1到2000(0x7D0) |
感應(yīng)器狀態(tài) | n字節(jié) | n=N或者N+1 |
N*=輸出量/8,如果剩余量不為0,則N=N+1
下面舉一個例子是關(guān)于請求讀離散輸出(20-38):
請求 | 響應(yīng) | ||
字段名稱 | (Hex) | 字段名稱 | (Hex) |
功能 起始地址低位 起始地址高位 輸出位數(shù)的低位 輸出位數(shù)的高位
| 01 | 功能 起始地址低位 起始地址高位 輸出位數(shù)的低位 輸出位數(shù)的高位 27-20的輸出狀態(tài) 35-28的輸出狀態(tài) 38-36的輸出狀態(tài) | 01 |
13 | 13 | ||
00 | 00 | ||
13 | 13 | ||
00 | 00 | ||
CD | |||
6B | |||
05 |
十六進制數(shù)CD或二進制數(shù)1100 1101包含了輸出位27的狀態(tài)“1”。輸出位27是這個字節(jié)的最高位,輸出位20為這個字節(jié)的最地位。
在通常的情況下,一個字節(jié)的左邊是最高有效位,右邊是最低有效位。這樣輸出的第一個字節(jié)從左邊到右邊依次是位27到20,下一個字節(jié)從左到右依次是位35到28。當傳輸這些輸出狀態(tài)時,從最低有效位到最高有效位:20…27,28…35依次類推。
在最后一個字節(jié),十六進制數(shù)05或二進制數(shù)0000 0101是輸出位38-36的狀態(tài)。輸出位38是從左邊開始數(shù)的第六位,輸出位36是這個字節(jié)的最低位。剩余的五個高位用0補。
注意:剩余的五個位(高位)用0補。
功能代碼是遠程安裝設(shè)備驅(qū)動程序用來讀取離散輸入的1~2000個鄰近狀態(tài)。請求PDU詳細說明了離散輸入的起始地址,第一個離散輸入的地址域和離散輸入的個數(shù)。離散輸入的地址從0開始,因此,離散輸入感應(yīng)器1-16的地址為0-15。
響應(yīng)信息中的離散輸入被按字節(jié)打包,數(shù)據(jù)字節(jié)的每一位都有一個離散輸入與之相對應(yīng)。狀態(tài)1=ON,0=OFF。起始地址的內(nèi)容被放入數(shù)據(jù)第一字節(jié)的最低有效位,依次類推。
如果返回輸出的位數(shù)不是8的倍數(shù),剩余高位用0補。計數(shù)字節(jié)詳細記錄了完整數(shù)據(jù)字節(jié)的數(shù)量。
請求協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 0x02 |
起始地址 | 2字節(jié) | 0x0000到0xFFFF |
輸入量 | 2字節(jié) | 1到2000(0x7D0) |
響應(yīng)協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 0x02 |
起始地址 | 2字節(jié) | 0x0000到0xFFFF |
輸入量 | 2字節(jié) | 1到2000(0x7D0) |
感應(yīng)器狀態(tài) | N*×1字節(jié) |
N*=輸出量/8,如果剩余量不為0,則N=N+1
下面舉一個例子是關(guān)于請求讀離散輸入(197-218):
請求 | 響應(yīng) | ||
字段名稱 | (Hex) | 字段名稱 | (Hex) |
功能 起始地址低位 起始地址高位 輸入位數(shù)的低位 輸入位數(shù)的高位
| 02 | 功能 起始地址高位 起始地址低位 輸入位數(shù)的高位 輸入位數(shù)的低位204-197的輸入狀態(tài) 212-205的輸入狀態(tài) 218-213的輸入狀態(tài) | 02 |
C4 | C4 | ||
00 | 00 | ||
16 | 16 | ||
00 | 00 | ||
AC | |||
DB | |||
35 |
從十六進制數(shù)AC或二進制數(shù)1010 1100中可以讀出離散輸入204-197的狀態(tài),輸入位204是這個字節(jié)最高位,197是這個字節(jié)的最低位。
從十六進制數(shù)35或二進制數(shù)0011 0101中可以讀出離散輸入204-197的狀態(tài),輸入位218是字節(jié)從左邊數(shù)的第三位,輸入位213是這個字節(jié)的最低位
注意:剩余的兩位(高位)用0補
這個功能代碼是遠程設(shè)備用來確定離散輸出序列中的離散輸出的ON或OFF狀態(tài)。請求協(xié)議數(shù)據(jù)單元詳細說明了離散輸出的起始地址和輸出數(shù)量。離散輸出的地址是從0開始的,因此離散輸出1的地址為0。
在請求協(xié)議數(shù)據(jù)單元詳細說明了請求狀態(tài)ON或OFF。這個區(qū)域的相應(yīng)位為邏輯“1”時,對應(yīng)的輸出為ON,邏輯“0”對應(yīng)OFF。
正常的響應(yīng)返回功能代碼,起始地址和對應(yīng)離散輸出的數(shù)量。
請求協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 0FH |
起始地址 | 2字節(jié) | 0000H到007FH |
輸出數(shù)量 | 2字節(jié) | 0001H到0080H |
輸出值 | N*×1字節(jié) |
N*=輸出量/8,如果剩余量不為0,則N=N+1
響應(yīng)協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 0FH |
起始地址 | 2字節(jié) | 0000H到007FH |
輸出數(shù)量 | 2字節(jié) | 0001H到0080H |
下面舉一個例子,寫一連串的10個離散輸出,從離散輸出20開始
被傳輸?shù)臄?shù)據(jù)的第一字節(jié)CD是存儲器碼為27-20的狀態(tài),最低位表達的是離散輸出20的狀態(tài),下一字節(jié)存儲器碼為29-28的狀態(tài),最低位表達的是離散輸出28的狀態(tài)。在最后一字節(jié)沒有用到的位用0補。
請求 | 響應(yīng) | ||
字段名稱 | (Hex) | 字段名稱 | (Hex) |
功能 起始地址低位 起始地址高位 輸出數(shù)量低位 輸出數(shù)量高位 27-20的狀態(tài) 29-28的狀態(tài) | 0F | 功能 起始地址低位 起始地址高位 輸出數(shù)量低位 輸出數(shù)量高位
| 0F |
13 | 13 | ||
00 | 00 | ||
0A | 0A | ||
00 | 00 | ||
CD | |||
01 |
這個功能代碼是用來讀遠程設(shè)備相鄰的字節(jié)輸入寄存器塊。請求協(xié)議數(shù)據(jù)單元詳細說明了寄存器的起始地址和讀出數(shù)量。每個寄存器為一個字節(jié)。正常的的響應(yīng)會返回功能代碼,起始地址和讀出的寄存器的數(shù)量及內(nèi)容。
請求協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 33H |
起始地址 | 2字節(jié) | 0000H到13FFH |
數(shù)據(jù)字節(jié)個數(shù) | 2字節(jié) | 1到400(0001-190H) |
響應(yīng)協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 33H |
起始地址 | 2字節(jié) | 0000H到13FFH |
數(shù)據(jù)字節(jié)個數(shù) | 2字節(jié) | 1到400(0001-190H) |
數(shù)據(jù) | N*字節(jié) |
N*=數(shù)據(jù)字節(jié)個數(shù)
下面這個例子是讀從字節(jié)寄存器2開始讀內(nèi)容為00 0A 01 02到寄存器,:
請求 | 響應(yīng) | ||
字段名稱 | (Hex) | 字段名稱 | (Hex) |
功能 | 33 | 功能 | 33 |
起始地址低位 | 01 | 起始地址低位 | 01 |
起始地址高位 | 00 | 起始地址高位 | 00 |
數(shù)據(jù)字節(jié)低位 | 04 | 數(shù)據(jù)字節(jié)低位 | 04 |
數(shù)據(jù)字節(jié)高位 | 00 | 數(shù)據(jù)字節(jié)高位 | 00 |
數(shù)據(jù)值VB00001 數(shù)據(jù)值VB00002 數(shù)據(jù)值VB00003 數(shù)據(jù)值VB00004 | 00 0A 01 02 |
這個功能代碼是用來讀遠程設(shè)備相鄰的字節(jié)輸出寄存器塊。請求協(xié)議數(shù)據(jù)單元詳細說明了寄存器的起始地址和讀出數(shù)量。每個寄存器為一個字節(jié)。正常的的響應(yīng)會返回功能代碼,起始地址和讀出的寄存器的數(shù)量及內(nèi)容。
請求協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 34H |
起始地址 | 2字節(jié) | 0000H到13FFH |
數(shù)據(jù)字節(jié)個數(shù) | 2字節(jié) | 1到400(0001-190H) |
響應(yīng)協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 34H |
起始地址 | 2字節(jié) | 0000H到13FFH |
數(shù)據(jù)字節(jié)個數(shù) | 2字節(jié) | 1到400(0001-190H) |
數(shù)據(jù) | N*字節(jié) |
N*=數(shù)據(jù)字節(jié)個數(shù)
下面這個例子是讀從字節(jié)寄存器2開始讀內(nèi)容為00 0A 01 02到寄存器,:
請求 | 響應(yīng) | ||
字段名稱 | (Hex) | 字段名稱 | (Hex) |
功能 | 34 | 功能 | 34 |
起始地址低位 | 01 | 起始地址低位 | 01 |
起始地址高位 | 00 | 起始地址高位 | 00 |
數(shù)據(jù)字節(jié)低位 | 04 | 數(shù)據(jù)字節(jié)低位 | 04 |
數(shù)據(jù)字節(jié)高位 | 00 | 數(shù)據(jù)字節(jié)高位 | 00 |
數(shù)據(jù)值VB00001 數(shù)據(jù)值VB00002 數(shù)據(jù)值VB00003 數(shù)據(jù)值VB00004 | 00 0A 01 02 |
這個功能代碼是遠程設(shè)備用來寫相鄰的字節(jié)輸出寄存器塊。請求協(xié)議數(shù)據(jù)單元詳細說明了寄存器的起始地址和輸出數(shù)量。每個寄存器為一個字節(jié)。正常的的響應(yīng)會返回功能代碼,起始地址和寫入的寄存器的數(shù)量。
請求協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 35H |
起始地址 | 2字節(jié) | 0000H到13FFH |
數(shù)據(jù)字節(jié)個數(shù) | 2字節(jié) | |
數(shù)據(jù) | N*字節(jié) |
N*=數(shù)據(jù)字節(jié)個數(shù)
響應(yīng)協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 35H |
起始地址 | 2字節(jié) | 0000H到13FFH |
數(shù)據(jù)字節(jié)個數(shù) | 2字節(jié) | 1到400(0001-190H) |
下面這個例子是寫00 0A 01 02到寄存器,從字節(jié)寄存器2開始:
請求 | 響應(yīng) | ||
字段名稱 | (Hex) | 字段名稱 | (Hex) |
功能 | 35 | 功能 | 35 |
起始地址低位 | 01 | 起始地址低位 | 01 |
起始地址高位 | 00 | 起始地址高位 | 00 |
數(shù)據(jù)字節(jié)低位 | 04 | 數(shù)據(jù)字節(jié)低位 | 04 |
數(shù)據(jù)字節(jié)高位 | 00 | 數(shù)據(jù)字節(jié)高位 | 00 |
數(shù)據(jù)值VB00001 | 00 | ||
數(shù)據(jù)值VB00002 | 0A | ||
數(shù)據(jù)值VB00003 | 01 | ||
數(shù)據(jù)值VB00004 | 02 |
這個功能代碼是用來讀遠程設(shè)備相鄰的整形(int雙字節(jié))輸入寄存器塊。請求協(xié)議數(shù)據(jù)單元詳細說明了寄存器的起始地址和讀出數(shù)量。每個寄存器為兩個字節(jié)。正常的的響應(yīng)會返回功能代碼,起始地址和讀出的寄存器的數(shù)量及內(nèi)容。
請求協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 04H |
起始地址 | 2字節(jié) | 0000H到13FFH |
寄存器個數(shù) | 2字節(jié) | 1到400(0001-190H) |
響應(yīng)協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 04H |
起始地址 | 2字節(jié) | 0000H到13FFH |
寄存器個數(shù) | 2字節(jié) | 1到400(0001-190H) |
數(shù)據(jù) | N*字節(jié) |
N*=數(shù)據(jù)字節(jié)個數(shù)*2
下面這個例子是讀從整形寄存器2開始讀內(nèi)容為00 0A和01 02到寄存器,:
請求 | 響應(yīng) | ||
字段名稱 | (Hex) | 字段名稱 | (Hex) |
功能 | 04 | 功能 | 04 |
起始地址低位 | 01 | 起始地址低位 | 01 |
起始地址高位 | 00 | 起始地址高位 | 00 |
寄存器個數(shù)低位 | 02 | 寄存器個數(shù)低位 | 02 |
寄存器個數(shù)高位 | 00 | 寄存器個數(shù)高位 | 00 |
數(shù)據(jù)值ViD2低字節(jié) 數(shù)據(jù)值VID2高字節(jié) 數(shù)據(jù)值VID3低字節(jié) 數(shù)據(jù)值VID3高字節(jié) | 00 0A 01 02 |
這個功能代碼是用來讀遠程設(shè)備相鄰的整形(int雙字節(jié))輸出寄存器塊。請求協(xié)議數(shù)據(jù)單元詳細說明了寄存器的起始地址和讀出數(shù)量。每個寄存器為兩個字節(jié)。正常的的響應(yīng)會返回功能代碼,起始地址和讀出的寄存器的數(shù)量及內(nèi)容。
請求協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 03H |
起始地址 | 2字節(jié) | 0000H到13FFH |
寄存器個數(shù) | 2字節(jié) | 1到400(0001-190H) |
響應(yīng)協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 03H |
起始地址 | 2字節(jié) | 0000H到13FFH |
寄存器個數(shù) | 2字節(jié) | 1到400(0001-190H) |
數(shù)據(jù) | N*字節(jié) |
N*=數(shù)據(jù)字節(jié)個數(shù)*2
下面這個例子是讀從整形輸出寄存器2開始讀內(nèi)容為00 0A和01 02到寄存器,:
請求 | 響應(yīng) | ||
字段名稱 | (Hex) | 字段名稱 | (Hex) |
功能 | 03 | 功能 | 03 |
起始地址低位 | 01 | 起始地址低位 | 01 |
起始地址高位 | 00 | 起始地址高位 | 00 |
寄存器個數(shù)低位 | 02 | 寄存器個數(shù)低位 | 02 |
寄存器個數(shù)高位 | 00 | 寄存器個數(shù)高位 | 00 |
數(shù)據(jù)值VOD2低字節(jié) 數(shù)據(jù)值VOD2高字節(jié) 數(shù)據(jù)值VOD3低字節(jié) 數(shù)據(jù)值VOD3高字節(jié) | 00 0A 01 02 |
這個功能代碼是用來寫遠程設(shè)備相鄰的整形(int雙字節(jié))輸出寄存器塊。請求協(xié)議數(shù)據(jù)單元詳細說明了寄存器的起始地址和讀出數(shù)量。每個寄存器為兩個字節(jié)。正常的的響應(yīng)會返回功能代碼,起始地址和讀出的寄存器的數(shù)量及內(nèi)容。
請求協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 10H |
起始地址 | 2字節(jié) | 0000H到13FFH |
寄存器個數(shù) | 2字節(jié) | 1到400(0001-190H) |
數(shù)據(jù) | N*字節(jié) |
N*=數(shù)據(jù)字節(jié)個數(shù)*2
響應(yīng)協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 10H |
起始地址 | 2字節(jié) | 0000H到13FFH |
寄存器個數(shù) | 2字節(jié) | 1到400(0001-190H) |
下面這個例子是讀從整形輸出寄存器2開始讀內(nèi)容為00 0A和01 02到寄存器:
請求 | 響應(yīng) | ||
字段名稱 | (Hex) | 字段名稱 | (Hex) |
功能 | 10 | 功能 | 10 |
起始地址低位 | 01 | 起始地址低位 | 01 |
起始地址高位 | 00 | 起始地址高位 | 00 |
寄存器個數(shù)低位 | 02 | 寄存器個數(shù)低位 | 02 |
寄存器個數(shù)高位 | 00 | 寄存器個數(shù)高位 | 00 |
數(shù)據(jù)值VOD2低字節(jié) 數(shù)據(jù)值VOD2高字節(jié) 數(shù)據(jù)值VOD3低字節(jié) 數(shù)據(jù)值VOD3高字節(jié) | 00 0A 01 02 |
這個功能代碼是用來讀遠程設(shè)備相鄰實數(shù)(float,四字節(jié),IEE754標準)輸入寄存器塊。請求協(xié)議數(shù)據(jù)單元詳細說明了寄存器的起始地址和讀出數(shù)量。每個寄存器為四個字節(jié)。正常的的響應(yīng)會返回功能代碼,起始地址和讀出的寄存器的數(shù)量及內(nèi)容。
請求協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 36H |
起始地址 | 2字節(jié) | 0000H到13FFH |
數(shù)據(jù)字節(jié)個數(shù) | 2字節(jié) | 1到400(0001-190H) |
響應(yīng)協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 36H |
起始地址 | 2字節(jié) | 0000H到13FFH |
數(shù)據(jù)字節(jié)個數(shù) | 2字節(jié) | 1到400(0001-190H) |
數(shù)據(jù) | N*字節(jié) |
N*=數(shù)據(jù)字節(jié)個數(shù)*4
下面這個例子是讀從整形寄存器2開始讀內(nèi)容為3.14和3.15到寄存器,:
請求 | 響應(yīng) | ||
字段名稱 | (Hex) | 字段名稱 | (Hex) |
功能 | 36 | 功能 | 36 |
起始地址低位 | 01 | 起始地址低位 | 01 |
起始地址高位 | 00 | 起始地址高位 | 00 |
寄存器個數(shù)低位 | 02 | 寄存器個數(shù)低位 | 02 |
寄存器個數(shù)高位 | 00 | 寄存器個數(shù)高位 | 00 |
數(shù)據(jù)值ViF2字節(jié)1 數(shù)據(jù)值ViF2字節(jié)2 數(shù)據(jù)值ViF2字節(jié)3 數(shù)據(jù)值ViF2字節(jié)4 數(shù)據(jù)值ViF3字節(jié)1 數(shù)據(jù)值ViF3字節(jié)2 數(shù)據(jù)值ViF3字節(jié)3 數(shù)據(jù)值ViF3字節(jié)4 | C3 F5 48 40 9A 99 49 40 |
這個功能代碼是用來讀遠程設(shè)備相鄰實數(shù)(float,四字節(jié),IEE754標準)輸出寄存器塊。請求協(xié)議數(shù)據(jù)單元詳細說明了寄存器的起始地址和讀出數(shù)量。每個寄存器為四個字節(jié)。正常的的響應(yīng)會返回功能代碼,起始地址和讀出的寄存器的數(shù)量及內(nèi)容。
請求協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 37H |
起始地址 | 2字節(jié) | 0000H到13FFH |
數(shù)據(jù)字節(jié)個數(shù) | 2字節(jié) | 1到400(0001-190H) |
響應(yīng)協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 37H |
起始地址 | 2字節(jié) | 0000H到13FFH |
數(shù)據(jù)字節(jié)個數(shù) | 2字節(jié) | 1到400(0001-190H) |
數(shù)據(jù) | N*字節(jié) |
N*=數(shù)據(jù)字節(jié)個數(shù)*4
下面這個例子是讀從整形寄存器2開始讀內(nèi)容為3.14和3.15到寄存器,:
請求 | 響應(yīng) | ||
字段名稱 | (Hex) | 字段名稱 | (Hex) |
功能 | 37 | 功能 | 37 |
起始地址低位 | 01 | 起始地址低位 | 01 |
起始地址高位 | 00 | 起始地址高位 | 00 |
寄存器個數(shù)低位 | 02 | 寄存器個數(shù)低位 | 02 |
寄存器個數(shù)高位 | 00 | 寄存器個數(shù)高位 | 00 |
數(shù)據(jù)值VOF2字節(jié)1 數(shù)據(jù)值VOF2字節(jié)2 數(shù)據(jù)值VOF2字節(jié)3 數(shù)據(jù)值VOF2字節(jié)4 數(shù)據(jù)值VOF3字節(jié)1 數(shù)據(jù)值VOF3字節(jié)2 數(shù)據(jù)值VOF3字節(jié)3 數(shù)據(jù)值VOF3字節(jié)4 | C3 F5 48 40 9A 99 49 40 |
這個功能代碼是用來寫遠程設(shè)備相鄰實數(shù)(float,四字節(jié),IEE754標準)輸出寄存器塊。請求協(xié)議數(shù)據(jù)單元詳細說明了寄存器的起始地址和寫的數(shù)量和內(nèi)容。每個寄存器為四個字節(jié)。正常的的響應(yīng)會返回功能代碼,起始地址和讀出的寄存器的數(shù)量及內(nèi)容。
請求協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 38H |
起始地址 | 2字節(jié) | 0000H到13FFH |
數(shù)據(jù)字節(jié)個數(shù) | 2字節(jié) | 1到400(0001-190H) |
數(shù)據(jù) | N*字節(jié) |
N*=數(shù)據(jù)字節(jié)個數(shù)*4
響應(yīng)協(xié)議數(shù)據(jù)單元
功能代碼 | 1字節(jié) | 38H |
起始地址 | 2字節(jié) | 0000H到13FFH |
數(shù)據(jù)字節(jié)個數(shù) | 2字節(jié) | 1到400(0001-190H) |
N*=數(shù)據(jù)字節(jié)個數(shù)*4
下面這個例子是寫從整形寄存器2開始內(nèi)容為3.14和3.15到寄存器上,:
請求 | 響應(yīng) | ||
字段名稱 | (Hex) | 字段名稱 | (Hex) |
功能 | 38 | 功能 | 38 |
起始地址低位 | 01 | 起始地址低位 | 01 |
起始地址高位 | 00 | 起始地址高位 | 00 |
寄存器個數(shù)低位 | 02 | 寄存器個數(shù)低位 | 02 |
寄存器個數(shù)高位 | 00 | 寄存器個數(shù)高位 | 00 |
數(shù)據(jù)值VOF2字節(jié)1 數(shù)據(jù)值VOF2字節(jié)2 數(shù)據(jù)值VOF2字節(jié)3 數(shù)據(jù)值VOF2字節(jié)4 數(shù)據(jù)值VOF3字節(jié)1 數(shù)據(jù)值VOF3字節(jié)2 數(shù)據(jù)值VOF3字節(jié)3 數(shù)據(jù)值VOF3字節(jié)4 | C3 F5 48 40 9A 99 49 40 |
各種類型碼還有兩個碼+0x40和0x80的類型碼(例如0x01碼變成0x41和0x81,0x0F變成0x4F和0x8F),他們的語法是一樣處理的。只有一下不同:
當發(fā)送出去的數(shù)據(jù)包是0x40碼類型時,捷麥標示頭自動變成4F 3F 2F 1F 5F 5F的主動上傳標示頭,包類型字段變成84的主動上傳字段。(其他的處理邏輯跟普通的下至數(shù)據(jù)一樣處理)。
當收到的數(shù)據(jù)包類型是這種0x40碼類型時,將數(shù)據(jù)內(nèi)容解析出來,然后將內(nèi)容更新到自身對應(yīng)的0x80碼類型的變量上,然后進行相應(yīng)的響應(yīng),(標示頭自動變成主動上傳頭,包類型字段變成04的主動上傳響應(yīng)字段)(其他的處理邏輯跟普通的采集數(shù)據(jù)包響應(yīng)一樣處理)。
0x80碼是采集變量(只讀變量),采集周期為0。
(假設(shè)分配的設(shè)備號為25 7D,包標示為5,中心站的地址為0,請求的分站為7,獲得整形輸入的數(shù)據(jù))
主站完整的數(shù)據(jù)請求包為:
4F 3F 2F 1F 5F 6F 25 7D 05 00 09 00 00 EF FF F0 00 00 07 00 00 00 F6 08 01 01 04 00 00 02 00 FA B1
從站完整的數(shù)據(jù)響應(yīng)包為:
4F 3F 2F 1F 5F 6F 25 7D 05 00 0D 00 80 EF FF F0 00 00 00 00 07 00 03 6B 01 01 04 13 00 02 00 12 34 56 78 1B CB
(假設(shè)分配的設(shè)備號為25 7D,包標示為5,中心站的地址為0,分站為7,獲得整形輸入的數(shù)據(jù)和讀離散輸出)
主站完整的數(shù)據(jù)請求包為:
4F 3F 2F 1F 5F 6F 25 7D 05 00 0F 00 00 EF FF F0 00 00 07 00 00 00 FE 00 02 01 04 00 00 02 00 02 01 00 00 09 00 57 F1
從站完整的數(shù)據(jù)響應(yīng)包為:
4F 3F 2F 1F 5F 6F 25 7D 05 00 15 00 80 EF FF F0 00 00 00 00 07 00 21 7B 02 01 04 00 00 02 00 12 34 56 78 02 01 00 00 09 00 D7 01 72 82