首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ModBus点击PLC

ModBus点击PLC
EN

Stack Overflow用户
提问于 2022-03-18 17:34:57
回答 1查看 302关注 0票数 0

了解如何在address DS1 (400001)中更改值,以寻求帮助。首先,单击显示使用6位Modbus,因此不确定如何处理2字节。我想我读的40001是一样的,但不知道怎么读的。我能够接收数据和理解数据时,单击PLC是主人。我希望我的电脑成为主人,并改变地址。

这是我发送给PLC的数据。我期望将这些数据发送到PLC从02,并将DS1 (400001)中的数据更改为零。

代码语言:javascript
复制
    frame(0) = 2 'Slave Address =2 
    frame(1) = 6 'Mode =6  
    frame(2) = CByte(40001 / 256) '
    frame(3) = CByte(40001 Mod 256) '
    frame(4) = 0 '
    frame(5) = 0 '
    Dim crc As Byte() = CRC(frame) ' Call CRC Calculate.
    frame(6) = crc(0) '=59 Error Check Lo
    frame(7) = crc(1) '=189 Error Check Hi

    SerialPort1.Write(frame, 0, frame.Length)
EN

回答 1

Stack Overflow用户

发布于 2022-03-18 20:34:57

实现Modbus中的应用层寻址与线路上的字节不同。应用层地址(例如,用于持有寄存器的4 4xxxx )中的前导数字隐含在功能代码中(例如,读取保持寄存器)。

因此,在连线上,您放下前导4,并留下1-65536的偏移量(是的,应用层偏移量是基于1的)。但是在连线上,它们是基于0的,所以你从偏移量中减去1,得到0-65535的值。

因此,有时您会看到应用程序Modbus HR,比如4001、40001或400001,它们都引用了设备中的第一个HR。5位是最常见的。我确实看到4位数的旧RTU设备。每隔一段时间,我都会看到一个6位数的数字,其中远程设备有大量的内存(或者没有,比如Click)。

意识到很多设备都是由那些只懂低级协议的人实现的,所以当他们说某件东西位于地址40001时,它可能实际上是在偏移量0x0001,或者0x0000 (线路上正确的偏移量)。我甚至在连线上看到一个将地址40001实现为0x9C41的实现(可能是0x9C40)。是的,6位数字应用层持有寄存器440001。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71531049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档