XRayMachine.SideMove.cs 7.5 KB
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CodeLibrary;
using ConfigHelper;
using Newtonsoft.Json;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
namespace DeviceLibrary
{
    using crc = OnlineStore.CodeResourceControl;
    public partial class XRayMachine
    {
        int suckReelRetryTimes = 0;
        ReelParam ExitLine_Reel_Info
        {
            get => JsonConvert.DeserializeObject<ReelParam>(ConfigHelper.Config.Get("Runtime_ExitLine_Reel"));
            set => ConfigHelper.Config.Set("Runtime_ExitLine_Reel", value == null ? null : JsonConvert.SerializeObject(value));
        }
        ReelParam SideMove_Reel_Info
        {
            get => JsonConvert.DeserializeObject<ReelParam>(ConfigHelper.Config.Get("Runtime_SideMove_Reel"));
            set => ConfigHelper.Config.Set("Runtime_SideMove_Reel", value == null ? null : JsonConvert.SerializeObject(value));
        }
        bool ExitLine_Reel_IsSafe {
            get => SideMoveInfo.MoveStep == MoveStep.Wait || SideMoveInfo.MoveStep >= MoveStep.SideMove_07;
        }
        int ZDiff = 0;
        void SideMoveProcess()
        {
            if (CheckWait(SideMoveInfo))
                return;

            switch (SideMoveInfo.MoveStep)
            {
                case MoveStep.Wait:
                    if (IOValue(IO_XRay_Type.ExitLine_Reel_Check).Equals(IO_VALUE.HIGH) && ExitLine_Reel_Info != null)
                    {
                        SideMoveInfo.NextMoveStep(MoveStep.SideMove_01);
                        SideMoveInfo.ReelParam = ExitLine_Reel_Info.clone();
                        SideMoveInfo.log("检测到料盘到位");
                    }
                    else if (ExitLine_Reel_Info != null)
                    {
                        if (SideMoveInfo.IsTimeOut(10)) {
                            Msg.add("等待料盘到达横移机构超时", MsgLevel.warning);
                            SideMoveInfo.log("等待料盘到达横移机构超时");
                        }
                    }
                    else
                    {
                        Msg.add("横移机构等待料盘", MsgLevel.info);
                    }
                    break;
                case MoveStep.SideMove_01:
                    SideMoveInfo.NextMoveStep(MoveStep.SideMove_02);
                    SideMove_Z_Axis.AbsMove(SideMoveInfo, Config.SideMove_Z_P1, Config.SideMove_Z_P1_speed);
                    SideMoveInfo.log("出料档停退到P1");
                    suckReelRetryTimes = 0;
                    break;
                case MoveStep.SideMove_02:
                    SideMoveInfo.NextMoveStep(MoveStep.SideMove_03);
                    SideMove_X_Axis.AbsMove(SideMoveInfo, Config.SideMove_X_P2, Config.SideMove_X_P2_speed);
                    SideMoveInfo.log("横移到取料点P2");
                    break;
                case MoveStep.SideMove_03:
                    SideMoveInfo.NextMoveStep(MoveStep.SideMove_04);
                    var p2 = Config.SideMove_Z_P2 - (SideMoveInfo.ReelParam.PlateH - 8 - suckReelRetryTimes*4) * 1000;
                    p2 = Config.SideMove_Z_P2;
                    SideMove_Z_Axis.AbsMove(SideMoveInfo, p2, Config.SideMove_Z_P2_speed);
                    CylinderMove(SideMoveInfo, IO_XRay_Type.SideMove_SuckerReel_Off, IO_XRay_Type.SideMove_SuckerReel_On, IO_VALUE.HIGH);
                    SideMoveInfo.log("升降轴到取料点P2:"+ p2);
                    break;
                case MoveStep.SideMove_04:
                    SideMoveInfo.NextMoveStep(MoveStep.SideMove_05);
                    var ah = SideMove_Z_Axis.GetAclPosition();
                    ZDiff = Config.SideMove_Z_P2 - ah;
                    SideMoveInfo.log($"升降轴下降高度:P2:{Config.SideMove_Z_P2}-AH:{ah} = {ZDiff}");
                    break;
                case MoveStep.SideMove_05:
                    SideMoveInfo.NextMoveStep(MoveStep.SideMove_06);
                    SideMove_Z_Axis.AbsMove(SideMoveInfo, Config.SideMove_Z_P1, Config.SideMove_Z_P1_speed);
                    SideMoveInfo.log("升降轴到P1");
                    break;
                case MoveStep.SideMove_06:
                    if (IOValue(IO_XRay_Type.SideMove_SuckerReel_Check).Equals(IO_VALUE.HIGH))
                    {
                        SideMoveInfo.NextMoveStep(MoveStep.SideMove_07);
                        SideMove_Reel_Info = ExitLine_Reel_Info.clone();
                        ExitLine_Reel_Info = null;
                        SideMoveInfo.log("吸盘成功");
                    }
                    else
                    {
                        if (suckReelRetryTimes > 3)
                        {
                            Msg.add("吸盘失败", MsgLevel.warning);
                            SideMoveInfo.log("吸盘失败, suckReelRetryTimes:" + suckReelRetryTimes);
                        }
                        else
                        {
                            SideMoveInfo.NextMoveStep(MoveStep.SideMove_03);
                            suckReelRetryTimes++;
                            SideMoveInfo.log("吸盘失败, suckReelRetryTimes:" + suckReelRetryTimes);
                        }
                    }
                    break;
                case MoveStep.SideMove_07:
                    SideMoveInfo.NextMoveStep(MoveStep.SideMove_08);
                    SideMove_X_Axis.AbsMove(SideMoveInfo, Config.SideMove_X_P3, Config.SideMove_X_P3_speed);
                    SideMoveInfo.log("横移到放料点P3");
                    break;
                case MoveStep.SideMove_08:
                    SideMoveInfo.NextMoveStep(MoveStep.SideMove_09);
                    SideMoveInfo.log("等待可以放料");
                    break;
                case MoveStep.SideMove_09:
                    SideMoveInfo.NextMoveStep(MoveStep.SideMove_10);
                    var p3 = Config.SideMove_Z_P3 - (SideMoveInfo.ReelParam.PlateH - 8 - suckReelRetryTimes * 4) * 1000;
                    SideMove_Z_Axis.AbsMove(SideMoveInfo, p3, Config.SideMove_Z_P3_speed);
                    SideMoveInfo.log("升降轴到放料点P2:" + p3);
                    break;
                case MoveStep.SideMove_10:
                    SideMoveInfo.NextMoveStep(MoveStep.SideMove_11);
                    CylinderMove(SideMoveInfo, IO_XRay_Type.SideMove_SuckerReel_Off, IO_XRay_Type.SideMove_SuckerReel_On, IO_VALUE.LOW);
                    SideMoveInfo.log("释放料盘");
                    break;
                case MoveStep.SideMove_11:
                    SideMoveInfo.NextMoveStep(MoveStep.SideMove_12);
                    SideMove_Reel_Info = null;
                    break;
                case MoveStep.SideMove_12:
                    SideMoveInfo.NextMoveStep(MoveStep.SideMove_13);
                    SideMove_Z_Axis.AbsMove(SideMoveInfo, Config.SideMove_Z_P1, Config.SideMove_Z_P1_speed);
                    SideMoveInfo.log("升降轴到P1");
                    break;
                case MoveStep.SideMove_13:
                    SideMoveInfo.NextMoveStep(MoveStep.SideMove_14);
                    SideMove_X_Axis.AbsMove(SideMoveInfo, Config.SideMove_X_P1, Config.SideMove_X_P1_speed);
                    SideMoveInfo.log("横移到待机点P1");
                    break;
                case MoveStep.SideMove_14:
                    SideMoveInfo.NextMoveStep(MoveStep.Wait);
                    break;
                default:
                    break;
            }


        }

    }
}