PackageLine_PkgStation.cs 7.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
    {
       public  StepInfo<PKG_STATION_STEP> pkgStationStep = new StepInfo<PKG_STATION_STEP>(PKG_STATION_STEP.NONE);
        /// <summary>
        /// 包装料架工位
        /// </summary>
        public enum PKG_STATION_STEP
        {
            NONE,
            /// <summary>
            /// 等待料架
            /// </summary>
            WAIT_SHELF,
            /// <summary>
            ///  等待料架进入工位
            /// </summary>
            WAIT_SHELF_TO_STATION,
            /// <summary>
            /// 等待读取RFID
            /// </summary>
            READ_RFID,
            /// <summary>
            /// 等待顶升上升
            /// </summary>
            WAIT_STATION_UP,
            /// <summary>
            /// 等待机器人抓取
            /// </summary>
            WAIT_ROBOT,
            /// <summary>
            /// 料架已空
            /// </summary>
            SHELF_EMPTY,
            /// <summary>
            /// 等待顶升下降
            /// </summary>
            WAIT_STATION_DOWN,
            /// <summary>
            /// 去空料架位置(线体右侧)
            /// </summary>
            TO_EMPTY_STATION,
        }

        /// <summary>
        /// 包装线工位
        /// </summary>
        private void ProcessPkgStation()
        {
            if (pkgStationStep.IsStep(PKG_STATION_STEP.NONE))
            {
                bool hasPkgShelf = IOValue(IO_Type.Pkg_Station_Check).Equals(IO_VALUE.HIGH);
                if (hasPkgShelf)
                {
                    pkgStationStep.Msg = "包装线已有料架,等待读取RFID";
                    pkgStationStep.ToNextStep(PKG_STATION_STEP.READ_RFID);
                }
                else
                {
                    pkgStationStep.Msg = "包装线无料架,等待料架进入";
                    pkgStationStep.ToNextStep(PKG_STATION_STEP.WAIT_SHELF);
                }
            }
            else if (pkgStationStep.IsStep(PKG_STATION_STEP.WAIT_SHELF))
            {
                bool hasWaitShelf = IOValue(IO_Type.Pkg_Stop_Check2).Equals(IO_VALUE.HIGH);
                //有等待的料架
                if (hasWaitShelf)
                {
                    pkgStationStep.Msg = "包装线等待位发现料架, 将其送入工位";
                    pkgStationStep.ToNextStep(PKG_STATION_STEP.WAIT_SHELF_TO_STATION);
                    pkgStationStep.AddIoWait(IO_Type.Pkg_Station_Check, IO_VALUE.HIGH,3000);

                    //IOMove(IO_Type.Pkg_Line1_Forward, IO_VALUE.HIGH);
                    IOMove(IO_Type.Pkg_Line2_Forward, IO_VALUE.HIGH);

                    IOMove(IO_Type.Pkg_Stop2_Down, IO_VALUE.HIGH, 2000);
                }
            }
            else if (pkgStationStep.IsStep(PKG_STATION_STEP.WAIT_SHELF_TO_STATION))
            {
                if (pkgStationStep.IsFinished())
                {
                    pkgStationStep.Msg = "包装线料架到达工位,停止线体1和2,等待读取RFID";
                    pkgStationStep.ToNextStep(PKG_STATION_STEP.READ_RFID);
                    IOMove(IO_Type.Pkg_Line2_Forward, IO_VALUE.LOW);
                }
                else
                {
                    bool line2Stop = IOValue(IO_Type.Pkg_Line2_Forward).Equals(IO_VALUE.LOW);
                    if (line2Stop)
                    {
                        LogUtil.info("包装线线体2已停止,但料架还未到达工位,重新启动");
                        IOMove(IO_Type.Pkg_Line2_Forward, IO_VALUE.HIGH);
                    }
                }

            }
            else if (pkgStationStep.IsStep(PKG_STATION_STEP.READ_RFID))
            {
                if (pkgStationStep.IsTimeOut(1000))
                {
                    //1秒读取1次
                    PkgShelfRFID = "";
                    string rfid = RFIDManager.ReadRFID(Config.Pkg_Rfid, true).NumStr();
                    if (rfid.Contains("A"))
                    {
                        pkgStationStep.Msg = "包装线读取到RFID[" + rfid + "], 工位顶升";
                        pkgStationStep.ToNextStep(PKG_STATION_STEP.WAIT_STATION_UP);
                        pkgStationStep.AddIoWait(IO_Type.Pkg_Station_Down, IO_VALUE.LOW);
                        pkgStationStep.AddIoWait(IO_Type.Pkg_Station_Up, IO_VALUE.HIGH);
                        PkgShelfRFID = rfid;
                        //包装线体工位上升
                        CylinderMove(null, IO_Type.Pkg_Station_SOL_Down, IO_Type.Pkg_Station_SOL_UP);
                    }
                    else
                    {
                        pkgStationStep.Msg = "包装线读取到的RFID数据[" + rfid + "]错误";
                        pkgStationStep.ToNextStep(PKG_STATION_STEP.READ_RFID);
                    }
                }
                    
            }
            else if (pkgStationStep.IsStep(PKG_STATION_STEP.WAIT_STATION_UP))
            {
                if (pkgStationStep.IsFinished())
                {
                    pkgStationStep.Msg = "包装线工位顶升到位,等待机器人抓取[" + PkgShelfRFID + "]";
                    pkgStationStep.ToNextStep(PKG_STATION_STEP.WAIT_ROBOT);
                }
            }else if (pkgStationStep.IsStep(PKG_STATION_STEP.SHELF_EMPTY))
            {
                pkgStationStep.Msg = "包装线工位料架[" + PkgShelfRFID + "]已空,下降顶升,准备放行";

                pkgStationStep.ToNextStep(PKG_STATION_STEP.WAIT_STATION_DOWN);
                pkgStationStep.AddIoWait(IO_Type.Pkg_Station_Down, IO_VALUE.HIGH);
                pkgStationStep.AddIoWait(IO_Type.Pkg_Station_Up, IO_VALUE.LOW);
                //包装线体工位下降
                CylinderMove(null, IO_Type.Pkg_Station_SOL_UP, IO_Type.Pkg_Station_SOL_Down);
            }
            else if (pkgStationStep.IsStep(PKG_STATION_STEP.WAIT_STATION_DOWN))
            {
                if (pkgStationStep.IsFinished())
                {
                    pkgStationStep.Msg = "包装线工位料架[" + PkgShelfRFID + "]顶升下降到位,开始放行";
                    pkgStationStep.ToNextStep(PKG_STATION_STEP.TO_EMPTY_STATION);
                    pkgStationStep.AddIoWait(IO_Type.Pkg_Out_Stop_Check, IO_VALUE.HIGH);
                    pkgStationStep.AddIoWait(IO_Type.Pkg_Rotot_Forbidden_Check, IO_VALUE.HIGH);
                    pkgStationStep.AddTimeWait(20000);

                    IOMove(IO_Type.Pkg_Line2_Forward, IO_VALUE.HIGH);
                    IOMove(IO_Type.Pkg_Line3_Forward, IO_VALUE.HIGH);
                    IOMove(IO_Type.Pkg_Station_Stop_Down, IO_VALUE.HIGH, 3000);
                    IOMove(IO_Type.Pkg_Stop2_Down, IO_VALUE.HIGH, 3000);
                }
            }else if (pkgStationStep.IsStep(PKG_STATION_STEP.TO_EMPTY_STATION))
            {
                if (pkgStationStep.IsFinished())
                {
                    pkgStationStep.Msg = "包装线工位料架[" + PkgShelfRFID + "放行完成";
                    PkgShelfRFID = "";
                    //IOMove(IO_Type.Pkg_Line2_Forward, IO_VALUE.LOW);
                    //IOMove(IO_Type.Pkg_Line3_Forward, IO_VALUE.LOW);
                    pkgStationStep.ToNextStep(PKG_STATION_STEP.NONE);

                    agvA4Step.ToNextStep(AGV_LEAVE_A4_STEP.WAIT_TO_EXIT);
                }
            }

        }

    }
}