恭喜,你发布的帖子
发布于 2021-01-18 13:34:42
3楼
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获取。
仪表厂家提供的部分协议内容:
用MODSCN32软件测试,读取协议中起始地址为:0Xa006的指令时,可以读出实际数值:
根据上面的测试结果,读指令应该是是不是从“440961"开始?
另外,我知道单独取字节中的位值,但用什么指令可以将低位的七个位取出,再转换成另外一个数?
衷心感谢您的指点,比其他高手模棱两可的说教实用多了!!!
请填写推广理由:
分享
只看
楼主