485型风速和风向变送器数据包解析
风向变送器有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>8)&0xFF; checkBitLow=nCRC16&0xFF; if(checkBitHig==USART2_RX_BUF[5]&&checkBitLow==USART2_RX_BUF[6]) { printf("收到风速数据包r "); 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 "); stuAliOSIoT.WindDirection = USART2_RX_BUF[4]; } } USART2_RX_STA=0; memset(USART2_RX_BUF, 0, sizeof(USART2_RX_BUF)); }
上面函数返回的数据帧,首先要对返回的数据进行CRC校验,只有合法的数据帧我们才会对数据帧进行解析,防止出现脏包。
文章链接:
https://mp.weixin.qq.com/s/HxmNOIvTEwLR4JVBzf5LoA
转载自:嵌入式从0到1 ,作者 程序员XiaoHa
文章链接: 485型风速和风向变送器数据包解析
驻村工作组的补助具体是多少?我是一名县上干部。从2016年至今一直担任驻村第一书记。我们的补助分为几个阶段2016年,省市没有补助政策,县上要求吃住在户,每曰三餐在贫困户家中解决,伙食标准为早餐5元,午餐8元
武汉有一套大房子和一套小房子的人属于什么水平?谢邀这个问题提的太大,不能简单的说一大一小就如何。首先,武汉很大,真的很大,房子在内环?二环,三环?黄陂新洲蔡甸汉南江夏等远城区?价格从5000可以到50000,房子在哪是核心问题
小学教师的工资是多少?小学教师属于事业单位事业编,这次事业单位改革将承担义务教育的中小学划为公益一类事业单位,全额财政,待遇各地情况不同,但是工资构成大同小异。我们当地上班十一年教师工资待遇如下岗位工资
在苏州,专科毕业10年月薪8000算什么水平?回答这个问题前,先看下数据。苏州作为中国GDP十强城市,城镇居民人均可支配收入是58806元,位列全省第一,并保持连续高增速的态势。也就是说,数据上看月薪8000高于人均收入,属于
西安自驾石泉两天,怎么安排吃住游玩路线?西安至石泉230公里左右,不到四个小时车程,下面我主要介绍下石泉县及主要景点供大家旅行参考石泉县位于陕西省安康市的西部,北依秦岭南枕巴山,地处秦巴腹地汉水之滨,总面积1525平方公
一所乡村学校有这么多的职称名额确实令人羡慕,你那里有多少呢?谢邀握手名额总是给那些亲信或者送礼的人,或者是领导们多亲信啦十级1名,九级1名,八级2名,七级3名,六级1名,五级2名基层20年乡村教师名额十级3名,七级(副高)6名我们乡上学校的
南京大学和浙江大学哪个更好?南京大学和浙江大学都是属于第1批9所985的大学,简称为C9联盟中的成员。在西九成员中,很多人认为西安交通大学和哈尔滨工业大学实力不够高,因此要把另外7所大学称作C7联盟。也就是说
如何评价山东理工大学?感谢邀请。山东理工大学在我的眼里,就是一所普通的双非大学。学校理工类专业特色比较鲜明,专业水平在全国范围内可算是中等水平,不高也不低的样子。农业机械类专业相对比较强势,也是一所以工
同学考上了市公安局,删了全班的联系方式,你怎么看?我弟在公安局上班,他虽然没删除同学的联系方式,但几乎不和同学联系,有的同学说他装清高,可是,他的苦衷只有我们做家人的能理解。弟弟当年是警校毕业,后来又参加公务员考试,最后考上了我们
如果把武汉大学和华中科技大学合并,在国内高校中实力可以排到第几名?武汉大学,简称武大,教育部直属,中央直管的副部级大学,985,211,双一流A类高校。武汉大学由原武汉大学武汉水利电力大学武汉测绘科技大学湖北医科大学合并而成。武汉大学是在文理工商
法院判决生效后,被执行人不执行该怎么办?执行律师意见不给压力!他不会还钱!告诉你解决问题的三个步骤1申请强制执行!2寻找财产线索并处置财产!3采取制裁措施!打官司做原告,大家都会碰到这个问题,主要是因为存在一个误区以为判