回复:关于Modbus TCP通讯调试过程的那些事2

已锁定

S_automation

西门子1847工业学习平台

  • 帖子

    1207
  • 精华

    17
  • 被关注

    340

论坛等级:奇侠

注册时间:2013-06-23

钻石 钻石 如何晋级?

发布于 2025-06-27 14:56:13

11楼

展开查看
以下是引用WWCWWC在2025-06-27 10:56:58的发言 >10楼

  贴截图前,我测试过的,在V2.2版本的服务器侧任意修改,应该是ms级的延时,在客户机侧会响应数据的,通讯数据交互是正常的,如果基本的通讯都不正常,那写帖子的意义就没有了。

  做轮询当然可以的,也不是我写这个帖子的本意。至所以要写,是感觉到Modbus tcp通讯确实与Modbus rtu通讯有一些区别,尤其是各版本之间的指令应用区别。

以下是引用Siemens automation在2025-06-27 09:47:35的发言 >9楼:  1. 看了你下面回...

引用9楼详细内容:

  1. 看了你下面回复,你V2.0版本固件和指令做服务器端,不需要设置连接CONNECT,我不知道V4.0一版本做服务器,有这个连接会不会有影响。我没有1200 PLC无法验证。你可以用两个V4.0一版本的 PLC去做验证,或是你这个做客户端的改成做服务器端,再去验证。

 2.  你把服务器端数据实时改动,你再去做同时读取,看数据会不会实时变化。你既然做了多个自己,你分一半出来,一半是读取数据,一半是写入数据,这个数据都是实时改变,不要一直不更新数据。

 3.  你可以做轮训方式,第一次同时激活4个指令后再去轮训激活另外4个指令,你多几个轮训,每次都激活4个指令,看轮训后的数据会不会有问题。就当是通讯数据很大,一次无法实现读写,需要分开多次轮训方式去做轮训,只是这个轮训一次激活指令比较多。不管是那种通讯都有一次交换数据的上限。我的第三点就当是每次通讯数据都到了上限,需要分开多次轮训。

既然你测试后得出结论是modbus tcp 不需要轮训也是可以正常使用。那几拜托你帮忙给我解开这几点疑惑。



以下是引用WWCWWC在2025-06-26 15:59:01的发言 >4楼:测试硬件配置已经明...

引用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系统时钟触发的情况,图示:



以下是引用Siemens automation在2025-06-26 14:52:37的发言 >3楼: 楼主我几点疑问...

引用3楼详细内容:

 楼主我几点疑问。

  1.    通过公共的连接发送多个请求,“MB_CLIENT”功能块多次调用,但是需要使用相同的背景数据块,连接 ID 号,IP 地址和端口号,根据需要修改模式、地址、长度、指针等。(你上面4个指令连接的参数是不是一样,看程序是一样。但是没有看到你4个指令的关联的错误地址和状态显示这些地址健康截图)

  2. 在任意时间,只能有一个 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个指令的错误地址,和状态码都截图出来对比一下。





   你说了V2.2版本,多个通讯读写数据不会有问题,数据更新也能读到。还有这样通过激活多条指令通讯,轮训你测试是否可以正常轮训?

   你说不用轮训,我提出我不同看法,如果你读取数据大于modbus tcp一次允许最大的数据量或是写入也是大于一次最大数据量,你不用轮训吗?你这个都是读取的连续地址,用过个指令,和用一个指令读取一次读取最大允许数据没有什么区别,还没有优势。很多时候,你通讯可能地址是连续,不是连续,这个地址又不是你连续一次读取最大数据量或是写入最大数据量包含的地址,你就非得做轮训来处理。这是数据量交换多时,你用很多指令同时激活是无法实现一次读写,你不轮训是不可以实现。在就回到轮训这点来,你有没有测试V4.0及以上的指令和固件,客户端和服务器端,是否支持你说的同时多个指令工作,而且轮训能正常。

从目前来看,你做的测试,是V4.0的客户端,和V2.2的服务器端支持,同时读取多个指令通讯读写数据,你说客户端可以同时激活多条指令读取服务器端的多个不同的BD块数据,这个从V4.0还是V5.0的指令就支持,一个客户端可以读取服务器多个不同的DB块里面地址。modbus tcp 指令里面详细介绍,我就复述了。


你可以继续测试 两个V4.0的固件和软件之间的同时多条指令通讯是否异常,轮训是不是可以正常通讯。  不要这么急着否定我的猜想。我的猜想不一定是正确,那你可以一一验证你的说法是否正确。还是在某些条件下你的说法是成立的。



评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15775条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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