恭喜,你发布的帖子
发布于 2021-01-18 13:48:19
4楼
0xA000这种Modbus通讯地址是输出线圈,也就是位变量,你确定厂家的资料没错?用位变量来传输8个位的内容?
3xA000 、4xA000这些才是字存储的寄存器。
如果读取的是线圈,则读取地址是 40960(A000),如果读取的是输入寄存器则是340960,如果读取的是保持寄存器则是440960。还有国内很多厂家都不按标准Modbus地址编号的,所以实际的地址有可能是40959?40960?40961。这种乱七八糟的情况我在用第三方Modbus外设就都碰到过,不稀奇。
至于拆分寄存器的高低字节?可以直接取就可以了,不用特意转换。比如读取的内容放在VW100,那么VB100就是高字节、VB101就是低字节。如果VW100=16#1234,那么VB100=16#12、VB101=16#34。
最位也可以直接用V100.7获取。
谢谢大侠的指点!
是不是根据该协议,写寄存器从”340960“开始,读保持寄存器从”40960“开始,还需要偏移1吗?
如果VB中取低位7位转换成另外一个数值,是不是直接左移7位,然后得数除以10即可?
请填写推广理由:
分享
只看
楼主