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