个人认为,这个软件对于位的处理还是有些问题的吧?
在起始地址为偶数的情况下,软件计算出来的地址都是对的,每一位的对应也没错。
在起始地址为奇数 比如&VB1的情况下,我个人感觉是错的,下面来看看结果:
起始地址VB1
我觉得正确的结果应该是:
V1.0 ~V1.7 对应400001.8~400001.15
V2.0~V2.7 对应400001.0~400001.7
因为VB1 VB2 组成一个字VW1 对应400001的全部16个位
但是软件设置完成之后的计算结果是:
V1.0 ~V1.7 对应400001.8~400001.15
V2.0~V2.7 对应400002.0~400002.7
造成了400001.0~400001.7的缺失! 换句话说,VW1被拆了,不知道后续新版本的有没有更改过来。
我自己的认识啊,各位用过的来看看啊!(我邮箱 114648097@qq.com 欢迎指正我的观点)
以下为博主原话:
V位地址:
如果将通讯起始地址设为VB0的话则:
如V20.0则Modbus计算方法为20÷2+1+0.0+0.8+(40000-通讯起始地址÷2)=40011.8 ,
如V20.1则Modbus计算方法为20÷2+1+0.1+0.8+(40000-通讯起始地址÷2)=40011.9
如V21.0则Modbus计算方法为20÷2+1+0.0+(40000-通讯起始地址÷2)=40011.0
如V21.1则Modbus计算方法为20÷2+1+0.1+(40000-通讯起始地址÷2)=40011.1
即如果地址整数位最后一位是偶数则需要在小数位加0.8,如果是奇数的话则只需要直接将小数位数加进地址整数位除以2加1的值上去即可
另外需要注意的是通讯起始地址如果设置的是奇数的字节(如VB1)则以上的算法刚好相反,即奇数需要在小数位加0.8,偶数则不需要。 |