MainMachine_PutReel.cs 8.0 KB
using CodeLibrary;
using OnlineStore;
using OnlineStore.Common;
using OnlineStore.DeviceLibrary;
using OnlineStore.LoadCSVLibrary; 

namespace DeviceLibrary
{
    partial class MainMachine
    { 
        private bool canStartMove()
        {
            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, 5000))
                {
                    Msg.add(crc.GetString("Res0152", "收到出库任务,但料叉上有料,无法启动,请检查"), MsgLevel.alarm, ErrInfo.X09_BoxNotDetect);
                    return false;
                }
                else
                {
                    Msg.add(crc.GetString("Res0152", "收到出库任务,但料叉上有料,无法启动,请检查"), MsgLevel.warning);
                    return false;
                }
            }
            return true;
        }

        void StoreProcess()
        {
            if (CheckWait(StoreMoveInfo))
                return;
            //常规上料扫码流程
            switch (StoreMoveInfo.MoveStep)
            {
                case MoveStep.Wait:
                      
                    foreach (InReelBean inReel in inReelBeans)
                    {
                        if (inReel.ReelReady())
                        {
                            TrayInfo tray = inReel.CurrTray;
                            //取料
                            if (tray.ngReel)
                            {
                                //NG门关上再放料
                                if (IOManager.IOValue(IO_Type.Left_NGDoor_Close_Check).Equals(IO_VALUE.HIGH) && IOManager.IOValue(IO_Type.Right_NGDoor_Close_Check).Equals(IO_VALUE.HIGH))
                                {
                                    string ngPos = getNextNgPos();
                                    if (ngPos == "")
                                    {
                                        //暂无NG空位
                                    }
                                    else
                                    {
                                        //送料到NG
                                        StoreMoveInfo.NewMove(MoveStep.PutReel01_Ready);
                                        StoreMoveInfo.MoveParam = new ReelParam(tray.barcode, tray.plateW, tray.plageH, inReel.PosName, ngPos, tray.ngReel, tray.ngMsg);
                                        StoreMoveInfo.log("NG料准备放料:" + StoreMoveInfo.MoveParam.ToStr());
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                //获取料架
                                string pos = GetShelfPosId(tray);
                                if (pos != "")
                                {
                                    //送料到料架
                                    StoreMoveInfo.NewMove(MoveStep.PutReel01_Ready);
                                    StoreMoveInfo.MoveParam = new ReelParam(tray.barcode, tray.plateW, tray.plageH, inReel.PosName, pos, tray.ngReel, tray.ngMsg);
                                    StoreMoveInfo.log("出库料准备放料:" + StoreMoveInfo.MoveParam.ToStr());
                                    break;
                                }
                            }
                        }
                    } 

                    break;
                //            //放料,准备放料
                //            PutReel01_Ready,
                ////放料:开始移库
                //PutReel02_StartM,
                ////放料:等待取料完成
                //PutReel03_GetReelEnd,
                ////放料:等待放料完成
                //PutReel04_PutReelEnd, 
                ////放料:放料全部结束
                //PutReel05_End,
                case MoveStep.PutReel01_Ready:
                    ACStorePosition startP = CSVPositionReader<ACStorePosition>.GetPositon(StoreMoveInfo.MoveParam.StartPos);
                    ACStorePosition targetP = CSVPositionReader<ACStorePosition>.GetPositon(StoreMoveInfo.MoveParam.TargetPos);
                    bool result = boxTransport.Start(new BoxStorePosition(Config, startP, StoreMoveInfo.MoveParam), new BoxStorePosition(Config, targetP, StoreMoveInfo.MoveParam), StoreMoveType.PutReel, true);
                    if (result)
                    {
                        StoreMoveInfo.NewMove(MoveStep.PutReel02_StartM);
                        StoreMoveInfo.log("开始放料:" + StoreMoveInfo.MoveParam.ToStr());
                    }
                    break;
                case MoveStep.PutReel02_StartM:
                    if (boxTransport.IsTakedReel)
                    {
                        StoreMoveInfo.NewMove(MoveStep.PutReel03_GetReelEnd);
                        StoreMoveInfo.log("取料完成:" + StoreMoveInfo.MoveParam.ToStr());

                        //入口状态处理
                        foreach(InReelBean inReelBean in inReelBeans)
                        {
                            if (inReelBean.Name.Equals(StoreMoveInfo.MoveParam.StartPos)){
                                inReelBean.ReelLeave();
                            }
                        }
                    }
                    break;
                case MoveStep.PutReel03_GetReelEnd:
                    if (boxTransport.IsPutOnOut || boxTransport.IsComplateOrFree)
                    {
                        StoreMoveInfo.NewMove(MoveStep.PutReel04_PutReelEnd);
                        StoreMoveInfo.log("放料完成:" + StoreMoveInfo.MoveParam.ToStr());

                        //TODO 通知服务器
                        if (StoreMoveInfo.MoveParam.IsNg)
                        {
                            //更新NG库位缓存状态
                            UpdateNgPos(StoreMoveInfo.MoveParam.TargetPos, StoreMoveInfo.MoveParam);
                        }
                        else
                        {
                            OutShelfBean bean = getOutShelf(StoreMoveInfo.MoveParam.TargetOutShelf);

                            //通知服务器放料完成
                            ShelfTaskInfo taskInfo = HttpServer.ShelfFinish(bean.CurrShelf.realRFID, StoreMoveInfo.MoveParam.WareCode, StoreMoveInfo.MoveParam.TargetLoc);
                            bean.PutReelOk(taskInfo);
                        }
                    }
                    break;
                case MoveStep.PutReel04_PutReelEnd:
                    if (boxTransport.IsComplateOrFree)
                    {
                        StoreMoveInfo.NewMove(MoveStep.PutReel05_End);
                        StoreMoveInfo.log("放料结束:" + StoreMoveInfo.MoveParam.ToStr());
                    }
                    break;
                case MoveStep.PutReel05_End:
                    StoreMoveInfo.EndMove();
                    break;
                default:
                    StoreMoveInfo.log($"未找到对应步骤:{StoreMoveInfo.MoveStep}");
                    break;
            }
        }
        string StoreState()
        {
            string state = crc.GetString("Res0162", "空闲中");
            string moveInfo= StoreMoveInfo.MoveParam.WareCode + ": [" + StoreMoveInfo.MoveParam.StartPos + "]->[" + StoreMoveInfo.MoveParam.TargetPos + "]";
            if (StoreMoveInfo.MoveStep == MoveStep.PutReel01_Ready)
            {
                state = crc.GetString("Res0072", "准备放料") + ":" + moveInfo;
            }
            else if (StoreMoveInfo.MoveStep >= MoveStep.PutReel03_GetReelEnd)
            {
                state = crc.GetString("Res0163", "取料中") + ":" + moveInfo;
            }
            else if (StoreMoveInfo.MoveStep >= MoveStep.PutReel05_End)
            {
                state = crc.GetString("Res0164", "放料中") + ":" + moveInfo;
            }

            return state;
        }
    }
}