北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章546 浏览8750172

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

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

cover.png

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

关于指令的详细介绍,请看我之前的文章:

西门子PLC以太网开放式用户通信连载(1)-TCON

西门子PLC以太网开放式用户通信连载(2)-TRCV

西门子PLC以太网开放式用户通信连载(3)-TURCV

西门子PLC以太网开放式用户通信连载(4)-TSEND

西门子PLC以太网开放式用户通信连载(5)-TUSEN

该项目使用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”,如下图所示:

1.png

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

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

2.png

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

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

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

3.png

好了,关于西门子PLC以太网通信的技术细节先分享这些。你可以点击前文的链接查看具体指令的介绍。

我的书《西门子S7-1200/1500 PLC SCL语言编程 ——从入门到精通》从硬件到软件,比较详细的介绍了SCL语言的编程,感兴趣的话可以扫描下面的二维码查看:



取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论