程序中如有问题感谢反馈,我会及时做出修改!
功能块引脚包括:initialize初始化、TCP_Parameter,两个引脚;
//Control
#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;
IF #S_TSEND_C_Instance.CONT = FALSE
THEN
#S_ADDR_SPLIT.Addr_S := #S_ADDR_SPLIT.Addr_ALL;
#S_ADDR_SPLIT.Addr_S := CONCAT(IN1 := #S_ADDR_SPLIT.Addr_S, IN2 := '.');
FOR #S_ADDR_SPLIT.Addr_C := 0 TO 3 DO
// Statement section FOR
//
#S_ADDR_SPLIT.Len[#S_ADDR_SPLIT.Addr_C] := (FIND(IN1 := #S_ADDR_SPLIT.Addr_S, IN2 := '.')) - 1;
#S_ADDR_SPLIT.ADDR_String[#S_ADDR_SPLIT.Addr_C] := LEFT(IN := #S_ADDR_SPLIT.Addr_S, L := #S_ADDR_SPLIT.Len[#S_ADDR_SPLIT.Addr_C]);
#S_ADDR_SPLIT.ADDR_Int[#S_ADDR_SPLIT.Addr_C] := STRING_TO_INT(#S_ADDR_SPLIT.ADDR_String[#S_ADDR_SPLIT.Addr_C]);
#S_ADDR_SPLIT.Addr_S := DELETE(IN := #S_ADDR_SPLIT.Addr_S, L := (#S_ADDR_SPLIT.Len[#S_ADDR_SPLIT.Addr_C] + 1), P := 1);
#S_ADDR_SPLIT.ADDR_Byte[#S_ADDR_SPLIT.Addr_C] := INT_TO_BYTE(#S_ADDR_SPLIT.ADDR_Int[#S_ADDR_SPLIT.Addr_C]);
END_FOR;
IF #S_ADDR_SPLIT.ADDR_Int[0] > 0 AND
#S_ADDR_SPLIT.ADDR_Int[1] > 0 AND
#S_ADDR_SPLIT.ADDR_Int[2] >= 0 AND
#S_ADDR_SPLIT.ADDR_Int[3] > 0 AND
#S_ADDR_SPLIT.ADDR_Int[0] < 255 AND
#S_ADDR_SPLIT.ADDR_Int[1] < 255 AND
#S_ADDR_SPLIT.ADDR_Int[2] < 255 AND
#S_ADDR_SPLIT.ADDR_Int[3] < 255
THEN
#S_ADDR_SPLIT."Address valid" := TRUE;
ELSE
#S_ADDR_SPLIT."Address valid" := FALSE;
END_IF;
IF #S_ADDR_SPLIT."Address valid"
THEN
#S_TCP_Comm.Tcon_Connect.RemoteAddress.ADDR := #S_ADDR_SPLIT.ADDR_Byte;
END_IF;
END_IF;
4、communication
5、正常收发信号处理
6、心跳信号处理+发送有效状态
7、心跳信号接收
8、
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
THEN
#TCP_Parameter.DATA.S_HeartBeat.Status.HeartBeat_Err := true;
END_IF;
IF #TCP_Parameter.DATA.S_HeartBeat.HeartBeat_Enable = FALSE OR
#TCP_Parameter.DATA.S_HeartBeat.Reset
THEN
#TCP_Parameter.DATA.S_HeartBeat.Status.HeartBeat_Err := FALSE;
#TCP_Parameter.DATA.S_HeartBeat.Status.Resend_count := 0;
END_IF;
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。