二维码
微世推网

扫一扫关注

当前位置: 首页 » 快闻头条 » 综合新闻 » 正文

485型风速和风向变送器数据包解析

放大字体  缩小字体 发布日期:2022-12-13 08:14:23    作者:田康希    浏览次数:168
导读

风向变送器有8方位风向和360度风向两种;外壳分为铝合金和聚碳两种;风向传感器/变速器测量方式分为:模拟量(4-20mA/0-5V/0-10V)RS485由于风速和风向变送器是分开得,所以我们选择了RS485总线得测量方式,这样我们

风向变送器有8方位风向和360度风向两种;


外壳分为铝合金和聚碳两种;


风向传感器/变速器测量方式分为:

  • 模拟量(4-20mA/0-5V/0-10V)
  • RS485

    由于风速和风向变送器是分开得,所以我们选择了RS485总线得测量方式,这样我们将两个模块并到一起,设为不同得地址,这样就可以只占用一个串口资源就可以获取风速和风向得数据了。

    应用场景

    广泛适用于气象、海洋、环境、机场、港口、实验室、工农业及交通等领域得风速和风向测量。

    数据帧格式定义

    采用Modbus-RTU 通讯规约,格式如下:

    初始结构 ≥4 字节得时间

    地址码 = 1 字节

    功能码 = 1 字节

    数据区 = N 字节

    错误校验 = 16 位CRC 码

    结束结构 ≥4 字节得时间

    地址码:为变送器得地址,在通讯网络中是唯一得(出厂默认0x01)。

    功能码:主机所发指令功能指示,本变送器只用到功能码0x03(读取寄存器数据)。

    数据区:数据区是具体通讯数据,注意16bits数据高字节在前!

    CRC码:二字节得校验码。

    注意:此通讯协议只适用于我购买过得那款风速风向仪,不同厂家协议不同。

    主机问询帧结构:

    地址码

    功能码

    寄存器起始地址

    寄存器长度

    校验码低位

    校验码高位

    1字节

    1字节

    2字节

    2字节

    1字节

    1字节

    从机应答帧结构:

    地址码

    功能码

    有效字节数

    数据一区

    第二数据区

    第N数据区

    校验码

    1字节

    1字节

    1字节

    2字节

    2字节

    2字节

    2字节

    通讯实例:读取设备地址0x01得风向问询帧:

    地址码

    功能码

    起始地址

    数据长度

    CRC低位

    CRC高位

    0x01

    0x03

    0x00 0x00

    0x00 0x02

    0xC4

    0x0B

    应答帧:(例如读到风向值(0-7档)为2,(0-360°)为90°)

    地址码

    功能码

    返回字节数

    风向(0-7档)

    风向(0-360°)

    CRC低位

    CRC高位

    0x01

    0x03

    0x04

    0x00 0x02

    0x00 0x5A

    0xDB

    0xC8

    风向计算:

    (0-7档):0002H(十六进制)= 2=> 风向 = 东风

    (0-360°):005AH (十六进制)= 90=> 风向= 东风

    读取设备地址0x01得风速值问询帧:

    地址码

    功能码

    起始地址

    数据长度

    CRC低位

    CRC高位

    0x01

    0x03

    0x00 0x00

    0x00 0x01

    0x84

    0x0A

    应答帧:(例如读到当前风速为8.6m/s)

    地址码

    功能码

    返回字节数

    当前风速值

    CRC低位

    CRC高位

    0x01

    0x03

    0x02

    0x00 0x56

    0x38

    0x7A

    风速计算:

    当前风速:0056H(十六进制)= 86=> 风速 = 8.6m/s

    硬件连接
  • 风速和风向变速器12V供电;
  • 我们使用一个485接口,将风速和风向变速器并联到了一起。

    由于RS485得子设备之间得设备地址不能相同,所以我们将风速仪得地址设为了1,风向仪得地址设为了2。

    RS485总线参考电路

    嵌入式物联网需要学得东西真得非常多,千万不要学错了路线和内容,导致工资要不上去!

    无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。

    感谢阅读这里找小助理0元领取:加感谢阅读领取资料

    要想获取风速或风向值,我们要经过如下三步操作:

    (1)发送问询帧:

    if(times%10==1){ times2++; if(times2%10==0) { //求风速 sprintf(dtbuf, "%c%c%c%c%c%c%c%c", 0x01,0x03,0x00,0x00,0x00,0x01,0x84,0x0A); MAX485DE=1; USART2_OUT((u8 *)dtbuf, 8); MAX485DE=0; } else if(times2%10==5) { //求风向 sprintf(dtbuf, "%c%c%c%c%c%c%c%c", 0x02,0x03,0x00,0x00,0x00,0x02,0xC4,0x38); MAX485DE=1; USART2_OUT((u8 *)dtbuf, 8); MAX485DE=0; }}(2)接收串口数据:

    u16 USART2_RX_STA=0; void USART2_IRQHandler(void){ u8 res; if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) { res =USART_ReceiveData(USART2); if(USART2_RX_STA<USART2_MAX_RECV_LEN) { TIM_SetCounter(TIM2,0); if(USART2_RX_STA==0) TIM2_Set(1); USART2_RX_BUF[USART2_RX_STA++]=res; } else { USART2_RX_STA|=1<<15; } } }(3)解析数据帧:

    //解析RS485信息if(USART2_RX_STA&0x8000){ uart2Len=USART2_RX_STA&0x3f; if(uart2Len==7) { nCRC16 = crc16(USART2_RX_BUF,5); checkBitHig=(nCRC16>>8)&0xFF; checkBitLow=nCRC16&0xFF; if(checkBitHig==USART2_RX_BUF[5]&&checkBitLow==USART2_RX_BUF[6]) { printf("收到风速数据包\r\n"); u16Value = USART2_RX_BUF[3] * 256 + USART2_RX_BUF[4]; stuAliOSIoT.WindSpeed = u16Value/10.0; } } else if(uart2Len==9) { nCRC16 = crc16(USART2_RX_BUF,7); checkBitHig=(nCRC16>>8)&0xFF; checkBitLow=nCRC16&0xFF; if(checkBitHig==USART2_RX_BUF[7]&&checkBitLow==USART2_RX_BUF[8]) { printf("收到风向数据包\r\n"); stuAliOSIoT.WindDirection = USART2_RX_BUF[4]; } } USART2_RX_STA=0; memset(USART2_RX_BUF, 0, sizeof(USART2_RX_BUF)); }

    上面函数返回得数据帧,首先要对返回得数据进行CRC校验,只有合法得数据帧我们才会对数据帧进行解析,防止出现脏包。

    文章链接:
    感谢分享*感谢原创分享者/s/HxmNOIvTEwLR4JVBzf5LoA

    感谢自:嵌入式从0到1 ,感谢分享程序员XiaoHa

    文章链接:485型风速和风向变送器数据包解析

  •  
    (文/田康希)
    打赏
    免责声明
    • 
    本文为田康希原创作品•作者: 田康希。欢迎转载,转载请注明原文出处:http://www.udxd.com/news/show-361168.html 。本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们邮件:weilaitui@qq.com。
     

    Copyright©2015-2023 粤公网安备 44030702000869号

    粤ICP备16078936号

    微信

    关注
    微信

    微信二维码

    WAP二维码

    客服

    联系
    客服

    联系客服:

    24在线QQ: 770665880

    客服电话: 020-82301567

    E_mail邮箱: weilaitui@qq.com

    微信公众号: weishitui

    韩瑞 小英 张泽

    工作时间:

    周一至周五: 08:00 - 24:00

    反馈

    用户
    反馈