回复:1500/1200中的Modbus TCP(MB_CLIENT)可以轮询吗

yzs

  • 帖子

    436
  • 精华

    7
  • 被关注

    47

论坛等级:侠圣

注册时间:2013-12-27

黄金 黄金 如何晋级?

发布于 2019-11-04 10:57:24

9楼

展开查看
以下是引用smile_JIANG在2019-11-03 11:24:17的发言 >7楼

多个客户端连接


Modbus TCP 客户端可以支持多个 TCP 连接,连接的最大数目取决于所使用的 CPU。一个 CPU 的总连接数,包括 Modbus TCP 客户端和服务器的连接数,不能超过所支持的最大连接数。Modbus TCP 连接还可由“MB_CLIENT”和/或“MB_SERVER”实例共用。


使用各客户端连接时,请记住以下规则:


每个“MB_CLIENT”连接都必须使用唯一的背景数据块。


对于每个“MB_CLIENT”连接,必须指定唯一的服务器 IP 地址。


每个“MB_CLIENT”连接都需要一个唯一的连接 ID。


该指令的各背景数据块都必须使用各自相应的连接 ID。连接 ID 与背景数据块组合成对,对每个连接,组合对都必须唯一。


根据服务器组态,可能需要或不需要 IP 端口的唯一编号。


您好,这个是帮助的描述,我有点不太确定,是不是1500作为modebus tcp客户端读取10个仪表,需要建立10个背景数据块。。。

另外要给问题就是,你提到的 2.       REQ必须采用脉冲控制,当MB_Unit_ID改变时REQ置1,经过MB_CLIENT功能块后复位。

Modbus 设备检测:


Modbus TCP 服务器使用其 IP 地址寻址。因此,寻址 Modbus TCP 时不会使用 MB_UNIT_ID 参数。


MB_UNIT_ID 参数对应于 Modbus RTU 协议的从站地址域。如果 Modbus TCP 服务器用作 Modbus RTU 协议的网关,则可以使用 MB_UNIT_ID 标识串行网络中的从站设备。这种情况下,MB_UNIT_ID 参数会将请求转发给正确的 Modbus RTU 从站地址。


请注意,某些 Modbus TCP 设备可能要求 MB_UNIT_ID 参数在有限的值范围内进行初始化。


首先,我们的目标是485的MODBUS设备,这些设备通过485转TCP的协议转换器转换成TCP的方式与PLC进行通讯,那么协议转换器只是一个媒介。如果你的TCP客户端是一个单口的485转TCP,485下面带10个仪表那么就不需要建立10个背景数据块,只需要轮询时修改MB_Unit_ID即可。8口的TCP有8个IP地址,那么就需要创建8组MB_CLIENT进行通讯,这样至少可以通讯80个485设备。

 REQ必须采用脉冲控制,在MB_CLIENT通讯案例中 REQ是一直置1的,如果一直置1的话程序在一个通讯周期内就会发生多次数据请求,这样就有可能导致采集数据时并不是你所需要的数据,有可能是上一个表的数据。

由于MB_CLIENT接收数据时认为只要符合MODBUS RTU规约的数据都是正确的数据,且接收回来的数据并没有数据的地址码之类的标志,那么我们就必须保证在一个通讯周期内只能下发一次指令,在该通讯周期内接收到的数据必然是一个正确的数据。如果没有数据反馈就等待通讯周期结束跳到下一个设备采集数据。

因此

1. MODBUS从站地址MB_Unit_ID需要进行一个通讯超时自动轮询下一个地址的设定,简单的可以采用一个定时器进行一个自加1的控制,延时建议为500MS。如果有设备通讯(DONE)成功则自加1,定时器重新计时。

2.REQ必须采用脉冲控制,当MB_Unit_ID改变时REQ置1,经过MB_CLIENT功能块后复位。

3.Rcv_Timeout默认2S,需要改成0.5S和通讯超时定时器时间设置一致。

这几个步骤就是要保证一个通讯周期内只能下发一次指令,同时在通讯成功后能够快速通讯下一个地址,经过测试此通讯速度和我们日常用的MODBUS 485通讯速度可以保持一致。


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10833条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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