湛蓝小尔
工控交流 Q703935819
级别: 家园常客

精华主题: 0
发帖数量: 349 个
工控威望: 642 点
下载积分: 2101 分
在线时间: 80(小时)
注册时间: 2014-03-03
最后登录: 2024-07-10
查看湛蓝小尔的 主题 / 回贴
楼主  发表于: 2021-03-30 08:30
如题所示,1200带CM1241 RS485模块读取仪表参数

1200-modbus rtu读取电量.pdf (676 K) 下载次数:719   
本帖最近评分记录:
  • 下载积分:+1(simon896) 好贴好贴!
  • 专心搞钱
    Q群943838323   博图
    Q群703935819   昆仑通态
    phoenixyqc
    级别: 探索解密
    精华主题: 0
    发帖数量: 12 个
    工控威望: 141 点
    下载积分: 622 分
    在线时间: 10(小时)
    注册时间: 2013-05-16
    最后登录: 2022-12-28
    查看phoenixyqc的 主题 / 回贴
    1楼  发表于: 2021-07-20 11:10
    西门子的数据存储是低字高位,所以通常而言,浮点数是不需要高低位对换的,你这个项目居然要对换,所以我往上看了下。呃,不出意外的话,西门子对应MODBUSRTU的首地址,应该是40001对应0,那么你读取的首地址,应该是40007才对,而你读了40006。。。我觉得你应该回头看看这个项目了。
    毕竟因为浮点数的计算方法,你对换以后,6 8 10这种主要数据位可以保证符号位指数位和主要数据部分没有问题,但是精度一定会受影响。220.123456789对应43 5C 1F 9A,380.123456789对应43 BE 0F CD,你读取了7.8然后对换得到的是43 BE 1F 9A,这个数是380.24688720703125。差别很小,但是你的做法确实不正确。如果你读的不是电压电流功率这种相对恒定的变量而是读了有功总电能的话,累加越大,误差会越大。
    数据首地址+1,无需对换高低位。回头有空还是去看下吧。
    [ 此帖被phoenixyqc在2021-07-20 11:38重新编辑 ]