MainMachine _IOMonitor.cs 7.0 KB
using OnlineStore;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;

namespace DeviceLibrary
{
    partial class MainMachine
    {
        public bool RightShelfEmpty = false;
        public bool LeftShelfFull = false;
        void IOMonitor()
        {
            //agv感应io处理逻辑
            string isskiptest = ConfigHelper.Config.Get("Hardwareversion", "V2");
            //新的AGV信号处理逻辑
            string newagvdispose = ConfigHelper.Config.Get("HardwareversionofAGV", "V2");
            if (isskiptest == "V2")
            {
                if ((RightMoveInfo.IsStep(MoveStep.Wait) || RightMoveInfo.IsStep(MoveStep.REND)))
                {
                    // && IOValue(IO_Type.FeedAGV_Feed).Equals(IO_VALUE.LOW) && IOValue(IO_Type.FeedAGV_Feed).Equals(IO_VALUE.LOW)
                    //无料且无agv送料请求转到进料步骤
                    if (IOValue(IO_Type.RightEnd_Check).Equals(IO_VALUE.LOW) && IOValue(IO_Type.FeedAGV_Feed).Equals(IO_VALUE.LOW))
                    {
                        //Msg.add("入料口有料串,请将料串先取出!", MsgLevel.warning);
                        RightMoveInfo.NewMove(MoveStep.R40_InShelf);
                    }
                    //有料无AGV进料请求转到出料步骤
                    else if(IOValue(IO_Type.RightEnd_Check).Equals(IO_VALUE.HIGH)
                        && IOValue(IO_Type.FeedAGV_Receiving).Equals(IO_VALUE.LOW)
                        && BtnEnableCheck())
                    {
                        RightMoveInfo.NewMove(MoveStep.R30_OutShelf);
                        LogUtil.info("IOMonitor:进料串感应到有料");
                    }
                }

                if ((LeftMoveInfo.IsStep(MoveStep.Wait) || LeftMoveInfo.IsStep(MoveStep.LEND)))
                {
                    //&& && IOValue(IO_Type.DischargeAGV_Receiving).Equals(IO_VALUE.LOW)
                    //无料且无agv收料请求转到进料步骤
                    if (IOValue(IO_Type.LeftEnd_Check).Equals(IO_VALUE.LOW)&& IOValue(IO_Type.DischargeAGV_Feeding).Equals(IO_VALUE.LOW))
                    {
                       
                        LeftMoveInfo.NewMove(MoveStep.L60_InShelf);
                    }
                    //有料无AGV收料请求转到出料步骤
                    else if (IOValue(IO_Type.LeftEnd_Check).Equals(IO_VALUE.HIGH) && IOValue(IO_Type.DischargeAGV_Receiving).Equals(IO_VALUE.LOW))
                    {
                        LeftMoveInfo.NewMove(MoveStep.L50_OutShelf);
                    }
                }
            }
            if (newagvdispose == "V2")
            {
                if ((RightMoveInfo.IsStep(MoveStep.Wait) || RightMoveInfo.IsStep(MoveStep.REND)))
                {
                    //按下确认按钮有料串出没有进
                    if (IOValue(IO_Type.RightEnd_Check).Equals(IO_VALUE.LOW)
                        && IOValue(IO_Type.RightCar_Check).Equals(IO_VALUE.HIGH)
                        && (IOValue(IO_Type.Right_BTN).Equals(IO_VALUE.HIGH) || IOValue(IO_Type.DischargeAGV_Feeding).Equals(IO_VALUE.HIGH)))
                    {
                        RightMoveInfo.NewMove(MoveStep.R40_InShelf);
                    }
                    else if (IOValue(IO_Type.RightEnd_Check).Equals(IO_VALUE.HIGH)
                        && IOValue(IO_Type.RightCar_Check).Equals(IO_VALUE.HIGH)
                        && BtnEnableCheck()
                        && (IOValue(IO_Type.Right_BTN).Equals(IO_VALUE.HIGH) || IOValue(IO_Type.FeedAGV_Receiving).Equals(IO_VALUE.HIGH)))
                    {
                        RightMoveInfo.NewMove(MoveStep.R30_OutShelf);
                    }
                }
                if ((LeftMoveInfo.IsStep(MoveStep.Wait) || LeftMoveInfo.IsStep(MoveStep.LEND)))
                {
                    if (IOValue(IO_Type.LeftEnd_Check).Equals(IO_VALUE.LOW) 
                        && IOValue(IO_Type.LeftCar_Check).Equals(IO_VALUE.HIGH)
                        && (IOValue(IO_Type.DischargeAGV_Feeding).Equals(IO_VALUE.HIGH) || IOValue(IO_Type.Left_BTN).Equals(IO_VALUE.HIGH)))
                    {

                        LeftMoveInfo.NewMove(MoveStep.L60_InShelf);
                    }
                    else if (IOValue(IO_Type.LeftEnd_Check).Equals(IO_VALUE.HIGH)
                        && IOValue(IO_Type.LeftCar_Check).Equals(IO_VALUE.HIGH)
                        && (IOValue(IO_Type.DischargeAGV_Receiving).Equals(IO_VALUE.HIGH) || IOValue(IO_Type.Left_BTN).Equals(IO_VALUE.HIGH)))
                    {
                        LeftMoveInfo.NewMove(MoveStep.L50_OutShelf);
                    }
                }
            }
            //等待步骤且进料前端有料后端无料进入进料步骤
            if (RightMoveInfo.IsStep(MoveStep.Wait)
                && IOValue(IO_Type.RightFornt_Check).Equals(IO_VALUE.HIGH)
                && IOValue(IO_Type.RightEnd_Check).Equals(IO_VALUE.LOW))
            {
                RightMoveInfo.NewMove(MoveStep.R40_InShelf);
                LogUtil.info("IOMonitor:右侧检测到入料信号");
            }
            //等待步骤且料串到位且并非料盘取完的步骤转到上料步骤
            if (RightMoveInfo.IsStep(MoveStep.Wait)
                && IOValue(IO_Type.RightEnd_Check).Equals(IO_VALUE.HIGH)
                && !RightShelfNoTray)
            {
                RightMoveInfo.NewMove(MoveStep.R01);
                LogUtil.info("IOMonitor:右侧有新料,准备上料");
            }

            //等待步骤且前端有料后端无料进入进料步骤
            if (LeftMoveInfo.IsStep(MoveStep.Wait)
                && IOValue(IO_Type.LeftFornt_Check).Equals(IO_VALUE.HIGH)
                && IOValue(IO_Type.LeftEnd_Check).Equals(IO_VALUE.LOW))
            {
                LeftMoveInfo.NewMove(MoveStep.L60_InShelf);
                LogUtil.info("IOMonitor:左侧检测到入料信号");
            }
            if (LeftMoveInfo.IsStep(MoveStep.Wait)
                && IOValue(IO_Type.LeftEnd_Check).Equals(IO_VALUE.HIGH)
                 && !LeftShelfNoTray)
            {
                LeftMoveInfo.NewMove(MoveStep.L01);
                LogUtil.info("IOMonitor:左侧有新料,准备上料");
            }

            //右侧料串已空
            if (RightMoveInfo.IsStep(MoveStep.Wait) && IOValue(IO_Type.RightEnd_Check).Equals(IO_VALUE.HIGH) && RightShelfNoTray)
            {
                RightShelfEmpty = true;
                Msg.add(crc.GetString("Res0093","右侧料串已空,等待取走料串"), MsgLevel.warning);
            }
            else
            {
                RightShelfEmpty = false;
            }
            //左侧料串已满
            if (LeftMoveInfo.IsStep(MoveStep.Wait) && IOValue(IO_Type.LeftEnd_Check).Equals(IO_VALUE.HIGH) && LeftShelfNoTray)
            {
                LeftShelfFull = true;
                Msg.add(crc.GetString("Res0094", "左侧料串已满,等待取走料串"), MsgLevel.warning);
            }
            else
            {
                LeftShelfFull = false;
            }
        }
    }
}