RobotEquip_OutExecute.cs 6.1 KB
using CodeLibrary;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms.VisualStyles;

namespace OnlineStore.DeviceLibrary
{
    partial class RobotEquip
    {
        #region 出库
        private void OutstoreExecute()
        {
            switch (MoveInfo.MoveStep)
            {

                case StepEnum.OutStore_01_Wait:
                    SetBoxStatus(DeviceStatus.OutStoreExecute, RunStatus.Busy, MoveInfo.MoveParam.PosInfo);
                    NextMoveStep(StepEnum.OutStore_02_ArmToP1, "出库开始,机械臂回待机点");
                    OutStore_02_ArmToP1();
                    break;
                case StepEnum.OutStore_02_ArmToP1:
                    NextMoveStep(StepEnum.OutStore_03_MoveAxisToStore, "行走机构到仓门口");
                    OutStore_03_MoveAxisToStore();
                    break;
                case StepEnum.OutStore_03_MoveAxisToStore:
                    NextMoveStep(StepEnum.OutStore_04_CheckStoreState, "到达仓门口,检查其状态");
                    break;
                case StepEnum.OutStore_04_CheckStoreState:
                    if (OutStore_04_CheckStoreState())
                    {
                        NextMoveStep(StepEnum.OutStore_05_ArmToStoreDoorLow, "当前仓可取料,机械臂到仓取料低点");
                        OutStore_05_ArmToStoreDoorLow();
                    }
                    break;
                case StepEnum.OutStore_05_ArmToStoreDoorLow:
                    NextMoveStep(StepEnum.OutStore_06_CompressTray, "机械臂到仓取料高点,压紧轴压紧");
                    OutStore_06_CompressTray();
                    break;
                case StepEnum.OutStore_06_CompressTray:
                    NextMoveStep(StepEnum.OutStore_07_ArmBackToP1, "在仓门口取料完成,添加机器人缓存,机械臂回待机点");
                    OutStore_07_ArmBackToP1();
                    break;
                case StepEnum.OutStore_07_ArmBackToP1:
                    NextMoveStep(StepEnum.OutStore_08_MoveAxisToOutlet, "机械臂到待机点,上报状态,行走机构到出料口");
                    UpdateLocInfo(MoveInfo.MoveParam.PosInfo, TaskStatus.INROBOT);
                    OutStore_08_MoveAxisToOutlet();
                    break;
                case StepEnum.OutStore_08_MoveAxisToOutlet:
                    NextMoveStep(StepEnum.OutStore_09_CheckOutletState, "到达出料口,检查其状态:顶升上升且无料盘");
                    break;
                case StepEnum.OutStore_09_CheckOutletState:
                    if (OutStore_09_CheckOutletState())
                    {
                        NextMoveStep(StepEnum.OutStore_10_ArmToTrayHigh, "机械臂到出料口放料高点");
                        OutStore_10_ArmToTrayHigh();
                    }
                    break;
                case StepEnum.OutStore_10_ArmToTrayHigh:
                    NextMoveStep(StepEnum.OutStore_11_ReleaseTray, "机械臂到出料口放料低点,压紧轴张开");
                    OutStore_11_ReleaseTray();
                    break;
                case StepEnum.OutStore_11_ReleaseTray:
                    NextMoveStep(StepEnum.OutStore_12_ArmBackToP1, "在出料口放料完成,清除机器人缓存,机械臂回待机点");
                    OutStore_12_ArmBackToP1();
                    break;
                case StepEnum.OutStore_12_ArmBackToP1:
                    NextMoveStep(StepEnum.OutStore_13_Finish, "出库结束");
                    break;
                case StepEnum.OutStore_13_Finish:
                    MoveInfo.EndMove();
                    runStatus = RunStatus.Runing;
                    break;
            }
        }
        private void OutStore_02_ArmToP1()
        {
            SendCmd(GetCmd_Standby());
        }
        private void OutStore_03_MoveAxisToStore()
        {
            MoveAxisToStore();
        }
        private bool OutStore_04_CheckStoreState()
        {
            return true;
        }
        private void OutStore_05_ArmToStoreDoorLow()
        {
            SendCmd(GetCmd_StoreLow(targetIndex));
        }
        private void OutStore_06_CompressTray()
        {
            SendCmd(GetCmd_StoreUp());
            CompressAxis.AbsMove(MoveInfo, Config.CompressAxis_P4, Config.CompressAxis_P4_Speed);
            MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.RobotArm_ClampingSig, IO_VALUE.HIGH));
        }
        private void OutStore_07_ArmBackToP1()
        {
            //添加机器人缓存,并上报任务状态
            BufferDataManager.TrayInRobotInfo = MoveInfo.MoveParam.PosInfo.ToCopy();
            SendCmd(GetCmd_Standby());
        }

        private void OutStore_08_MoveAxisToOutlet()
        {
            MoveAxis.AbsMove(MoveInfo, Config.MoveAxis_P3_Outlet, Config.MoveAxis_P3_Outlet_Speed);
        }
        private bool OutStore_09_CheckOutletState()
        {
            if (IOValue(IO_Type.Outlet_JackUpSig).Equals(IO_VALUE.HIGH) && IOValue(IO_Type.Outlet_TrayCheck1).Equals(IO_VALUE.LOW))
            {
                return true;
            }
            return false;
        }
        private void OutStore_10_ArmToTrayHigh()
        {
            SendCmd(GetCmd_OutletHigh());
        }
        private void OutStore_11_ReleaseTray()
        {
            SendCmd(GetCmd_OutletDown());
            CompressAxis.AbsMove(MoveInfo,Config.CompressAxis_P2, Config.CompressAxis_P2_Speed);
            MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.RobotArm_ClampingSig, IO_VALUE.LOW));
        }
        private void OutStore_12_ArmBackToP1()
        {
            //上报任务状态
            BufferDataManager.TrayInRobotInfo = null;
            BufferDataManager.TrayInOutletInfo = MoveInfo.MoveParam.PosInfo.ToCopy();
            UpdateLocInfo(MoveInfo.MoveParam.PosInfo, TaskStatus.FINISHED);
            SendCmd(GetCmd_Standby());
        }
        #endregion

    }
}