Ejemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Chart"/> class.
        /// </summary>
        /// <param name="title">The title.</param>
        /// <param name="legendX">The legend X.</param>
        /// <param name="legendY">The legend Y.</param>
        /// <param name="toolTip">The tool tip.</param>
        /// <param name="charts">The charts.</param>
        /// <param name="xAxisColumns">The x axis columns.</param>
        /// <param name="yAxisColumns">The y axis columns.</param>
        public Chart(ChartStylableTextElement title, ChartStylableTextElement legendX, ChartStylableTextElement legendY
                     , string toolTip, List <ChartBase> charts, int xAxisColumns, int yAxisColumns)
        {
            this.Title   = title;
            this.LegendX = legendX;
            this.LegendY = legendY;
            this.ToolTip = new ChartTextElement(toolTip);

            this.ChartBase = charts;
            this.Y_Axis    = new YAxis();
            this.X_Axis    = new XAxis();

            _MinValueY      = charts.SelectMany(c => c.Values).Min(c => c.Value);
            _MaxValueY      = charts.SelectMany(c => c.Values).Max(c => c.Value);
            _ColumnsX       = xAxisColumns;
            _ColumnsY       = yAxisColumns;
            _MaxValueCountX = (from c in charts
                               select c.Values.Count).Max();

            X_Axis.Steps = ((int)Math.Round((decimal)_MaxValueCountX / (decimal)_ColumnsX));


            _MinValueYFloored = (int)Math.Floor(_MinValueY);
            _MaxValueYCeiled  = (int)Math.Ceiling(_MaxValueY);
            Y_Axis.SetRange(_MinValueYFloored, _MaxValueYCeiled);
            Y_Axis.Steps = ((int)Math.Ceiling(((decimal)_MaxValueYCeiled - (decimal)_MinValueYFloored) / (decimal)_ColumnsY));
        }
Ejemplo n.º 2
0
 public void AddElement(ChartBase chart)
 {
     this.elements.Add(chart);
     Y_Axis.SetRange(chart.GetMinValue(), chart.GetMaxValue());
     // X_Axis.SetRange(0,chart.GetValueCount());
     X_Axis.Steps = 1;
 }
Ejemplo n.º 3
0
 public static bool SystemExit(bool shutDown, bool isOk = true)
 {
     try
     {
         Globals.AppCfg.Shutdown = isOk;
         Globals.AppCfg.SaveDefaultSysConfigFile();//保存当前应用配置
         if (X_Axis != null && X_Axis.Enabled)
         {
             X_Axis.AxisAotoEscapeLimit();
         }
         if (Y_Axis != null && Y_Axis.Enabled)
         {
             Y_Axis.AxisAotoEscapeLimit();
         }
         if (T_Axis != null && T_Axis.Enabled)
         {
             T_Axis.AxisAotoEscapeLimit();
         }
         if (Z_Axis != null && Z_Axis.Enabled)
         {
             Z_Axis.AxisAotoEscapeLimit();
             Z_Axis.AxisGoHomeWork(true);        //Z轴回位操作
             ReportCmdKeyProgress(CmdKey.S0407); //Z轴回零成功
         }
         if (SPD != null && SPD.IsInit)
         {
             SPD.StopSpd();
             ReportCmdKeyProgress(CmdKey.S0607);
         }
         HwProvider.UnInitHardwareDriver();  //关闭所有硬件
         ReportCmdKeyProgress(CmdKey.S0023); //判定是否需要延迟断电
         backWorker.CancelAsync();
         LogHelper.CloseLogerConnect();
     }
     catch
     {
     }
     if (shutDown)
     {
         ProcessCmd.SetSystemShutdown();
     }
     else
     {
         //ProcessCmd.ShowWindowDesk();//显示Window桌面
         //ProcessCmd.ShowLogicalDriver();//显示硬盘
         //ProcessCmd.UsedTaskMgrForm();//使用任务管理器
         //ProcessCmd.SetSystytemLoadShell(true);//设置系统默认加载路径并注销系统
     }
     Application.Exit();
     return(true);
 }
Ejemplo n.º 4
0
 public static PointF GetCenterPoint(PointF p1, PointF p2, float angle)
 {
     try
     {
         T_Axis.AxisJogIncWork(angle);
         PointF center = Com.RotateMath.RotateCenterPoint(p1, p2, angle);
         X_Axis.AxisJogAbsWork(center.X);
         Y_Axis.AxisJogAbsWork(center.Y);
         return(center);
     }
     catch
     {
         return(p1);
     }
 }
Ejemplo n.º 5
0
 private static bool SystemInitCheckStatus()
 {
     if (!Globals.Load)
     {
         ReportCmdKeyProgress(CmdKey.S0106);
         return(false);
     }
     if (!X_Axis.Enabled)
     {
         X_Axis.EnableAmpC();
     }
     if (!Y_Axis.Enabled)
     {
         Y_Axis.EnableAmpC();
     }
     if (!Z_Axis.Enabled)
     {
         Z_Axis.EnableAmpC();
     }
     if (!T_Axis.Enabled)
     {
         T_Axis.EnableAmpC();
     }
     if (!X_Axis.Enabled)
     {
         ReportCmdKeyProgress(CmdKey.S0209);
         return(false);
     }
     if (!Y_Axis.Enabled)
     {
         ReportCmdKeyProgress(CmdKey.S0309);
         return(false);
     }
     if (!Z_Axis.Enabled)
     {
         ReportCmdKeyProgress(CmdKey.S0409);
         return(false);
     }
     if (!T_Axis.Enabled)
     {
         ReportCmdKeyProgress(CmdKey.S0509);
         return(false);
     }
     return(true);
 }
Ejemplo n.º 6
0
 public static bool EmergencyStop()
 {
     try
     {
         Globals.LedCmd.Cmd = Globals.DevData.EmgLedCmd.Cmd;
         ReportCmdKeyProgress(CmdKey.S0093);
         bool flag = X_Axis.JogStop();
         flag       &= Y_Axis.JogStop();
         flag       &= T_Axis.JogStop();
         flag       &= Z_Axis.JogStop();
         flag       &= Z_Axis.AxisJogAbsWork(Globals.MacData.ZStartPos);
         Globals.EMG = false;
         return(flag);
     }
     catch
     {
         Common.ReportCmdKeyProgress(CmdKey.S0091);
         return(false);
     }
 }
Ejemplo n.º 7
0
        public Metafile DrawPlot(Vector[] Xs, Vector[] Ys)
        {
            Metafile Plot = ImageMethods.MakeMetafile(PageWidth, PageHeight);
            Graphics g    = Graphics.FromImage(Plot);

            TheGraph    = new XYGraph(Xs.Length, GraphWidth, GraphHeight);
            TheGraph.Xs = Xs;
            TheGraph.Ys = Ys;
            TheGraph.DrawGraph(Xo, g);

            X_Axis.DrawAxis(g, TheGraph.Xmin, TheGraph.Xmax, NumberOfTicks);
            Y_Axis.DrawAxis(g, TheGraph.Ymin, TheGraph.Ymax, NumberOfTicks);

            Vector X_Axis_Title_c = (Xo + X_BR) / 2.0;

            X_Axis_Title_c.Values[1] += X_Axis.Height + HorizontalAxisTitlePad;
            X_Axis_Title.DrawTitle(g, X_Axis_Title_c);

            Vector Y_Axis_Title_c = (Xo + X_TL) / 2.0D;

            Y_Axis_Title_c.Values[0] -= Y_Axis.Width + VerticalAxisTitlePad;

            Y_Axis_Title.DrawTitle(g, Y_Axis_Title_c);

            Vector Title_c = X_TL + (X_BR - Xo) / 2.0D;

            Plot_Title.GetWidthAndHeight(g);
            Title_c.Values[1] += -TitlePad - Plot_Title.Height;
            Plot_Title.DrawTitle(g, Title_c);

            Vector OPPS_Graphics_c = new Vector(2);

            OOPS_Graphics_Title.GetWidthAndHeight(g);
            OPPS_Graphics_c.Values[0] = PageWidth - HorizontalAxisTitlePad - OOPS_Graphics_Title.Width / 2.0D;
            OPPS_Graphics_c.Values[1] = PageHeight - VerticalAxisTitlePad - OOPS_Graphics_Title.Height;
            OOPS_Graphics_Title.DrawTitle(g, OPPS_Graphics_c);

            g.Dispose();
            return(Plot);
        }
    void HandleOnDragStart(GameObject obj)
    {
        if (obj == X_Axis)
        {
            axis = Axis.X_Axis;
            Y_Axis.SetActive(false);
            Z_Axis.SetActive(false);
        }
        else if (obj == Y_Axis)
        {
            axis = Axis.Y_Axis;
            Z_Axis.SetActive(false);
            X_Axis.SetActive(false);
        }
        else if (obj == Z_Axis)
        {
            axis = Axis.Z_Axis;

            Y_Axis.SetActive(false);
            X_Axis.SetActive(false);
        }
    }
Ejemplo n.º 9
0
 public static PointF AlignT(PointF p1, PointF p2, PointF center, out float angle)
 {
     angle = (float)RotateMath.GetPointsAngle(p1, p2);
     try
     {
         if (!Globals.IsInit)
         {
             Common.ReportCmdKeyProgress(CmdKey.A0005);
             return(p1);
         }
         //PointF p = Com.RotateMath.PointRotate(center, new PointF((p1.X + p2.X) / 2, (p1.Y + p2.Y) / 2), a);
         PointF p = RotateMath.PointRotate(center, p1, angle);
         T_Axis.AxisJogIncWork(angle);
         X_Axis.JogAbs(Globals.MacData.TAdjSpeed, Globals.MacData.TAdjAcc, p.X);
         Y_Axis.AxisJogAbsWork(p.Y);
         return(p);
     }
     catch
     {
         Common.ReportCmdKeyProgress(CmdKey.S0091);
         return(p1);
     }
 }
Ejemplo n.º 10
0
 public static bool SystemInit()
 {
     try
     {
         if (SystemInitCheckStatus())
         {
             bool flag = true;
             ReportCmdKeyProgress(CmdKey.S0100); //开始系统初始化
             if (!InitAxisSystemParam())         //重新进行系统初始化
             {
                 flag = false;
                 ReportCmdKeyProgress(CmdKey.S0013);
             }
             else
             {
                 ReportCmdKeyProgress(CmdKey.S0012);
             }
             Globals.LedCmd.Cmd = Globals.DevData.InitLedCmd.Cmd;
             X_Axis.AxisAotoEscapeLimit();
             Y_Axis.AxisAotoEscapeLimit();
             Z_Axis.AxisAotoEscapeLimit();
             T_Axis.AxisAotoEscapeLimit();
             if (Z_Axis.AxisGoHomeWork(true))
             {
                 ReportCmdKeyProgress(CmdKey.S0407);
             }
             else
             {
                 ReportCmdKeyProgress(CmdKey.S0408);
                 flag &= false;
             }
             flag &= X_Axis.AxisGoHomeWork();
             flag &= Y_Axis.AxisGoHomeWork();
             flag &= T_Axis.AxisGoHomeWork();
             if (!WaitAxisMoveDone(500))//延迟20S判断
             {
                 ReportCmdKeyProgress(CmdKey.S0096);
                 return(false);
             }
             ReportCmdKeyProgress(CmdKey.S0108);
             flag &= X_Axis.SetPrePosition(X_Axis.Param.StartPos);
             flag &= Y_Axis.SetPrePosition(Y_Axis.Param.StartPos);
             flag &= T_Axis.SetPrePosition(T_Axis.Param.StartPos);
             ReportCmdKeyProgress(CmdKey.S0109);
             flag &= X_Axis.SetLimitSwitch(true);
             flag &= Y_Axis.SetLimitSwitch(true);
             flag &= T_Axis.SetLimitSwitch(true);
             flag &= X_Axis.SetSoftPLimit(X_Axis.Param.SoftPlimit);
             flag &= X_Axis.SetSoftNLimit(X_Axis.Param.SoftNlimit);
             flag &= Y_Axis.SetSoftPLimit(Y_Axis.Param.SoftPlimit);
             flag &= Y_Axis.SetSoftNLimit(Y_Axis.Param.SoftNlimit);
             flag &= T_Axis.SetSoftPLimit(T_Axis.Param.SoftPlimit);
             flag &= T_Axis.SetSoftNLimit(T_Axis.Param.SoftNlimit);
             if (flag)
             {
                 Globals.LedCmd.Cmd = Globals.DevData.IdleLedCmd.Cmd;
                 ReportCmdKeyProgress(CmdKey.S0101);
             }
             else
             {
                 ReportCmdKeyProgress(CmdKey.S0102);
             }
             return(flag);
         }
         else
         {
             return(false);
         }
     }
     catch
     {
         ReportCmdKeyProgress(CmdKey.S0098);
         return(false);
     }
 }
Ejemplo n.º 11
0
        private static void RunSynProgram()
        {
            try
            {
                do
                {
                    switch (Globals.AppFunState)
                    {
                    case SysFunState.Load:
                    {
                        Globals.Load = SystemLoad();
                        if (Globals.Load)
                        {
                            if (Globals.AutoInit)
                            {
                                Globals.AppFunState = SysFunState.SysInit;        //判断是否直接进行系统初始化操作
                            }
                            else
                            {
                                Globals.AppFunState = SysFunState.IDIE;        //空闲操作
                            }
                        }
                        else
                        {
                            Globals.AppFunState = SysFunState.IDIE;        //空闲操作
                        }
                    }
                    break;

                    case SysFunState.SysInit:    //系统初始化
                    {
                        Globals.IsInit      = SystemInit();
                        Globals.AppFunState = SysFunState.IDIE;        //空闲操作
                    }
                    break;

                    case SysFunState.TouchTesting:    //测高
                    {
                        if (Globals.IsInit)
                        {
                            ReportWorkingProgress(ProcessCmd.CsTestingStartCmd);
                            if (TouchTestingHeight())
                            {
                                ReportWorkingProgress(ProcessCmd.CsTestingEndCmd);
                            }
                            else
                            {
                                ReportWorkingProgress(ProcessCmd.CsTestingErrCmd);
                            }
                            Globals.Testing = false;
                            Z_Axis.AxisGoHomeWork(true);        //恢复系统默认回零模式
                            X_Axis.AxisJogAbsWork(X_Axis.Param.StartPos);
                            Y_Axis.AxisJogAbsWork(Y_Axis.Param.StartPos);
                            WaitAxisMoveDone();
                        }
                        else
                        {
                            ReportCmdKeyProgress(CmdKey.H0000);
                        }
                        Globals.AppFunState = SysFunState.IDIE;        //空闲操作
                        Globals.LedCmd.Cmd  = Globals.DevData.IdleLedCmd.Cmd;
                    }
                    break;

                    case SysFunState.NoTouchTesting: //测高
                    {
                        if (Globals.Paused)          //如果当前在暂停中进行非接触式测高
                        {
                            Globals.AppFunState = SysFunState.Cutting;
                            Globals.Paused      = false;
                        }
                        else
                        {
                            Globals.AppFunState = SysFunState.IDIE;        //空闲操作
                        }
                    }
                    break;

                    case SysFunState.Cutting:
                    {
                        if (Globals.Load && Globals.IsInit)
                        {
                            Globals.CutStop = false;
                            if (Globals.Cutting)
                            {
                                ReportCmdKeyProgress(CmdKey.P0101);
                                ReportWorkingProgress(ProcessCmd.CutContinuesCmd);
                            }
                            else
                            {
                                ReportCmdKeyProgress(CmdKey.P0100);
                                ReportWorkingProgress(ProcessCmd.CutStartCmd);
                            }
                            Globals.Cutting = true;
                            if (RunGroupCut(Globals.Group))
                            {
                                Globals.AppFunState = SysFunState.CutStop;        //空闲操作
                            }
                            else
                            {
                                if (Globals.CutStop)        //停止划切
                                {
                                    Globals.AppFunState = SysFunState.CutStop;
                                    break;
                                }
                                if (Globals.Line.Pause)        //暂停
                                {
                                    Globals.Paused      = true;
                                    Globals.AppFunState = SysFunState.CutPause;
                                    Globals.LedCmd.Cmd  = Globals.DevData.PauseLedCmd.Cmd;
                                    if (Globals.DevData.CutPauseCloseWater)        //关闭切割水
                                    {
                                        Common.DO[DoDefine.CUT_WATER] = false;
                                    }
                                    break;
                                }
                            }
                        }
                        else
                        {
                            Common.ReportCmdKeyProgress(CmdKey.S0090);
                            Globals.AppFunState = SysFunState.CutStop;        //空闲操作
                        }
                    }
                    break;

                    case SysFunState.Emergency:    //紧急停止
                    {
                        //if (Globals.Cutting)
                        //{
                        //    ReportWorkingProgress(ProcessCmd.CutSopCmd);//划切终止
                        //}
                        if (EmergencyStop())
                        {
                            Globals.AppFunState = SysFunState.IDIE;        //空闲操作
                        }
                        else
                        {
                            ReportCmdKeyProgress(CmdKey.S0097);
                            Globals.AppFunState = SysFunState.IDIE;        //空闲操作
                        }
                    }
                    break;

                    case SysFunState.CutStop:
                    {
                        ReportWorkingProgress(ProcessCmd.CutSopCmd);
                        Globals.Group.AddBladeCutedPieces();        //添加已划切片数
                        Globals.Group.ClearAllChannelInfo();        //清除对准信息
                        Globals.Cutting    = false;
                        Globals.Paused     = false;
                        Globals.CutStop    = false;
                        Globals.LedCmd.Cmd = Globals.DevData.StopLedCmd.Cmd;
                        if (Globals.DevData.CutStopCloseWater)        //关闭切割水
                        {
                            Common.DO[DoDefine.CUT_WATER] = false;
                        }
                        if (Globals.DevData.CutStopUnloadVacuum)        //打开真空开关
                        {
                            Common.DO[DoDefine.WORK_AIR] = false;
                        }
                        if (Globals.DevData.BuzzerUsed)        //打开蜂鸣器
                        {
                            DO[DoDefine.BUZZER] = true;
                        }
                        if (Globals.Group.Complate)                                              //正常切割完成
                        {
                            Globals.BldData.SaveBladeDataFile(Globals.AppCfg.BladeFileFullName); //保存当前文档
                            ReportCmdKeyProgress(CmdKey.P0103);
                        }
                        else
                        {
                            ReportCmdKeyProgress(CmdKey.P0104);
                        }
                        Globals.AppFunState = SysFunState.IDIE;        //空闲操作
                    }
                    break;

                    case SysFunState.AutoFocus:
                    {
                        if (Globals.Load && Globals.IsInit)
                        {
                            AutoFocus(Capture, 40, 32);
                        }
                        Globals.AppFunState = SysFunState.IDIE;        //空闲操作
                    }
                    break;

                    case SysFunState.HomeAutoFocus:
                    {
                        if (Globals.Load && Globals.IsInit)
                        {
                            Z_Axis.AxisGoHomeWork(true);
                            AutoFocus(Capture, 40, 32);
                        }
                        Globals.AppFunState = SysFunState.IDIE;        //空闲操作
                    }
                    break;

                    case SysFunState.CutPause:
                    {
                        //崩边检测
                        //继续划切
                        //if()  退出划切
                        if (Globals.CutStop)
                        {
                            Globals.AppFunState = SysFunState.CutStop;        //空闲操作
                        }
                        else
                        {
                            if (!Globals.Paused)                           //暂停取消
                            {
                                Globals.AppFunState = SysFunState.Cutting; //继续划切
                            }
                        }
                    }
                    break;

                    default:    // SyStatus.IDIE: 其他操作
                    {
                        //操作
                    }
                    break;
                    }
                    if (Globals.EMG)                                 //如果需要紧急停止
                    {
                        Globals.AppFunState = SysFunState.Emergency; //空闲操作
                    }
                    else
                    {
                        if (Globals.Load)
                        {
                            SystemCheckStatus();
                        }
                    }
                    Thread.Sleep(100);
                } while (!backWorker.CancellationPending);
            }
            catch (Exception ex)
            {
                LogHelper.WriteDebugException(ex);
                if (Globals.Load)
                {
                    Globals.EMG         = true;
                    Globals.AppFunState = SysFunState.Emergency;
                    backWorker.RunWorkerAsync();
                }
            }
        }
Ejemplo n.º 12
0
        public static bool RunLineCut(CutLine line, bool preCut = false)
        {
            do
            {
                switch (line.CutStep)
                {
                case CutStep.Ready:                                                            //等待各轴移动到位
                {
                    if (line.SinDir || !line.Dual || (line.Dual && Globals.DevData.DualZlife)) //如果为单项划切或者必须返回
                    {
                        Z_Axis.AxisJogAbsWork(line.SelfPos);                                   //划切一刀 必须Z轴上升到安全位
                    }
                    if (WaitAxisMoveDone())                                                    //判断各轴是否到位
                    {
                        line.Cutting  = true;                                                  //开始切割
                        line.FirstCut = true;
                        if (line.Seg != null && !line.Abs)
                        {
                            line.Seg.RepairXPosAndLength(Y_Axis.RealPos + line.StartPos.Y, line); //修正起始位置和长度
                        }
                        if (preCut)                                                               //根据是否预划切 修正划切速度
                        {
                            float s = Globals.Group.PreCut.GetPreDataSpeed();
                            if (s > 0 && s < line.Speed)        //预划切值有效且小于当前划切速度
                            {
                                line.Speed = s;
                            }
                            else
                            {
                                Globals.PreCut = false;
                            }
                        }
                        line.CutStep = CutStep.ST1;
                    }
                    else
                    {
                        return(false);
                    }
                }
                break;

                case CutStep.ST1:                                                                //X 轴移动到划切位置  需要根据当前Y轴位置重新计算X轴起点和划切长度
                {
                    X_Axis.JogAbs(line.BackSpeed, Globals.MacData.XCutBackAcc, line.StartPos.X); //设置X返回加速度
                    if (line.Abs)
                    {
                        Y_Axis.AxisJogAbsWork(line.StartPos.Y);
                    }
                    else
                    {
                        //float v = Math.Abs(line.StartPos.Y / line.Length * line.BackSpeed);
                        //Y_Axis.JogInc(v, 0.1f, line.StartPos.Y);
                        Y_Axis.AxisJogIncWork(line.StartPos.Y);        //相对位置
                    }
                    WaitAxisMoveDone(Y_Axis);
                    if (WaitAxisMoveDone(X_Axis))
                    {
                        line.CutStep = CutStep.ST2;
                    }
                    else
                    {
                        return(false);
                    }
                }
                break;

                case CutStep.ST2:    //Z轴下落到划切位置1
                {
                    float pos = line.ReDepth + Globals.TestHeightValue - Globals.BldData.RealCompensatedValue;
                    if (pos < Globals.TestHeightValue)        //防止切割到工作台
                    {
                        pos = Globals.TestHeightValue;
                    }
                    Z_Axis.JogAbs(Globals.MacData.ZCutSpeed, Globals.MacData.ZCutAcc, pos);        //Z轴下落到位 必须等候Z到位
                    if (WaitAxisMoveDone(Z_Axis))
                    {
                        line.CutStep = CutStep.ST3;
                    }
                    else
                    {
                        return(false);
                    }
                }
                break;

                case CutStep.ST3:                                                                              //X轴进行划切操作
                {
                    X_Axis.JogInc(line.Speed, Globals.MacData.XCutAcc, line.Dir ? -line.Length : line.Length); //X轴开始缓慢划切  判断划切方向
                    if (WaitAxisMoveDone(X_Axis))
                    {
                        line.CutStep = CutStep.ST4;
                        Globals.BldData.AddCutedLinesAndLength(1, line.Length / 1000);           //已划切刀数
                    }
                    else
                    {
                        return(false);
                    }
                }
                break;

                case CutStep.ST4:                                                              //Z轴是否抬刀
                {
                    if (line.SinDir || !line.Dual || (line.Dual && Globals.DevData.DualZlife)) //如果为单项划切或者必须返回
                    {
                        Z_Axis.AxisJogAbsWork(line.SelfPos);                                   //划切一刀 必须Z轴上升到安全位
                        if (!WaitAxisMoveDone(Z_Axis))
                        {
                            return(false);
                        }
                    }
                    if (line.Dual)
                    {
                        line.CutStep = CutStep.ST5;
                    }
                    else
                    {
                        line.CutStep = CutStep.CutStop;
                    }
                }
                break;

                case CutStep.ST5:    //X轴返回到划切位置
                {
                    line.FirstCut = false;
                    if (line.SinDir)                                                                 //如果是单向划切X轴必须返回到划切位置
                    {
                        X_Axis.JogAbs(line.BackSpeed, Globals.MacData.XCutBackAcc, line.StartPos.X); //需要重新设置X划切返回速度
                        if (!WaitAxisMoveDone(X_Axis))
                        {
                            return(false);
                        }
                    }
                    line.CutStep = CutStep.ST6;
                }
                break;

                case CutStep.ST6:    //Z轴下落到划切位置
                {
                    if (preCut)      //根据是否预划切 修正划切速度
                    {
                        float s = Globals.Group.PreCut.GetPreDataSpeed();
                        if (s > 0 && s < line.Speed)        //预划切值有效且小于当前划切速度
                        {
                            line.Speed = s;
                        }
                        else
                        {
                            Globals.PreCut = false;
                        }
                    }
                    float pos = line.ReDepth2 + Globals.TestHeightValue - Globals.BldData.RealCompensatedValue;
                    if (pos < Globals.TestHeightValue)
                    {
                        pos = Globals.TestHeightValue;
                    }
                    Z_Axis.JogAbs(Globals.MacData.ZCutSpeed, Globals.MacData.ZCutAcc, pos);        //Z轴下落到位置2
                    if (WaitAxisMoveDone(Z_Axis))
                    {
                        line.CutStep = CutStep.ST7;
                    }
                    else
                    {
                        return(false);
                    }
                }
                break;

                case CutStep.ST7:    //X轴开始划切
                {
                    if (line.SinDir)
                    {
                        X_Axis.JogInc(line.Speed, Globals.MacData.XCutAcc, line.Dir ? -line.Length : line.Length);        //需要设置返回加速度
                    }
                    else
                    {
                        X_Axis.JogInc(line.Speed, Globals.MacData.XCutAcc, line.Dir ? line.Length : -line.Length);
                    }
                    if (WaitAxisMoveDone(X_Axis))
                    {
                        line.CutStep = CutStep.ST8;
                        Globals.BldData.AddCutedLinesAndLength(1, line.Length / 1000);           //已划切刀数
                    }
                    else
                    {
                        return(false);
                    }
                }
                break;

                case CutStep.ST8:                            //Z轴进行抬刀操作
                {
                    if (line.SinDir || !line.Dual)           //如果为单项划切或者必须返回
                    {
                        Z_Axis.AxisJogAbsWork(line.SelfPos); //划切一刀 必须Z轴上升到安全位
                    }
                    line.Cutting = false;
                    line.CutStep = CutStep.CutStop;
                }
                break;

                case CutStep.CutStop:    //划切结束
                {
                    if (line.Pause)
                    {
                        line.CutStep = CutStep.Pause;
                    }
                    else
                    {
                        line.CutStep = CutStep.STEnd;        //当前先判断为切割完成 后续需要判断是否暂停 刀痕检测  和测高
                    }
                    ReportWorkingProgress(ProcessCmd.CutLineCmd, line);
                }
                break;

                case CutStep.KniefCheck:    //进行刀痕检测
                {
                }
                break;

                case CutStep.TestHeigh:    //进行非接触式测高
                {
                }
                break;

                case CutStep.Pause:
                {
                    ReportCmdKeyProgress(CmdKey.P0105);
                    line.CutStep = CutStep.STEnd;           //配置为划切完成
                    return(false);                          //中断当前划切操作
                }

                case CutStep.STEnd:
                {
                    line.Complate = true;
                }
                break;

                default:
                {
                }
                break;
                }
                if (Globals.CutStop)
                {
                    return(false);
                }
                ReportWorkingProgress(ProcessCmd.CutLineCmd, line);
                CuttingCheckStatus();
                Thread.Sleep(10);
            } while (!line.Complate);//没有完成就一直循环
            return(true);
        }//划切线
Ejemplo n.º 13
0
        public static bool TouchTestingHeight()
        {
            TabData data = Globals.TabData;
            int     tick = 30;

            ReportCmdKeyProgress(CmdKey.H0001);
            Globals.TestCancel   = false;
            Globals.Testing      = true;
            Globals.TestedHeight = false;   //清零系统标志位
            RunSpd(Globals.TabData.SpdSpeed, Globals.DevData.TestTime);
            Globals.LedCmd.Cmd = Globals.DevData.TestingLedCmd.Cmd;
            Z_Axis.AxisJogAbsWork(Z_Axis.Param.StartPos, true); //Z轴先返回到最高点
            if (data.UsedTable.RotateType)                      //圆盘测高
            {
                data.UsedTable.CurTpos += Globals.MacData.TTestOffset;
                if (data.UsedTable.CurTpos > data.MaxTpos)
                {
                    data.UsedTable.CurTpos = data.UsedTable.StartTpos;
                }
            }
            else//方盘测高
            {
                data.UsedTable.CurYpos += Globals.MacData.YTestOffset;
                data.UsedTable.CurTpos  = data.UsedTable.StartTpos;
                if (data.UsedTable.CurYpos - data.UsedTable.StartYpos > data.UsedTable.Length)
                {
                    data.UsedTable.CurYpos = data.UsedTable.StartYpos;
                }
            }
            X_Axis.AxisJogAbsWork(data.UsedTable.CurXpos);   //X值坐标位置
            Y_Axis.AxisJogAbsWork(data.UsedTable.CurYpos);   //Y值坐标位置
            WaitAxisMoveDone();                              //等待X Y T移动到位
            Z_Axis.AxisJogAbsWork(data.UsedTable.ZLowPos);   //Z轴移动到高速位置
            ReportCmdKeyProgress(CmdKey.H0003);
            do
            {
                if (!TesttingCheckStatus())
                {
                    return(false);
                }
                Thread.Sleep(50);
            } while (!Z_Axis.IsInPosition);                 //等待Z轴到位
            Z_Axis.SetLimitSwitch(false);
            float[] num        = new float[data.TestTick];
            float   startPos   = 30;
            float   homeOffset = Globals.MacData.ZRiseValue;//Z轴上升高度
            float   counterPos = Z_Axis.PhyPos;

            for (int i = 0; i < data.TestTick; i++)
            {
                ReportCmdKeyProgress((CmdKey)((int)CmdKey.H0004 + i));
                Z_Axis.GoHome(Limit.UserLimit, Globals.MacData.ZTestSpeed, Globals.MacData.ZTestAcc, homeOffset); //Z轴开始向下测高操作 ,每次操作限时60S
                tick = 600;
                do
                {
                    if (!TesttingCheckStatus())
                    {
                        return(false);
                    }
                    tick--;
                    Thread.Sleep(100);
                } while (!Z_Axis.HomeIsSuccessful && tick > 0);                   //等待回零完成
                startPos = (Z_Axis.PhyPos - counterPos) + data.UsedTable.ZLowPos; //计算当前实际位置
                Z_Axis.SetPrePosition(startPos);                                  //设置起始位置
                num[i] = startPos - homeOffset;
                ReportWorkingProgress(ProcessCmd.CsTestingTickCmd, num[i]);
            }
            if (num.Max() - num.Min() > data.CsMaxErrValue)//测高误差过大
            {
                ReportCmdKeyProgress(CmdKey.H0007);
                return(false);
            }
            else
            {
                data.CsTestValue        = num.Average();
                Globals.TestHeightValue = data.CsTestValue;
                Globals.TestedHeight    = true;//系统测高标志位
                ReportCmdKeyProgress(CmdKey.H0008);
                return(true);
            }
        }
Ejemplo n.º 14
0
        public static bool RunGroupCut(CutGroup g)
        {
            if (StartCuttingIsReady(g.SpdSpeed))
            {
                bool flag = true;
                if (!g.Cutting)
                {
                    g.Cutting = true;
                    ReportWorkingProgress(ProcessCmd.CutGroupCmd, g);
                }
                foreach (var item in g.ChipCHs)
                {
                    if (item.Enable && !item.Complate)
                    {
                        item.Complate = RunChannelCut(item);
                        flag         &= item.Complate;
                        if (flag)
                        {
                            foreach (var c in g.ChipS)//划切完当前片子判断当前片是否完成划切
                            {
                                c.Complate = c.IsComplated;
                            }
                            if (!g.IsComplated)
                            {
                                ReportCmdKeyProgress(CmdKey.P0110);
                            }
                        }
                    }
                    if (!flag)
                    {
                        return(false);
                    }
                }
                g.Complate = flag;
                if (flag)
                {
                    g.Cutting         = false;
                    Globals.SpdStable = false; //重新进行稳定主轴
                    Globals.Line      = null;  //清除当前划切线
                    ReportWorkingProgress(ProcessCmd.CutGroupCmd, g);
                    switch (g.ExitPosMode)
                    {
                    case 0:    //对准位置
                    {
                        X_Axis.AxisJogAbsWork(g.ChipCHs[0].AlignPoint.X);
                        Y_Axis.AxisJogAbsWork(g.ChipCHs[0].AlignPoint.Y + Globals.KniefAdj);        //划切完成移动到对准 划切位置+偏移值
                        T_Axis.AxisJogAbsWork(g.ChipCHs[0].AlignT);
                    }
                    break;

                    case 1:    //中心位置
                    {
                        X_Axis.AxisJogAbsWork(Globals.ViewCenter.X);
                        Y_Axis.AxisJogAbsWork(Globals.ViewCenter.Y);
                    }
                    break;

                    case 2:    //起始位置
                    {
                        X_Axis.AxisJogAbsWork(x_Axis.Param.StartPos);
                        Y_Axis.AxisJogAbsWork(y_Axis.Param.StartPos);
                        T_Axis.AxisJogAbsWork(z_Axis.Param.StartPos);
                    }
                    break;

                    case 3:    //自定义位置
                    {
                        X_Axis.AxisJogAbsWork(g.ExitXpos);
                        Y_Axis.AxisJogAbsWork(g.ExitYpos);
                        T_Axis.AxisJogAbsWork(g.ExitTpos);
                    }
                    break;
                    }
                    WaitAxisMoveDone();//等待移动停止
                    ReportCmdKeyProgress(CmdKey.P0107);
                }
                return(g.Complate);
            }
            else
            {
                ReportCmdKeyProgress(CmdKey.P0106);
                return(false);
            }
        }
Ejemplo n.º 15
0
        }//划切分度

        private static bool RunningChannelCut(CutChannel c)
        {
            bool flag = true;

            Globals.Channel = c;
            Z_Axis.AxisJogAbsWork(c.SelfPos);             //Z轴移动到安全位置
            WaitAxisMoveDone(Z_Axis);
            T_Axis.AxisJogAbsWork(c.AlignT + c.TPosAdj);  //T轴移动到偏移位置
            X_Axis.AxisJogAbsWork(c.PausePos.X);          //X轴移动到暂停位置
            Y_Axis.AxisJogAbsWork(c.PausePos.Y);          //Y轴移动到暂停位置(第一次划切默认为起始位置)
            WaitAxisMoveDone();                           //等待各轴运动成功
            c.Cutting = true;
            if (!c.Rotated)
            {
                ReportWorkingProgress(ProcessCmd.CutChStartCmd, c); //开始划切当前通道
                c.Rotated = true;
            }
            if (c.StandMode)
            {
                flag = RunSegmentCut(c);//标准模式划切
            }
            else
            {
                foreach (var item in c.Segs)
                {
                    if (!item.Complate)
                    {
                        ReportWorkingProgress(ProcessCmd.CutSegStartCmd, c); //进行通道划切完成
                        item.Complate = RunSegmentCut(item);
                        if (item.Complate)
                        {
                            c.CuttingIndex += item.Count;
                        }
                        else
                        {
                            flag = false;
                            break;//退出当前循环
                        }
                    }
                    flag &= item.Complate;
                }
            }
            if (flag)
            {
                c.Cutting = false;
                ReportCmdKeyProgress(CmdKey.P0109);
                ReportWorkingProgress(ProcessCmd.CutChEndCmd, c); //当前通道划切完成
            }
            else
            {
                c.PausePos.Y = Y_Axis.RealPos;               //设置Y暂停位置为当前的位置
                c.PausePos.X = Globals.ViewCenter.X;         //设置X暂停位置为显微镜中心位置
                Z_Axis.AxisJogAbsWork(c.SelfPos);            //Z轴移动到安全位置
                WaitAxisMoveDone(Z_Axis);
                X_Axis.AxisJogAbsWork(Globals.ViewCenter.X); //移动到显微镜视野
                Y_Axis.AxisJogIncWork(Globals.KniefAdj);     //划切位置+刀痕偏移值 将线移动到显微镜下面
                WaitAxisMoveDone();                          //等待移动停止
                if (!Globals.CutStop)                        //判断是因为暂停导致的返回
                {
                    ReportWorkingProgress(ProcessCmd.CutPauseCmd, c);
                }
            }
            c.Complate = flag;
            return(c.Complate);
        }