自動氣象站通訊協(xié)議
V20110831
一、協(xié)議特性
1、支持 XPH 通訊、標準 MODBUS 通訊兩種格式。
2、支持 RS-232、RS-485 通訊總線。
3、支持 19200 波特率,特殊版本可達 38400.
4、支持最大設備數(shù) 254 個。
5、數(shù)據(jù)幀最小間隔 100ms 以上。
6、使用 CRC16 數(shù)據(jù)幀錯誤檢查,多項式碼 0xA001。
二、協(xié)議說明
恒奧德站支持兩種格式的通訊協(xié)議工作,任一時刻只能使用一種通訊協(xié)
議進行通訊。下面分別對兩種通訊協(xié)議進行詳細說明。
1、XPH 通訊協(xié)議
通訊參數(shù):波特率 9600
數(shù)據(jù)位 8 位
無校驗位
XPH 通訊協(xié)議是效仿標準 MODBUS 通訊的一個自定義版本,其并不兼容 MODBUS
通訊協(xié)議。其特點是召喚式工作,氣象站僅作為服務器,使用上位機客戶端進行
通訊。氣象站收到正確數(shù)據(jù)幀后,就回復相應的內(nèi)容,無效數(shù)據(jù)幀則不回復任何
內(nèi)容。不回復是便于多臺氣象站進行 485 總線組網(wǎng),避免數(shù)據(jù)通訊沖突。
1)XPH 通用幀格式
|
序號 |
內(nèi)容 |
字節(jié)數(shù) |
說明 |
備注 |
|
1 |
地址域 |
1 |
氣象站通訊地址 |
唯一 |
|
2 |
讀寫域 |
1 |
讀(0x03)/寫(0x10)操作碼 |
2選1 |
|
3 |
命令域 |
2 |
命令碼,前 1 字節(jié)必須為 0 |
00 xx |
|
4 |
數(shù)據(jù)長度域 |
2 |
數(shù)據(jù)域長度,不包括本域 |
發(fā)送時可無 |
|
5 |
數(shù)據(jù)域 |
N |
數(shù)據(jù) |
|
|
6 |
校驗域 |
2 |
CRC16 檢驗碼 |
低前高后 |
|
北京恒奧德科技有限公司自動氣象站通信協(xié)議
2)XPH 協(xié)議通訊碼
3)XPH 通訊協(xié)議詳細說明
對于每條通訊命令碼,進行收發(fā)過程的詳細描述,假定氣象站的地址為 0x01。
返回的通道數(shù)據(jù)都以有符號 16 進制數(shù)表示,如通道 1 的數(shù)據(jù)(包括實時數(shù)和歷
史數(shù)據(jù))為 0x12 0x34,表示為十進制數(shù)即 4660(0x1234)。即數(shù)據(jù)字節(jié)的高位在
前,低位在后,此順序不能錯,否則數(shù)據(jù)值將錯誤。
另外,對不不同的傳感器類型,某些通道數(shù)據(jù)值需要表示 N 位小數(shù),此時,
該通道 16 位有符號數(shù)擴大 10 的 N 次方倍。如通道 1 表示風速,帶一位小數(shù),其
數(shù)據(jù)為 0x00 0x7B(十進制 123),則實際風速為 12.3m/s,即讀取的數(shù)據(jù)擴大了
10 倍,其他小數(shù)以此類推。傳感器精度參數(shù)詳見說明書。
紅色字:命令碼
綠色字:CRC16 校驗碼(低字節(jié)在前,高字節(jié)在后)
藍色字:數(shù)據(jù)(高字節(jié)在前,低字節(jié)在后,0x7FFF 表示無效數(shù)據(jù))
紫色字:數(shù)據(jù)長度(高字節(jié)在前,低字節(jié)在后)
|
序號 |
命令碼 |
含義 |
類型 |
備注 |
|
1 |
0x00 |
實時環(huán)境參數(shù)數(shù)據(jù) |
通用類型 |
僅讀 |
|
2 |
0x20 |
系統(tǒng)參數(shù)配置 |
通用類型 |
讀寫 |
|
3 |
0x37 |
讀歷史數(shù)據(jù) |
通用類型 |
僅讀 |
|
4 |
0x38 |
歷史數(shù)據(jù)重讀 |
通用類型 |
僅讀 |
|
5 |
0x61 |
配置登錄 GPRS 服務器密碼 |
需支持 |
讀寫 |
|
6 |
0x80 |
復位氣象站 |
通用類型 |
僅寫 |
|
北京恒奧德科技有限公司自動氣象站通信協(xié)議
A、讀取實時環(huán)境參數(shù)數(shù)據(jù)
客戶端發(fā)送:
01 03 00 00 F1 D8
氣象站返回:(38 字節(jié))
01 03 00 20 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F
FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 69 3F
返回數(shù)據(jù)格式說明:
16 通道對應的配置出廠時定義,根據(jù)需要而定。
|
序號 |
含義 |
偏移 |
字節(jié)數(shù) |
說明 |
備注 |
|
1 |
地址域 |
0 |
1 |
地址(0x01) |
0x01 |
|
2 |
操作碼 |
1 |
1 |
僅讀(0x03) |
0x03 |
|
3 |
數(shù)據(jù)長度域 |
2 |
2 |
0x00 0x20 |
高前低后 |
|
4 |
數(shù)據(jù)域 |
4 |
2 |
通道 1 |
0x7FFF(無效/未接) |
4數(shù)據(jù)域
6 |
2 |
通道 2 |
0x7FFF(無效/未接) |
4數(shù)據(jù)域
8 |
2 |
通道 3 |
0x7FFF(無效/未接) |
4數(shù)據(jù)域
10 |
2 |
通道 4 |
0x7FFF(無效/未接) |
4數(shù)據(jù)域
12 |
2 |
通道 5 |
0x7FFF(無效/未接) |
4數(shù)據(jù)域
14 |
2 |
通道 6 |
0x7FFF(無效/未接) |
4數(shù)據(jù)域
16 |
2 |
通道 7 |
0x7FFF(無效/未接) |
4數(shù)據(jù)域
18 |
2 |
通道 8 |
0x7FFF(無效/未接) |
4數(shù)據(jù)域
20 |
2 |
通道 9 |
0x7FFF(無效/未接) |
4數(shù)據(jù)域
22 |
2 |
通道 10 |
0x7FFF(無效/未接) |
4數(shù)據(jù)域
24 |
2 |
通道 11 |
0x7FFF(無效/未接) |
4數(shù)據(jù)域
26 |
2 |
通道 12 |
0x7FFF(無效/未接) |
4數(shù)據(jù)域
28 |
2 |
通道 13 |
0x7FFF(無效/未接) |
4數(shù)據(jù)域
30 |
2 |
通道 14 |
0x7FFF(無效/未接) |
4數(shù)據(jù)域
32 |
2 |
通道 15 |
0x7FFF(無效/未接) |
4數(shù)據(jù)域
34 |
2 |
通道 16 |
0x7FFF(無效/未接) |
|
5 |
校驗域 |
36 |
2 |
低前高后 |
0x69 0x3F |
|
北京恒奧德科技有限公司自動氣象站通信協(xié)議
B、讀取系統(tǒng)參數(shù)配置
客戶端發(fā)送:(6 個字節(jié))
01 03 00 20 F0 00
氣象站返回:(14 字節(jié))
01 03 00 08 0B 08 1F 0B 00 0A 01 01 98 E0
返回數(shù)據(jù)說明:
存儲間隔:即歷史數(shù)據(jù)保存的間隔,單位為:分鐘
設備地址:設置范圍 0-254,
0 為廣播地址,一般不要隨便使用,主要用于組網(wǎng)或多播;
1-254 為正常設備地址,同一總線上必須保證唯一;
若無返回數(shù)據(jù),則說明讀取不成功。
|
序號 |
含義 |
偏移 |
字節(jié)數(shù) |
說明 |
備注 |
|
1 |
地址域 |
0 |
1 |
地址(0x01) |
0x01 |
|
2 |
操作碼 |
1 |
1 |
讀(0x03) |
0x03 |
|
3 |
數(shù)據(jù)長度域 |
2 |
2 |
0x00 0x08 |
高前低后 |
|
4 |
數(shù)據(jù)域 |
3 |
1 |
年 |
0B(2011 年) |
4數(shù)據(jù)域
4 |
1 |
月 |
08(8 月) |
4數(shù)據(jù)域
5 |
1 |
日 |
1F (31 日) |
4數(shù)據(jù)域
6 |
1 |
時 |
0B(12 點/24 小時制) |
4數(shù)據(jù)域
7 |
1 |
分 |
00(00 分鐘) |
4數(shù)據(jù)域
8 |
1 |
存儲間隔 |
10(分鐘) |
4數(shù)據(jù)域
9 |
1 |
語言類型 0/1 |
1-英語/0-中文 |
4數(shù)據(jù)域
10 |
1 |
設備地址 |
01(0x01-0xFE) |
|
5 |
校驗域 |
11 |
2 |
低前高后 |
0x98 0xE0 |
|
北京恒奧德科技有限公司自動氣象站通信協(xié)議
C、寫入系統(tǒng)參數(shù)配置
客戶端發(fā)送:(17 字節(jié))
01 10 00 20 00 04 08 0B 08 1F 0B 00 10 00 00 59 DD
氣象站返回:(8 個字節(jié))
01 10 00 20 00 04 C0 00
發(fā)送數(shù)據(jù)說明:
寄存器數(shù)量:該域無意義,保留該域為了向前兼容,請盡量使用說明的數(shù)值;
數(shù)據(jù)域最后一個字節(jié),目前為設備地址設置,之前的通訊版本選擇為保留,故在
20110831 之后都要小心設置。最好是先讀取系統(tǒng)參數(shù),然后使用讀取的設備地
址填充該字節(jié)。
若無返回數(shù)據(jù),則說明寫入不成功,否則寫入成功。
|
序號 |
含義 |
偏移 |
字節(jié)數(shù) |
說明 |
備注 |
|
1 |
地址域 |
0 |
1 |
地址(0x01) |
0x01 |
|
2 |
操作碼 |
1 |
1 |
寫(0x10) |
0x10 |
|
3 |
命令碼 |
2 |
2 |
0x00 0x20 |
高前低后 |
|
4 |
寄存器數(shù)量 |
4 |
2 |
0x00 0x04 |
高前低后 |
|
5 |
數(shù)據(jù)長度 |
6 |
1 |
0x08 |
8 個數(shù)據(jù)字節(jié) |
|
6 |
數(shù)據(jù)域 |
7 |
1 |
0B |
0B(2011 年) |
6數(shù)據(jù)域
8 |
1 |
08 |
08(8 月) |
6數(shù)據(jù)域
9 |
1 |
1F |
1F (31 日) |
6數(shù)據(jù)域
10 |
1 |
0B |
0B(12 點/24 小時制) |
6數(shù)據(jù)域
11 |
1 |
00 |
00(00 分鐘) |
6數(shù)據(jù)域
12 |
1 |
10 |
存儲間隔 16(分鐘) |
6數(shù)據(jù)域
13 |
1 |
00 |
1-英語/0-中文 |
6數(shù)據(jù)域
14 |
1 |
00 |
保留/地址 |
|
5 |
校驗域 |
15 |
2 |
低前高后 |
0x59 0xDD |
|
北京恒奧德科技有限公司自動氣象站通信協(xié)議
D、讀取歷史數(shù)據(jù)
客戶端發(fā)送:(6 個字節(jié))
01 03 00 37 B0 0E
氣象站返回:(1044 個字節(jié))
01 03 04 0E 00 1C D0~DN CRC16
返回數(shù)據(jù)說明:
數(shù)據(jù)長度域:為“有效數(shù)據(jù)幀數(shù)”和“數(shù)據(jù)域”兩個域字節(jié)總和。
數(shù)據(jù)域:固定大小為 1036 個字節(jié),每幀 37 字節(jié),故最大有效幀 1036/37=28 幀。
有效數(shù)據(jù)幀數(shù):由于歷史數(shù)據(jù)包是等長的,該域指示數(shù)據(jù)域中包含的有效幀數(shù),
有效幀從數(shù)據(jù)域的 0 位置開始,順序往后排列。最大有效幀為 28 幀。
歷史數(shù)據(jù)幀說明:(37 字節(jié))
|
序號 |
偏移 |
字節(jié)數(shù) |
說明 |
|
1 |
0 |
1 |
年(2000 年以后的偏移) |
|
2 |
1 |
1 |
月 |
|
3 |
2 |
1 |
日 |
|
4 |
3 |
1 |
時(24 小時制) |
|
5 |
4 |
1 |
分鐘 |
|
16 通
道數(shù)
據(jù)值 |
5 |
2 |
通道 1 |
16 通
道數(shù)
據(jù)值
7 |
2 |
通道 2 |
16 通
道數(shù)
據(jù)值
9 |
2 |
通道 3 |
16 通
道數(shù)
據(jù)值
11 |
2 |
通道 4 |
16 通
道數(shù)
據(jù)值
13 |
2 |
通道 5 |
|
|
序號 |
含義 |
偏移 |
字節(jié)數(shù) |
說明 |
備注 |
|
1 |
地址域 |
0 |
1 |
地址(0x01) |
0x01 |
|
2 |
操作碼 |
1 |
1 |
讀(0x03) |
0x03 |
|
3 |
數(shù)據(jù)長度 |
2 |
2 |
0x04 0x0E |
高前低后 |
|
4 |
有效數(shù)據(jù)幀數(shù) |
4 |
2 |
0x00 0x1C |
高前低后 |
|
5 |
數(shù)據(jù)域 |
6 |
1036 |
歷史數(shù)據(jù)包 |
分成 N 幀 |
|
6 |
校驗域 |
1042 |
2 |
低前高后 |
CRC16 低前高后 |
|
北京恒奧德科技有限公司自動氣象站通信協(xié)議
E、重讀歷史數(shù)據(jù)
客戶端發(fā)送:
01 03 00 38 F0 0A
氣象站返回:
返回數(shù)據(jù)與“[D]讀取歷史數(shù)據(jù)”返回數(shù)據(jù)格式相同。
說明:
由于遠程數(shù)據(jù)讀取時,且歷史數(shù)據(jù)包比較大,可能會發(fā)生數(shù)據(jù)錯誤。就可能
造成讀取的歷史數(shù)據(jù)在傳輸過程中出錯,從而導致某些上位機接口程序誤判讀取
歷史數(shù)據(jù)錯誤。而氣象站一旦讀取了歷史數(shù)據(jù)后不能重讀的話,就會造成某包歷
史數(shù)據(jù)丟失的現(xiàn)象。重讀歷史數(shù)據(jù)命令用于重復讀取上一次讀取的歷史數(shù)據(jù),從
而解決錯誤丟失歷史問題。
|
|
15 |
2 |
通道 6 |
|
17 |
2 |
通道 7 |
|
19 |
2 |
通道 8 |
|
21 |
2 |
通道 9 |
|
23 |
2 |
通道 10 |
|
25 |
2 |
通道 11 |
|
27 |
2 |
通道 12 |
|
29 |
2 |
通道 13 |
|
31 |
2 |
通道 14 |
|
33 |
2 |
通道 15 |
|
35 |
2 |
通道 16 |
|
北京恒奧德科技有限公司自動氣象站通信協(xié)議
F、讀取登錄密碼(該命令需額外支持,默認不支持)
客戶端發(fā)送:(8 個字節(jié))
01 03 00 61 00 04 15 d7
氣象站返回:(12 個字節(jié))
01 03 00 61 00 04 YY YY YY YY CRC16
返回數(shù)據(jù)說明:
數(shù)據(jù)域:4 位 ASCII 碼表示的密碼,每位的范圍 0-9,即 0x30-0x39。數(shù)據(jù)域 0-3
字節(jié)對應界面輸入的左-右順序。
G、寫入登錄密碼(該命令需額外支持,默認不支持)
客戶端發(fā)送:(12 字節(jié))
01 10 00 61 00 04 YY YY YY YY CRC16
氣象站返回:(8 個字節(jié))
01 10 00 61 00 04 CRC16
寫入數(shù)據(jù)說明:
數(shù)據(jù)域:4 位 ASCII 碼表示的密碼,每位的范圍 0-9,即 0x30-0x39。數(shù)據(jù)域 0-3
字節(jié)對應界面輸入的左-右順序。
|
序號 |
含義 |
偏移 |
字節(jié)數(shù) |
說明 |
備注 |
|
1 |
地址域 |
0 |
1 |
地址(0x01) |
0x01 |
|
2 |
操作碼 |
1 |
1 |
讀(0x03) |
0x03 |
|
3 |
命令碼 |
2 |
2 |
0x00 0x61 |
高前低后 |
|
4 |
數(shù)據(jù)長度域 |
4 |
2 |
0x00 0x04 |
高前低后 |
|
5 |
數(shù)據(jù)域 |
6 |
4 |
4 位密碼數(shù)據(jù) |
從左到右 |
|
6 |
校驗域 |
10 |
2 |
低前高后 |
CRC16 低前高后 |
|
北京恒奧德科技有限公司自動氣象站通信協(xié)議
H、復位氣象站
客戶端發(fā)送:(4 字節(jié))
01 80 01 80
氣象站返回:
無返回
北京恒奧德科技有限公司自動氣象站通信協(xié)議
2、標準 MODBUS 通訊協(xié)議
通訊參數(shù):波特率 9600
數(shù)據(jù)位 8 位
無校驗位
氣象站標準 MODBUS 通訊協(xié)議使用 RTU 模式。消息幀發(fā)送至少要以 3.5 個字
符時間的停頓間隔開始,即在傳輸完每幀的最后一個字節(jié),至少需要 3.5 個字
符時間的停頓來標定消息幀的結束。下一個新的消息幀可在此停頓后開始,整個
消息幀必須作為一連續(xù)的流傳輸。
氣象站標準 MODBUS 通訊協(xié)議僅支持讀功能,不支持配置氣象站寄存器的功
能,即不能寫入任何數(shù)據(jù)。其特點有:
①氣象站共有 16 個通道寄存器,對應 16 個通道的傳感器測量輸出值;
②寄存器最小編號固定于 0,最大編號固定于 15,不可更改;
③支持一次讀取單個、多個(寄存器編號必須連續(xù))寄存器;
④每一通道數(shù)據(jù)占 2 個字節(jié),高字節(jié)在前,低字節(jié)在后,16 位有符號整形值;
⑤數(shù)據(jù)小數(shù)位定義,同 XPH 協(xié)議的小數(shù)定義,即 N 位小數(shù),數(shù)據(jù)值擴大 10
的 N 次方倍。
北京恒奧德科技有限公司自動氣象站通信協(xié)議
氣象站標準 MODBUS 通訊協(xié)議幀
外部設備發(fā)送幀:
如 01 03 00 00 00 10 44 06
設備地址:假定為 0x01,有效范圍 0-254,0 為廣播地址。
操 作 碼:固定為 0x03,即讀取操作,不支持其他操作。
起始編號:范圍 0-15,表示要讀取的第一個寄存器編號。
結束編號:范圍 1-16,表示讀取最后一個寄存器編號+1,讀取的數(shù)據(jù)不包括本
編號的寄存器內(nèi)容,僅作為結束標記,其值必須保證大于等于“起始
編號”。
氣象站返回數(shù)據(jù)幀:
如 01 03 20 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF
7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 8C 45
數(shù)據(jù)長度:不含本身,僅表示數(shù)據(jù)域的字節(jié)數(shù)量。最大 32,最小 0。
根據(jù)讀取指令序列的“起始編號”和“結束編號”來確定。
數(shù)據(jù)長度 = (結束編號 – 起始編號)*2
|
序號 |
含義 |
偏移 |
字節(jié)數(shù) |
說明 |
|
1 |
設備地址 |
0 |
1 |
設備唯一標識 |
|
2 |
操作碼(讀) |
1 |
1 |
固定值 0x03 |
|
3 |
數(shù)據(jù)長度 |
2 |
1 |
不含本字節(jié) |
|
4 |
數(shù)據(jù)域 |
3 |
N |
最多 32 個字節(jié) |
|
5 |
CRC16 檢驗 |
3+N |
2 |
低前高后 |
|
|
序號 |
含義 |
偏移 |
字節(jié)數(shù) |
說明 |
|
1 |
設備地址 |
0 |
1 |
設備唯一標識 |
|
2 |
操作碼(讀) |
1 |
1 |
固定值 0x03 |
|
3 |
寄存器起始編號 |
2 |
2 |
讀取的第一個寄存器編號 |
|
4 |
寄存器結束編號 |
4 |
2 |
讀取的最后個寄存器編號-1 |
|
5 |
CRC16 檢驗 |
6 |
2 |
低前高后 |
|
北京恒奧德科技有限公司自動氣象站通信協(xié)議
三、附錄
1、CRC16 校驗碼的計算
(1).預置 1 個 16 位的寄存器為十六進制 FFFF(即全為 1);稱此寄存器為 CRC 寄存器;
(2).把第一個 8 位二進制數(shù)據(jù)(既通訊信息幀的第一個字節(jié))與 16 位的 CRC 寄存器的低
8 位相異或,把結果放于 CRC 寄存器;
(3).把 CRC 寄存器的內(nèi)容右移一位(朝低位)用 0 填補最高位,并檢查右移后的移出位;
(4).如果移出位為 0:重復第 3 步(再次右移一位);
如果移出位為 1:CRC 寄存器與多項式 A001(1010 0000 0000 0001)進行異或;
(5).重復步驟 3 和 4,直到右移 8 次,這樣整個 8 位數(shù)據(jù)全部進行了處理;
(6).重復步驟 2 到步驟 5,進行通訊信息幀下一個字節(jié)的處理;
(7).將該通訊信息幀所有字節(jié)按上述步驟計算完成后,得到的 16 位 CRC 寄存器的高、低
字節(jié)進行交換;
(8).最后得到的 CRC 寄存器內(nèi)容即為 CRC16 碼。(注意得到的 CRC 碼即為低前高后順序)
2、通道數(shù)據(jù)轉換
例如溫度十六進制編碼為“00 C3”,換算成二進制為“0000000 11000011”,其二進制
的第一位為“0”,所以它的值為正數(shù),此時則可以用 1 中的的方法換算出十進制值“195”,
最后將它除以 10 后得到最終結果“19.5”。
又例如溫度十六進制編碼為“FF 3D”, 換算成二進制為“11111111 00111101” ,其
二進制的第一位為“1”,所以它的值為負數(shù)。
其具體換算步驟如下:
(1)將其二進制的的第一位替換為“0” 得到:“01111111 00111101”
(2)后 15 位取反后得到:“00000000 11000010”
(3)加上“1”后得到:“00000000 11000011”
(4)按照 1 中的正數(shù)表示方法得到十進制值“195”
(5)因為是負值所以為“-195”
(6)結果除以 10,最終結果為“-19.5”
所以:00 C3 → 19.5℃
FF 3D → -19.5℃