恭喜,你发布的帖子
发布于 2025-06-26 15:59:01
4楼
楼主我几点疑问。
通过公共的连接发送多个请求,“MB_CLIENT”功能块多次调用,但是需要使用相同的背景数据块,连接 ID 号,IP 地址和端口号,根据需要修改模式、地址、长度、指针等。(你上面4个指令连接的参数是不是一样,看程序是一样。但是没有看到你4个指令的关联的错误地址和状态显示这些地址健康截图)
在任意时间,只能有一个 MB_CLIENT 请求处于激活状态,在一个请求完成执行后,下一个请求再开始执行,轮询处理。(这是我看的西门子网站上面你的介绍,这个1,2点都是复制里面的介绍内容)
Modbus TCP 通信多请求处理:
https://www.ad.siemens.com.cn/download/materialaggregation_1338.html
Modbus_TCP_V4 客户端:
https://www.ad.siemens.com.cn/download/materialaggregation_1335.html
上面两个链接都说了有下面这段话
方法二:通过公共的连接发送多个请求
这个方法适合 CPU 访问一个 Modbus TCP 服务器,但是有多个作业的情况,例如有读也有写,或者读多个区域等。
通过公共的连接发送多个请求,“MB_CLIENT”功能块多次调用,但是需要使用相同的背景数据块,连接 ID 号,IP 地址和端口号,根据需要修改模式、地址、长度、指针等。
在任意时间,只能有一个 MB_CLIENT 请求处于激活状态,在一个请求完成执行后,下一个请求再开始执行,轮询处理。
还有,楼主你的测试只是同时激活了4个指令,不是有轮训,假如报错,也可以将数据同时发送到服务器端,读写都可以,只要不超过这个PLC同一时间允许发送读取的最大数据量就可实现不轮训通讯。同时读取多个指令地址进行数据交换。你可以尝试改变这些地址里面的数据,去不断测试看有什么不一样的结果。
你4个指令的错误地址,和状态码都截图出来对比一下。
测试硬件配置已经明确,是2个s7-1200之间的通讯数据交换,且数据交互都是各自的DB3数据块中进行。
“MB_CLIENT”功能块多次调用是同一个背景数据块,本次测试是同时读取40001开始的同一个寄存器,只是区域不同。
为测试同时触发“MB_CLIENT”指令,我已经加多到6个“MB_CLIENT”通讯指令,同时用M0.5系统时钟触发,各指令的错误status值,均在7004/7006和8200之间跳变,这些信息是正常通讯状态下的提示信息。
至于你说的“MB_CLIENT”通讯指令管脚,MB_MODE是否为读和写,这仅仅只是具体通讯指令的工作任务而已,不会对测试的方向产生偏差。
6个“MB_CLIENT”指令同时被M0.5系统时钟触发的情况,图示:
请填写推广理由:
分享
只看
楼主