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型风速和风向变送器数据包解析
生活,生活,生下来,活下去1人生,是自己一个人的人生,道路走得稳不稳,脚知道,机遇抓得抓不着,心知道,一份付出,一份收获,全靠你自己去努力创造,没人能帮你,没人是依附,一切只能靠自己,遇事,自己扛,坎坷,自
芬芳争艳人人爱,赏花季节盼归来好看的花赏心悦目争宠无数,更有甚者忘了归途!好花四季有,尤其是春夏繁多珠朗满目,花可以一年一轮回,周而复始又楚楚,而人的容颜随时间流逝变萎枯,却总是在回忆中数着现实的苦!飘香万里群
尊重(写得真好)来源网络,致敬原作者有一种修养叫尊重。什么是尊重?谦和,平等,人格。尊重是人生必修,如空气之于生命,是人与人交往的融合之源。尊重是一种修养,举手投足中的知性与优雅。尊重别人的缺陷,
古诗词里的飞天梦圆满完成神舟十三号载人飞行任务的航天员翟志刚王亚平叶光富,于2022年4月16日乘坐任务飞机平安抵达北京。这标志着我国的航天事业迈向了一个新高度。自人类诞生之日起,我们便与地球,星
十个超准的从穿衣风格判断人服装风格每个人都有自己的穿衣风格,从他的风格上就可以判断一个人的内心。1。不修边幅的人大多是活力四射精力旺盛的人。2。穿着朴素的人大部分属于顺应型。3。穿着比较马虎的人比如穿着一身
小炒肉配烧鸡真下饭准备食材蒜苔,有机花菜,猪肉,葱,姜,蒜,生抽,老抽,耗油等。热锅烧油,下入猪肉煸炒,然后放入葱,姜,蒜,爆香后倒入蒜苔大火翻炒1分钟即可装盘,简单又下饭!热锅烧水,把洗好的有机花
煮米饭不只用清水,多做1步多放2样,米饭粒粒分明,香甜饱满米饭是家家户户都要吃的,北方人虽然主食是面食,但是偶尔改善一下伙食,也是喜欢吃米饭的。米饭香喷喷的,越嚼越香甜,谁会不喜欢呢?就连淘米水都有大用处,拿来腌酸菜浇花等等,都不错。说到
蒜薹怎么腌好吃?教你这个做法,半个小时就能吃,放一个月不会坏大家好,这里是刘一手美食,关注老刘,每天分享一道好吃又实用的家常菜1蒜薹性温,具有温中下气,补虚,调和脏腑,以及活血防癌杀菌的功效,对腹痛腹泻有一定疗效。2今天刘嫂就来分享一下腌制
煮速冻饺子时,好多人做错了,教你一招,比刚包的饺子还筋道饺子是咱们大家经常吃的一种美食,它的味道非常好,可以做成各种各样的馅料,所以很多朋友都特别喜欢吃,咱们在逢年过节的时候一定会吃饺子,而且这也是很多地方的习俗。饺子虽然特别好吃,但是
讨论文鞋和上装同色好看OR和下装同色好看?在服装搭配上,鞋色和上装色相同,我们称为色彩的呼应鞋色和下装色相同,我们称为色彩的延伸。那么,到底是色彩的呼应好看还是色彩的延伸好看呢?左图是色彩呼应,右图是色彩延伸,你觉得哪个搭
340岁的女人,还是穿裙子最好看!牢记这3穿3不穿更优雅浪漫的夏天终于要到了,大家是不是迫不及待了呢?女人骨子里向往着夏天,希望在这个夏天展现自己的优雅与美丽,对于340岁的女人来说,夏天穿裙子最好看,比乱七八糟的裤子优雅高级得多,可以