n
1 本文描述的的TCP通讯适用范围
TCP通讯是众多的S7-300/S7-400通讯方式之一,可以在:CPx43-1、集成PN口的CPU、调用套接字编写的程序、第三方支持开发以太网通讯的设备之间相互通讯。
本文描述的TCP通讯,仅适用于CP343-1/CP443-1(支持TCP通讯的版本)之间,建立TCP coection,调用AG_Send / AG_Recv的情形。对于CPx43-1通过TCP连接接收其他设备发送的数据,如果对方设备可以协调使用本文方法也可以使用。
CPx43-1的TCP通讯,在发送接收固定长度数据时没有任何问题。但是在设备应用过程中,往往有不同长度的数据需要在两个S7 PLC之间传输,如果不做处理,会出现接收数据错位或接收数据延迟超出预期时间。
解决的方法有多种,如设置通讯中可能出现的最长的数据长度作为接收区(AG_Recv的RCV参数)的固定长度,其他小于该长度的数据发送,也按此最大长度进行发送(接收将出现多余字节)。这种方法是值得推荐的。又如,可以设置接收区长度为1字节, 把对方发过来的数据逐字节逐字节的接收,也可以解决问题,但是这种方法是不推荐的,因为这种方式会使TCP接收变得极其缓慢,远远低于对方发送的速度。
本文示例介绍另外一种方式。n
2 示例使用的主要PLC模块
CPU315站(接收端) | ||
CPU315F-2DP | 6ES7315-6FF01-0AB0 | V2.6 |
CP343-1 | 6GK7343-1EX30-0XE0 | V2.4 |
CPU319站(发送端) | ||
CPU319-3PN/DP | 6ES7315-6FF01-0AB0 | V2.6 |
CP343-1 Adv | 6GK7343-1GX21-0XE0 | V1.1 |
软件: STEP 7 V5.5 SP1n
3 示例工作机制
示例假定发送方可以自由定制发送数据的内容及长度,且最大数据发送量小于接收CPx43-1的最大TCP数据包长度(如CP343-1的TCP数据包最大为240字节)。
实现的方法是,把一个数据包分割成2个部分接收,约定前部分为整包有效发送数据长度,后部分为有效数据。示例的第一部分按1字节作为长度处理,发送方按此格式发送。n
3.1 发送流程
发送方在发送之前,在AG_Send的Send参数第一个字节加入数据长度,后跟待发送数据串,Len参数为数据长度加1个字节, 然Act = True触发发送。n
3.2 接收流程
先把AG_Recv的RCV参数长度设置为一个字节接收,NDR = True后,把RCV的长度调整为接收到的字节所设定的长度,再次启动接收,把有效数据完整的一次接收,这样不会发生错位。
4 相关参考
示例中所涉及的TCP组态及基本编程,请参考下载中心文档“通过CP343-1实现S7-300之间的以太网通讯”编号为A0020 ;对于ANY 指针的格式,请参考请参考下载中心文档“S7-300和S7-400寻址”,编号F0215 。
!示例程序仅供参考,由于该软件是免费的,因此不提供任何担保、错误纠正或热线支持。
Tcp_demo.zip (654 KB) ( 654 KB )
关键词
TCP通讯,TCP连接, PLC通讯, S7通讯, CP343-1, CP443-1, AG_Send, AG_Recv
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc328298.html