MainMachine_Store.cs 12.4 KB
using CodeLibrary;
using OnlineStore;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DeviceLibrary
{
    partial class MainMachine
    {
        StoreJobList OutStoreJobList = new StoreJobList($"批量");
        StoreJobList OutSingleJobList = new StoreJobList($"单盘");

        public void AddOutStoreTask(string posId,int plateW,int plateH) {
            JobInfo jobInfo = new JobInfo("", posId,plateW,plateH);
            OutStoreJobList.Enqueue(jobInfo);
            LogUtil.info($"添加出库任务队列: {posId},当前任务数量: {OutStoreJobList.Count}");
        }
        public void AddSingleStoreTask(string posId, int plateW, int plateH)
        {
            JobInfo jobInfo = new JobInfo("", posId, plateW, plateH);
            OutSingleJobList.Enqueue(jobInfo);
            LogUtil.info($"添加单盘出库任务队列: {posId},当前任务数量: {OutStoreJobList.Count}");
        }
        void StoreProcess()
        {
            if (CheckWait(StoreMoveInfo))
                return;
            //常规上料扫码流程
            switch (StoreMoveInfo.MoveStep)
            {
                case MoveStep.Wait:
                    //IOValue(IO_Type.TrayCheck_Fixture).Equals(IO_VALUE.HIGH)
                    //if (StoreMoveInfo.IsTimeOut(5) && IOMonitor.IODebound(IO_Type.TrayCheck_Fixture,Config,IO_VALUE.HIGH,5000)  && boxTransport.IsComplateOrFree && ClampMoveInfo.MoveStep == MoveStep.Wait) {
                    //    StoreMoveInfo.NewMove(MoveStep.StoreOut_NGPre);
                    //    StoreMoveInfo.MoveParam.PosID = "NG";
                    //    StoreMoveInfo.MoveParam.PlateH = 56;
                    //    StoreMoveInfo.MoveParam.PlateW = 7;
                    //    StoreMoveInfo.MoveParam.IsNg = true;
                    //    StoreMoveInfo.MoveParam.NgMsg = crc.GetString(L.tray_detect_reel_01, "料叉传感器X30感应到有料,请人工确认");
                    //    StoreMoveInfo.log($"开始无信息料盘出库");
                    //    ServerCM.storeStatus = StoreStatus.OutStoreExecute;
                    //    CloseFlipDoor(StoreMoveInfo);
                    //}
                    //判断有没有料盘等待入库
                    if (IsWaitInStore)
                    {
                        StoreMoveInfo.NextMoveStep(MoveStep.StoreIn01);
                        StoreMoveInfo.MoveParam = ClampMoveInfo.MoveParam.clone();
                        StoreMoveInfo.log($"入库料盘已准备好");
                    }
                    //判断有没有单盘出库任务, 需要入库空闲, 出口空闲
                    else if (OutSingleJobList.Count > 0 && boxTransport.IsComplateOrFree && ClampMoveInfo.MoveStep == MoveStep.Wait)
                    {
                        if (!boxTransport.IgnoreX09 && IOValue(IO_Type.TrayCheck_Fixture).Equals(IO_VALUE.HIGH))
                        {

                            if (!boxTransport.IgnoreX09 && IOMonitor.IODebound(IO_Type.TrayCheck_Fixture, Config, IO_VALUE.HIGH, 1000))
                            {
                                Msg.add(crc.GetString("Res0004","收到出库任务,但料叉上有料,无法启动,请检查"), MsgLevel.alarm, ErrInfo.X09_BoxNotDetect);
                                //RobotManage.UserPause("收到出库任务,但料叉上有料,无法启动,请检查");
                            }
                            else
                                Msg.add(crc.GetString("Res0004","收到出库任务,但料叉上有料,无法启动,请检查"), MsgLevel.warning);
                            return;
                        }
                        else
                            boxTransport.IgnoreX09 = false;

                        if (OutSingleJobList.Dequeue(out JobInfo jobInfo))
                        {
                            StoreMoveInfo.NewMove(MoveStep.StoreOut10);
                            StoreMoveInfo.MoveParam.PosID = jobInfo.PosId;
                            StoreMoveInfo.MoveParam.PlateH = jobInfo.plateH;
                            StoreMoveInfo.MoveParam.PlateW = jobInfo.plateW;
                            StoreMoveInfo.MoveParam.IsNg = true;
                            StoreMoveInfo.MoveParam.NgMsg = crc.GetString(L.ngdoor_reel_out, "单盘出库");
                            StoreMoveInfo.log($"开始单盘出库任务:" + jobInfo.ToStr());
                            ServerCM.storeStatus = StoreStatus.OutStoreExecute;
                            CloseFlipDoor(StoreMoveInfo);
                        }
                    }
                    //判断有没有出库任务, 需要入库空闲, 出口空闲
                    else if (OutStoreJobList.Count>0 && boxTransport.IsComplateOrFree)
                    {
                        if (!boxTransport.IgnoreX09 && IOValue(IO_Type.TrayCheck_Fixture).Equals(IO_VALUE.HIGH))
                        {

                            if (!boxTransport.IgnoreX09 && IOMonitor.IODebound(IO_Type.TrayCheck_Fixture, Config, IO_VALUE.HIGH, 1000))
                            {
                                Msg.add(crc.GetString("Res0004","收到出库任务,但料叉上有料,无法启动,请检查"), MsgLevel.alarm, ErrInfo.X09_BoxNotDetect);
                                //RobotManage.UserPause("收到出库任务,但料叉上有料,无法启动,请检查");
                            }
                            else
                                Msg.add(crc.GetString("Res0004","收到出库任务,但料叉上有料,无法启动,请检查"), MsgLevel.warning);
                            return;
                        }
                        else
                            boxTransport.IgnoreX09 = false;
                        TurnToOut();
                        if (IsPutReelReady && OutStoreJobList.Dequeue(out JobInfo jobInfo))
                        {
                            StoreMoveInfo.NewMove(MoveStep.StoreOut10);
                            StoreMoveInfo.MoveParam.PosID = jobInfo.PosId;
                            StoreMoveInfo.MoveParam.PlateH = jobInfo.plateH;
                            StoreMoveInfo.MoveParam.PlateW = jobInfo.plateW;
                            StoreMoveInfo.log($"开始出库任务:"+ jobInfo.ToStr());
                            ServerCM.storeStatus = StoreStatus.OutStoreExecute;
                        }
                    }
                    break;
                case MoveStep.StoreIn01:
                    if (!ServerCM.SendStoreState(StoreMoveInfo.MoveParam.PosID, StoreStatus.InStoreExecute))
                    {
                        Msg.add(crc.GetString("Res0008","服务器连接异常"),MsgLevel.warning);
                        return;
                    }
                    StoreMoveInfo.NextMoveStep(MoveStep.StoreIn03);
                        var ac = CSVPositionReader<ACStorePosition>.GetPositon(StoreMoveInfo.MoveParam.PosID);
                        boxTransport.Start(new BoxStorePosition(Config, StoreSide.NGDoor, StoreMoveInfo.MoveParam), new BoxStorePosition(Config, ac, StoreMoveInfo.MoveParam), StoreMoveType.InStore, true);
                        StoreMoveInfo.log($"开始转运料盘");
                    break;
                case MoveStep.StoreIn02:
                    break;
                case MoveStep.StoreIn03:
                    if (boxTransport.IsTakedReel)
                    {
                        ReelTaked();
                        StoreMoveInfo.NextMoveStep(MoveStep.StoreIn04);
                        StoreMoveInfo.log($"料盘已取走");
                    }
                    else
                    {
                        Msg.add(crc.GetString(L.wait_reel_transfer, "单料口等待料盘离开."), MsgLevel.info);
                    }
                    break;
                case MoveStep.StoreIn04:
                    if (boxTransport.IsComplateOrFree)
                    {
                        if (!ServerCM.SendStoreState(StoreMoveInfo.MoveParam.PosID, StoreStatus.InStoreEnd))
                        {
                            Msg.add(crc.GetString("Res0008","服务器连接异常"), MsgLevel.warning);
                            return;
                        }
                        StoreMoveInfo.log($"料盘已到达目的地");
                            StoreMoveInfo.EndMove();
                        
                    }
                    break;
                case MoveStep.StoreOut_NGPre:
                    StoreMoveInfo.NextMoveStep(MoveStep.StoreOut10);
                    break;
                case MoveStep.StoreOut10:
                    if (!ServerCM.SendStoreState(StoreMoveInfo.MoveParam.PosID, StoreStatus.OutStoreExecute))
                    {
                        Msg.add(crc.GetString("Res0008","服务器连接异常"), MsgLevel.warning);
                        return;
                    }
                    StoreMoveInfo.NextMoveStep(MoveStep.StoreOut11);
                        var outFrom = CSVPositionReader<ACStorePosition>.GetPositon(StoreMoveInfo.MoveParam.PosID);
                        BoxStorePosition outTo;
                        if (StoreMoveInfo.MoveParam.IsNg)
                            outTo = new BoxStorePosition(Config, StoreSide.NGDoor, StoreMoveInfo.MoveParam);
                        else
                            outTo = new BoxStorePosition(Config, StoreSide.String, StoreMoveInfo.MoveParam);
                        boxTransport.Start(outFrom == null ? null : new BoxStorePosition(Config, outFrom, StoreMoveInfo.MoveParam), outTo, StoreMoveType.OutStore);
                        StoreMoveInfo.log($"开始转运料盘{(StoreMoveInfo.MoveParam.IsNg ? "单料口" : "料串")}");

                    break;
                case MoveStep.StoreOut11:
                    if (boxTransport.IsTakedReel)
                    {
                        if (!ServerCM.SendStoreState(StoreMoveInfo.MoveParam.PosID, StoreStatus.OutStoreBoxEnd))
                        {
                            Msg.add(crc.GetString("Res0008","服务器连接异常"), MsgLevel.warning);
                            return;
                        }
                        StoreMoveInfo.NextMoveStep(MoveStep.StoreOut12);
                        StoreMoveInfo.log($"料盘已取走");
                    }
                    else
                    {
                        Msg.add(crc.GetString(L.wait_reel_transfer, "等待料盘到达."), MsgLevel.info);
                    }
                    break;
                case MoveStep.StoreOut12:
                    if (boxTransport.IsPutOnOut)
                    {
                        if (!ServerCM.SendStoreState(StoreMoveInfo.MoveParam.PosID, StoreStatus.OutStoreEnd))
                        {
                            Msg.add(crc.GetString("Res0008","服务器连接异常"), MsgLevel.warning);
                            return;
                        }
                        StoreMoveInfo.log($"料盘已到达目的地");                        
                        if (StoreMoveInfo.MoveParam.IsNg)
                        {
                            
                            NGPuted(StoreMoveInfo.MoveParam.NgMsg);
                            OutSingleJobList.ClearLastPosid(StoreMoveInfo.MoveParam.PosID);
                        }
                        else
                        {
                            ReelPutted(StoreMoveInfo.MoveParam.PlateH);
                            OutStoreJobList.ClearLastPosid(StoreMoveInfo.MoveParam.PosID);
                        }
                        
                        StoreMoveInfo.EndMove();
                    }
                    break;
                default:
                    StoreMoveInfo.log($"未找到对应步骤:{StoreMoveInfo.MoveStep}");
                    break;
            }
        }
        string StoreState() {
            string state = crc.GetString(L.free,"空闲中");
            if (StoreMoveInfo.MoveStep >= MoveStep.StoreOut10)
            {
                state = $"{crc.GetString(L.reel_outting, "出库中")},{crc.GetString(L.posnum, "出库中")}:{StoreMoveInfo.MoveParam.PosID}";
            }
            else if (StoreMoveInfo.MoveStep >= MoveStep.StoreIn01)
            {
                state = $"{crc.GetString(L.reel_ining, "入库中")},{crc.GetString(L.posnum, "出库中")}:{StoreMoveInfo.MoveParam.PosID}";
            }

            return state;
        }
    }
}