回复:如何将某个字节VB**的最低7位和最高位分别读出,并分别转换成另外两个字节??

已锁定

sdzcl

  • 帖子

    18
  • 精华

    0
  • 被关注

    2

论坛等级:游民

注册时间:2016-10-12

普通 普通 如何晋级?

发布于 2021-01-18 13:34:42

3楼

展开查看
以下是引用Zaxife在2021-01-18 13:15:59的发言 >2楼

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获取。

仪表厂家提供的部分协议内容:

微信图片_20210118132656.png

微信图片_20210118132704.png

微信图片_20210118132704.png

微信图片_20210118132700.png

微信图片_20210118132651.png

用MODSCN32软件测试,读取协议中起始地址为:0Xa006的指令时,可以读出实际数值:

微信图片_20210118132759.jpg

根据上面的测试结果,读指令应该是是不是从“440961"开始?

另外,我知道单独取字节中的位值,但用什么指令可以将低位的七个位取出,再转换成另外一个数?

衷心感谢您的指点,比其他高手模棱两可的说教实用多了!!!

不怕没有,只要自己有心,没有也可变为有!
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9023条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。