AgvProcess.cs 10.5 KB

using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OnlineStore.DeviceLibrary
{
    partial class PackageLine
    {
        /// <summary>
        /// AGV进入A3点
        /// </summary>
        public enum AGV_ENTER_A3_STEP
        {
            NONE,
            /// <summary>
            /// 开始进入
            /// </summary>
            START_ENTER,
            /// <summary>
            /// 等待进入
            /// </summary>
            WAIT_ENTER_FINISH,
            /// <summary>
            /// 进入完成
            /// </summary>
            FINISH_ENTER
        }

        /// <summary>
        /// AGV离开A4
        /// </summary>
        public enum AGV_LEAVE_A4_STEP
        {
            NONE,
            /// <summary>
            /// 等待料架到达出料口
            /// </summary>
            WAIT_TO_EXIT,
            /// <summary>
            /// 开始送出
            /// </summary>
            START_LEAVE,
            /// <summary>
            /// 等待送出完成
            /// </summary>
            WAIT_LEAVE_FINISH,
            /// <summary>
            /// 送出完成
            /// </summary>
            FINISH_LEAVE
        }

       // public StepInfo<AGV_ENTER_A3_STEP> agvA3Step = new StepInfo<AGV_ENTER_A3_STEP>(AGV_ENTER_A3_STEP.NONE);
        //public StepInfo<AGV_LEAVE_A4_STEP> agvA4Step = new StepInfo<AGV_LEAVE_A4_STEP>(AGV_LEAVE_A4_STEP.NONE);
        /// <summary>
        /// A4料架情况
        /// </summary>
        public bool A4_Shelf_Exist = true;
        /// <summary>
        /// AGV进入处理
        /// </summary>
        //private void ProcessA3Agv()
        //{
        //    if (agvA3Step.IsStep(AGV_ENTER_A3_STEP.NONE))
        //    {
        //        //检测左侧入口IO,是否可继续进入料架
        //        if (IOValue(IO_Type.Pkg_Stop_Check1).Equals(IO_VALUE.LOW))
        //        {
        //            agvA3Step.Msg = "料架未满,可以进入";
        //            agvClient.SetStatus("A3", "", "", Asa.ClientAction.NeedEnter);
        //        }
        //        else
        //        {
        //            //已经满了
        //            agvA3Step.Msg = "料架已满,不允许进入";
        //            agvA3Step.ToNextStep(AGV_ENTER_A3_STEP.NONE);
        //            agvClient.SetStatus("A3", "", "", Asa.ClientAction.None);
        //        }
        //    }
        //    else if (agvA3Step.IsStep(AGV_ENTER_A3_STEP.START_ENTER))
        //    {
        //        if (IOValue(IO_Type.Pkg_Stop_Check1).Equals(IO_VALUE.LOW))
        //        {
        //            agvA3Step.Msg = "收到 Agv 到达包装线A3点, 线体未满,开启链条1和2 ";
        //            IOMove(IO_Type.Pkg_Line1_Forward, IO_VALUE.HIGH);
        //            IOMove(IO_Type.Pkg_Line2_Forward, IO_VALUE.HIGH);
        //            agvA3Step.ToNextStep(AGV_ENTER_A3_STEP.WAIT_ENTER_FINISH);
        //        }
        //    }
        //    else if (agvA3Step.IsStep(AGV_ENTER_A3_STEP.WAIT_ENTER_FINISH))
        //    {
        //        bool enterFinished = IOValue(IO_Type.Pkg_In_Check).Equals(IO_VALUE.HIGH);
        //        if (enterFinished)
        //        {
        //            agvA3Step.Msg = "Agv 料架进入包装线A3点完成, 3秒后允许继续进入 ";
        //            agvClient.SetStatus("A3", "", "", Asa.ClientAction.FinishEnter);
        //            agvA3Step.ToNextStep(AGV_ENTER_A3_STEP.FINISH_ENTER);
        //            agvA3Step.AddTimeWait(3000);
        //        }
        //        else
        //        {
        //            bool timeOut = agvA3Step.IsTimeOut(20000);
        //            if (timeOut)
        //            {
        //                agvA3Step.Msg = "Agv 料架进入包装线A3点20秒内未检测到入口信号,超时结束 ";
        //                agvClient.SetStatus("A3", "", "", Asa.ClientAction.FinishEnter);
        //                agvA3Step.ToNextStep(AGV_ENTER_A3_STEP.FINISH_ENTER);
        //                agvA3Step.AddTimeWait(3000);
        //            }

        //        }
        //    }
        //    else if (agvA3Step.IsStep(AGV_ENTER_A3_STEP.FINISH_ENTER))
        //    {
        //        if (agvA3Step.IsFinished())
        //        {
        //            agvA3Step.ToNextStep(AGV_ENTER_A3_STEP.NONE);
        //        }
        //    }
        //}

        /// <summary>
        /// AGV送出处理
        /// </summary>
        //private void ProcessA4Agv()
        //{
        //    if (agvA4Step.IsStep(AGV_LEAVE_A4_STEP.NONE))
        //    {
        //        //检测右侧IO,是否有料架要出/入(需要保留2个料架)
        //        bool hasEmptyShelf = IOValue(IO_Type.Pkg_Out_Stop_Check).Equals(IO_VALUE.HIGH);
        //        bool has3EmptyShelf = IOValue(IO_Type.Pkg_Empty_Shelf_Check).Equals(IO_VALUE.HIGH);
        //        bool hasMoreThan3Shelf = IOValue(IO_Type.Pkg_Rotot_Forbidden_Check).Equals(IO_VALUE.HIGH);
        //        if (hasEmptyShelf)
        //        {
        //            A4_Shelf_Exist = true;
        //            if (has3EmptyShelf && hasMoreThan3Shelf)
        //            {
        //                //出口已经满了,影响机器人工作了,优先级变高
        //                agvA4Step.Msg = "包装线出口料架大于等于3个,必须尽快拉走一个";
        //                agvClient.SetStatus("A4", "", "00", Asa.ClientAction.NeedLeave, Asa.ClientLevel.High);
        //            }else if (has3EmptyShelf)
        //            {
        //                agvA4Step.Msg = "包装线出口料架大于2个,需要拉走一个";
        //                agvClient.SetStatus("A4", "", "00", Asa.ClientAction.NeedLeave, Asa.ClientLevel.Middle);
        //            }
        //            else
        //            {
        //                agvA4Step.Msg = "包装线出口料架小于2个,低优先级";
        //                agvClient.SetStatus("A4", "", "00", Asa.ClientAction.NeedLeave, Asa.ClientLevel.Low);
        //            }
        //        }
        //        else
        //        {
        //            if (has3EmptyShelf || hasMoreThan3Shelf)
        //            {
        //                agvA4Step.Msg = "包装线出口料架信号未检测到,但已有2料架信号,转动链条2, 3";
        //                IOMove(IO_Type.Pkg_Line3_Forward, IO_VALUE.HIGH);
        //                IOMove(IO_Type.Pkg_Line2_Forward, IO_VALUE.HIGH);
        //                agvA4Step.ToNextStep(AGV_LEAVE_A4_STEP.WAIT_TO_EXIT);
        //                agvA4Step.AddIoWait(IO_Type.Pkg_Rotot_Forbidden_Check, IO_VALUE.LOW);
        //                agvA4Step.AddIoWait(IO_Type.Pkg_Out_Stop_Check, IO_VALUE.HIGH);
        //            }
        //            else
        //            {
        //                //已经没料架了
        //                agvA4Step.Msg = "包装线出口无料架,需要尽快补充";
        //                A4_Shelf_Exist = false;
        //                agvClient.SetStatus("A4", "", "00", Asa.ClientAction.None, Asa.ClientLevel.Low);
        //                agvA4Step.ToNextStep(AGV_LEAVE_A4_STEP.NONE);
        //            }
                   
        //        }
        //    }else if (agvA4Step.IsStep(AGV_LEAVE_A4_STEP.WAIT_TO_EXIT))
        //    {
        //        if (agvA4Step.IsFinished())
        //        {
        //            agvA4Step.Msg = "料架已到包装线出口,停止链条3";
        //            agvA4Step.ToNextStep(AGV_LEAVE_A4_STEP.NONE);
        //            IOMove(IO_Type.Pkg_Line3_Forward, IO_VALUE.LOW);
        //            IOMove(IO_Type.Pkg_Line2_Forward, IO_VALUE.LOW);
        //        }
        //        else if (agvA4Step.IsTimeOut(20000))
        //        {
        //            agvA4Step.Msg = "料架到包装线出口超时,停止链条3";
        //            agvA4Step.ToNextStep(AGV_LEAVE_A4_STEP.NONE);
        //            IOMove(IO_Type.Pkg_Line3_Forward, IO_VALUE.LOW);
        //            IOMove(IO_Type.Pkg_Line2_Forward, IO_VALUE.LOW);
        //        }
        //        else
        //        {
        //            KeepLineRun(IO_Type.Pkg_Line3_Forward);
        //            KeepLineRun(IO_Type.Pkg_Line2_Forward);
        //        }

        //    }
        //    else if (agvA4Step.IsStep(AGV_LEAVE_A4_STEP.START_LEAVE))
        //    {
        //        agvA4Step.Msg = "收到 Agv 到达包装线A4点, 开启链条,准备送出料架 ";
        //        IOMove(IO_Type.Pkg_Line3_Forward, IO_VALUE.HIGH);
        //        IOMove(IO_Type.Pkg_Out_Stop_Down, IO_VALUE.HIGH, 2000);
        //        agvA4Step.ToNextStep(AGV_LEAVE_A4_STEP.WAIT_LEAVE_FINISH);
        //        agvA4Step.AddTimeWait(30000);
        //    }
        //    else if (agvA4Step.IsStep(AGV_LEAVE_A4_STEP.WAIT_LEAVE_FINISH))
        //    {
        //        if (agvA4Step.IsFinished())
        //        {
        //            agvA4Step.Msg = "Agv 料架离开包装线A4点超时完成, 停止链条 ";
        //            agvA4Step.ToNextStep(AGV_LEAVE_A4_STEP.FINISH_LEAVE);
        //            agvA4Step.AddTimeWait(5000);

        //        }
        //    }
        //    else if (agvA4Step.IsStep(AGV_LEAVE_A4_STEP.FINISH_LEAVE))
        //    {
        //        if (agvA4Step.IsFinished())
        //        {
        //            agvClient.SetStatus("A4", "", "00", Asa.ClientAction.FinishLeave);
        //            IOMove(IO_Type.Pkg_Line3_Forward, IO_VALUE.LOW);
        //            agvA4Step.ToNextStep(AGV_LEAVE_A4_STEP.NONE);
        //        }
        //    }
        //}

        //private void AgvClient_Ready(string name, string content)
        //{
        //    LogUtil.info("收到 AgvClient_Ready [" + name + "] ");
        //    if (name.Equals("A3"))
        //    {
        //        agvA3Step.ToNextStep(AGV_ENTER_A3_STEP.START_ENTER);
        //    }else if (name.Equals("A4"))
        //    {
        //        agvA4Step.ToNextStep(AGV_LEAVE_A4_STEP.START_LEAVE);
        //    }
        //}

        //private void AgvClient_CloseDoor(string name, string rfid)
        //{
        //    if (name.Equals("A4"))
        //    {
        //        agvA4Step.Msg = "Agv 料架离开包装线A4点,收到AGV反馈完成, 停止链条 ";
        //        agvA4Step.ToNextStep(AGV_LEAVE_A4_STEP.FINISH_LEAVE);
        //    }
        //}

        //private void AgvClient_Log(string s)
        //{
        //    LogUtil.debug("AGV: " + s);
        //}

    }
}