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