找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
能够建立通讯说明软件及硬件连接均正常了。
1)主站对应从站地址是需要看从站holdstart管脚的指针地址,如你写的&vb1000,那么,主站40001读取从站VW1000的数据。如果你需要读取从站VB10的4个字节,那么,从站mbus_init指令的holdstart管脚写入&VB10,或者按你的指针地址,先把VB10等字节传送到VB1000。
2)仍然根据你的程序,从站发送给主站的V区(&VB1000),那么,主站接收到从站的数据也是自这个地址开始了,假设你事先在从站将VD10传送给VD1000,那么,主站的VD1000即对应于你从站的VD10.
3)Addr是指定从站的地址,范围1~247任选,这个必须与从站的一致设置(相当于家里的门牌号码必须对应真实,否则快递无法送到货物)
4)按你自己写的是可以的,看F1帮助应该会理解了的。
5)主站Slave是读、写从站地址,从站mbus_init指令的Addr是设置从站地址,你的程序是对应的,从站地址设置为3,主站读、写,使用通讯能够正常了。
补充问题回复:
你有几个从站?
如果仅仅只有一个,那么最简单的方法是大致估算一下最长数据的读、写需要多少时间(与通讯频率、数据长度有关),然后做一个定时器循环触发读、写。
如果是几个轮询是最常用的方法,MSG指令的done位作为下一个MSG指令的触发条件,形成闭式循环轮询机制。
MaxHold:1000
最大保持寄存器区:参与通信的V存储区字(VW),即总共有多少个字的 V 区是保持寄存器。
HoldStart:&VB1000
保持寄存器区起始地址:以&VBx指定(间接寻址方式),即指定VB1000开始的存储区是保持寄存器区,其个数由 MaxHold 指定。
MaxHold:1000 与 HoldStart:&VB1000 结合起来就是,将从站CPU的 VB1000-VB2999 共 2000个字节(1000个字)设定为 保持寄存器区。
从站的 V 区与MODBUS 保持寄存器的对应关系如下:
VW1000----40001
VW1002----40002
...
VW2996----40999
VW2998----41000
第二:下面的回答基于第二张图不做改变的情况下
1、但是1主站PLC想读取从站 PLC 的 VB10 VB11 VB12 VB13 的值,怎么对应?
它们与原定义没有任何对应关系。那怎样建立它们的对应关系呢?
如果我们将从站定义为保持寄存器的 VW1000(40001)、VW1002(40002)人为的规划,是可以做到的。
在从站的程序中。我们可以将从站的 VW10(VB10、VB11) 传送到VW1000;将从站的 VW12(VB12、VB13) 传送到VW1002。 那么读从站的 40001-40002 这两个字,就是读从站的VW10、VW12 这两个字(VB10-VB13)
2、主站PLC写入从站VB20 VB21 VB22 VB23的值,怎么对应?
同理
我们规定 VW1004(40003)、VW1006(40004)这两个字为主站写来的。
在从站的程序中。我们可以将从站的 VW1004 传送到 VW20;将从站的 VW1006 传送到VW22。 那么写从站的 40003-40004 这两个字,就是写从站的VW20、VW22 这两个字(VB20-VB23)
其它的就不多说了。资料你有就不附了
补充:
按链接中的轮循程序,不断地可以读写从站。(在链接的最下面)
http://www.ad.siemens.com.cn/productportal/prods/s7-200-smart-portal/200smarttop/communication/serial_port/modbus/Master/Master.htm
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!