- {{item.name}}
CPx43-1之间变长TCP数据包接收
- 0
- 230
- 1596
1 本文描述的的TCP通讯适用范围
TCP通讯是众多的S7-300/S7-400通讯方式之一,可以在:CPx43-1、集成PN口的CPU、调用套接字编写的程序、第三方支持开发以太网通讯的设备之间相互通讯。
本文描述的TCP通讯,仅适用于CP343-1/CP443-1(支持TCP通讯的版本)之间,建立TCP connection,调用AG_Send / AG_Recv的情形。对于CPx43-1通过TCP连接接收其他设备发送的数据,如果对方设备可以协调使用本文方法也可以使用。
CPx43-1的TCP通讯,在发送接收固定长度数据时没有任何问题。但是在设备应用过程中,往往有不同长度的数据需要在两个S7 PLC之间传输,如果不做处理,会出现接收数据错位或接收数据延迟超出预期时间。
解决的方法有多种,如设置通讯中可能出现的最长的数据长度作为接收区(AG_Recv的RCV参数)的固定长度,其他小于该长度的数据发送,也按此最大长度进行发送(接收将出现多余字节)。这种方法是值得推荐的。又如,可以设置接收区长度为1字节, 把对方发过来的数据逐字节逐字节的接收,也可以解决问题,但是这种方法是不推荐的,因为这种方式会使TCP接收变得极其缓慢,远远低于对方发送的速度。
本文示例介绍另外一种方式。
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 SP1
3 示例工作机制
示例假定发送方可以自由定制发送数据的内容及长度,且最大数据发送量小于接收CPx43-1的最大TCP数据包长度(如CP343-1的TCP数据包最大为240字节)。
实现的方法是,把一个数据包分割成2个部分接收,约定前部分为整包有效发送数据长度,后部分为有效数据。示例的第一部分按1字节作为长度处理,发送方按此格式发送。
3.1 发送流程
发送方在发送之前,在AG_Send的Send参数第一个字节加入数据长度,后跟待发送数据串,Len参数为数据长度加1个字节, 然Act = True触发发送。
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
剩余80%未阅读,请登录后下载/查看文档
- 评论
-
分享
扫码分享
- 收藏 收藏
- 点赞 点赞
- 纠错 纠错
- S7-300/400 的CPx43-1 MODBUS TCP 通讯(STEP7)
- PLC— PLC 之间的MPI 通信---------全局数据包通信方式
- S7-1200 与 SENTRON PAC3200 之间通过 MODBUS TCP (Set 22) 进行数据通信
- 如何通过工业以太网CP在S7-300与/或S7-400之间组态TCP连接以实现数据交换?
- 如何利用S7-200处理来自GPS接收器的时间数据?
- 为什么OPC UA客户端不能按照STEP 7 (TIA Portal)中定义的顺序接收数据?
- 在SIMATIC S7-1500 / S7-1200和SENTRON PAC设备之间的Modbus TCP连接时,如何清除错误状态16 # 8382?
- 如何对 S7-1500 CPU 和 S7-1200 CPU 之间的 Modbus/TCP 通信进行编程和参数化 ?
- 如何对两台 S7-1500 CPU 之间的 Modbus/Tcp 通信进行编程和参数化?
- 为什么SINAMICS S120 无法接收PLC发送的控制字PZD1
{{item.nickName}}