找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
首先,你把这一内容发在S7-1200版区,显然不恰当。从你的程序看应该讨论的是S7-200smart。
你手绘图(姑且认为是图1,从左到右为图2、图3、图4、图5,下面是图6、图7)中,上面第一个图,是读,把读到的信号(填写对方的存储器地址,地址类型(首字母是0,还是1、3、4等),决定了是读取对方的开关量含输入DI输出DO,还是读取模拟量输入,还是保持性寄存器即V区的值)你图中的1001,说明是读取对方的输入映像区的数据,并把它存在自己的V区保存下来,图中提到了VB0,因此在程序中你要用&VB0.
而图1中下面两个其实没有本质区别,都是把自己寄存器的值,传递给对方的V区。只不过一个是把自己的输入映像寄存器的数据传出去(程序中使用&IB0),而另一个是把输出映像寄存器的数据传递到对方的V区。而对方的V区,都属于保持性寄存器,也就是说,你操作的对方的保持性寄存器,因此程序中都使用4打头,只不过上面一个Addr=40201,而下面一个是Addr=40101(因为你从站初始化 HoldStart=&VB0)。
再来分析你的程序:
图2网络6,是错误的。由于Addr=40051,也就是说你是读取从站3从保持型寄存器VW50(按字访问)开始的104个字,而把这些值存入PLC的输出映像寄存器区。而PLC的这一区域最大256位也就是只有32字节。显然超出范围了。
图3,大概的意思是把传递过来写入VW0的数据通过QW0显示出来。其实可以直接写Q区。
图4,同样也是错误的。原因与图2的分析类似。I区没有那么大。
图5,主站的初始化。
图6,读从站3从iI0.0开始的72个输入点的状态,把它存在VB0开始的空间中,需要占用VB0-VB8共9个字节。
图7,从站初始化。定义了保持性寄存器映射从VB0开始。也就是说40001对应VW0,40002对应VW2以此类推。
希望你认真学习体会文档。文档中有案例。
S7-200 SMART Modbus RTU通信:
https://www.ad.siemens.com.cn/productportal/prods/s7-200-smart-portal/200smarttop/smartsms/020.html
西门子 S7-200 SMART PLUS V2.3 技术参考
https://support.industry.siemens.com/cs/cn/zh/view/76488152
S7-200 SMART 系统手册
https://support.industry.siemens.com/cs/cn/zh/view/109745610
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!