碰焊机器人PLC程序(贝加莱B&R)

(********************************************************************
 * 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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

!chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值