现场使用200SMART与热量表MODBUS_RTU通讯
热量表的通讯地址为:
0x04 正向 累积热能(Wh) 高32 位---高16 位 03 只读 int
0x05 正向 累积热能(Wh) 高32 位---低16 位 03 只读 int
0x06 正向 累积热能(Wh) 低32 位---高16 位 03 只读 int
0x07 正向 累积热能(Wh) 低32 位---低16 位 03 只读 int
通讯后最地址终放到:
0x04(VW0)
0x05 (VW2)
0x06 (VW4)
0x07 (VW6)
然后厂家给计算热能的计算方法
//表上返回最大热值0x3E7FFFFFFFF 'wh
unsigned long th,tl;
unsigned long value;
th=0x3E7;//高32位
tl=0xffffffff;//低32位
value = (th*65536)+(tl/65536);
t1=value * 0.065536;//mwh
我按照正常的计算方法来计算,就出现问题了{(VD0*65536)+(VD4/65536)}*0.065546
问题1.当VW2超过32767的时候,就变成负值,这样就直接影响后面的运算,我只能先把VW0挪到VD10进行运算
V0.7=1时给VD10加上65535,这样就可以变为无符号数值
不知道这样是否可行?是否加65535,还是加32767
此时
VW0(VD10)
VW2(VD14)
VW4(VD18)
VW6(VD22)
问题2.上面的每一个值都可以换算的话,那么是不是应该把VD10和VD14分别放到VD100,VD104怎么才可以把VD100有符号值装换成无符号值呢?(VD100*65535)+VD104这样可以吗?
3.一共两个问题,我描述的有点啰嗦,但是我又怕自己讲不明白,希望大神能指点一二。
