恭喜,你发布的帖子
发布于 2019-11-04 10:57:24
9楼
多个客户端连接
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通讯速度可以保持一致。
请填写推广理由:
分享
只看
楼主