OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3725|回复: 2

modbus读浮点型

[复制链接]

9

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-8-1
在线时间
25 小时
发表于 2016-8-8 11:22:37 | 显示全部楼层 |阅读模式
1金钱
之前写了个程序,读u16数据没问题,想读float型的,修改程序之后,从modbus poll上看,crc校验位之前的数据都是没问题的,就是显示crc错误,收到的没有crc校验位。问题出在哪里?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11544
金钱
11544
注册时间
2014-4-1
在线时间
1315 小时
发表于 2016-8-8 11:35:33 | 显示全部楼层

这样的描述,谁能知道。。。

回复

使用道具 举报

9

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-8-1
在线时间
25 小时
 楼主| 发表于 2016-8-8 11:47:39 | 显示全部楼层
xuande 发表于 2016-8-8 11:35
这样的描述,谁能知道。。。

就是个简单的读保持寄存器程序,读浮点型数据,crc错误,之前读u16没问题的
Modbus_HoldReg[0]=(u16*)&testData1;//测试数据1
Modbus_HoldReg[1]=(u16*)&testData2;//测试数据2
Modbus_HoldReg[2]=(u16*)&testData3;//测试数据3
Modbus_HoldReg[3]=(u16*)&testData4;//测试数据4

USART_TX_BUF[0]=USART_RX_BUF[0];
USART_TX_BUF[1]=USART_RX_BUF[1];
USART_TX_BUF[2]=RegNum*4;
for(i=0;i<RegNum;i++)
{
        USART_TX_BUF[3+i*4]=(*Modbus_HoldReg[startRegAddr+i]>>8)&0xFF;     
        USART_TX_BUF[4+i*4]=*Modbus_HoldReg[startRegAddr+i]&0xFF;
        USART_TX_BUF[5+i*4]=(*(Modbus_HoldReg[startRegAddr+i]+1)>>8)&0xFF;   
        USART_TX_BUF[6+i*4]=*(Modbus_HoldReg[startRegAddr+i]+1)&0xFF;
}
        calCRC=CRC16(USART_TX_BUF,RegNum*4+3);
        USART_TX_BUF[RegNum*4+3]=(calCRC>>8)&0xFF;
        USART_TX_BUF[RegNum*4+4]=calCRC&0xFF;  
        RS485_SendData(USART_TX_BUF,RegNum*4+5);

里面数据高低字节顺序可能有问题,关键是crc错了,现在没办法验证。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 05:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表