西门子PLC以太网通信技术细节分享

B站影视 2025-01-09 22:03 3

摘要:西门子PLC以太网通信,我习惯使用通信指令列表中的:TCON、TSEND、TRCV和TDISCON。如果是UDP协议,用TUSEND代替TSEND,用TURCV代替TRCV。

最近项目中使用西门子CPU1515实现与第三方设备的以太网通信(基于TCP协议),调试过程相对顺利,有一些技术细节与大家分享。

西门子PLC以太网通信,我习惯使用通信指令列表中的:TCON、TSEND、TRCV和TDISCON。如果是UDP协议,用TUSEND代替TSEND,用TURCV代替TRCV。

如何使用TCON指令建立开放式用户通信的连接? | 北岛夜话

怎样使用开放式用户通信指令-TRCV | 北岛夜话

西门子PLC开放式用户通信-UDP接收指令-TURCV | 北岛夜话

西门子PLC以太网开放式用户通信指令TSEND | 北岛夜话

西门子PLC开放式用户通信连载(5)-TUSEND | 北岛夜话

该项目使用TCP协议。我们知道TCP协议中有两个角色:服务器和客户端。本次我们将PLC作为TCP协议的服务器,第三方设备作为客户端主动连接。这种情况下配置TCON指令的“CONNECT”参数时,应把“active_established”设置为假(0),即使其充当服务器角色。

TCON指令的“REQ”参数触发指令动作,指令内部使用了沿信号,所以在外部使用沿信号或常真(1)信号都可以。作为TCP协议的服务器,TCON指令并不会主动连接,而只是开放本地端口,等待客户端的连接。作为TCP协议的客户端,TCON指令会主动连接目标服务器,其IP地址及端口号在“CONNECT”参数中的“remote_address”和“remote_port”中设置。若是UDP协议,由于UDP本身不是面向连接的协议,所以该指令也是开放端口号。关于“CONNECT”参数的数据类型请看下面的链接:

详解S7-1500的以太网通信数据类型:TCON_IP_v4 | 北岛夜话

作为TCP协议的服务器,当REQ的值为真(1)但没有客户端连接时,指令的输出“BUSY”值为真(1),并且状态值为“16#7002”,如下图所示:

当有客户端成功连接后,“BUSY”值变为假(0)。“DONE”值变为真(1),但DONE的真值仅保留一个扫描周期。

所以为了保留成功建立连接的状态,一般使用置位指令将另外一个变量置位,例如下图:

这样在后面的TRCV指令中我们可以使用该变量使能接收。

另外,当作为TCP服务器,客户端成功连接后,我本以为“remote_address”和“remote_port”中会记录客户端的信息。但是实际测试发现这里并没有任何数据。

TCON指令的链接一旦完成便会被自动维护,此时再使用REQ请求连接是不起作用的(对于同一ID而言)。如果要重新建立连接,应先使用TDISCON指令断开当前连接,然后再使用TCON指令重新连接。TDISCON指令的使用示例如下图所示:

来源:北岛李工

相关推荐