S7-200Smart有MODBUS TCP库指令:
MBUS_CLIENT客户端(MODBUS主站,通信请求的发起者)
MBUS_SERVER服务器(MODBUS主站,通信请求的被动接收方,接受信息后的响应者)
S7-1200/1500也有MODBUS TCP库指令
基本指令:
MB_CLIENT 客户端(MODBUS主站,通信请求的发起者)
MB_SERVER服务器(MODBUS主站,通信请求的被动接收方,接受信息后的响应者)
冗余通信指令:
MB_RED_CLIENT(MODBUS主站,通信请求的发起者)
MB_RED_SERVER(MODBUS主站,通信请求的被动接收方,接受信息后的响应者)
但它们3者是不是都支持通过网关访问RS485网络下的RTU设备呢?
通常,这些RS485网络下的RTU属于从站,那MODBUS_TCP转RS485 RTU网关设备就是MODBUS的主站,那自然PLC就成了通信的发起者,也就是CLIENT 客户端。
S7-200Smart支持的Modbus TCP 客户端可支持多个连接,最多可达 PLC 允许的开放式用户通信连接的最大数。PLC 的连接总数(包括 Modbus TCP
客户端和服务器)不得超过支持的开放式用户通信连接的最大数。多个客户端连接必须具有不同的 IPAddr 或 IP_Port 输入参数。但网关往往只有一个网口,一个IP地址,没有办法和RTU从站一一对应。要解决这种通信问题,那只有把RTU从站在网关上统一映射了,例如网关的离散输出1-1000指向RTU1的离散输出1-1000;1001-2000映射RTU2的离散输出1-1000,2001-3000映射TRU3的离散输出,等等。这样的网关我没有用过,这样的网关是否存在不知道。
S7-1200/1500的MB_CLIENT指令背景数据块中的 "MB_UNIT_ID''恰好可以用来映射不同的RTU站地址,很好的解决了问题。尽管Modbus TCP 服务器使用其 IP 地址寻址,寻址 Modbus TCP 时不会使用 MB_UNIT_ID 参数,但Modbus TCP 服务器作为 Modbus RTU 协议的网关,恰可用MB_UNIT_ID标识串行网络中的从站设备。这时候:多个Modbus TCP 客户端请求(不是多个客户端连接)使用不同的MB_UNIT_ID,就可建立PLC与不同RTU从站的访问。需要注意:在任意给定时间,只能有一个客户端处于激活状态。一个客户端完成执行后,下一个客户端再开始执行。执行顺序由您的程序负责指定。
为什么不是多个客户端连接而是请求?因为网关只有一个IP地址。每个 MB_CLIENT 连接必须指定一个唯一的服务器 IP 地址,必须使用一个不同的背景数据块,必须指定一个唯一的连接 ID。而上面与网关通信所采用的多个Modbus TCP 客户端请求使用相同的背景数据块、连接ID 和端口号。
参考:
Modbus 块 "MB_CLIENT" 的背景数据块中的 "MB_UNIT_ID" 有什么功能?
https://support.industry.siemens.com/cs/ww/de/view/102420337/zh
在SIMATIC S7-1500 / S7-1200和SENTRON PAC设备之间的Modbus TCP连接时,如何清除错误状态16 # 8382?
https://support.industry.siemens.com/cs/ww/de/view/109736516/zh