武汉新普惠科技有限公司自动气象站通信协议新普惠自动气象站通讯协议标准MODBUS通讯协议通讯参数:波特率9600数据位8位无校验位气象站标准MODBUS通讯协议使用RTU模式。消息帧发送至少要以3.5个字符时间的停顿间隔开始,即在传输完每帧的最后一个字节,至少需要3.5个字符时间的停顿来标定消息帧的结束。下一个新的消息帧可在此停顿后开始,整个消息帧必须作为一连续的流传输。气象站标准MODBUS通讯协议仅支持读功能,不支持配置气象站寄存器的功能,即不能写入任何数据。其特点有:①气象站共有16个通道寄存器,对应16个通道的传感器测量输出值;②寄存器最小编号固定于0,最大编号固定于15,不可更改;③支持一次读取单个、多个(寄存器编号必须连续)寄存器;④每一通道数据占2个字节,高字节在前,低字节在后,16位有符号整形值;⑤数据小数位定义,同XPH协议的小数定义,即N位小数,数据值扩大10的N次方倍。武汉新普惠科技有限公司自动气象站通信协议气象站标准MODBUS通讯协议帧外部设备发送帧:如0103000000104406序号含义偏移字节数说明1设备地址01设备唯一标识2操作码(读)11固定值0x033寄存器起始编号22读取的第一个寄存器编号4读取寄存器个数425CRC16检验62低前高后设备地址:假定为0x01,有效范围0-254,0为广播地址。操作码:固定为0x03,即读取操作,不支持其他操作。起始编号:范围0-15,表示要读取的第一个寄存器编号。寄存器个数:范围1-16,表示读取最后一个寄存器编号+1,读取的数据不包括本编号的寄存器内容,仅作为结束标记,其值必须保证大于等于“起始编号”。气象站返回数据帧:如0103207FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF8C45序号含义偏移字节数说明备注1地址域01地址(0x01)0x012操作码11仅读(0x03)0x033数据长度域210x204数据域32通道10x7FFF(无效/未接)风速(分辨率0.1)52通道20x7FFF(无效/未接)武汉新普惠科技有限公司自动气象站通信协议72通道30x7FFF(无效/未接)温度(分辨率0.1)92通道40x7FFF(无效/未接)112通道50x7FFF(无效/未接)132通道60x7FFF(无效/未接)日照时数(分辨率0.1)152通道70x7FFF(无效/未接)风向(分辨率1)172通道80x7FFF(无效/未接)总辐射(分辨率1)192通道90x7FFF(无效/未接)湿度(分辨率0.1)212通道100x7FFF(无效/未接)总辐射累加辐射量(分辨率0.01)232通道110x7FFF(无效/未接)252通道120x7FFF(无效/未接)272通道130x7FFF(无效/未接)直接辐射(分辨率1)292通道140x7FFF(无效/未接)直接累加辐射量(分辨率0.01)312通道150x7FFF(无效/未接)散射辐射(分辨率1)332通道160x7FFF(无效/未接)散射累加辐射量(分辨率0.01)5校验域352低前高后0x690x3F数据长度:不含本身,仅表示数据域的字节数量。最大32,最小0。根据读取指令序列的“起始编号”和“寄存器个数”来确定。武汉新普惠科技有限公司自动气象站通信协议数据长度=(结束编号–寄存器个数)*2通讯举例:风速:发送:010300000001840A返回:0103020064B9AF0064为风速数据,十进制100,风速有1位小数,即为10.0m/s温度:发送:01030002000125CA返回:010302009BF9EF009B即为温度数据,是十六进制整数,换算成十进制是155,我们的温度传感器分辨率是0.1,则当前温度应该除以10,即为15.5度。温度是有负数的,我们传感器返回的负数是以十六进制补码的形式表示,例如:返回:010302FF65399FFF65即为温度数据,是十六进制整数,换算成十进制是-155,我们的温度传感器分辨率是0.1,则当前温度应该除以10,即为-15.5度。风向:发送:010300060001640B返回:0103020064B9AF0064为风向数据,十进制100,即为100度湿度:发送:01030008000105C8返回:0103020064B9AF0064为湿度数据,十进制100,分辨率是0.1,即为10.0%RH三、附录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℃