(********************************************************************
* COPYRIGHT
********************************************************************
* Program: MotionTask
* File: UserPostAction.st
* Author: chen
* Created: April 07, 2022
********************************************************************
* Implementation of program MotionTask
********************************************************************)
(* Add a new action to your IEC program or library *)
ACTION UserPostAction:
(******************接收数据,格式参见相关协议*************************)
(***********************解析上位机操作命令****************************)
IF Recv_0.Data[0] = 1 THEN //地址信息
(**************************CRC校验*********************)
Recv_0.CRC := SHL(BYTE_TO_UINT(Recv_0.Data[Recv_0.Recvlen-1]),8) + BYTE_TO_UINT(Recv_0.Data[Recv_0.Recvlen-2]);
CRC_0.buffer := Recv_0.Data;
CRC_0.length := Recv_0.Recvlen - 2;
CRC_0.polynom := 16#A001;
CRC_0.enable := TRUE;
CRC_0();
IF CRC_0.done THEN
IF Recv_0.CRC = CRC_0.uiCRC THEN //33803 1 3 0 0 0 1 132 10
CASE BYTE_TO_INT(Recv_0.Data[1]) OF
(*功能码03:接收控制指令*)
03:
Recv_0.InstructID := SHL(BYTE_TO_UINT(Recv_0.Data[2]),8) + BYTE_TO_UINT(Recv_0.Data[3]);
Recv_0.InstructNum := SHL(BYTE_TO_UINT(Recv_0.Data[4]),8) + BYTE_TO_UINT(Recv_0.Data[5]);
(*功能码16:接收多个数据*)
16:
Recv_0.PramNum := SHL(BYTE_TO_UINT(Recv_0.Data[4]),8) + BYTE_TO_UINT(Recv_0.Data[5]); (*指令数*)
memcpy(ADR(Recv_0.Prameter),ADR(Recv_0.Data[7]),Recv_0.PramNum*2); (*指令内容*)
Recv_0.PramID[0] := SHR(BYTE_TO_UINT(Recv_0.Data[2]),8) + BYTE_TO_UINT(Recv_0.Data[3])+1; (*指令首地址*)
FOR i := 0 TO Recv_0.PramNum-1 DO
Recv_0.PramID[i] := Recv_0.PramID[0] + i;
CASE Recv_0.PramID[i] OF
16#01:
//UpperCommd_0.RobotState := LOAD;
IF Recv_0.Prameter[1]=1 THEN
UpperCommd_0.RobotState := AUTHOR;
ELSE UpperCommd_0.RobotState := DISABLE;
END_IF
16#02:
UpperCommd_0.RobotState := START;
16#03:
UpperCommd_0.RobotState := INTERRUPT;
16#04:
UpperCommd_0.RobotState := ESTOP;
16#05:
UpperCommd_0.Startflag := TRUE;
16#06:
UpperCommd_0.RobotState := CLEAR;
16#14:
UpperCommd_0.RobotState := START;
UpperCommd_0.Startflag := TRUE;
16#15:
FeederDelivery_0.TypeInSlot[1] := BYTE_TO_UINT(Recv_0.Prameter[2]);
16#16:
FeederDelivery_0.TypeInSlot[2] := BYTE_TO_UINT(Recv_0.Prameter[4]);
16#17:
FeederDelivery_0.TypeInSlot[3] := BYTE_TO_UINT(Recv_0.Prameter[6]);
16#18:
FeederDelivery_0.TypeInSlot[4] := BYTE_TO_UINT(Recv_0.Prameter[8]);
16#19:
FeederDelivery_0.TypeInSlot[5] := BYTE_TO_UINT(Recv_0.Prameter[10]);
16#1A:
FeederDelivery_0.TypeInSlot[6] := BYTE_TO_UINT(Recv_0.Prameter[12]);
16#1B:
FeederDelivery_0.TypeInSlot[7] := BYTE_TO_UINT(Recv_0.Prameter[14]);
16#1C:
FeederDelivery_0.TypeInSlot[8] := BYTE_TO_UINT(Recv_0.Prameter[16]);
16#1D:
FeederDelivery_0.TypeInSlot[9] := BYTE_TO_UINT(Recv_0.Prameter[18]);
16#1E:
FeederDelivery_0.TypeInSlot[10] := BYTE_TO_UINT(Recv_0.Prameter[20]);
END_CASE
END_FOR
END_CASE
END_IF
END_IF
END_IF
(********************获取当前机器人状态**************************)
Step_Robot_GroupReadStatus_0.Enable := TRUE;
Step_Robot_GroupReadStatus_0.AxesGroup := 0;//ADR(robot);
Step_Robot_GroupReadStatus_0();
IF Step_Robot_GroupReadStatus_0.Error = TRUE THEN
Error :=Step_Robot_GroupReadStatus_0.ErrorID;
ELSE
IF Step_Robot_GroupReadStatus_0.GroupErrorStop THEN
RobotStatus_0.RunStatus := ErrorStop;
ELSIF Step_Robot_GroupReadStatus_0.GroupPower THEN
RobotStatus_0.RunStatus := Power;
ELSIF Step_Robot_GroupReadStatus_0.GroupRunning THEN
RobotStatus_0.RunStatus := Running;
ELSIF Step_Robot_GroupReadStatus_0.GroupStandby THEN
RobotStatus_0.RunStatus := Standby;
ELSIF Step_Robot_GroupReadStatus_0.GroupRunning_Interrupt THEN
RobotStatus_0.RunStatus := Running_Interrupt;
ELSIF Step_Robot_GroupReadStatus_0.GroupRunning_Moving THEN
RobotStatus_0.RunStatus := Running;
ELSIF Step_Robot_GroupReadStatus_0.GroupRunning_Repo THEN
RobotStatus_0.RunStatus := Running;
ELSIF Step_Robot_GroupReadStatus_0.GroupRunning_Jogging THEN
RobotStatus_0.RunStatus := Running;
END_IF
END_IF
Step_Robot_GroupReadStatus_0.Enable := FALSE;
(*********************获取机器人操作模式***************************)
Step_Robot_GetOperationMode_0.Enable := 1;
Step_Robot_GetOperationMode_0();
IF Step_Robot_GetOperationMode_0.ManualT1 THEN
RobotStatus_0.RobotMode := Manual;
ELSIF Step_Robot_GetOperationMode_0.ManualT2 THEN
RobotStatus_0.RobotMode := Manual;
ELSIF Step_Robot_GetOperationMode_0.Auto THEN
RobotStatus_0.RobotMode := Auto;
ELSIF Step_Robot_GetOperationMode_0.AutoExternal THEN
RobotStatus_0.RobotMode := AutoExternal;
END_IF
Step_Robot_GetOperationMode_0.Enable := 0;
(*********************************读取示教器数据**************************)
GetBOOLFromHMI_0(Enable := 1, PortNumber := 1);
bool1 := GetBOOLFromHMI_0.Data;
GetBOOLFromHMI_0(Enable := 1, PortNumber := 2);
bool2 := GetBOOLFromHMI_0.Data;
GetBOOLFromHMI_0(Enable := 1, PortNumber := 3);
bool3 := GetBOOLFromHMI_0.Data;
GetBOOLFromHMI_0(Enable := 1, PortNumber := 4);
bool4 := GetBOOLFromHMI_0.Data;
GetBOOLFromHMI_0(Enable := 1, PortNumber := 5);
bool5 := GetBOOLFromHMI_0.Data;
GetBOOLFromHMI_0(Enable := 1, PortNumber := 6);
bool6 := GetBOOLFromHMI_0.Data;
GetBOOLFromHMI_0(Enable := 1, PortNumber := 7);
bool7 := GetBOOLFromHMI_0.Data;
GetBOOLFromHMI_0(Enable := 1, PortNumber := 8);
bool8 := GetBOOLFromHMI_0.Data;
GetBOOLFromHMI_0(Enable := 1, PortNumber := 9);
bool9 := GetBOOLFromHMI_0.Data;
GetBOOLFromHMI_0(Enable := 1, PortNumber := 10);
bool10 := GetBOOLFromHMI_0.Data;
//GetBOOLFromHMI_0(Enable := 1, PortNumber := 2, data=>bool2);
(*********************响应上位机操作命令**************************)
CASE UpperCommd_0.RobotState OF
WAIT:(**)
(*
Step_Robot_LoadPath_0.ProjectName := 'Project';
Step_Robot_LoadPath_0.ProgramName := 'Program';
Step_Robot_LoadPath_0.AxesGroup := ADR(robot);
Step_Robot_LoadPath_0.Execute := TRUE;
Step_Robot_LoadPath_0();
IF Step_Robot_LoadPath_0.Done = TRUE THEN
RobotStatus_0.ProgramLoad := TRUE;
ELSE
RobotStatus_0.ProgramLoad := FALSE;
Error := 16#11;//加载程序失败:请检查程序名称。
END_IF
*)
;
AUTHOR:(*获取权限*)
IF RobotStatus_0.GetAuthor = FALSE THEN
IF RobotStatus_0.RobotMode = AutoExternal THEN
Step_Robot_ReqCtrlAuth_0.Execute := TRUE;
Step_Robot_ReqCtrlAuth_0.RequestAuthority := TRUE;
Step_Robot_ReqCtrlAuth_0();
IF Step_Robot_ReqCtrlAuth_0.Status THEN
RobotStatus_0.GetAuthor := Step_Robot_ReqCtrlAuth_0.Status;
icont := icont + 1;
//UpperCommd_0.RobotState := LOAD;
END_IF
ELSE
Error := 1; //模式错误
END_IF
ELSE
UpperCommd_0.RobotState := LOAD;
END_IF
Step_Robot_ReqCtrlAuth_0.Execute := FALSE;
Step_Robot_ReqCtrlAuth_0();
LOAD: (*加载程序*)
IF RobotStatus_0.GetAuthor = TRUE THEN
Step_Robot_LoadPath_0.ProjectName := 'test';
Step_Robot_LoadPath_0.ProgramName := 'test1';
Step_Robot_LoadPath_0.AxesGroup := 0;//ADR(robot);
Step_Robot_LoadPath_0.Execute := TRUE;
Step_Robot_LoadPath_0();
(*
IF Step_Robot_LoadPath_0.Done = TRUE THEN
RobotStatus_0.ProgramLoad := TRUE;
ELSE
RobotStatus_0.ProgramLoad := FALSE;
Error := 21;//加载程序失败:请检查程序名称。
UpperCommd_0.RobotState := WAIT;
END_IF
*)
RobotStatus_0.ProgramLoad := TRUE;
UpperCommd_0.RobotState := ENABLE;
END_IF
Step_Robot_LoadPath_0.Execute := FALSE;
Step_Robot_LoadPath_0();
ENABLE:(*使能*)
IF (RobotStatus_0.RunStatus <> Power) OR (RobotStatus_0.RunStatus <> Running) OR (RobotStatus_0.RunStatus <> Running_Interrupt) THEN
IF RobotStatus_0.GetAuthor = TRUE THEN
IF RobotStatus_0.ProgramLoad = TRUE THEN
GroupPower_0.Enable := 1;
GroupPower_0();
UpperCommd_0.RobotState := WAIT;
ELSE
Error := 23;//未加载程序。
UpperCommd_0.RobotState := WAIT;
END_IF
ELSE
UpperCommd_0.RobotState := WAIT;//
Error := 20;//无权限
END_IF
ELSE
UpperCommd_0.RobotState := WAIT;
END_IF
// GroupPower_0.Enable := 0;
START:(*启动命令*)
IF (RobotStatus_0.RunStatus = Power) OR (RobotStatus_0.RunStatus = Running_Interrupt)THEN
Step_Robot_StartPath_0.AxesGroup := 0;//ADR(robot);
Step_Robot_StartPath_0.Enable := 1;
Step_Robot_StartPath_0();
ELSE
Error :=31; //启动失败:没有使能
UpperCommd_0.RobotState := WAIT;
END_IF
UpperCommd_0.RobotState := WAIT;
//Step_Robot_StartPath_0.Enable := 0;
INTERRUPT:(*运动暂停命令*)
IF (RobotStatus_0.RunStatus = Running) OR (RobotStatus_0.RunStatus = Running_Moving) OR (RobotStatus_0.RunStatus = Running_Interrupt) THEN
Step_Robot_InterruptPath_0.AxesGroup := 0;//ADR(robot);
Step_Robot_InterruptPath_0.Execute := TRUE;
Step_Robot_InterruptPath_0();
IF Step_Robot_InterruptPath_0.Done = FALSE THEN
Error := 41;//中断操作失败。
UpperCommd_0.RobotState := WAIT;
END_IF
ELSE
tips :=3; //机器人未运动。
UpperCommd_0.RobotState := WAIT;
END_IF
UpperCommd_0.RobotState := WAIT;
Step_Robot_InterruptPath_0.Execute := FALSE;
Step_Robot_InterruptPath_0();
CLEAR:(*清除错误*)
Error := 0;
ConfirmAllMsg.Execute := TRUE;
ConfirmAllMsg.AxesGroup := 0;
ConfirmAllMsg();
UpperCommd_0.RobotState := WAIT;
ConfirmAllMsg.Execute := FALSE;
ConfirmAllMsg();
// )
ERROR:(*上位机出错,停止运动*)
END_CASE
(******************************发送状态赋值***************************************)
(*状态反馈*)
CASE RobotStatus_0.RunStatus OF
Power:
Send_0.RobotState := 16#01;
Running:
Send_0.RobotState := 16#02;
Standby:
Send_0.RobotState := 16#03;
ErrorStop:
Send_0.RobotState := 16#04;
Running_Interrupt:
Send_0.RobotState := 16#05;
Running_Moving:
Send_0.RobotState := 16#06;
Running_Repo:
Send_0.RobotState := 16#07;
Running_Jog:
Send_0.RobotState := 16#08;
END_CASE
(*工作流程反馈*)
//Send_0.WorkState := 正在取工件的槽<<8 + 剩余工件数量。
(********************************给示教器的信息*******************************)
IF UpperCommd_0.Startflag = TRUE THEN
RobotDI[21] := 1;
ELSE
RobotDI[21] := 0;
END_IF
IF bool1=1 OR bool2=1 OR bool3=1 OR bool4=1 OR bool5=1 OR bool6=1 OR bool7=1 OR bool8=1 OR bool8=1 OR bool10=1 THEN
UpperCommd_0.Startflag := FALSE;
END_IF
(*外部点*)
//IF Recv_0.Data[1] = 1 THEN
// SetRobotCartPos_0.Enable := 1;
// SetRobotCartPos_0.PortNumber := 0;
// SetRobotCartPos_0.RobotCartPos := CartPos[0];
// SetRobotCartPos_0();
//END_IF
(*Slot1*)
IF FeederDelivery_0.TypeInSlot[1] = 0 THEN
SlotBool1 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[1] = 1 THEN
SlotBool1 := FALSE;
SlotBool2 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[1] = 2 THEN
SlotBool1 := FALSE;
SlotBool2 := FALSE;
END_IF
SetBOOLToHMI_1.Data := SlotBool1;
SetBOOLToHMI_1.Enable := 1;
SetBOOLToHMI_1.PortNumber := 11;
SetBOOLToHMI_1();
SetBOOLToHMI_2.Data := SlotBool2;
SetBOOLToHMI_2.Enable := 1;
SetBOOLToHMI_2.PortNumber := 12;
SetBOOLToHMI_2();
(*Slot2*)
IF FeederDelivery_0.TypeInSlot[2] = 0 THEN
SlotBool3 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[2] = 1 THEN
SlotBool3 := FALSE;
SlotBool4 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[2] = 2 THEN
SlotBool3 := FALSE;
SlotBool4 := FALSE;
END_IF
SetBOOLToHMI_3.Data := SlotBool3;
SetBOOLToHMI_3.Enable := 1;
SetBOOLToHMI_3.PortNumber := 13;
SetBOOLToHMI_3();
SetBOOLToHMI_4.Data := SlotBool4;
SetBOOLToHMI_4.Enable := 1;
SetBOOLToHMI_4.PortNumber := 14;
SetBOOLToHMI_4();
(*Slot3*)
IF FeederDelivery_0.TypeInSlot[3] = 0 THEN
SlotBool5 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[3] = 1 THEN
SlotBool5 := FALSE;
SlotBool6 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[3] = 2 THEN
SlotBool5 := FALSE;
SlotBool6 := FALSE;
END_IF
SetBOOLToHMI_5.Data := SlotBool5;
SetBOOLToHMI_5.Enable := 1;
SetBOOLToHMI_5.PortNumber := 15;
SetBOOLToHMI_5();
SetBOOLToHMI_6.Data := SlotBool6;
SetBOOLToHMI_6.Enable := 1;
SetBOOLToHMI_6.PortNumber := 16;
SetBOOLToHMI_6();
(*Slot4*)
IF FeederDelivery_0.TypeInSlot[4] = 0 THEN
SlotBool7 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[4] = 1 THEN
SlotBool7 := FALSE;
SlotBool8 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[4] = 2 THEN
SlotBool7 := FALSE;
SlotBool8 := FALSE;
END_IF
SetBOOLToHMI_7.Data := SlotBool7;
SetBOOLToHMI_7.Enable := 1;
SetBOOLToHMI_7.PortNumber := 17;
SetBOOLToHMI_7();
SetBOOLToHMI_8.Data := SlotBool8;
SetBOOLToHMI_8.Enable := 1;
SetBOOLToHMI_8.PortNumber := 18;
SetBOOLToHMI_8();
(*Slot5*)
IF FeederDelivery_0.TypeInSlot[5] = 0 THEN
SlotBool9 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[5] = 1 THEN
SlotBool9 := FALSE;
SlotBool10 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[5] = 2 THEN
SlotBool9 := FALSE;
SlotBool10 := FALSE;
END_IF
SetBOOLToHMI_9.Data := SlotBool9;
SetBOOLToHMI_9.Enable := 1;
SetBOOLToHMI_9.PortNumber := 19;
SetBOOLToHMI_9();
SetBOOLToHMI_10.Data := SlotBool10;
SetBOOLToHMI_10.Enable := 1;
SetBOOLToHMI_10.PortNumber := 20;
SetBOOLToHMI_10();
(*Slot6*)
IF FeederDelivery_0.TypeInSlot[6] = 0 THEN
SlotBool11 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[6] = 1 THEN
SlotBool11 := FALSE;
SlotBool12 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[6] = 2 THEN
SlotBool11 := FALSE;
SlotBool12 := FALSE;
END_IF
SetBOOLToHMI_11.Data := SlotBool11;
SetBOOLToHMI_11.Enable := 1;
SetBOOLToHMI_11.PortNumber := 21;
SetBOOLToHMI_11();
SetBOOLToHMI_12.Data := SlotBool12;
SetBOOLToHMI_12.Enable := 1;
SetBOOLToHMI_12.PortNumber := 22;
SetBOOLToHMI_12();
(*Slot7*)
IF FeederDelivery_0.TypeInSlot[7] = 0 THEN
SlotBool13 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[7] = 1 THEN
SlotBool13 := FALSE;
SlotBool14 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[7] = 2 THEN
SlotBool13 := FALSE;
SlotBool14 := FALSE;
END_IF
SetBOOLToHMI_13.Data := SlotBool13;
SetBOOLToHMI_13.Enable := 1;
SetBOOLToHMI_13.PortNumber := 23;
SetBOOLToHMI_13();
SetBOOLToHMI_14.Data := SlotBool14;
SetBOOLToHMI_14.Enable := 1;
SetBOOLToHMI_14.PortNumber := 24;
SetBOOLToHMI_14();
(*Slot8*)
IF FeederDelivery_0.TypeInSlot[8] = 0 THEN
SlotBool15 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[8] = 1 THEN
SlotBool15 := FALSE;
SlotBool16 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[8] = 2 THEN
SlotBool15 := FALSE;
SlotBool16 := FALSE;
END_IF
SetBOOLToHMI_15.Data := SlotBool15;
SetBOOLToHMI_15.Enable := 1;
SetBOOLToHMI_15.PortNumber := 25;
SetBOOLToHMI_15();
SetBOOLToHMI_16.Data := SlotBool16;
SetBOOLToHMI_16.Enable := 1;
SetBOOLToHMI_16.PortNumber := 26;
SetBOOLToHMI_16();
(*Slot9*)
IF FeederDelivery_0.TypeInSlot[9] = 0 THEN
SlotBool17 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[9] = 1 THEN
SlotBool17 := FALSE;
SlotBool18 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[9] = 2 THEN
SlotBool17 := FALSE;
SlotBool18 := FALSE;
END_IF
SetBOOLToHMI_17.Data := SlotBool17;
SetBOOLToHMI_17.Enable := 1;
SetBOOLToHMI_17.PortNumber := 27;
SetBOOLToHMI_17();
SetBOOLToHMI_18.Data := SlotBool18;
SetBOOLToHMI_18.Enable := 1;
SetBOOLToHMI_18.PortNumber := 28;
SetBOOLToHMI_18();
(*Slot10*)
IF FeederDelivery_0.TypeInSlot[10] = 0 THEN
SlotBool19 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[10] = 1 THEN
SlotBool19 := FALSE;
SlotBool20 := TRUE;
ELSIF FeederDelivery_0.TypeInSlot[10] = 2 THEN
SlotBool19 := FALSE;
SlotBool20 := FALSE;
END_IF
SetBOOLToHMI_19.Data := SlotBool19;
SetBOOLToHMI_19.Enable := 1;
SetBOOLToHMI_19.PortNumber := 29;
SetBOOLToHMI_19();
SetBOOLToHMI_20.Data := SlotBool20;
SetBOOLToHMI_20.Enable := 1;
SetBOOLToHMI_20.PortNumber := 30;
SetBOOLToHMI_20();
(*************************发送数据,格式参见相关协议,给触屏*******************************)
// Send_0.Data[0] := 1;
CASE BYTE_TO_INT(Recv_0.Data[1]) OF
03:
Send_0.Data[0] := 1;
Send_0.Data[1] := 3;
Send_0.Data[2] := UINT_TO_BYTE(Recv_0.InstructNum * 2);
//Send_0.Data[3] := UINT_TO_BYTE(SHR(Send_0.RobotState,8));
//Send_0.Data[4] := UINT_TO_BYTE(Send_0.RobotState);
IF RobotStatus_0.RunStatus=Power THEN
Send_0.Data[3]:= 0;
Send_0.Data[4]:= 1;
ELSIF RobotStatus_0.RunStatus=Running THEN
Send_0.Data[3]:= 0;
Send_0.Data[4]:= 2;
ELSIF RobotStatus_0.RunStatus=Standby THEN
Send_0.Data[3]:= 0;
Send_0.Data[4]:= 3;
ELSIF RobotStatus_0.RunStatus=ErrorStop THEN
Send_0.Data[3]:= 0;
Send_0.Data[4]:= 4;
ELSIF RobotStatus_0.RunStatus=Running_Interrupt THEN
Send_0.Data[3]:= 0;
Send_0.Data[4]:= 4;
END_IF
//Send_0.Data[5] := UINT_TO_BYTE(SHR(Send_0.WorkState,8));
//Send_0.Data[6] := UINT_TO_BYTE(Send_0.WorkState);
Send_0.Data[5]:=0;
IF bool1=1 THEN
Send_0.Data[6]:=1;
ELSIF bool2=1 THEN
Send_0.Data[6]:=2;
ELSIF bool3=1 THEN
Send_0.Data[6]:=3;
ELSIF bool4=1 THEN
Send_0.Data[6]:=4;
ELSIF bool5=1 THEN
Send_0.Data[6]:=5;
ELSIF bool6=1 THEN
Send_0.Data[6]:=6;
ELSIF bool7=1 THEN
Send_0.Data[6]:=7;
ELSIF bool8=1 THEN
Send_0.Data[6]:=8;
ELSIF bool9=1 THEN
Send_0.Data[6]:=9;
ELSIF bool10=1 THEN
Send_0.Data[6]:=10;
ELSE Send_0.Data[6]:=0;
END_IF
//memcpy(ADR(Send_0.Data[7]),ADR(Send_0.RemainParts[0]),10);
(*CRC校验*)
CRC_0.buffer := Send_0.Data;
CRC_0.length := 9 - 2;
CRC_0.polynom := 16#A001;
CRC_0.enable := TRUE;
CRC_0();
Send_0.Data[7] := UINT_TO_BYTE(CRC_0.uiCRC);
Send_0.Data[8] := UINT_TO_BYTE(SHR(CRC_0.uiCRC,8));
(*memcpy(ADR(Send_0.Data[7]),ADR(Send_0.RemainParts[0]),10);
//CRC校验
CRC_0.buffer := Send_0.Data;
CRC_0.length := 29 - 2;
CRC_0.polynom := 16#A001;
CRC_0.enable := TRUE;
CRC_0();
Send_0.Data[27] := UINT_TO_BYTE(SHR(CRC_0.uiCRC,8));
Send_0.Data[28] := UINT_TO_BYTE(CRC_0.uiCRC);*)
16:
Send_0.Data[0] := 1;
Send_0.Data[1] := 16;
Send_0.Data[2] := Recv_0.Data[2];
Send_0.Data[3] := Recv_0.Data[3];
Send_0.Data[4] := Recv_0.Data[4];
Send_0.Data[5] := Recv_0.Data[5];
(*CRC校验*)
CRC_0.buffer := Send_0.Data;
CRC_0.length := 8-2;
CRC_0.polynom := 16#A001;
CRC_0.enable := TRUE;
CRC_0();
Send_0.Data[6] := UINT_TO_BYTE(CRC_0.uiCRC);
Send_0.Data[7] := UINT_TO_BYTE(SHR(CRC_0.uiCRC,8));
END_CASE
END_ACTION