MainMachine_Labeling.cs 11.0 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
    {
        Task<(bool, string)> PrintTask = null;
        int ScanTimes = 0;
        void LabelingProcess()
        {
            if (CheckWait(LabelingMoveInfo))
                return;
            //常规上料扫码流程
            switch (LabelingMoveInfo.MoveStep)
            {
                case MoveStep.Wait:
                    break;
                case MoveStep.Labeling01:
                    LabelingMoveInfo.NextMoveStep(MoveStep.Labeling02);
                    FlipEquip.LiftDown(LabelingMoveInfo);
                    LabelingMoveInfo.log("翻转机构下降");
                    CylinderMove(LabelingMoveInfo, IO_Type.Label_Dock_Down, IO_Type.Label_Dock_Up, IO_VALUE.LOW);
                    break;
                case MoveStep.Labeling02:
                    LabelingMoveInfo.NextMoveStep(MoveStep.Labeling03);
                    CylinderMove(LabelingMoveInfo, IO_Type.Tin_Dock_Left, IO_Type.Tin_Dock_Right, IO_VALUE.HIGH);
                    CylinderMove(LabelingMoveInfo, IO_Type.Label_Dock_Back, IO_Type.Label_Dock_Front, IO_VALUE.HIGH);
                    LabelingMoveInfo.log("锡膏横移到右侧");
                    ScanTimes = 0;
                    break;
                case MoveStep.Labeling03:
                    LabelingMoveInfo.NextMoveStep(MoveStep.Labeling04);
                    RotateEquip.TurnDegree(36);
                    //LabelingMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
                    LabelingMoveInfo.log("滚动锡膏");                    
                    break;
                case MoveStep.Labeling04:
                    if (RotateEquip.TurnWork.IsCompleted) {
                        LabelingMoveInfo.NextMoveStep(MoveStep.Labeling05);
                        //LabelingMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                        ScanCode();
                    }
                    break;
                case MoveStep.Labeling05:
                    if (IsScanFinish) {
                        ScanTimes++;
                        if (ScanTimes >= 3)
                        {
                            LabelingMoveInfo.NextMoveStep(MoveStep.Labeling06);
                            
                        }
                        else { 
                            LabelingMoveInfo.NextMoveStep(MoveStep.Labeling03);
                            LabelingMoveInfo.log("继续扫码");
                        }
                    }
                    break;
                case MoveStep.Labeling06:
                    LabelingMoveInfo.NextMoveStep(MoveStep.Labeling04);
                    RotateEquip.TurnDegree(36);
                    LabelingMoveInfo.log("滚动锡膏");
                    break;
                case MoveStep.Labeling07:
                    if (RotateEquip.TurnWork.IsCompleted)
                    {
                        LabelingMoveInfo.NextMoveStep(MoveStep.Labeling05);
                        var hc = CameraPointTest.ScanRectangle();
                        LabelingMoveInfo.log("检测到绿色宽度:"+hc);
                        if (hc>20) {
                            LabelingMoveInfo.NextMoveStep(MoveStep.Labeling08);
                        }
                    }
                    break;
                case MoveStep.Labeling08:   
                    LabelingMoveInfo.NextMoveStep(MoveStep.Labeling08);
                    RotateEquip.TurnToEnd(false);
                    LabelingMoveInfo.log("滚动回位");
                    break;
                case MoveStep.Labeling09:
                    if (RotateEquip.WaitStatus(null))
                    {
                        LabelingMoveInfo.NextMoveStep(MoveStep.Labeling10);
                    }
                    break;
                case MoveStep.Labeling10:
                    LabelingMoveInfo.NextMoveStep(MoveStep.Labeling11);
                    ReelParam reel = new ReelParam();
                    reel.WareCode = "Test";
                    reel.ReeID = "Test";
                    PrintTask = RobotManage.printerHelper.PrintLabel(reel);
                    LabelingMoveInfo.log("检测到打印任务开始打印:" + reel.ToDetailStr());
                    break;
                case MoveStep.Labeling11:
                    if (PrintTask.IsCompleted)
                    {
                        var (result, msg) = PrintTask.Result;
                        if (result)
                        {
                            LabelingMoveInfo.NextMoveStep(MoveStep.Labeling12);
                            LabelingMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                            LabelingMoveInfo.log("打印成功,等待标签被取走");
                        }
                        else
                        {
                            Msg.add(crc.GetString("Res0106","打印机反馈:") + msg, MsgLevel.alarm);
                            RobotManage.UserPause(crc.GetString("Res0106","打印机反馈:") + msg);
                            LabelingMoveInfo.NextMoveStep(MoveStep.Labeling10);
                            LabelingMoveInfo.log("打印失败,再次打印");
                        }
                    }
                    break;
                case MoveStep.Labeling12:
                    LabelingMoveInfo.NextMoveStep(MoveStep.Labeling13);
                    CylinderMove(LabelingMoveInfo, IO_Type.Label_Dock_Back, IO_Type.Label_Dock_Front, IO_VALUE.LOW);
                    LabelingMoveInfo.log("接标台左移动");
                    break;
                case MoveStep.Labeling13:
                    LabelingMoveInfo.NextMoveStep(MoveStep.Labeling14);
                    CylinderMove(LabelingMoveInfo, IO_Type.Label_Dock_Down, IO_Type.Label_Dock_Up, IO_VALUE.HIGH);
                    LabelingMoveInfo.log("接标台上升");
                    break;
                case MoveStep.Labeling14:
                    LabelingMoveInfo.NextMoveStep(MoveStep.Labeling15);
                    IOMove(IO_Type.Label_Vacuum, IO_VALUE.HIGH);
                    CylinderMove(null, IO_Type.Labeling_Down, IO_Type.Labeling_Up, IO_VALUE.LOW);
                    LabelingMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                    LabelingMoveInfo.log("吸标下降");
                    break;
                case MoveStep.Labeling15:
                    LabelingMoveInfo.NextMoveStep(MoveStep.Labeling16);
                    LabelingMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                    break;
                case MoveStep.Labeling16:
                    LabelingMoveInfo.NextMoveStep(MoveStep.Labeling50);
                    CylinderMove(null, IO_Type.Labeling_Down, IO_Type.Labeling_Up, IO_VALUE.HIGH);
                    LabelingMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                    LabelingMoveInfo.log("吸标上升");
                    break;
                case MoveStep.Labeling50:
                    LabelingMoveInfo.NextMoveStep(MoveStep.Labeling51);
                    CylinderMove(LabelingMoveInfo, IO_Type.Labeling_Left, IO_Type.Labeling_Right, IO_VALUE.LOW);
                    //LabelingMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                    break;
                case MoveStep.Labeling51:
                    LabelingMoveInfo.NextMoveStep(MoveStep.Labeling52);
                    CylinderMove(null, IO_Type.Labeling_Down, IO_Type.Labeling_Up, IO_VALUE.LOW);
                    LabelingMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                    break;
                case MoveStep.Labeling52:
                    LabelingMoveInfo.NextMoveStep(MoveStep.Labeling53);
                    IOMove(IO_Type.Label_Vacuum, IO_VALUE.LOW);
                    RotateEquip.TurnRound();
                    break;
                case MoveStep.Labeling53:
                    if (RotateEquip.TurnWork.IsCompleted)
                    {
                        LabelingMoveInfo.NextMoveStep(MoveStep.Labeling54);
                        LabelingMoveInfo.log("滚动回位");
                    }
                    break;
                case MoveStep.Labeling54:
                    LabelingMoveInfo.NextMoveStep(MoveStep.Labeling55);
                    CylinderMove(null, IO_Type.Labeling_Down, IO_Type.Labeling_Up, IO_VALUE.HIGH);
                    LabelingMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                    break;
                case MoveStep.Labeling55:
                    LabelingMoveInfo.NextMoveStep(MoveStep.Labeling56);
                    
                    CylinderMove(LabelingMoveInfo, IO_Type.Labeling_Left, IO_Type.Labeling_Right, IO_VALUE.HIGH);
                    CylinderMove(LabelingMoveInfo, IO_Type.Tin_Dock_Left, IO_Type.Tin_Dock_Right, IO_VALUE.LOW);
                    //CylinderMove(LabelingMoveInfo, IO_Type.Label_Dock_Back, IO_Type.Label_Dock_Front, IO_VALUE.LOW);
                    LabelingMoveInfo.log("锡膏横移到左侧");
                    break;
                case MoveStep.Labeling56:
                    LabelingMoveInfo.NextMoveStep(MoveStep.Wait);
                    FlipEquip.LiftUp(LabelingMoveInfo);
                    LabelingMoveInfo.log("翻转机构上升");
                    break;            
                default:
                    LabelingMoveInfo.log($"未找到对应步骤:{StoreMoveInfo.MoveStep}");
                    break;
            }
        }
        string LabelingState() {
            string state = crc.GetString("Res0107","空闲中");
            if (LabelingMoveInfo.MoveStep >= MoveStep.StoreOut10)
            {
                state = $"{"出库中"},{"出库中"}:{StoreMoveInfo.MoveParam.PosID}";
            }
            else if (LabelingMoveInfo.MoveStep >= MoveStep.Labeling01)
            {
                state = $"{"入库中"},{"出库中"}:{StoreMoveInfo.MoveParam.PosID}";
            }

            return state;
        }

        public bool IsScanFinish
        {
            get
            {
                if (ScanTask == null)
                    return true;

                return ScanTask.IsCompleted;
            }
        }
        int scantrytimes = 0;
        /// <summary>
        /// 扫码线程
        /// </summary>
        Task<List<CodeInfo>> ScanTask;
        List<CodeInfo> LastCodeList;
        public void ScanCode()
        {
            LabelingMoveInfo.log("开始扫码");
            try
            {
                ScanTask = Task.Run(new Func<List<CodeInfo>>(() =>
                {
                    IOMove(IO_Type.Camera_Led, IO_VALUE.HIGH);
                    //Task.Delay(10).Wait();
                    var l = CodeManager.CameraScan(CodeManager.hikNameList);
                    LastCodeList.AddRange(l);

                    return l;
                }));
            }
            catch (Exception ex)
            {
                LogUtil.error("FI_13_ScanCode扫码出错:", ex);
            }
        }
    }
}