MainMachine _MiddleProcess.cs 13.2 KB
using OnlineStore;
using CodeLibrary;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using OnlineStore.Common.util;

namespace DeviceLibrary
{
    partial class MainMachine
    {
        void MiddleProcess()
        {
            if (CheckWait(MiddleMoveInfo))
                return;

            switch (MiddleMoveInfo.MoveStep)
            {
                case MoveStep.M_Standby:
                    if (RightMoveInfo.MoveStep == MoveStep.R10_WaitReelLeave)
                    {
                        MiddleMoveInfo.NextMoveStep(MoveStep.M02);
                        Take_Middle_Axis.AbsMove(MiddleMoveInfo, Config.Take_Middle_P2, Config.Take_Middle_P2_speed);
                        Take_UpDown_Axis.AbsMove(MiddleMoveInfo, Config.Take_UpDown_P2, Config.Take_UpDown_P2_speed);
                        clampTool.Release();
                        //复制右侧料盘信息
                        MiddleMoveInfo.MoveParam = RightMoveInfo.MoveParam.clone();
                        RightMoveInfo.MoveParam = new LabelParam();
                        MiddleMoveInfo.log("右侧可以取料,旋转轴/上下轴转到P2点");
                        //MiddleMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.RightArm_Check, IO_VALUE.HIGH));
                    }
                    else if (MiddleMoveInfo.IsTimeOut(60))
                    {
                        MiddleMoveInfo.log("等待右侧可以取料");
                    }
                    break;
                case MoveStep.M02:
                    MiddleMoveInfo.NextMoveStep(MoveStep.M03);
                    Take_UpDown_Axis.AbsMove(MiddleMoveInfo, Config.Take_UpDown_P3, Config.Take_UpDown_P3_speed);
                    MiddleMoveInfo.log("右侧可以取料,上下轴转到P3点,开始取料");
                    break;
                case MoveStep.M03:
                    if (clampTool.Clamp())
                    {
                        MiddleMoveInfo.NextMoveStep(MoveStep.M04);
                        MiddleMoveInfo.log("取料气缸夹紧");
                    }
                    break;
                case MoveStep.M04:
                    MiddleMoveInfo.NextMoveStep(MoveStep.M05);
                    Take_UpDown_Axis.AbsMove(MiddleMoveInfo, Config.Take_UpDown_P2, Config.Take_UpDown_P2_speed);                    
                    MiddleMoveInfo.log("上下轴返回P2点");
                    break;
                case MoveStep.M05:
                    if (clampTool.IsClamp() || IOValue(IO_Type.RightTop_Check).Equals(IO_VALUE.LOW))
                    {
                        bool isclamp = clampTool.IsClamp();
                        bool che = IOValue(IO_Type.RightTop_Check).Equals(IO_VALUE.LOW);
                        MiddleMoveInfo.log($"取起物料状态{isclamp};io状态{che}");
                        MiddleMoveInfo.NextMoveStep(MoveStep.M06);
                        RightMoveInfo.NextMoveStep(MoveStep.R11_NextReel);
                        MiddleMoveInfo.MoveParam.PlateW = GetTrayWidth();
                        MiddleMoveInfo.log($"通知右侧料串,料已取走,获取盘宽{MiddleMoveInfo.MoveParam.PlateW}");
                    }
                    else if (LeftMoveInfo.MoveStep == MoveStep.L10_WaitReelPut)
                    {
                        if (MiddleMoveInfo.MoveParam.IsNg)
                        {
                            Msg.add(crc.GetString("Res0096","抓料失败请手动处理,请将料盘放入:NG箱,按右侧按钮继续"), MsgLevel.warning);
                        }
                        else
                        {
                            Msg.add(crc.GetString("Res0097","抓料失败请手动处理,请将料盘放入: 左侧料串,按右侧按钮继续"), MsgLevel.warning);
                        }

                        if (IOValue(IO_Type.Right_BTN).Equals(IO_VALUE.HIGH))
                        {
                            RightMoveInfo.NextMoveStep(MoveStep.R11_NextReel);
                            if (MiddleMoveInfo.MoveParam.IsNg)
                            {
                                MiddleMoveInfo.NextMoveStep(MoveStep.M_ReturnToP1);
                            }
                            else
                            {
                                MiddleMoveInfo.NextMoveStep(MoveStep.M06);
                            }
                        }
                    }
                    else if (MiddleMoveInfo.IsTimeOut(60))
                    {
                        MiddleMoveInfo.log("抓料失败,等待左侧允许放料");
                    }
                    break;
                case MoveStep.M06:
                    if (MiddleMoveInfo.MoveParam.IsNg)
                    {
                        MiddleMoveInfo.NextMoveStep(MoveStep.M20_ToNgBox);
                        MiddleMoveInfo.log("判断为NG料");
                    }
                    //等待右侧料串计算盘高
                    //else if (RightMoveInfo.MoveStep >= MoveStep.R06_GettedReelHigh && RightMoveInfo.MoveStep <= MoveStep.R10_WaitReelLeave)
                    else //if (LastHeightPos > 0)
                    {
                        MiddleMoveInfo.NextMoveStep(MoveStep.M07);                     
                        MiddleMoveInfo.log($"开始往左侧料串移栽,{MiddleMoveInfo.MoveParam.ToStr()}");
                    }
                    //else if (MiddleMoveInfo.IsTimeOut(60))
                    //{
                    //    MiddleMoveInfo.log("等待计算盘高");
                    //}
                    break;
                case MoveStep.M07:
                    if (!Take_Middle_Axis.IsSafe(Config.Take_Middle_P3, out string msg))
                    {
                        Msg.add(msg, MsgLevel.info);
                    }
                    else if(LeftMoveInfo.MoveStep == MoveStep.L10_WaitReelPut)
                    {
                        if (clampTool.IsClamp())
                        {
                            //MiddleMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.LeftArm_Check, IO_VALUE.HIGH));
                            //调用标签打印
                            var kv = MiddleMoveInfo.MoveParam.Keyword.Select(k => $"{k.Key}={k.Value}").ToArray();
                            LogUtil.info("调用 PrintLabel 打印标签 StartPrintLabel  ,[" + string.Join(", ", kv) + "]  开始");
                            string labelName = ConfigHelper.Config.Get(Setting_Init.LabelName);
                            MiddleMoveInfo.CanWhileCount--;                            
                            if (RobotManage.printerHelper.Print(labelName, MiddleMoveInfo.MoveParam.Keyword, out  msg))
                            {
                                MiddleMoveInfo.NextMoveStep(MoveStep.M08);
                                UnifiedDataHandler.RecordPrintNg(false, true, out string[] strarrys);

                                //数据保存到共享文件夹
                                DataUploadUtil.LabelUpload(MiddleMoveInfo.MoveParam.Keyword);

                            }
                            else if (MiddleMoveInfo.CanWhileCount <= 0)
                            {
                                RobotManage.UserPause("打印失败超过五次,机器暂停,请检查打印机;");
                                Msg.add(msg, MsgLevel.warning);
                            }
                            else
                            {
                                Msg.add(msg, MsgLevel.warning);
                            }
                            Take_Middle_Axis.AbsMove(MiddleMoveInfo, Config.Take_Middle_P3, Config.Take_Middle_P3_speed);
                            MiddleMoveInfo.log("左侧允许放料,旋转轴P3");
                            LogUtil.info("PrintLabel 打印标签 StartPrintLabel 结束  " + msg);
                        }
                        else
                        {
                            //Take_Middle_Axis.AbsMove(MiddleMoveInfo, Config.Take_Middle_P1, Config.Take_Middle_P1_speed);
                            //Take_UpDown_Axis.AbsMove(MiddleMoveInfo, Config.Take_UpDown_P1, Config.Take_UpDown_P1_speed);
                            MiddleMoveInfo.log("没有抓到料,继续下一步");
                        }
                        bool isclamp = clampTool.IsClamp();
                        bool che = IOValue(IO_Type.RightTop_Check).Equals(IO_VALUE.LOW);
                        MiddleMoveInfo.log($"取起物料状态{isclamp};io状态{che}");
                    }
                    else if (MiddleMoveInfo.IsTimeOut(60))
                    {
                        MiddleMoveInfo.log("等待左侧允许放料");
                        Msg.add(crc.GetString("Res0098", "等待左侧允许放料"), MsgLevel.info);
                    }
                    break;
                case MoveStep.M08:
                    MiddleMoveInfo.NextMoveStep(MoveStep.M09);
                    Take_UpDown_Axis.AbsMove(MiddleMoveInfo, Config.Take_UpDown_P4, Config.Take_UpDown_P4_speed);
                    MiddleMoveInfo.log("左侧允许放料,上下轴到P4");
                    break;
                case MoveStep.M09:
                    if (clampTool.Release())
                    {
                        MiddleMoveInfo.NextMoveStep(MoveStep.M10);
                        LeftMoveInfo.MoveParam = MiddleMoveInfo.MoveParam.clone();
                        LeftMoveInfo.NextMoveStep(MoveStep.L11_ReelPutted);
                        MiddleMoveInfo.log("取料夹爪放松,通知左侧料串已放入,左侧等待1秒");
                        LeftMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                    }
                    else if (MiddleMoveInfo.IsTimeOut(10))
                    {
                        MiddleMoveInfo.NextMoveStep(MoveStep.M09);
                        MiddleMoveInfo.log("等待夹爪放松");                        
                    }
                    Msg.add(crc.GetString("Res0050","等待夹爪放松"), MsgLevel.warning);
                    break;
                case MoveStep.M10:
                    MiddleMoveInfo.NextMoveStep(MoveStep.M_ReturnToP1);
                    Take_UpDown_Axis.AbsMove(MiddleMoveInfo, Config.Take_UpDown_P1, Config.Take_UpDown_P1_speed);
                    MiddleMoveInfo.log("放料完成,上下轴返回待机点");
                    break;
                case MoveStep.M_ReturnToP1:
                    MiddleMoveInfo.NextMoveStep(MoveStep.M_Standby);
                    Take_Middle_Axis.AbsMove(MiddleMoveInfo, Config.Take_Middle_P1, Config.Take_Middle_P1_speed);
                    MiddleMoveInfo.log("放料完成,旋转轴返回待机点");
                    break;
                case MoveStep.M20_ToNgBox:
                    MiddleMoveInfo.NextMoveStep(MoveStep.M21);
                    Take_Middle_Axis.AbsMove(MiddleMoveInfo, Config.Take_Middle_P5, Config.Take_Middle_P5_speed);
                    MiddleMoveInfo.log("旋转轴转到P5 NG位置");
                    break;
                case MoveStep.M21:
                    MiddleMoveInfo.NextMoveStep(MoveStep.M22);
                    Take_UpDown_Axis.AbsMove(MiddleMoveInfo, Config.Take_UpDown_P5, Config.Take_UpDown_P5_speed);
                    MiddleMoveInfo.log("上下轴转到P5 NG位置");
                    break;
                case MoveStep.M22:
                    if (clampTool.Release())
                    {
                        MiddleMoveInfo.NextMoveStep(MoveStep.M23);
                        clampTool.Release();
                        MiddleMoveInfo.log("取料夹爪放松,放料入NG位置.");
                    }
                    else if (MiddleMoveInfo.IsTimeOut(10))
                    {
                        MiddleMoveInfo.NextMoveStep(MoveStep.M22);
                        MiddleMoveInfo.log("等待夹爪放松");
                    }
                    Msg.add(crc.GetString("Res0050","等待夹爪放松"), MsgLevel.warning);
                    break;
                case MoveStep.M23:
                    MiddleMoveInfo.NextMoveStep(MoveStep.M_ReturnToP1);
                    Take_UpDown_Axis.AbsMove(MiddleMoveInfo, Config.Take_UpDown_P2, Config.Take_UpDown_P5_speed);
                    MiddleMoveInfo.log("上下轴转到P2 位置");
                    break;
                default:
                    MiddleMoveInfo.log($"未找到对应步骤:{MiddleMoveInfo.MoveStep}");
                    break;
            }
        }

        private int GetTrayWidth()
        {
            if (IOValue(IO_Type.TraySize_15).Equals(IO_VALUE.HIGH))
                return 15;
            else if (IOValue(IO_Type.TraySize_13).Equals(IO_VALUE.HIGH))
                return 13;
            //else if (IOValue(IO_Type.TraySize_7).Equals(IO_VALUE.HIGH))
            //    return 7;
            else
                return 7;
        }

        string MiddleState() {
            string state = "";
            if (MiddleMoveInfo.MoveStep == MoveStep.M_Standby || MiddleMoveInfo.MoveStep == MoveStep.Wait)
                state += crc.GetString("Res0074","等待中");
            else
                state += crc.GetString("Res0045","当前ReelID:") + MiddleMoveInfo.MoveParam.WareCode;

            return state;
        }
    }
}