新普惠自动气象站通讯协议110831.docx
《新普惠自动气象站通讯协议110831.docx》由会员分享,可在线阅读,更多相关《新普惠自动气象站通讯协议110831.docx(15页珍藏版)》请在冰豆网上搜索。
新普惠自动气象站通讯协议110831
新普惠自动气象站通讯协议
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
00xx
4
数据长度域
2
数据域长度,不包括本域
发送时可无
5
数据域
N
数据
6
校验域
2
CRC16检验码
低前高后
2)XPH协议通讯码
序号
命令码
含义
类型
备注
1
0x00
实时环境参数数据
通用类型
仅读
2
0x20
系统参数配置
通用类型
读写
3
0x37
读历史数据
通用类型
仅读
4
0x38
历史数据重读
通用类型
仅读
5
0x61
配置登录GPRS服务器密码
需支持
读写
6
0x80
复位气象站
通用类型
仅写
3)XPH通讯协议详细说明
对于每条通讯命令码,进行收发过程的详细描述,假定气象站的地址为0x01。
返回的通道数据都以有符号16进制数表示,如通道1的数据(包括实时数和历史数据)为0x120x34,表示为十进制数即4660(0x1234)。
即数据字节的高位在前,低位在后,此顺序不能错,否则数据值将错误。
另外,对不不同的传感器类型,某些通道数据值需要表示N位小数,此时,该通道16位有符号数扩大10的N次方倍。
如通道1表示风速,带一位小数,其数据为0x000x7B(十进制123),则实际风速为12.3m/s,即读取的数据扩大了10倍,其他小数以此类推。
传感器精度参数详见说明书。
红色字:
命令码
绿色字:
CRC16校验码(低字节在前,高字节在后)
蓝色字:
数据(高字节在前,低字节在后,0x7FFF表示无效数据)
紫色字:
数据长度(高字节在前,低字节在后)
A、读取实时环境参数数据
客户端发送:
01030000F1D8
气象站返回:
(38字节)
010300207FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF693F
返回数据格式说明:
序号
含义
偏移
字节数
说明
备注
1
地址域
0
1
地址(0x01)
0x01
2
操作码
1
1
仅读(0x03)
0x03
3
数据长度域
2
2
0x000x20
高前低后
4
数据域
4
2
通道1
0x7FFF(无效/未接)
6
2
通道2
0x7FFF(无效/未接)
8
2
通道3
0x7FFF(无效/未接)
10
2
通道4
0x7FFF(无效/未接)
12
2
通道5
0x7FFF(无效/未接)
14
2
通道6
0x7FFF(无效/未接)
16
2
通道7
0x7FFF(无效/未接)
18
2
通道8
0x7FFF(无效/未接)
20
2
通道9
0x7FFF(无效/未接)
22
2
通道10
0x7FFF(无效/未接)
24
2
通道11
0x7FFF(无效/未接)
26
2
通道12
0x7FFF(无效/未接)
28
2
通道13
0x7FFF(无效/未接)
30
2
通道14
0x7FFF(无效/未接)
32
2
通道15
0x7FFF(无效/未接)
34
2
通道16
0x7FFF(无效/未接)
5
校验域
36
2
低前高后
0x690x3F
16通道对应的配置出厂时定义,根据需要而定。
B、读取系统参数配置
客户端发送:
(6个字节)
01030020F000
气象站返回:
(14字节)
010300080B081F0B000A010198E0
返回数据说明:
序号
含义
偏移
字节数
说明
备注
1
地址域
0
1
地址(0x01)
0x01
2
操作码
1
1
读(0x03)
0x03
3
数据长度域
2
2
0x000x08
高前低后
4
数据域
3
1
年
0B(2011年)
4
1
月
08(8月)
5
1
日
1F(31日)
6
1
时
0B(12点/24小时制)
7
1
分
00(00分钟)
8
1
存储间隔
10(分钟)
9
1
语言类型0/1
1-英语/0-中文
10
1
设备地址
01(0x01-0xFE)
5
校验域
11
2
低前高后
0x980xE0
存储间隔:
即历史数据保存的间隔,单位为:
分钟
设备地址:
设置范围0-254,
0为广播地址,一般不要随便使用,主要用于组网或多播;
1-254为正常设备地址,同一总线上必须保证唯一;
若无返回数据,则说明读取不成功。
C、写入系统参数配置
客户端发送:
(17字节)
011000200004080B081F0B0010000059DD
气象站返回:
(8个字节)
011000200004C000
发送数据说明:
序号
含义
偏移
字节数
说明
备注
1
地址域
0
1
地址(0x01)
0x01
2
操作码
1
1
写(0x10)
0x10
3
命令码
2
2
0x000x20
高前低后
4
寄存器数量
4
2
0x000x04
高前低后
5
数据长度
6
1
0x08
8个数据字节
6
数据域
7
1
0B
0B(2011年)
8
1
08
08(8月)
9
1
1F
1F(31日)
10
1
0B
0B(12点/24小时制)
11
1
00
00(00分钟)
12
1
10
存储间隔16(分钟)
13
1
00
1-英语/0-中文
14
1
00
保留/地址
5
校验域
15
2
低前高后
0x590xDD
寄存器数量:
该域无意义,保留该域为了向前兼容,请尽量使用说明的数值;
数据域最后一个字节,目前为设备地址设置,之前的通讯版本选择为保留,故在20110831之后都要小心设置。
最好是先读取系统参数,然后使用读取的设备地址填充该字节。
若无返回数据,则说明写入不成功,否则写入成功。
D、读取历史数据
客户端发送:
(6个字节)
01030037B00E
气象站返回:
(1044个字节)
0103040E001CD0~DNCRC16
返回数据说明:
序号
含义
偏移
字节数
说明
备注
1
地址域
0
1
地址(0x01)
0x01
2
操作码
1
1
读(0x03)
0x03
3
数据长度
2
2
0x040x0E
高前低后
4
有效数据帧数
4
2
0x000x1C
高前低后
5
数据域
6
1036
历史数据包
分成N帧
6
校验域
1042
2
低前高后
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
7
2
通道2
9
2
通道3
11
2
通道4
13
2
通道5
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
E、重读历史数据
客户端发送:
01030038F00A
气象站返回:
返回数据与“[D]读取历史数据”返回数据格式相同。
说明:
由于远程数据读取时,且历史数据包比较大,可能会发生数据错误。
就可能造成读取的历史数据在传输过程中出错,从而导致某些上位机接口程序误判读取历史数据错误。
而气象站一旦读取了历史数据后不能重读的话,就会造成某包历史数据丢失的现象。
重读历史数据命令用于重复读取上一次读取的历史数据,从而解决错误丢失历史问题。
F、读取登录密码(该命令需额外支持,默认不支持)
客户端发送:
(8个字节)
01030061000415d7
气象站返回:
(12个字节)
010300610004YYYYYYYYCRC16
返回数据说明:
序号
含义
偏移
字节数
说明
备注
1
地址域
0
1
地址(0x01)
0x01
2
操作码
1
1
读(0x03)
0x03
3
命令码
2
2
0x000x61
高前低后
4
数据长度域
4
2
0x000x04
高前低后
5
数据域
6
4
4位密码数据
从左到右
6
校验域
10
2
低前高后
CRC16低前高后
数据域:
4位ASCII码表示的密码,每位的范围0-9,即0x30-0x39。
数据域0-3字节对应界面输入的左-右顺序。
G、写入登录密码(该命令需额外支持,默认不支持)
客户端发送:
(12字节)
011000610004YYYYYYYYCRC16
气象站返回:
(8个字节)
011000610004CRC16
写入数据说明:
数据域:
4位ASCII码表示的密码,每位的范围0-9,即0x30-0x39。
数据域0-3字节对应界面输入的左-右顺序。
H、复位气象站
客户端发送:
(4字节)
01800180
气象站返回:
无返回
2、标准MODBUS通讯协议
通讯参数:
波特率9600数据位8位无校验位
气象站标准MODBUS通讯协议使用RTU模式。
消息帧发送至少要以3.5个字符时间的停顿间隔开始,即在传输完每帧的最后一个字节,至少需要3.5个字符时间的停顿来标定消息帧的结束。
下一个新的消息帧可在此停顿后开始,整个消息帧必须作为一连续的流传输。
气象站标准MODBUS通讯协议仅支持读功能,不支持配置气象站寄存器的功能,即不能写入任何数据。
其特点有:
①气象站共有16个通道寄存器,对应16个通道的传感器测量输出值;
②寄存器最小编号固定于0,最大编号固定于15,不可更改;
③支持一次读取单个、多个(寄存器编号必须连续)寄存器;
④每一通道数据占2个字节,高字节在前,低字节在后,16位有符号整形值;
⑤数据小数位定义,同XPH协议的小数定义,即N位小数,数据值扩大10的N次方倍。
气象站标准MODBUS通讯协议帧
外部设备发送帧:
如0103000000104406
序号
含义
偏移
字节数
说明
1
设备地址
0
1
设备唯一标识
2
操作码(读)
1
1
固定值0x03
3
寄存器起始编号
2
2
读取的第一个寄存器编号
4
寄存器结束编号
4
2
读取的最后个寄存器编号-1
5
CRC16检验
6
2
低前高后
设备地址:
假定为0x01,有效范围0-254,0为广播地址。
操作码:
固定为0x03,即读取操作,不支持其他操作。
起始编号:
范围0-15,表示要读取的第一个寄存器编号。
结束编号:
范围1-16,表示读取最后一个寄存器编号+1,读取的数据不包括本编号的寄存器内容,仅作为结束标记,其值必须保证大于等于“起始编号”。
气象站返回数据帧:
如0103207FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF8C45
序号
含义
偏移
字节数
说明
1
设备地址
0
1
设备唯一标识
2
操作码(读)
1
1
固定值0x03
3
数据长度
2
1
不含本字节
4
数据域
3
N
最多32个字节
5
CRC16检验
3+N
2
低前高后
数据长度:
不含本身,仅表示数据域的字节数量。
最大32,最小0。
根据读取指令序列的“起始编号”和“结束编号”来确定。
数据长度=(结束编号–起始编号)*2
三、附录
1、CRC16校验码的计算
(1).预置1个16位的寄存器为十六进制FFFF(即全为1);称此寄存器为CRC寄存器;
(2).把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低
8位相异或,把结果放于CRC寄存器;
(3).把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位;
(4).如果移出位为0:
重复第3步(再次右移一位);
如果移出位为1:
CRC寄存器与多项式A001(1010000000000001)进行异或;
(5).重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;
(6).重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;
(7).将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低
字节进行交换;
(8).最后得到的CRC寄存器内容即为CRC16码。
(注意得到的CRC码即为低前高后顺序)
2、通道数据转换
例如温度十六进制编码为“00C3”,换算成二进制为“000000011000011”,其二进制的第一位为“0”,所以它的值为正数,此时则可以用1中的的方法换算出十进制值“195”,最后将它除以10后得到最终结果“19.5”。
又例如温度十六进制编码为“FF3D”,换算成二进制为“1111111100111101”,其二进制的第一位为“1”,所以它的值为负数。
其具体换算步骤如下:
(1)将其二进制的的第一位替换为“0”得到:
“0111111100111101”
(2)后15位取反后得到:
“0000000011000010”
(3)加上“1”后得到:
“0000000011000011”
(4)按照1中的正数表示方法得到十进制值“195”
(5)因为是负值所以为“-195”
(6)结果除以10,最终结果为“-19.5”
所以:
00C3→19.5℃
FF3D→-19.5℃