CPx43-1之间变长TCP数据包接收

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

CPx43-1之间变长TCP数据包接收

3.2 接收流程
先把AG_Recv的RCV参数长度设置为一个字节接收,NDR = True后,把RCV的长度调整为接收到的字节所设定的长度,再次启动接收,把有效数据完整的一次接收,这样不会发生错位。

CPx43-1之间变长TCP数据包接收

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日
下一篇 2021年4月12日

相关推荐

发表回复

登录后才能评论