MainMachine _Store.cs 5.8 KB
using CodeLibrary;
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
    {
        public void AddOutStoreTask(string posId) {
            JobInfo jobInfo = new JobInfo("", posId);
            OutStoreJobList.Enqueue(jobInfo);
            LogUtil.info($"添加出库任务队列: {posId},当前任务数量: {OutStoreJobList.Count}");
        }
        void StoreProcess()
        {
            if (CheckWait(StoreMoveInfo))
                return;
            //常规上料扫码流程
            switch (StoreMoveInfo.MoveStep)
            {
                case MoveStep.Wait:
                    //判断入库线体有没有等待入库
                    if (InMoveInfo.MoveStep == MoveStep.InWaitBoxLeave)
                    {
                        StoreMoveInfo.NextMoveStep(MoveStep.StoreIn01);
                        StoreMoveInfo.MoveParam = InMoveInfo.MoveParam.clone();
                        StoreMoveInfo.log($"入库周转箱已准备好");
                    }
                    //判断有没有出库任务, 需要入库空闲, 出口空闲
                    else if (InMoveInfo.MoveStep==MoveStep.Wait && OutMoveInfo.MoveStep==MoveStep.Wait && IsOutLiftEmpty && boxTransport.IsComplateOrFree) {
                        if (OutStoreJobList.Dequeue(out JobInfo jobInfo))
                        {
                            StoreMoveInfo.NewMove(MoveStep.StoreOut10);
                            StoreMoveInfo.MoveParam.PosID = jobInfo.PosId;
                            StoreMoveInfo.log($"开始出库任务");
                            ServerCM.storeStatus = StoreStatus.OutStoreExecute;
                        }
                    }
                    break;
                case MoveStep.StoreIn01:
                    StoreMoveInfo.NextMoveStep(MoveStep.StoreIn02);
                    var ac = CSVPositionReader<ACStorePosition>.GetPositon(StoreMoveInfo.MoveParam.PosID);
                    boxTransport.Start(new BoxStorePosition(Config,StoreSide.A), new BoxStorePosition(ac),StoreMoveType.InStore);
                    StoreMoveInfo.log($"开始转运周转箱");
                    ServerCM.SendStoreState(StoreMoveInfo.MoveParam.PosID, StoreStatus.InStoreExecute);
                    break;
                case MoveStep.StoreIn02:
                    if (boxTransport.IsTakedBox)
                    {
                        StoreMoveInfo.NextMoveStep(MoveStep.StoreIn03);
                        InMoveInfo.NextMoveStep(MoveStep.InBoxLeaved);
                        StoreMoveInfo.log($"周转箱已取走");
                    }                  
                    else
                    {
                            Msg.add("入料线等待周转箱离开", MsgLevel.info);
                    }
                    //if (string.IsNullOrEmpty(boxTransport.ErrMsgTxt)) {
                    //    Msg.add(boxTransport.ErrMsgTxt, MsgLevel.warning);
                    //}
                    break;
                case MoveStep.StoreIn03:
                    if (boxTransport.IsComplateOrFree)
                    {
                        StoreMoveInfo.log($"周转箱已到达目的地");
                        ServerCM.SendStoreState(StoreMoveInfo.MoveParam.PosID, StoreStatus.InStoreEnd);
                        StoreMoveInfo.EndMove();
                    }
                    break;
                case MoveStep.StoreOut10:
                    StoreMoveInfo.NextMoveStep(MoveStep.StoreOut11);
                    var outac = CSVPositionReader<ACStorePosition>.GetPositon(StoreMoveInfo.MoveParam.PosID);
                    boxTransport.Start(new BoxStorePosition(outac),new BoxStorePosition(Config, StoreSide.B),StoreMoveType.OutStore);
                    StoreMoveInfo.log($"开始转运周转箱");
                    ServerCM.SendStoreState(StoreMoveInfo.MoveParam.PosID, StoreStatus.OutStoreExecute);
                    break;
                case MoveStep.StoreOut11:
                    if (boxTransport.IsTakedBox)
                    {
                        StoreMoveInfo.NextMoveStep(MoveStep.StoreOut12);
                        StoreMoveInfo.log($"周转箱已取走");
                    }
                    else
                    {
                        Msg.add("出料线等待周转箱到达", MsgLevel.info);
                    }
                    //if (string.IsNullOrEmpty(boxTransport.ErrMsgTxt))
                    //{
                    //    Msg.add(boxTransport.ErrMsgTxt, MsgLevel.warning);
                    //}
                    break;
                case MoveStep.StoreOut12:
                    if (boxTransport.IsComplateOrFree)
                    {
                        OutMoveInfo.NextMoveStep(MoveStep.OutBoxPutOn);
                        OutMoveInfo.MoveParam = StoreMoveInfo.MoveParam.clone();
                        StoreMoveInfo.log($"周转箱已到达目的地");
                        ServerCM.SendStoreState(StoreMoveInfo.MoveParam.PosID, StoreStatus.OutStoreBoxEnd);
                        
                        StoreMoveInfo.EndMove();
                    }
                    break;
                default:
                    StoreMoveInfo.log($"未找到对应步骤:{StoreMoveInfo.MoveStep}");
                    break;
            }
        }
        string StoreState() {
            string state = "空闲中";
            if (StoreMoveInfo.MoveStep >= MoveStep.StoreOut10)
            {
                state = $"出库中,库位号:{StoreMoveInfo.MoveParam.PosID}";
            }
            else if (StoreMoveInfo.MoveStep >= MoveStep.StoreIn01)
            {
                state = $"入库中,库位号:{StoreMoveInfo.MoveParam.PosID}";
            }


            return state;
        }
    }
}