S7-1500PLC TCP_FB_V1.2

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: TCP通信测试功能块(V1.2),支持数据收发、心跳定时传输、限时接收及接收验证,适用于个人测试场景。程序包含初始化、参数映射、通信处理、心跳信号与数据校验等功能模块,结构清晰,易于扩展。注意:仅限个人测试使用,不建议应用于生产环境。如需源码,请关注WX公众号:CCLib。

TCP communication test function block, version V1.2, support data sending and receiving, heartbeat timing transmission, display receiving, and Time-limited reception, can be downloaded and tested.(Only for personal test use, do not use in the field production environment, if you have questions please contact the author)

支持常规数据收发,心跳定时发送,限时接收,以及数据接收验证;仅供个人测试;
程序中如有问题感谢反馈,我会及时做出修改!

一、功能块引脚

image.png
功能块引脚包括:initialize初始化、TCP_Parameter,两个引脚;

二、內部程序(部分)

image.png

1、程序段1:Initialize初始化

image.png

2、Parameter mapping


#S_TSEND_C_Instance.CONT := #TCP_Parameter.DATA.Control.CONT; //连接赋值

//Data
IF #"S_Ephemeral data".HeartSend_State
THEN
    //#TCP_Parameter.DATA.S_HeartBeat.RECEIVE := #S_HeartBeat.RECEIVE;
    #TCP_Parameter.DATA.S_HeartBeat.RECEIVE.Recv_LEN := #S_HeartBeat.RECEIVE.Recv_LEN;
    #TCP_Parameter.DATA.S_HeartBeat.RECEIVE.Recv_Count := #S_HeartBeat.RECEIVE.Recv_Count;
    #TCP_Parameter.DATA.S_HeartBeat.RECEIVE.Recv_Valid := #S_HeartBeat.RECEIVE.Recv_Valid;
    #TCP_Parameter.DATA.S_HeartBeat.RECEIVE.Recv_Check_Err := #S_HeartBeat.RECEIVE.Recv_Check_Err;
    #TCP_Parameter.DATA.S_HeartBeat.RECEIVE.Recv_ASCII := #S_HeartBeat.RECEIVE.Recv_ASCII;

    #S_HeartBeat.RECEIVE.Recv_Check_Enable := "TCP_Parameter".Data.DATA.S_HeartBeat.RECEIVE.Recv_Check_Enable;


    UMOVE_BLK(IN := #S_Data.RECEIVE.Recv[0],
              COUNT := 32,
              OUT => #TCP_Parameter.DATA.S_HeartBeat.RECEIVE.Recv[0]);
    UMOVE_BLK(IN := #TCP_Parameter.DATA.S_HeartBeat.RECEIVE.Recv_CheckData[0],
              COUNT := 32,
              OUT => #S_HeartBeat.RECEIVE.Recv_CheckData[0]);

    #S_HeartBeat.RECEIVE.Recv_Check_Enable := #TCP_Parameter.DATA.S_HeartBeat.RECEIVE.Recv_Check_Enable;


    #S_TSEND_C_Instance.LEN := #TCP_Parameter.DATA.S_HeartBeat.SEND.Send_Len;

    #TCP_Parameter.DATA.S_HeartBeat.SEND.Send_Count := #S_HeartBeat.SEND.Send_Count;
    #TCP_Parameter.DATA.S_HeartBeat.SEND.Send_Valid := #S_Data.SEND.Send_Valid;
    #TCP_Parameter.DATA.S_HeartBeat.SEND.Send_ASCII := #S_Data.SEND.Send_ASCII;
    UMOVE_BLK(IN := #TCP_Parameter.DATA.S_HeartBeat.SEND.Send[0],
              COUNT := 32,
              OUT => #S_Data.SEND.Send[0]);

END_IF;

IF #"S_Ephemeral data".HeartSend_State = FALSE 
THEN
    #TCP_Parameter.DATA.Data.RECEIVE := #S_Data.RECEIVE;

    #S_TSEND_C_Instance.LEN := #TCP_Parameter.DATA.Data.SEND.Send_Len;
    #TCP_Parameter.DATA.Data.SEND.Send_Count := #S_Data.SEND.Send_Count;
    #TCP_Parameter.DATA.Data.SEND.Send_Valid := #S_Data.SEND.Send_Valid;
    #TCP_Parameter.DATA.Data.SEND.Send_ASCII := #S_Data.SEND.Send_ASCII;
    #S_Data.SEND.Send := #TCP_Parameter.DATA.Data.SEND.Send;

    #S_TSEND_C_Instance.REQ := #TCP_Parameter.DATA.Control.Send_REQ;
    #S_TRCV_Instance.EN_R := #TCP_Parameter.DATA.Control.Recv_REQ;


END_IF;

//Communication
#S_TCP_Comm.Tcon_Connect.InterfaceId := #TCP_Parameter.DATA.TCP_Communication.parameter.InterfaceId;
#S_TCP_Comm.Tcon_Connect.ID := #TCP_Parameter.DATA.TCP_Communication.parameter.Connect_ID;
#S_TCP_Comm.Tcon_Connect.ActiveEstablished := #TCP_Parameter.DATA.TCP_Communication.parameter.ActiveEstablished;
#S_TCP_Comm.Tcon_Connect.RemotePort := #TCP_Parameter.DATA.TCP_Communication.parameter.RemotePort;
#S_TCP_Comm.Tcon_Connect.LocalPort:= #TCP_Parameter.DATA.TCP_Communication.parameter.LocalPort;

//Addr
#S_ADDR_SPLIT.Addr_ALL := #TCP_Parameter.DATA.TCP_Communication.parameter.RemoteAddress;

//Status
#TCP_Parameter.DATA.TCP_Communication.Status.Tsend_DONE := #S_TSEND_C_Instance.DONE;
#TCP_Parameter.DATA.TCP_Communication.Status.Tsend_BUSY := #S_TSEND_C_Instance.BUSY;
#TCP_Parameter.DATA.TCP_Communication.Status.Tsend_ERROR := #S_TSEND_C_Instance.ERROR;
#TCP_Parameter.DATA.TCP_Communication.Status.Tsend_STATUS := #S_TSEND_C_Instance.STATUS;
#TCP_Parameter.DATA.TCP_Communication.Status.Trcv_NDR := #S_TRCV_Instance.NDR;
#TCP_Parameter.DATA.TCP_Communication.Status.Trcv_BUSY := #S_TRCV_Instance.BUSY;
#TCP_Parameter.DATA.TCP_Communication.Status.Trcv_ERROR := #S_TRCV_Instance.ERROR;
#TCP_Parameter.DATA.TCP_Communication.Status.Trcv_STATUS := #S_TRCV_Instance.STATUS;

//HeartBeat

#S_HeartBeat.HeartBeat_Enable := #TCP_Parameter.DATA.S_HeartBeat.HeartBeat_Enable;
#S_HeartBeat.Send_interval := #TCP_Parameter.DATA.S_HeartBeat.Send_Interval;
AI 代码解读

4、communication

image.png

5、正常收发信号处理

image.png
image.png

6、心跳信号处理+发送有效状态

image.png

7、心跳信号接收

image.png
image.png

8、数据校验

image.png
image.png

9、超限判断

```IF #"S_Ephemeral data".HeartSend_State AND

#S_Time.TON[1].ET = #TCP_Parameter.DATA.S_HeartBeat.Send_Time_Limit AND
#"S_Ephemeral data".Resend_Cycle=FALSE
AI 代码解读

THEN

#TCP_Parameter.DATA.S_HeartBeat.Status.HeartBeat_Err := true;
AI 代码解读

END_IF;

IF #TCP_Parameter.DATA.S_HeartBeat.HeartBeat_Enable = FALSE OR

#TCP_Parameter.DATA.S_HeartBeat.Reset
AI 代码解读

THEN

#TCP_Parameter.DATA.S_HeartBeat.Status.HeartBeat_Err := FALSE;
#TCP_Parameter.DATA.S_HeartBeat.Status.Resend_count := 0;
AI 代码解读

END_IF;

``` **

此功能块在特定设备上测试OK。如需源码下载 请关注WX公众号:CCLib

目录
打赏
0
3
3
0
14
分享
相关文章
|
4月前
|
TCP连接管理与UDP协议IP协议与ethernet协议
TCP、UDP、IP和Ethernet协议是网络通信的基石,各自负责不同的功能和层次。TCP通过三次握手和四次挥手实现可靠的连接管理,适用于需要数据完整性的场景;UDP提供不可靠的传输服务,适用于低延迟要求的实时通信;IP协议负责数据包的寻址和路由,是网络层的重要协议;Ethernet协议定义了局域网的数据帧传输方式,广泛应用于局域网设备之间的通信。理解这些协议的工作原理和应用场景,有助于设计和维护高效可靠的网络系统。
90 4
详解TCP/IP协议以及UDP
详解TCP/IP协议以及UDP
125 0
详解TCP报文格式以及TCP相关特性
详解TCP报文格式以及TCP相关特性
292 2
【JaveEE】UDP 与 TCP 原理
1. 应用层协议(自定义组织格式) 对应后面的一个章节HTTP协议,应用层的代表协议,到时候重点讲解
124 0