MainMachine_StoreDemo.cs 20.5 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.Text.RegularExpressions;
using System.Threading.Tasks;

namespace DeviceLibrary
{
    partial class MainMachine
    {
        public const string LabelP = "LabelP";
        public const string RFIDP = "RFIDP";

        StoreJobList OutStoreJobList = new StoreJobList(crc.GetString("Res0108", "批量"));
        public bool HasJob { get => OutStoreJobList.Count > 0; }
        public void AddOutStoreTask(string warecode, string posId)
        {
            JobInfo jobInfo = new JobInfo(warecode, posId);
            OutStoreJobList.Enqueue(jobInfo);
            LogUtil.info($"添加出库任务队列: {posId},当前任务数量: {OutStoreJobList.Count}");
        }
        public bool IsInStoreReady { get => true; }

        public void DemoIn()
        {
            if (StoreMoveInfo.MoveStep == MoveStep.Wait)
            {
                StoreMoveInfo.NextMoveStep(MoveStep.StoreIn01);
                IOMove(IO_Type.Entry_Drawer_Lock, IO_VALUE.HIGH);
                StoreMoveInfo.log($"开始入库任务");
            }
        }
        bool demomode = true;
        public void DemoOut()
        {
            if (StoreMoveInfo.MoveStep == MoveStep.Wait)
            {
                StoreMoveInfo.NextMoveStep(MoveStep.StoreOut10);
                IOMove(IO_Type.Out_Drawer_Lock, IO_VALUE.HIGH);
                StoreMoveInfo.log($"开始出任务");
            }
        }
        void StoreDemoProcess()
        {
            if (CheckWait(StoreMoveInfo))
                return;
            //常规上料扫码流程
            switch (StoreMoveInfo.MoveStep)
            {
                case MoveStep.Wait:
                    StoreMoveInfo.MoveParam.ReelOnFixture = false;
                    if (demomode && false)
                        return;

                    if (IOValue(IO_Type.Taking_Clamp).Equals(IO_VALUE.LOW)) {
                        if (Setting_Init.Runtime_Step == Runtime_StepE.LabelProcess) {
                            StoreMoveInfo.log("检测到上次正在贴标:" + Setting_Init.Runtime_Step + "," + Setting_Init.Runtime_Posid);
                            LabelingMoveInfo.NextMoveStep(MoveStep.Labeling01);
                            StoreMoveInfo.NextMoveStep(MoveStep.StoreIn03);
                            
                        }else
                        if (Setting_Init.Runtime_Step == Runtime_StepE.LabelPasteFinish)
                        {
                            StoreMoveInfo.log("检测到上次已完成贴标:" + Setting_Init.Runtime_Step + "," + Setting_Init.Runtime_Posid);
                            StoreMoveInfo.NextMoveStep(MoveStep.StoreIn03);
                        }
                        else
                        if (Setting_Init.Runtime_Step >= Runtime_StepE.Printed && Setting_Init.Runtime_Step< Runtime_StepE.LabelPasteFinish)
                        {
                            StoreMoveInfo.log("检测到上次正在贴标:" + Setting_Init.Runtime_Step + "," + Setting_Init.Runtime_Posid);
                            //LabelingMoveInfo.NextMoveStep(MoveStep.Labeling01);
                            //StoreMoveInfo.NextMoveStep(MoveStep.StoreIn03);
                            Msg.add("重置前物料正在贴标,无法继续,请手动处理", MsgLevel.warning, ErrInfo.LabelInPaste);
                            RobotManage.UserPause("重置前物料正在贴标,无法继续,请手动处理");
                        }else
                        if (IOValue(IO_Type.Entry_Drawer_Lock).Equals(IO_VALUE.HIGH) && IOValue(IO_Type.Entry_Drawer).Equals(IO_VALUE.HIGH))
                        {
                            StoreMoveInfo.NextMoveStep(MoveStep.StoreIn01);
                            StoreMoveInfo.log($"检测到入库抽屉已锁定");
                        }
                        Setting_Init.Runtime_Step = Runtime_StepE.None;
                        return;
                    }
                    if (Setting_Init.Runtime_Step!= Runtime_StepE.None)
                        StoreMoveInfo.log("Runtime_Step:"+ Setting_Init.Runtime_Step);
                    if (Setting_Init.Runtime_Step == Runtime_StepE.InToLabel) {
                        StoreMoveInfo.log("检测到上次正在准备去贴标:"+ Setting_Init.Runtime_Posid);
                        StoreMoveInfo.NextMoveStep(MoveStep.StoreIn02);
                        var acto = CSVPositionReader<ACStorePosition>.GetPositon(LabelP);
                        StoreMoveInfo.MoveParam.PosID = Setting_Init.Runtime_Posid;
                        StoreMoveInfo.MoveParam.WareCode = "";
                        StoreMoveInfo.MoveParam.ReelOnFixture = true;
                        boxTransport.Start(new BoxStorePosition(Config, acto, StoreMoveInfo.MoveParam), new BoxStorePosition(Config, acto, StoreMoveInfo.MoveParam), StoreMoveType.InStore, true);
                        StoreMoveInfo.log($"开始转运入贴标机构");
                    }else if (Setting_Init.Runtime_Step == Runtime_StepE.InToStore)
                    {
                        StoreMoveInfo.log("检测到上次正在准备去库位:" + Setting_Init.Runtime_Posid);
                        StoreMoveInfo.NextMoveStep(MoveStep.StoreIn04);
                        StoreMoveInfo.MoveParam.PosID = Setting_Init.Runtime_Posid;
                        StoreMoveInfo.MoveParam.ReelOnFixture = true;
                    }
                    else if (Setting_Init.Runtime_Step == Runtime_StepE.Out)
                    {
                        StoreMoveInfo.log("检测到上次正在出库:" + Setting_Init.Runtime_Posid);
                        StoreMoveInfo.NextMoveStep(MoveStep.StoreOut11);
                        {
                            var olist = CameraPointTest.GetThingStoreName(TestStorePointPort.出口);
                            StoreMoveInfo.log($"检测到出库口有料库位:{string.Join(",", olist)}");
                            olist = RobotManage.AllPositionMapNumList.ToList().Where(p => { return p.StartsWith("U") && !olist.Contains(p); }).ToList();
                            if (olist.Count == 0)
                            {
                                StoreMoveInfo.NextMoveStep(MoveStep.Wait);
                                StoreMoveInfo.log($"没有检测到出库未有空位");
                                return;
                            }
                            else
                            {
                                StoreMoveInfo.MoveParam.PosID = olist[0];
                                StoreMoveInfo.log($"检测到出库位有料:{StoreMoveInfo.MoveParam.PosID}, 其他有料出库位:{string.Join(",", olist)}");
                            }
                        }
                    }

                    break;
                case MoveStep.StoreIn01:
                    string inposid;
                    var slist = CameraPointTest.GetThingStoreName(TestStorePointPort.入口);
                    if (slist.Count == 0)
                    {
                        StoreMoveInfo.NextMoveStep(MoveStep.Wait);
                        IOMove(IO_Type.Entry_Drawer_Lock, IO_VALUE.LOW);
                        StoreMoveInfo.log($"没有检测到有入库物料,抽屉解锁");
                        return;
                    }
                    else
                    {
                        inposid = slist[0];
                        StoreMoveInfo.log($"检测到入库位有料:{inposid}, 其他有料入库位:{string.Join(",", slist)}");
                    }
                    StoreMoveInfo.NextMoveStep(MoveStep.StoreIn02);
                    var from = CSVPositionReader<ACStorePosition>.GetPositon(inposid);
                    var to = CSVPositionReader<ACStorePosition>.GetPositon(LabelP);
                    StoreMoveInfo.MoveParam.PosID = inposid;
                    StoreMoveInfo.MoveParam.WareCode = "";
                    //StoreMoveInfo.MoveParam.ReelOnFixture = false;
                    boxTransport.Start(new BoxStorePosition(Config, from, StoreMoveInfo.MoveParam), new BoxStorePosition(Config, to, StoreMoveInfo.MoveParam), StoreMoveType.InStore, true);
                    StoreMoveInfo.log($"开始转运入贴标机构");
                    break;
                case MoveStep.StoreIn02:
                    if (boxTransport.IsComplateOrFree)
                    {
                        if (LabelingMoveInfo.MoveStep == MoveStep.Wait)
                        {
                            StoreMoveInfo.NextMoveStep(MoveStep.StoreIn03);
                            LabelingMoveInfo.NextMoveStep(MoveStep.Labeling01);
                            StoreMoveInfo.log($"等待贴标完成");
                        }
                        else
                        {
                            StoreMoveInfo.log($"等待贴标机构空闲");
                        }
                    }
                    break;
                case MoveStep.StoreIn03:
                    if (LabelingMoveInfo.MoveStep == MoveStep.Wait)
                    {
                        if (demomode)
                        {
                            string outposid = "";
                            var olist = CameraPointTest.GetThingStoreName(TestStorePointPort.下层右侧);
                            olist = RobotManage.PositionNumList.ToList().Where(p => { return Regex.IsMatch(p, "^S[H-N]([7-9]|\\d{2})$") && !olist.Contains(p); }).ToList();
                            if (olist.Count == 0)
                            {
                                StoreMoveInfo.NextMoveStep(MoveStep.Wait);
                                StoreMoveInfo.log($"没有检测到有空余库位");
                                return;
                            }
                            else
                            {
                                outposid = olist[0];
                                StoreMoveInfo.log($"检测到库位有料:{outposid}, 其他有料库位:{string.Join(",", olist)}");
                            }
                            LabelingMoveInfo.MoveParam.PosID = outposid;
                        }

                        if (string.IsNullOrEmpty(LabelingMoveInfo.MoveParam.PosID))
                        {
                            Msg.add("等待服务器返回库位", MsgLevel.info);
                            StoreMoveInfo.log($"等待服务器返回库位");
                            return;
                        }
                        StoreMoveInfo.MoveParam = LabelingMoveInfo.MoveParam.clone();
                        if (StoreMoveInfo.MoveParam.IsNg)
                        {
                            StoreMoveInfo.NextMoveStep(MoveStep.StoreIn04);
                            StoreMoveInfo.log($"收到完成贴标");
                        }
                        else
                        {
                            StoreMoveInfo.NextMoveStep(MoveStep.StoreIn04);
                            StoreMoveInfo.log($"收到完成贴标");
                        }
                    }
                    else
                    {
                        StoreMoveInfo.log($"等待贴标完成");
                    }
                    break;
                case MoveStep.StoreIn04:
                    if (boxTransport.IsComplateOrFree)
                    {
                        var outposid= StoreMoveInfo.MoveParam.PosID;
                        

                        StoreMoveInfo.NextMoveStep(MoveStep.StoreIn09);
                        from = CSVPositionReader<ACStorePosition>.GetPositon(LabelP);
                        to = CSVPositionReader<ACStorePosition>.GetPositon(outposid);
                        
                        StoreMoveInfo.MoveParam.PosID = outposid;
                        StoreMoveInfo.MoveParam.WareCode = "";
                        //StoreMoveInfo.MoveParam.ReelOnFixture = false;
                        boxTransport.Start(new BoxStorePosition(Config, from, StoreMoveInfo.MoveParam), new BoxStorePosition(Config, to, StoreMoveInfo.MoveParam), StoreMoveType.InStore, true);
                        StoreMoveInfo.log($"开始转运入库");
                    }
                    break;
                case MoveStep.StoreIn05:
                    break;
                case MoveStep.StoreIn08:
                    if (boxTransport.IsComplateOrFree)
                    {
                        var outposid = "";
                        var olist = CameraPointTest.GetThingStoreName(TestStorePointPort.入口);
                        olist = RobotManage.PositionNumList.ToList().Where(p => { return p.StartsWith("L") && !olist.Contains(p); }).ToList();
                        if (olist.Count == 0)
                        {
                            StoreMoveInfo.NextMoveStep(MoveStep.Wait);
                            StoreMoveInfo.log($"没有检测到有空余库位");
                            return;
                        }
                        else
                        {
                            outposid = olist[0];
                            StoreMoveInfo.log($"检测到空库位:{outposid}, 其他空库位:{string.Join(",", olist)}");
                        }

                        StoreMoveInfo.NextMoveStep(MoveStep.StoreIn09);
                        from = CSVPositionReader<ACStorePosition>.GetPositon(LabelP);
                        to = CSVPositionReader<ACStorePosition>.GetPositon(outposid);

                        StoreMoveInfo.MoveParam.PosID = outposid;
                        StoreMoveInfo.MoveParam.WareCode = "";
                        //StoreMoveInfo.MoveParam.ReelOnFixture = false;
                        boxTransport.Start(new BoxStorePosition(Config, from, StoreMoveInfo.MoveParam), new BoxStorePosition(Config, to, StoreMoveInfo.MoveParam), StoreMoveType.InStore, true);
                        StoreMoveInfo.log($"开始转运");
                    }
                    break;
                case MoveStep.StoreIn09:
                    if (boxTransport.IsComplateOrFree)
                    {
                        StoreMoveInfo.NextMoveStep(MoveStep.StoreIn01);
                        StoreMoveInfo.log($"入库完成");
                    }
                    break;
                case MoveStep.StoreOut10:
                    slist = CameraPointTest.GetThingStoreName(TestStorePointPort.下层右侧);
                    if (slist.Count == 0)
                    {
                        StoreMoveInfo.NextMoveStep(MoveStep.Wait);
                        StoreMoveInfo.log($"没有检测到库内有料");
                        return;
                    }
                    else
                    {
                        inposid = slist[0];
                        StoreMoveInfo.log($"检测到库位有料:{inposid}, 其他有料库位:{string.Join(",", slist)}");
                    }
                    {
                        var outposid="";
                        var olist = CameraPointTest.GetThingStoreName(TestStorePointPort.出口);
                        StoreMoveInfo.log($"检测到出库口有料库位:{string.Join(",", olist)}");
                        olist = RobotManage.AllPositionMapNumList.ToList().Where(p => { return p.StartsWith("U") && !olist.Contains(p); }).ToList();
                        if (olist.Count == 0)
                        {
                            StoreMoveInfo.NextMoveStep(MoveStep.Wait);
                            StoreMoveInfo.log($"没有检测到出库未有空位");
                            return;
                        }
                        else
                        {
                            outposid = olist[0];
                            StoreMoveInfo.log($"检测到出库位有料:{outposid}, 其他有料出库位:{string.Join(",", olist)}");
                        }

                        StoreMoveInfo.NextMoveStep(MoveStep.StoreOut11);
                        from = CSVPositionReader<ACStorePosition>.GetPositon(inposid);
                        to = CSVPositionReader<ACStorePosition>.GetPositon(RFIDP);
                        StoreMoveInfo.MoveParam.PosID = outposid;
                        StoreMoveInfo.MoveParam.WareCode = "";
                        //StoreMoveInfo.MoveParam.ReelOnFixture = false;
                        boxTransport.Start(new BoxStorePosition(Config, from, StoreMoveInfo.MoveParam), new BoxStorePosition(Config, to, StoreMoveInfo.MoveParam), StoreMoveType.InStore, true);
                        StoreMoveInfo.log($"开始转运出库");
                    }
                    break;
                case MoveStep.StoreOut11:
                    if (boxTransport.IsComplateOrFree)
                    {
                        StoreMoveInfo.NextMoveStep(MoveStep.StoreOut12);
                        from = CSVPositionReader<ACStorePosition>.GetPositon(RFIDP);
                        to = CSVPositionReader<ACStorePosition>.GetPositon(StoreMoveInfo.MoveParam.PosID);
                        StoreMoveInfo.MoveParam.WareCode = "";
                        StoreMoveInfo.MoveParam.ReelOnFixture = true;
                        boxTransport.Start(new BoxStorePosition(Config, from, StoreMoveInfo.MoveParam), new BoxStorePosition(Config, to, StoreMoveInfo.MoveParam), StoreMoveType.InStore, true);
                        StoreMoveInfo.log($"开始转运出库");
                    }
                    break;
                case MoveStep.StoreOut12:
                    if (boxTransport.IsComplateOrFree)
                    {
                        StoreMoveInfo.NextMoveStep(MoveStep.StoreOut10);
                        slist = CameraPointTest.GetThingStoreName(TestStorePointPort.下层右侧);
                        if (slist.Count == 0)
                        {
                            StoreMoveInfo.NextMoveStep(MoveStep.StoreOut13);
                            StoreMoveInfo.log($"没有检测到库内有料");
                            return;
                        }
                    }
                    break;
                case MoveStep.StoreOut13:
                    StoreMoveInfo.NextMoveStep(MoveStep.StoreOut14);
                    IOMove(IO_Type.Out_Drawer_Lock, IO_VALUE.LOW);
                    StoreMoveInfo.log($"出库抽屉解锁");
                    break;
                case MoveStep.StoreOut14:
                    if (IOValue(IO_Type.Out_Drawer).Equals(IO_VALUE.LOW))
                    {
                        StoreMoveInfo.NextMoveStep(MoveStep.StoreOut15);
                        StoreMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                    }
                    else
                    {
                        Msg.add(crc.GetString("Res0115", "出库已完成请取走锡膏"), MsgLevel.warning);
                    }
                    break;
                case MoveStep.StoreOut15:
                    if (IOValue(IO_Type.Out_Drawer).Equals(IO_VALUE.HIGH))
                    {
                        StoreMoveInfo.NextMoveStep(MoveStep.StoreOut16);
                        StoreMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                    }
                    else
                    {
                        Msg.add(crc.GetString("Res0116", "等待出料抽屉关闭"), MsgLevel.warning);
                    }
                    break;
                case MoveStep.StoreOut16:
                    StoreMoveInfo.NextMoveStep(MoveStep.StoreOut17);
                    IOMove(IO_Type.Out_Drawer_Lock, IO_VALUE.HIGH);
                    break;
                case MoveStep.StoreOut17:
                    if (IOValue(IO_Type.Out_Drawer).Equals(IO_VALUE.HIGH))
                    {
                        StoreMoveInfo.EndMove();
                    }
                    else
                    {
                        StoreMoveInfo.NextMoveStep(MoveStep.StoreIn05);
                    }
                    break;
                default:
                    StoreMoveInfo.log($"未找到对应步骤:{StoreMoveInfo.MoveStep}");
                    break;
            }
        }
        string StoreState()
        {
            string state = crc.GetString("Res0107", "空闲中");
            if (StoreMoveInfo.MoveStep >= MoveStep.StoreOut10)
            {
                state = crc.GetString("Res0113", "出库中") + "," + crc.GetString("Res0071", "库位号") + StoreMoveInfo.MoveParam.PosID;
            }
            else if (StoreMoveInfo.MoveStep >= MoveStep.StoreIn01)
            {
                state = crc.GetString("Res0114", "入库中") + "," + crc.GetString("Res0071", "库位号") + StoreMoveInfo.MoveParam.PosID;
            }

            return state;
        }
    }
}