Пример #1
0
        protected override void LogicImpl()
        {
            switch (LG.Step)
            {
            case 1:
                TaskManager.Default.FindTask("皮带流程").Start();
                LG.ImmediateStepNext(2);
                break;

            case 2:
                if (TaskManager.Default.FindTask("皮带流程").Status)
                {
                    TaskManager.Default.FindTask("左打磨平台").Start();
                    TaskManager.Default.FindTask("右打磨平台").Start();
                    TaskManager.Default.FindTask("右焊锡平台").Start();
                    TaskManager.Default.FindTask("左焊锡平台").Start();
                    LG.ImmediateStepNext(3);
                }
                break;

            case 3:
                if (
                    TaskManager.Default.FindTask("左打磨平台").Status &&
                    TaskManager.Default.FindTask("右打磨平台").Status &&
                    TaskManager.Default.FindTask("右焊锡平台").Status &&
                    TaskManager.Default.FindTask("左焊锡平台").Status
                    )
                {
                    LG.ImmediateStepNext(0xef);
                }
                break;

            case 0xef:
                if (TaskManager.Default.FSM.MODE == 1 && LG.Delay(2000))
                {
                    LG.ImmediateStepNext(1);
                }
                else
                {
                    LG.End();
                    TaskManager.Default.FSM.Change(FSMStaDef.STOP);
                }
                break;
            }
        }
Пример #2
0
        protected override void LogicImpl()
        {
            switch (LG.Step)
            {
            case 1:    //z抬高到翻转位置
                if (DeviceRsDef.Axis_Z5.status == 0)
                {
                    DeviceRsDef.Axis_Z5.MC_MoveAbs(ProjectData.Instance.SaveData.ReverseData.ReversZ);
                    LG.ImmediateStepNext(2);
                }
                break;

            case 2:    //XR到达工作的位置
                if (DeviceRsDef.Axis_Z5.status == 0)
                {
                    DeviceRsDef.Axis_X5.MC_MoveAbs(ProjectData.Instance.SaveData.ReverseData.WorkPos.X);
                    DeviceRsDef.Axis_R5.MC_MoveAbs(ProjectData.Instance.SaveData.ReverseData.WorkPos.R);
                    LG.ImmediateStepNext(3);
                }
                break;

            case 3:    //Z到达工作的位置
                if (DeviceRsDef.Axis_X5.status == 0 && DeviceRsDef.Axis_R5.status == 0)
                {
                    DeviceRsDef.Axis_Z5.MC_MoveAbs(ProjectData.Instance.SaveData.ReverseData.WorkPos.Z);
                    LG.ImmediateStepNext(4);
                }
                break;

            case 4:    //夹紧气缸打开
                if (DeviceRsDef.Axis_Z5.status == 0)
                {
                    DeviceRsDef.Q_BeforeTurnCyl.Value = true;
                    LG.ImmediateStepNext(5);
                }
                break;

            case 5:    //Z轴到翻转位置
                if (LG.Delay(50) && DeviceRsDef.I_BeforeTurnCylClosed.value)
                {
                    DeviceRsDef.Axis_Z5.MC_MoveAbs(ProjectData.Instance.SaveData.ReverseData.ReversZ);
                    LG.ImmediateStepNext(6);
                }
                break;

            case 6:    //R轴旋转
                if (DeviceRsDef.I_BeforeTurnCylClosed.value && DeviceRsDef.Axis_Z5.status == 0)
                {
                    DeviceRsDef.Axis_R5.MC_MoveSpd(1);
                    LG.ImmediateStepNext(7);
                }
                break;

            case 7:    //转到180度停止R
                if (DeviceRsDef.I_BeforeTurnCylClosed.value && DeviceRsDef.I_TurnCyl180.value)
                {
                    DeviceRsDef.Axis_R5.MC_Stop();
                    LG.ImmediateStepNext(8);
                }
                break;

            case 8:    //Z轴下降到工作位置
                if (DeviceRsDef.I_BeforeTurnCylClosed.value && DeviceRsDef.I_TurnCyl180.value && DeviceRsDef.Axis_R5.status == 0)
                {
                    DeviceRsDef.Axis_Z5.MC_MoveAbs(ProjectData.Instance.SaveData.ReverseData.WorkPos.Z);
                    LG.ImmediateStepNext(9);
                }
                break;

            case 9:    //夹紧气缸打开
                if (DeviceRsDef.I_BeforeTurnCylClosed.value && DeviceRsDef.I_TurnCyl180.value && DeviceRsDef.Axis_Z5.status == 0)
                {
                    DeviceRsDef.Q_BeforeTurnCyl.Value = false;
                    LG.ImmediateStepNext(11);
                }
                break;

            case 11:    //Z轴回到翻转位
                if (LG.Delay(50))
                {
                    DeviceRsDef.Axis_Z5.MC_MoveAbs(ProjectData.Instance.SaveData.ReverseData.ReversZ);
                    LG.ImmediateStepNext(12);
                }
                break;

            case 12:    //R轴回零度
                if (LG.Delay(50) && DeviceRsDef.Axis_Z5.status == 0)
                {
                    DeviceRsDef.Axis_R5.MC_MoveSpd(-1);
                    LG.ImmediateStepNext(13);
                }
                break;

            case 13:    //回零到位
                if (DeviceRsDef.I_TurnCyl.value)
                {
                    DeviceRsDef.Axis_R5.MC_Stop();
                    LG.ImmediateStepNext(14);
                }
                break;

            case 14:    //XZ到结束位置
                if (DeviceRsDef.Axis_R5.status == 0)
                {
                    DeviceRsDef.Axis_Z5.MC_MoveAbs(ProjectData.Instance.SaveData.ReverseData.EndPos.Z);
                    DeviceRsDef.Axis_X5.MC_MoveAbs(ProjectData.Instance.SaveData.ReverseData.EndPos.X);
                    LG.ImmediateStepNext(15);
                }
                break;

            case 15:    //结束
                if (DeviceRsDef.Axis_X5.status == 0 && DeviceRsDef.Axis_Z5.status == 0)
                {
                    LG.ImmediateStepNext(0xef);
                    ProjectData.Instance.SaveData.processdata.PlatformData[4].Isreversed = true;
                }
                break;

            case 0xef:
                LG.End();
                break;
            }
        }
Пример #3
0
        protected override void LogicImpl()
        {
            switch (LG.Step)
            {
            case 1:
                for (int i = 0; i < 60; i++)
                {
                    //板卡输出去使能
                    DeviceRsDef.MotionCard.MotionFun.OutputOFF(i);
                    DeviceRsDef.MotionCard1.MotionFun.OutputOFF(i);
                }
                for (int i = 0; i < DeviceRsDef.AxisList.Count; i++)    //轴停止
                {
                    DeviceRsDef.AxisList[i].MC_Stop();
                }
                LogicMission.BeltFeedFun.FromReset = true;
                MachineAlarm.ClearAlarm();    //清除报警
                LG.ImmediateStepNext(10);
                break;

            case 10:
                if (LG.Delay(2000))
                {
                    //ZR轴回零
                    DeviceRsDef.Axis_Z1.MC_Home();
                    DeviceRsDef.Axis_Z2.MC_Home();
                    DeviceRsDef.Axis_Z3.MC_Home();
                    DeviceRsDef.Axis_Z4.MC_Home();
                    //DeviceRsDef.Axis_Z5.MC_Home();

                    DeviceRsDef.Axis_R1.MC_Home();
                    DeviceRsDef.Axis_R2.MC_Home();
                    DeviceRsDef.Axis_R3.MC_Home();
                    DeviceRsDef.Axis_R4.MC_Home();
                    LG.ImmediateStepNext(2);
                }
                break;

            case 2:
                if (Axis.allaixsarrive())
                {
                    DeviceRsDef.Axis_X1.MC_Home();
                    DeviceRsDef.Axis_X2.MC_Home();
                    DeviceRsDef.Axis_X3.MC_Home();
                    DeviceRsDef.Axis_X4.MC_Home();
                    //DeviceRsDef.Axis_X5.MC_Home();

                    DeviceRsDef.Axis_Y1.MC_Home();
                    DeviceRsDef.Axis_Y2.MC_Home();
                    DeviceRsDef.Axis_Y3.MC_Home();
                    DeviceRsDef.Axis_Y4.MC_Home();


                    //DeviceRsDef.Axis_R5.MC_Home();
                    //DeviceRsDef.Axis_X5.MC_Home();
                    DeviceRsDef.Axis_Belt.MC_Home();
                    LG.ImmediateStepNext(3);
                }
                break;

            case 3:
                if (Axis.allaixsarrive())
                {
                    for (int i = 0; i < 2; i++)
                    {
                        Axis.PolishX[i].MC_MoveAbs(ProjectData.Instance.SaveData.PolishPlatform[i].ResetPos.X);
                        Axis.PolishY[i].MC_MoveAbs(ProjectData.Instance.SaveData.PolishPlatform[i].ResetPos.Y);
                        Axis.PolishZ[i].MC_MoveAbs(ProjectData.Instance.SaveData.PolishPlatform[i].ResetPos.Z);
                        Axis.PolishR[i].MC_MoveAbs(ProjectData.Instance.SaveData.PolishPlatform[i].ResetPos.R);
                    }
                    for (int i = 0; i < 2; i++)
                    {
                        Axis.SolderX[i].MC_MoveAbs(ProjectData.Instance.SaveData.SolderPlatform[i].ResetPos.X);
                        Axis.SolderY[i].MC_MoveAbs(ProjectData.Instance.SaveData.SolderPlatform[i].ResetPos.Y);
                        Axis.SolderZ[i].MC_MoveAbs(ProjectData.Instance.SaveData.SolderPlatform[i].ResetPos.Z);
                        Axis.SolderR[i].MC_MoveAbs(ProjectData.Instance.SaveData.SolderPlatform[i].ResetPos.R);
                    }

                    LG.ImmediateStepNext(0xef);
                }
                break;

            case 0xef:
                if (Axis.allaixsarrive())
                {
                    LG.End();
                    TaskManager.Default.FSM.Change(FSMStaDef.STOP);
                }
                break;
            }
        }
Пример #4
0
        protected override void LogicImpl()
        {
            var Para = Database.AllData.Data.Beltdata;

            switch (LG.Step)
            {
            case 1:
                DeviceRsDef.Q_Rise.OFF();                                            //顶升气缸不顶升
                DeviceRsDef.Q_StopBlock.OFF();                                       //阻挡气缸不下降
                if (DeviceRsDef.I_StopBlockUp.Value && DeviceRsDef.I_RiseDown.Value) //顶升气缸下限和阻挡气缸上限感应到
                {
                    LG.StepNext(2);
                }
                break;

            case 2:
                DeviceRsDef.Axis_BeltFeed.MC_MoveSpd(10);    //中间皮带运行
                DeviceRsDef.Axis_BeltPreFeed.MC_MoveSpd(10); //左侧皮带运行
                LG.StepNext(3);
                break;

            case 3:
                if (fun.F_Trig(DeviceRsDef.I_BeltPreFeedOut.Value)) //载具已经脱离左侧皮带
                {
                    DeviceRsDef.Axis_BeltPreFeed.MC_StopDec();      //左侧皮带停止
                    LG.StepNext(4);
                }
                break;

            case 4:
                if (DeviceRsDef.I_BeltFeedIn.Value && LG.Delay(Para.RiseOnDelay)) //载具到位
                {
                    DeviceRsDef.Axis_BeltFeed.MC_StopDec();                       //中间皮带停止
                    LG.StepNext(5);
                }
                break;

            case 5:
                if (DeviceRsDef.Axis_BeltFeed.status == 0)
                {
                    DeviceRsDef.Q_Rise.ON();    //顶升气缸顶起固定
                    LG.StepNext(6);
                }
                break;

            case 6:
                if (DeviceRsDef.I_RiseUp.Value)    //顶升气缸上限位
                {
                    DeviceRsDef.Q_StopBlock.ON();  //阻挡气缸
                    LG.StepNext(7);
                }
                break;

            case 7:
                if (DeviceRsDef.I_StopBlockDown.Value)    //阻挡气缸下限到位
                {
                    LG.StepNext(0xef);
                }
                break;

            case 0xef:
                LG.End();
                break;
            }
        }
Пример #5
0
        protected override void LogicImpl()
        {
            var para = ProjectData.Instance.SaveData.SolderCleanData[ID];

            switch (LG.Step)
            {
            case 1:    //RZ抬起
                if (Axis.SolderR[ID].status == 0 && Axis.SolderZ[ID].status == 0)
                {
                    Axis.SolderR[ID].MC_MoveAbs(0);
                    Axis.SolderZ[ID].MC_MoveAbs(0);
                    LG.ImmediateStepNext(2);
                }
                break;

            case 2:    //XY到清洗位
                if (Axis.SolderR[ID].status == 0 && Axis.SolderZ[ID].status == 0)
                {
                    Axis.SolderX[ID].MC_MoveAbs(para.CleanPos.X);
                    Axis.SolderY[ID].MC_MoveAbs(para.CleanPos.Y);
                    LG.ImmediateStepNext(3);
                }
                break;

            case 3:    //RZ到清洗位
                if (Axis.SolderX[ID].status == 0 && Axis.SolderY[ID].status == 0)
                {
                    Axis.SolderR[ID].MC_MoveAbs(para.CleanPos.R);
                    Axis.SolderZ[ID].MC_MoveAbs(para.CleanPos.Z);
                    LG.ImmediateStepNext(4);
                }
                break;

            case 4:    //打开吹气电磁阀
                if (Axis.SolderR[ID].status == 0 && Axis.SolderZ[ID].status == 0)
                {
                    Axis.Soldervalve[ID].ON();
                    LG.ImmediateStepNext(5);
                }
                break;

            case 5:    //吹气清洗时间
                if (LG.Delay(para.CleanTime))
                {
                    Axis.Soldervalve[ID].OFF();
                    LG.ImmediateStepNext(6);
                }
                break;

            case 6:
                Axis.SolderR[ID].MC_MoveAbs(0);
                Axis.SolderZ[ID].MC_MoveAbs(0);
                LG.ImmediateStepNext(7);
                break;

            case 7:
                if (Axis.SolderR[ID].status == 0 && Axis.SolderZ[ID].status == 0)
                {
                    LG.ImmediateStepNext(0xef);
                }
                break;

            case 0xef:
                LG.End();
                break;
            }
        }
Пример #6
0
        protected override void LogicImpl()
        {
            switch (LG.Step)
            {
            case 1:
                if (DeviceRsDef.Axis_Belt.currPos == 0 && FromReset)
                {
                    DeviceRsDef.Q_BeltLocatedCyl.ON();
                    if (TaskManager.Default.FSM.MODE == 1 && DeviceRsDef.I_CylLocked.Value)
                    {
                        LG.ImmediateStepNext(7);
                        FromReset = false;
                    }
                    else if (DeviceRsDef.I_CylLocked.Value)
                    {
                        LG.ImmediateStepNext(0xef);
                        FromReset = false;
                    }
                }
                else
                {
                    DeviceRsDef.Q_BeltLocatedCyl.OFF();    //打开环形导轨的定位气缸
                    LG.ImmediateStepNext(10);
                }
                break;

            case 10:
                if (LG.Delay(100) && DeviceRsDef.I_CylUnLocked.Value)
                {
                    if (DeviceRsDef.I_material1.value)    //环形定位气缸打开状态且有零件
                    {
                        LG.ImmediateStepNext(2);
                    }
                    else if (TaskManager.Default.FSM.MODE == 1 && DeviceRsDef.I_CylUnLocked.Value)
                    {
                        LG.ImmediateStepNext(2);
                    }
                    else
                    {
                        MachineAlarm.SetAlarm(AlarmLevelEnum.Level2, "零件未放入,零件感应1未感应到物料");
                        LG.StepNextWithOut(2, FSMStaDef.ALARM);
                    }
                }
                break;

            case 2:
                if (
                    LG.Delay(500) &&          //气缸延时200ms
                    TaskManager.Default.FindTask("左打磨平台").Status &&
                    TaskManager.Default.FindTask("右打磨平台").Status &&
                    TaskManager.Default.FindTask("左焊锡平台").Status &&
                    TaskManager.Default.FindTask("右焊锡平台").Status
                    )
                {
                    DeviceRsDef.Axis_Belt.MC_MoveRel(230);    //传送带向前走230mm
                    LG.ImmediateStepNext(4);
                }
                break;

            case 4:
                if (LG.Delay(100) && DeviceRsDef.Axis_Belt.status == 0) //延时100
                {
                    DeviceRsDef.Axis_Belt.MC_Stop();                    //传送带停止
                    LG.ImmediateStepNext(5);
                }
                break;

            case 5:
                if (DeviceRsDef.Axis_Belt.status == Device.AxState.AXSTA_READY) //皮带轴停止
                {
                    DeviceRsDef.Q_BeltLocatedCyl.ON();                          //打开皮带的定位气缸
                    LG.ImmediateStepNext(6);
                }
                break;

            case 6:
                if (LG.Delay(150) && DeviceRsDef.I_CylLocked.value) //环形定位气缸已经锁定,延时150ms
                {
                    if (TaskManager.Default.FSM.MODE == 1)          //老化模式
                    {
                        LG.ImmediateStepNext(7);
                    }
                    else
                    {
                        LG.ImmediateStepNext(0xef);
                    }
                }
                break;

            case 7:
                if (LG.Delay(50))
                {
                    LG.End();    //老化模式下不进行平台的数据传递
                }
                break;

            case 0xef:
                if (LG.Delay(50))
                {
                    LG.End();
                    ProjectData.Instance.SaveData.processdata.PlatformData[0].IsTined = true;                    //第一个工位有料
                    for (int i = ProjectData.Instance.SaveData.processdata.PlatformData.Count() - 1; i > 0; i--) //工位信息传递
                    {
                        ProjectData.Instance.SaveData.processdata.PlatformData[i].SetLastPlatformData(ProjectData.Instance.SaveData.processdata.PlatformData[i - 1]);
                    }
                }
                break;
            }
        }
Пример #7
0
        protected override void LogicImpl()
        {
            var ProcessData = ProjectData.Instance.SaveData.processdata;

            switch (LG.Step)
            {
            case 1:    //RZ到位
                ProcessData.SolderList[ID].Clear();
                if (Axis.SolderR[ID].status == 0 && Axis.SolderZ[ID].status == 0)
                {
                    NUM = 0;
                    Axis.SolderR[ID].MC_MoveAbs(0);
                    Axis.SolderZ[ID].MC_MoveAbs(ProjectData.Instance.SaveData.SolderData[ID].SafeZ);
                    LG.ImmediateStepNext(2);
                }
                break;

            case 2:    //XY到位
                if (Axis.SolderR[ID].status == 0 && Axis.SolderZ[ID].status == 0)
                {
                    if (ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].Ban)
                    {
                        NUM++;
                        break;
                    }
                    Axis.SolderX[ID].MC_MoveAbs(ProcessData.SolderCTPos[ID][NUM].X);
                    Axis.SolderY[ID].MC_MoveAbs(ProcessData.SolderCTPos[ID][NUM].Y);
                    LG.ImmediateStepNext(3);
                }
                break;

            case 3:    //拍照
                if (Axis.SolderX[ID].status == 0 && Axis.SolderY[ID].status == 0 && LG.Delay(ProjectData.Instance.SaveData.SolderData[ID].CTDelay))
                {
                    LG.ImmediateStepNext(4);
                }
                break;

            case 4:    //获取相机数据
                if (/*VisionProject.Instance.visionApi.TrigComplete()||*/ TaskManager.Default.FSM.MODE == 1)
                {
                    if (TaskManager.Default.FSM.MODE == 1)
                    {
                        SolderPosData _pos = new SolderPosData();
                        _pos.Pos.X = ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].X;
                        _pos.Pos.Y = ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].Y;
                        _pos.Pos.R = 0;
                        if (ProjectData.Instance.SaveData.processdata.Agingdataforsolder == null)
                        {
                            ProjectData.Instance.SaveData.processdata.Agingdataforsolder = new SolderDef();
                        }
                        ProjectData.Instance.SaveData.processdata.Agingdataforsolder.Z = 25;

                        _pos.Pos        = IOandAxisFun.CameraToSolderPos(ID, _pos.Pos);
                        _pos.SolderData = ProjectData.Instance.SaveData.processdata.Agingdataforsolder;
                        ProcessData.SolderList[ID].Add(_pos);    //增加到list里
                        NUM++;
                        if (NUM < ProjectData.Instance.SaveData.processdata.SolderCTPos[ID].Count)
                        {
                            LG.ImmediateStepNext(2);    //还有打磨拍照点继续打磨i拍照
                        }
                        else
                        {
                            NUM = 0;
                            LG.ImmediateStepNext(5);
                        }
                    }
                    else if (true)
                    {
                        foreach (var p in VisionInteraction.Instance.WhichSolder(ID).listModel)
                        {
                            int type = p.modelindex;
                            int num  = 0;
                            foreach (var item in ProjectData.Instance.SaveData.processdata.WhichSolderMedol(ID))
                            {
                                float Tx = 0;
                                float Ty = 0;
                                float Tr = 0;

                                float x    = 0;
                                float y    = 0;
                                float cAng = (float)(p.ListPos[num].R * Math.PI / 180);
                                if (ProjectData.Instance.SaveData.SolderPlatform[ID].UseR)    //使用旋转中心
                                {
                                    x = p.ModelPos.X + ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].X;
                                    y = p.ModelPos.Y + ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].Y;

                                    IOandAxisFun.Transorm(ID, x, y, x + p.ListPos[num].X, y + p.ListPos[num].Y, cAng, out Tx, out Ty);
                                }
                                else
                                {
                                    Tx = p.ListPos[num].X + ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].X;
                                    Ty = p.ListPos[num].Y + ProjectData.Instance.SaveData.processdata.SolderCTPos[ID][NUM].Y;
                                    Tr = 0;
                                }
                                SolderPosData _pos = new SolderPosData();
                                _pos.Pos.X      = Tx;
                                _pos.Pos.Y      = Ty;
                                _pos.Pos.R      = Tr;
                                _pos.Pos        = IOandAxisFun.CameraToSolderPos(ID, _pos.Pos);
                                _pos.SolderData = ProjectData.Instance.SaveData.processdata.WhichSolderMedol(ID)[type].solderdata[num].Clone();
                                num++;
                                SolderOrderList.Add(_pos);    //增加到list里
                            }
                        }
                        foreach (SolderPosData data in SolderOrderList.OrderBy(a => a.Pos.X).ThenBy(a => a.Pos.Y)) //排序
                        {
                            ProcessData.SolderList[ID].Add(data);                                                  //加到上锡位置
                        }
                        NUM++;
                        if (ProcessData.SolderCTPos[ID].Count() > NUM)
                        {
                            LG.ImmediateStepNext(2);    //去下一个拍照位置
                        }
                        else
                        {
                            LG.ImmediateStepNext(5);
                        }
                    }
                }
                break;

            case 5:    //判断上锡列表里的数据
                if (ProcessData.SolderList[ID].Count() > 0)
                {
                    LG.ImmediateStepNext(0xef);
                }
                else if (TaskManager.Default.FSM.MODE == 1)
                {
                    LG.ImmediateStepNext(0xef);
                }
                else
                {
                    string mes = ID.ToString() + "平台无上锡点";
                    MachineAlarm.SetAlarm(AlarmLevelEnum.Level2, mes);
                    LG.StepNext(0xef, FSMStaDef.RUN);
                }
                break;

            case 0xef:    //结束
                LG.End();
                break;
            }
        }
Пример #8
0
        protected override void LogicImpl()
        {
            var Para = Product.Inst.Stickdata;

            LG.Start();
            switch (LG.Step)
            {
            case 1:
                whichProduct = 0;
                LG.StepNext(2);
                break;

            case 2:

                for (int i = 0; i < CTRCard.Axis_Z.Count; i++)
                {
                    CTRCard.Axis_Z[i].MC_MoveAbs(0);
                }
                LG.StepNext(3);
                break;

            case 3:

                if (CTRCard.ZArrive)
                {
                    if (Product.Inst.Stickdata.TrayData.ProductList.Count > 0)
                    {
                        LG.StepNext(4);
                    }
                    else
                    {
                        LG.StepNext(0xef);
                    }
                }
                break;

            case 4:
                if (Para.CanBackCT)
                {
                    CTRCard.Axis_X.MC_MoveAbs(TrayData.ProductList[whichProduct].BackCT.X);
                    CTRCard.Axis_Y.MC_MoveAbs(TrayData.ProductList[whichProduct].BackCT.Y);
                    LG.StepNext(5);
                }
                else
                {
                    LG.StepNext(0xef);
                }
                break;

            case 5:
                if (CTRCard.XYArrive)
                {
                    LG.StepNext(6);
                }
                break;

            case 6:
                if (CTRCard.XYArrive)
                {
                    LG.StepNext(7);
                    DeviceRsDef.Q_HoldLightCtrl.ON();
                    DeviceRsDef.Q_Light.OFF();
                }
                break;

            case 7:

                if (LG.Delay(Para.CTDelay))
                {
                    //VisionProject.Instance.visionApi.TrigRun(3, 0);
                    LG.StepNext(8);
                }
                break;

            case 8:

                if (Product.Inst.IsAging)
                {
                    //老化模式下,不判断拍照结果
                    if (LG.TCnt(100))
                    {
                        LG.StepNext(0xA0);
                    }
                }
                else
                {
                    //正常模式下
                    //if (VisionProject.Instance.visionApi.Trig == false)
                    //{
                    //    VisionProject.Instance.SaveBackCTFunImage();

                    //    if (VisionProject.Instance.visionApi.Error == 0)
                    //    {
                    //        LG.StepNext(0xA0);
                    //    }
                    //    else
                    //    {
                    //        LG.StepNext(9);
                    //    }
                    //}
                }
                break;

            case 0xA0:
                if (Product.Inst.IsAging)
                {
                    LG.StepNext(9);
                }
                else
                {
                    //ShowMessge.SendStartMsg(string.Format("产品{0}上物料精度 X:{1}Y:{2}R:{3}", whichProduct, VisionProject.Instance.visionApi.CheckStick[0].X, VisionProject.Instance.visionApi.CheckStick[0].Y, VisionProject.Instance.visionApi.CheckStick[0].R));
                    //ShowMessge.SendStartMsg(string.Format("产品{0}上物料精度 X:{1}Y:{2}R:{3}", whichProduct, VisionProject.Instance.visionApi.CheckStick[1].X, VisionProject.Instance.visionApi.CheckStick[1].Y, VisionProject.Instance.visionApi.CheckStick[1].R));
                    //ShowMessge.SendStartMsg(string.Format("产品{0}上物料精度 X:{1}Y:{2}R:{3}", whichProduct, VisionProject.Instance.visionApi.CheckStick[2].X, VisionProject.Instance.visionApi.CheckStick[2].Y, VisionProject.Instance.visionApi.CheckStick[2].R));
                    //ShowMessge.SendStartMsg(string.Format("产品{0}上物料精度 X:{1}Y:{2}R:{3}", whichProduct, VisionProject.Instance.visionApi.CheckStick[3].X, VisionProject.Instance.visionApi.CheckStick[3].Y, VisionProject.Instance.visionApi.CheckStick[3].R));
                    LG.StepNext(9);
                }
                break;

            case 9:

                whichProduct++;
                if (whichProduct >= TrayData.ProductList.Count)
                {
                    LG.StepNext(0xef);
                }
                else
                {
                    LG.StepNext(3);
                }
                break;

            case 0xef:
                LG.End();

                break;
            }
        }
Пример #9
0
        protected override void LogicImpl()
        {
            switch (LG.Step)
            {
            case 1:
                startNuzzleParaInit();
                for (int i = 0; i < 30; i++)
                {
                    DeviceRsDef.MotionCard.MotionFun.OutputOFF(i);
                }
                DeviceRsDef.MotionCard.MotionFun.OutputON(24);
                for (int i = 0; i < DeviceRsDef.AxisList.Count; i++)
                {
                    DeviceRsDef.AxisList[i].MC_Stop();
                }
                Alarm.ClearAlarm();
                if (DeviceRsDef.I_XFarLimit.Value)
                {
                    DeviceRsDef.Axis_X.MC_Stop();
                    Alarm.SetAlarm(AlarmLevelEnum.Level3, "X正硬极限限位");
                }
                if (DeviceRsDef.I_YFarLimit.Value)
                {
                    DeviceRsDef.Axis_Y.MC_Stop();
                    Alarm.SetAlarm(AlarmLevelEnum.Level3, "Y正硬极限限位");
                }
                Product.Inst.ProcessData.currWhichPoint   = 0;
                Product.Inst.ProcessData.currWhichProduct = 0;
                LG.StepNext(2);
                break;

            case 2:
                if (LG.Delay(100))
                {
                    for (int i = 0; i < DeviceRsDef.AxisList.Count; i++)
                    {
                        DeviceRsDef.AxisList[i].MC_AlarmReset();
                    }
                    LG.StepNext(3);
                }
                break;

            case 3:
                if (CTRCard.ZArrive)
                {
                    DeviceRsDef.Axis_Z1.MC_Home();
                    DeviceRsDef.Axis_Z2.MC_Home();
                    LG.StepNext(4);
                }
                break;

            case 4:
                if (CTRCard.ZArrive)
                {
                    DeviceRsDef.Axis_R1.MC_Home();
                    DeviceRsDef.Axis_R2.MC_Home();
                    DeviceRsDef.Axis_X.MC_Home();
                    DeviceRsDef.Axis_Y.MC_Home();
                    LG.StepNext(5);
                }
                break;

            case 5:
                if (CTRCard.XYArrive && CTRCard.RArrive)
                {
                    LG.StepNext(0xef);
                }
                break;

            case 0xef:
                LG.End();
                FSM.Stop();
                break;
            }
        }
Пример #10
0
        protected override void LogicImpl()
        {
            var Para = Product.Inst;

            switch (LG.Step)
            {
            case 1:
                whichMark = 0;                         //第一个mark点
                Para.ProcessData.StickPosList.Clear(); //贴附过程列表清空
                Para.ProcessData.currWhichPoint   = 0; //第一个点
                Para.ProcessData.currWhichProduct = 0; //第一个产品
                MarkscanProduct = 0;
                MarkResult.Clear();                    //mark点的拍照结果清空
                whichProductAngle.Clear();             //机械角度列表清空
                LG.StepNext(2);
                break;

            case 2:
                for (int i = 0; i < CTRCard.Axis_Z.Count; i++)
                {
                    CTRCard.Axis_Z[i].MC_MoveAbs(Para.Stickdata.ZSafePos);    //两个Z轴抬起到安全高度
                }
                LG.StepNext(3);
                break;

            case 3:
                if (CTRCard.ZArrive)                                           //Z轴到达
                {
                    if (Product.Inst.Stickdata.TrayData.ProductList.Count > 0) //产品树列表有产品
                    {
                        LG.StepNext(4);
                        stickPos = Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].Clone();    //把产品树里的产品参数克隆过来
                    }
                    else
                    {
                        LG.StepNext(0xef);
                    }
                }
                break;

            case 4:
                CTRCard.Axis_X.MC_MoveAbs(Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].X); //XY到位
                CTRCard.Axis_Y.MC_MoveAbs(Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].Y);
                DeviceRsDef.Q_UpLighSource.ON();                                                                                //上光源打开
                //VisionProject.Instance.SetBenchmark1
                //    (
                //    Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].X,
                //    Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].Y,
                //    Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].R,
                //    whichMark,true
                //    );//设置mark点识别位置
                LG.StepNext(5);
                break;

            case 5:
                if (CTRCard.XYArrive && LG.Delay(Para.Stickdata.CTDelay))    //XY到达
                {
                    TaskMain.UpCamLogc.ModelID = whichMark;
                    TaskMain.UpCamLogc.Triger();
                    LG.StepNext(6);
                }
                break;

            case 6:
                if (Product.Inst.IsAging)    //老化模式
                {
                    if (LG.TCnt(200))
                    {
                        LG.StepNext(7);
                    }
                }
                else
                {
                    if (TaskMain.UpCamLogc.Finish)
                    {
                        if (TaskMain.UpCamLogc.Result.Count > 0)
                        {
                            LG.StepNext(7);
                        }
                        else
                        {
                            LG.StepNext(8);
                        }
                    }
                }
                break;

            case 7:
                PointF3Vision mark = new PointF3Vision();
                if (Product.Inst.IsAging)
                {
                    mark.X = Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].X;
                    mark.Y = Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].Y;
                    mark.R = Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].R;
                }
                else
                {
                    mark.X = Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].X + TaskMain.UpCamLogc.Result[0].X;
                    mark.Y = Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].Y + TaskMain.UpCamLogc.Result[0].Y;
                    mark.R = Product.Inst.Stickdata.TrayData.ProductList[MarkscanProduct].MarkPoint[whichMark].R + TaskMain.UpCamLogc.Result[0].R;
                }
                VisionProject.Instance.Tool.PointLocation.SetBenchmark2
                (
                    whichMark,
                    mark.X,
                    mark.Y
                );
                MarkResult.Add(mark);
                whichMark++;
                if (whichMark >= 2)
                {
                    VisionProject.Instance.Tool.PointLocation.Calculation();
                    if (Product.Inst.IsAging)
                    {
                        Para.ProcessData.StickPosList.Add(stickPos);
                    }
                    else
                    {
                        //计算Mark点,并暂存计算结果
                        Para.ProcessData.StickPosList.Add(MarkCaculate(stickPos));      //计算Mark点,并保存计算结果
                    }
                    LG.StepNext(8);
                }
                else
                {
                    LG.StepNext(4);
                }
                break;

            case 8:
                DeviceRsDef.Q_UpLighSource.OFF();
                if (MarkscanProduct >= Product.Inst.Stickdata.TrayData.ProductList.Count - 1)
                {
                    LG.StepNext(0xef);
                }
                else
                {
                    LG.StepNext(3);
                    whichMark = 0;
                    MarkscanProduct++;
                }
                break;

            case 0xef:
                LG.End();
                break;
            }
        }
Пример #11
0
        protected override void LogicImpl()
        {
            var ProcessData = ProjectData.Instance.SaveData.processdata;

            switch (LG.Step)
            {
            case 1:    //上锡列表里是否有上锡点
                if (ProcessData.SolderList[ID].Count() > 0)
                {
                    LG.ImmediateStepNext(2);
                }
                else if (TaskManager.Default.FSM.MODE == 1)
                {
                    LG.ImmediateStepNext(0xef);
                }
                else
                {
                    string mes = ID.ToString() + "平台无焊锡点";
                    MachineAlarm.SetAlarm(AlarmLevelEnum.Level2, mes);
                    LG.StepNext(0xef, FSMStaDef.RUN);
                }
                break;

            case 2:    //RZ抬高
                if (Axis.SolderR[ID].status == 0 && Axis.SolderZ[ID].status == 0)
                {
                    Axis.SolderR[ID].MC_MoveAbs(0);
                    Axis.SolderZ[ID].MC_MoveAbs(ProjectData.Instance.SaveData.SolderData[ID].SafeZ);
                    LG.ImmediateStepNext(3);
                }
                break;

            case 3:    //XY到第一个上锡点位
                if (Axis.SolderR[ID].status == 0 && Axis.SolderZ[ID].status == 0)
                {
                    Axis.SolderX[ID].MC_MoveAbs(ProcessData.SolderList[ID][0].Pos.X);
                    Axis.SolderY[ID].MC_MoveAbs(ProcessData.SolderList[ID][0].Pos.Y);
                    LG.ImmediateStepNext(4);
                }
                break;

            case 4:    //第一段送锡
                if (Axis.SolderX[ID].status == 0 && Axis.SolderY[ID].status == 0)
                {
                    Axis.SolderS[ID].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.FrontSpeed, ProcessData.SolderList[ID][0].SolderData.FrontLen);
                    Axis.SolderS[ID + 1].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.FrontSpeed, ProcessData.SolderList[ID][0].SolderData.FrontLen);
                    LG.ImmediateStepNext(5);
                }
                break;

            case 5:    //第一段退锡
                if (Axis.SolderS[ID].status == 0)
                {
                    Axis.SolderS[ID].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.BsckSpeed, ProcessData.SolderList[ID][0].SolderData.BackLen);
                    Axis.SolderS[ID + 1].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.BsckSpeed, ProcessData.SolderList[ID][0].SolderData.BackLen);
                    LG.ImmediateStepNext(6);
                }
                break;

            case 6:    //RZ到上锡点位
                if (Axis.SolderS[ID].status == 0)
                {
                    Axis.SolderR[ID].MC_MoveAbs(ProcessData.SolderList[ID][0].Pos.R);
                    Axis.SolderZ[ID].MC_MoveAbs(ProcessData.SolderList[ID][0].SolderData.Z);
                    LG.ImmediateStepNext(7);
                }
                break;

            case 7:    //第二段送锡
                if (Axis.SolderR[ID].status == 0 && Axis.SolderZ[ID].status == 0)
                {
                    Axis.SolderS[ID].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.FrontSpeed2, ProcessData.SolderList[ID][0].SolderData.FrontLen2);
                    Axis.SolderS[ID + 1].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.FrontSpeed2, ProcessData.SolderList[ID][0].SolderData.FrontLen2);
                    LG.ImmediateStepNext(8);
                }
                break;

            case 8:    //第二段退锡
                if (Axis.SolderS[ID].status == 0)
                {
                    Axis.SolderS[ID].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.BsckSpeed2, ProcessData.SolderList[ID][0].SolderData.BackLen2);
                    Axis.SolderS[ID + 1].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.BsckSpeed2, ProcessData.SolderList[ID][0].SolderData.BackLen2);
                    LG.ImmediateStepNext(9);
                }
                break;

            case 9:    //第三段送锡
                if (Axis.SolderS[ID].status == 0)
                {
                    Axis.SolderS[ID].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.FrontSpeed3, ProcessData.SolderList[ID][0].SolderData.FrontLen3);
                    Axis.SolderS[ID + 1].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.FrontSpeed3, ProcessData.SolderList[ID][0].SolderData.FrontLen3);
                    LG.ImmediateStepNext(10);
                }
                break;

            case 10:    //第三段退锡
                if (Axis.SolderS[ID].status == 0)
                {
                    Axis.SolderS[ID].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.BsckSpeed3, ProcessData.SolderList[ID][0].SolderData.BackLen3);
                    Axis.SolderS[ID + 1].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.BsckSpeed3, ProcessData.SolderList[ID][0].SolderData.BackLen3);
                    LG.ImmediateStepNext(11);
                }
                break;

            case 11:    //判断是否开启抖动及抖动的模式
                if (Axis.SolderS[ID].status == 0 && LG.Delay(1000))
                {
                    if (ProcessData.SolderList[ID][0].SolderData.Shake)
                    {
                        //开启抖动
                        switch (ProcessData.SolderList[ID][0].SolderData.mode)
                        {
                        //case 0:
                        //    LG.StepNext(12, FSMStaDef.RUN);//上下
                        //    break;
                        case 1:
                            LG.ImmediateStepNext(13);        //左右
                            break;

                        case 2:
                            LG.ImmediateStepNext(14);        //前后
                            break;
                        }
                    }
                    else
                    {
                        //不开启抖动
                        LG.ImmediateStepNext(15);
                    }
                }
                break;

                #region 左右
            case 13:
                Axis.SolderX[ID].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.speed, ProcessData.SolderList[ID][0].SolderData.interval);
                Axis.SolderZ[ID].MC_MoveRel(-ProcessData.SolderList[ID][0].SolderData.height / 3.0f);
                LG.ImmediateStepNext(131);
                break;

            case 131:
                if (Axis.SolderX[ID].status == 0 && Axis.SolderZ[ID].status == 0)
                {
                    Axis.SolderX[ID].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.speed, -2 * ProcessData.SolderList[ID][0].SolderData.interval);
                    Axis.SolderZ[ID].MC_MoveRel(-ProcessData.SolderList[ID][0].SolderData.height / 3.0f);
                    LG.ImmediateStepNext(132);
                }

                break;

            case 132:
                if (Axis.SolderX[ID].status == 0 && Axis.SolderZ[ID].status == 0)
                {
                    Axis.SolderX[ID].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.speed, ProcessData.SolderList[ID][0].SolderData.interval);
                    Axis.SolderZ[ID].MC_MoveRel(-ProcessData.SolderList[ID][0].SolderData.height / 3.0f);
                    LG.ImmediateStepNext(15);
                }
                break;

                #endregion
                #region 前后
            case 14:
                Axis.SolderY[ID].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.speed, ProcessData.SolderList[ID][0].SolderData.interval);
                Axis.SolderZ[ID].MC_MoveRel(-ProcessData.SolderList[ID][0].SolderData.height / 3.0f);
                LG.ImmediateStepNext(141);
                break;

            case 141:
                if (Axis.SolderY[ID].status == 0 && Axis.SolderZ[ID].status == 0)
                {
                    Axis.SolderY[ID].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.speed, -2 * ProcessData.SolderList[ID][0].SolderData.interval);
                    Axis.SolderZ[ID].MC_MoveRel(-ProcessData.SolderList[ID][0].SolderData.height / 3.0f);
                    LG.ImmediateStepNext(142);
                }

                break;

            case 142:
                if (Axis.SolderY[ID].status == 0 && Axis.SolderZ[ID].status == 0)
                {
                    Axis.SolderY[ID].MC_MoveRel(ProcessData.SolderList[ID][0].SolderData.speed, ProcessData.SolderList[ID][0].SolderData.interval);
                    Axis.SolderZ[ID].MC_MoveRel(-ProcessData.SolderList[ID][0].SolderData.height / 3.0f);
                    LG.ImmediateStepNext(15);
                }
                break;

                #endregion
            case 15:    //Z抬起到设定高度
                if (Axis.SolderY[ID].status == 0 && Axis.SolderZ[ID].status == 0 && LG.Delay(ProjectData.Instance.SaveData.SolderPlatform[ID].TimeforTin))
                {
                    Axis.SolderZ[ID].MC_MoveRel(100, ProcessData.SolderList[ID][0].SolderData.LiftHeight);
                    LG.ImmediateStepNext(16);
                }
                break;

            case 16:    //移除第一个点
                if (Axis.SolderZ[ID].status == 0)
                {
                    ProjectData.Instance.SaveData.SolderData[ID].SolderNum++;
                    ProcessData.SolderList[ID].RemoveAt(0);
                    ProjectData.Instance.Product.ProductCount();
                    LG.ImmediateStepNext(0xef);
                }
                break;

            case 0xef:
                LG.End();
                break;
            }
        }
Пример #12
0
        protected override void LogicImpl()
        {
            var para = ProjectData.Instance.SaveData.PolishData[ID];

            switch (LG.Step)
            {
            case 1:    //RZ到拍照位
                ProjectData.Instance.SaveData.processdata.PolishList[ID].Clear();
                if (Axis.PolishR[ID].status == 0 && Axis.PolishZ[ID].status == 0)
                {
                    NUM = 0;
                    Axis.PolishR[ID].MC_MoveAbs(0);
                    Axis.PolishZ[ID].MC_MoveAbs(para.SafeZ);
                    LG.ImmediateStepNext(2);
                }
                break;

            case 2:    //XY到拍照位
                if (Axis.PolishR[ID].status == 0 && Axis.PolishZ[ID].status == 0)
                {
                    if (ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].Ban)
                    {
                        NUM++;
                        break;
                    }
                    Axis.PolishX[ID].MC_MoveAbs(ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].X);
                    Axis.PolishY[ID].MC_MoveAbs(ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].Y);
                    LG.ImmediateStepNext(3);
                }
                break;

            case 3:    //延时拍照
                if (Axis.PolishX[ID].status == 0 && Axis.PolishY[ID].status == 0 && LG.Delay(para.CTDelay))
                {
                    LG.ImmediateStepNext(4);
                }
                break;

            case 4:    //获取相机数据
                if (/*VisionInteraction.Instance.TriggerCamera(ID)*/ true)
                {
                    if (TaskManager.Default.FSM.MODE == 1)
                    {
                        PolishPosData _pos = new PolishPosData();
                        _pos.Pos.X = ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].X;
                        _pos.Pos.Y = ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].Y;
                        _pos.Pos.R = 0;
                        //_pos.Pos = IOandAxisFun.CameraToPolisherPos(ID, _pos.Pos);
                        if (ProjectData.Instance.SaveData.processdata.Agingdataforpolish == null)
                        {
                            ProjectData.Instance.SaveData.processdata.Agingdataforpolish = new PolishDef();
                        }
                        _pos.Pos = IOandAxisFun.CameraToPolisherPos(ID, _pos.Pos);
                        ProjectData.Instance.SaveData.processdata.Agingdataforpolish.Z = 20;
                        _pos.polishData = ProjectData.Instance.SaveData.processdata.Agingdataforpolish;
                        NUM++;

                        ProjectData.Instance.SaveData.processdata.PolishList[ID].Add(_pos);
                        if (NUM < ProjectData.Instance.SaveData.processdata.PolishCTPos[ID].Count)
                        {
                            LG.ImmediateStepNext(2);    //还有打磨拍照点继续打磨i拍照
                        }
                        else
                        {
                            NUM = 0;
                            LG.ImmediateStepNext(5);
                        }
                    }
                    else if (true)
                    {
                        foreach (var p in VisionInteraction.Instance.WhichPolish(ID).listModel)
                        {
                            int type = p.modelindex;
                            int num  = 0;
                            foreach (var item in ProjectData.Instance.SaveData.processdata.WhichPolishMedol(ID))
                            {
                                PolishPosData _pos = new PolishPosData();
                                _pos.Pos.X      = p.ListPos[num].X + ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].X;
                                _pos.Pos.Y      = p.ListPos[num].Y + ProjectData.Instance.SaveData.processdata.PolishCTPos[ID][NUM].Y;
                                _pos.Pos.R      = p.ListPos[num].R;
                                _pos.polishData = ProjectData.Instance.SaveData.processdata.WhichPolishMedol(ID)[type].polishData[num].Clone();
                                _pos.Pos        = IOandAxisFun.CameraToPolisherPos(ID, _pos.Pos);
                                num++;
                                PolishOrderList.Add(_pos);    //增加到list里
                            }
                        }
                        foreach (PolishPosData data in PolishOrderList.OrderBy(a => a.Pos.X).ThenBy(a => a.Pos.Y)) //对list里的点进行排序
                        {
                            ProjectData.Instance.SaveData.processdata.PolishList[ID].Add(data);                    //把排列好的点写进打磨list里
                        }

                        if (NUM < ProjectData.Instance.SaveData.processdata.PolishCTPos[ID].Count)
                        {
                            LG.ImmediateStepNext(2);    //还有打磨拍照点继续打磨i拍照
                        }
                        else
                        {
                            NUM = 0;
                            LG.ImmediateStepNext(5);
                        }
                    }
                }
                break;

            case 5:    //判断打磨列表里的数据
                if (ProjectData.Instance.SaveData.processdata.PolishList[ID].Count() > 0)
                {
                    LG.ImmediateStepNext(0xef);
                }
                else if (TaskManager.Default.FSM.MODE == 1)
                {
                    LG.ImmediateStepNext(0xef);
                }
                else
                {
                    string mes = ID.ToString() + "平台没有打磨点";
                    MachineAlarm.SetAlarm(AlarmLevelEnum.Level2, mes);
                    LG.StepNext(0xef, FSMStaDef.RUN);
                }
                break;

            case 0xef:    //结束
                LG.End();
                break;
            }
        }
Пример #13
0
        protected override void LogicImpl()
        {
            var Para = Product.Inst;

            switch (LG.Step)
            {
            case 1:     //Z轴抬起到安全高度
                if (Para.ProcessData.currWhichProduct >= Para.ProcessData.StickPosList.Count)
                {
                    Para.ProcessData.currWhichProduct = 0;
                }
                else
                {
                    if (Para.ProcessData.currWhichPoint >= Para.ProcessData.CurrStickWhichProduct().SiteList.Count)
                    {
                        Para.ProcessData.currWhichPoint = 0;
                    }
                }
                if (Para.ProcessData.StickPosList.Count == 0)
                {
                    Alarm.SetAlarm(AlarmLevelEnum.Level2, "没扫Mark点,不允许贴附");
                    LG.StepNext(0xef);
                }
                else
                {
                    if (CTRCard.ZArrive)
                    {
                        for (int i = 0; i < 2; i++)
                        {
                            CTRCard.Axis_Z[i].MC_MoveAbs(Para.Stickdata.ZSafePos);
                        }
                        LG.StepNext(2);
                    }
                }
                break;

            case 2:
                bool isCanStick = false;
                for (int i = 0; i < 2; i++)    //扫描吸嘴个数
                {
                    if (Para.ProcessData.NuzzlePara[i].isOk == 1 && Para.ProcessData.NuzzlePara[i].isHave)
                    {
                        whichNuzzle = i;
                        isCanStick  = true;
                        break;
                    }
                }
                if (isCanStick)
                {
                    StickPos(whichNuzzle);
                    Para.ProcessData.NuzzlePara[whichNuzzle].isHave = false;
                    Para.ProcessData.NuzzlePara[whichNuzzle].isOk   = 0;
                    LG.StepNext(3);
                }
                else
                {
                    LG.StepNext(0xef);
                }
                break;

            case 3:     //xy到贴标位置
                if (CTRCard.ZArrive)
                {
                    CTRCard.Axis_X.MC_MoveAbs(stickPos.X);
                    CTRCard.Axis_Y.MC_MoveAbs(stickPos.Y);
                    CTRCard.Axis_R[whichNuzzle].MC_MoveAbs(stickPos.R);
                    LG.StepNext(4);
                }
                break;

            case 4:    //系统稳定时间+第一段快速下降
                if (CTRCard.XYArrive && CTRCard.RArrive && LG.TCnt(10))
                {
                    CTRCard.Axis_Z[whichNuzzle].MC_MoveAbs(stickPos.Z - 5);
                    LG.StepNext(5);
                }
                break;

            case 5:    //第二段慢速下降
                if (CTRCard.ZArrive)
                {
                    CTRCard.Axis_Z[whichNuzzle].MC_MoveAbs(30, stickPos.Z);
                    LG.StepNext(6);
                }
                break;

            case 6:    //到达贴标高度吸真空打开,吹气关闭
                if (CTRCard.ZArrive)
                {
                    CTRCard.Q_Nuzzle[whichNuzzle].ON();
                    CTRCard.Q_Blow[whichNuzzle].OFF();
                    LG.StepNext(7);
                }
                break;

            case 7:    //真空延时后,很空关闭,吹气打开
                if (LG.Delay(Para.Stickdata.StickPara.SuckOffDelay))
                {
                    CTRCard.Q_Nuzzle[whichNuzzle].OFF();
                    CTRCard.Q_Blow[whichNuzzle].ON();
                    LG.StepNext(8);
                }
                break;

            case 8:    //吹气延时后吹气关闭
                if (LG.Delay(Para.Stickdata.StickPara.SuckBlowDelay))
                {
                    CTRCard.Q_Blow[whichNuzzle].OFF();
                    Product.Inst.ProductYield.ProductCount();    //产量+1用于计算UPH
                    LG.StepNext(9);
                }
                break;

            case 9:    //Z轴回到安全位
                if (CTRCard.ZArrive)
                {
                    CTRCard.Axis_Z[whichNuzzle].MC_MoveAbs(Para.Stickdata.ZSafePos);
                    LG.StepNext(10);
                }
                break;

            case 10:    //Z轴到位后
                if (CTRCard.Axis_Z[whichNuzzle].status == AxState.AXSTA_READY)
                {
                    CTRCard.Axis_R[whichNuzzle].MC_MoveAbs(0);
                    LG.StepNext(11);
                }
                break;

            case 11:
                Para.ProcessData.currWhichPoint++;    //点位++
                if (Para.ProcessData.currWhichPoint >= Para.ProcessData.StickPosList[Para.ProcessData.currWhichProduct].SiteList.Count)
                {
                    Para.ProcessData.currWhichPoint = 0;    //点位置0
                    Para.ProcessData.currWhichProduct++;    //产品加1
                    if (Para.ProcessData.currWhichProduct >= Para.ProcessData.StickPosList.Count)
                    {
                        //Para.ProcessData.currWhichPoint = 0;//点位置0
                        //Para.ProcessData.currWhichProduct = 0;//产品置0
                        LG.StepNext(0xef);
                        break;
                    }
                }
                LG.StepNext(2);
                if (!Para.ProcessData.NuzzlePara[0].isHave && !Para.ProcessData.NuzzlePara[1].isHave)
                {
                    LG.StepNext(0xef);    //两个吸嘴都没有料就结束
                }
                break;

            case 0xef:
                LG.End();
                break;
            }
        }
Пример #14
0
        protected override void LogicImpl()
        {
            var Para = Product.Inst;

            LG.Start();
            switch (LG.Step)
            {
            case 1:     //Z轴抬起到安全高度
                if (CTRCard.ZArrive)
                {
                    for (int i = 0; i < 2; i++)
                    {
                        CTRCard.Axis_Z[i].MC_MoveAbs(Para.Stickdata.GiveUpPara.SafePos_Z);
                    }
                    LG.StepNext(2);
                }
                whichNuzzle = 0;
                break;

            case 2:     //判断轴到达
                if (CTRCard.ZArrive)
                {
                    LG.StepNext(3);
                }
                break;

            case 3:
                if (Para.ProcessData.NuzzlePara[whichNuzzle].isOk != 1 && Para.ProcessData.NuzzlePara[whichNuzzle].isHave == true)
                {
                    LG.StepNext(4);
                }
                else
                {
                    LG.StepNext(8);
                }
                break;

            case 4:    //XY到弃标位
                if (CTRCard.ZArrive)
                {
                    if (whichNuzzle == 0)
                    {
                        CTRCard.Axis_X.MC_MoveAbs(Para.Stickdata.GiveUpPara.LiftGiveUpPos.X);
                        CTRCard.Axis_Y.MC_MoveAbs(Para.Stickdata.GiveUpPara.LiftGiveUpPos.Y);
                        LG.StepNext(5);
                    }
                    else
                    {
                        CTRCard.Axis_X.MC_MoveAbs(Para.Stickdata.GiveUpPara.RightGiveUpPos.X);
                        CTRCard.Axis_Y.MC_MoveAbs(Para.Stickdata.GiveUpPara.RightGiveUpPos.Y);
                        LG.StepNext(5);
                    }
                }
                break;

            case 5:    //Z到弃标高度
                if (CTRCard.XYArrive)
                {
                    if (whichNuzzle == 0)
                    {
                        CTRCard.Axis_Z[whichNuzzle].MC_MoveAbs(Para.Stickdata.GiveUpPara.LiftGiveUp_Z);
                        LG.StepNext(6);
                    }
                    else
                    {
                        CTRCard.Axis_Z[whichNuzzle].MC_MoveAbs(Para.Stickdata.GiveUpPara.RightGiveUp_Z);
                        LG.StepNext(6);
                    }
                }
                break;

            case 6:    //破真空,吹气
                if (CTRCard.ZArrive)
                {
                    CTRCard.Q_Nuzzle[whichNuzzle].OFF();
                    CTRCard.Q_Blow[whichNuzzle].ON();
                    Para.Stickdata.GiveUpPara.giveUpNum++;
                    LG.StepNext(7);
                }
                break;

            case 7:
                if (LG.Delay(Para.Stickdata.GiveUpPara.GiveUpDelay))
                /*弃料延时*/
                {
                    LG.StepNext(8);
                    Para.ProcessData.NuzzlePara[whichNuzzle].isHave = false;
                    CTRCard.Q_Blow[whichNuzzle].Value = false;
                    CTRCard.Axis_Z[whichNuzzle].MC_MoveAbs(Para.Stickdata.GiveUpPara.SafePos_Z);
                }
                break;

            case 8:    //Z轴回到安全位
                if (CTRCard.ZArrive)
                {
                    whichNuzzle++;
                    if (whichNuzzle < CTRCard.Axis_Z.Count)
                    {
                        LG.StepNext(2);
                    }
                    else
                    {
                        LG.StepNext(0xef);
                    }
                }
                break;

            case 0xef:
                LG.End();
                break;
            }
        }
Пример #15
0
        protected override void LogicImpl()
        {
            var Para = Product.Inst;

            switch (LG.Step)
            {
            case 1:
                whichNuzzle = 0;
                LG.StepNext(2);
                break;

            case 2:
                if (Para.ProcessData.NuzzlePara[whichNuzzle].isHave)    //吸嘴有料
                {
                    if (CTRCard.ZArrive)
                    {
                        for (int i = 0; i < CTRCard.Axis_Z.Count; i++)
                        {
                            CTRCard.Axis_Z[i].MC_MoveAbs(Para.Stickdata.ZSafePos);    //到安全位置拍照
                        }
                        LG.StepNext(3);
                    }
                }
                else
                {
                    LG.StepNext(6);    //没有料换另一个吸嘴
                }
                break;

            case 3:
                if (CTRCard.ZArrive)    //到相应的吸嘴拍照位置
                {
                    if (Para.ProcessData.NuzzlePara[whichNuzzle].isHave && whichNuzzle == 0)
                    {
                        CTRCard.Axis_X.MC_MoveAbs(Para.Stickdata.StickSysData.LiftDownCCDPos.X);
                        CTRCard.Axis_Y.MC_MoveAbs(Para.Stickdata.StickSysData.LiftDownCCDPos.Y);
                        DeviceRsDef.Q_DownLighSource.ON();
                        LG.StepNext(4);
                    }
                    else if (Para.ProcessData.NuzzlePara[whichNuzzle].isHave && whichNuzzle == 1)
                    {
                        CTRCard.Axis_X.MC_MoveAbs(Para.Stickdata.StickSysData.RightDownCCDPos.X);
                        CTRCard.Axis_Y.MC_MoveAbs(Para.Stickdata.StickSysData.RightDownCCDPos.Y);
                        DeviceRsDef.Q_DownLighSource.ON();
                        LG.StepNext(4);
                    }
                    else
                    {
                        LG.StepNext(6);
                    }
                }
                break;

            case 4:
                if (CTRCard.XYArrive && LG.Delay(Para.Stickdata.CTDelay))
                {
                    //VisionProject.Instance.visionApi.TrigRun(1, whichNuzzle);//触发拍照
                    LG.StepNext(5);
                }
                break;

            case 5:
                if (Product.Inst.IsAging)
                {
                    if (LG.Delay(100))
                    {
                        Para.ProcessData.NuzzlePara[whichNuzzle].isOk     = 1;
                        Para.ProcessData.NuzzlePara[whichNuzzle].CCDPos.X = 0;
                        Para.ProcessData.NuzzlePara[whichNuzzle].CCDPos.Y = 0;
                        Para.ProcessData.NuzzlePara[whichNuzzle].CCDPos.R = 0;
                        LG.StepNext(6);
                    }
                    DeviceRsDef.Q_DownLighSource.OFF();
                }
                else
                {
                    //if (VisionProject.Instance.visionApi.TrigComplete() == true)
                    //{
                    //    var va = VisionProject.Instance.visionApi;
                    //    //判断拍照结果
                    //    if (VisionProject.Instance.visionApi.Error == 0)
                    //    {
                    //        Para.ProcessData.NuzzlePara[whichNuzzle].isOk = 1;
                    //        Para.ProcessData.NuzzlePara[whichNuzzle].isHave = true;
                    //        Para.ProcessData.NuzzlePara[whichNuzzle].CCDPos.X = (float)VisionProject.Instance.visionApi.Result[0].X;
                    //        Para.ProcessData.NuzzlePara[whichNuzzle].CCDPos.Y = (float)VisionProject.Instance.visionApi.Result[0].Y;
                    //        Para.ProcessData.NuzzlePara[whichNuzzle].CCDPos.R = -(float)VisionProject.Instance.visionApi.Result[0].R;
                    //        DeviceRsDef.Q_DownLighSource.OFF();
                    //    }
                    //    else
                    //    {
                    //        Para.ProcessData.NuzzlePara[whichNuzzle].isOk = 2;
                    //    }
                    //    LG.StepNext(6);
                    //}
                }
                break;

            case 6:
                if (CTRCard.RArrive)
                {
                    whichNuzzle++;
                    if (whichNuzzle >= 2)
                    {
                        LG.StepNext(0xef);
                    }
                    else
                    {
                        LG.StepNext(2);
                    }
                }
                break;

            case 0xef:
                LG.End();
                break;
            }
        }
Пример #16
0
        protected override void LogicImpl()
        {
            var Para = Product.Inst.Stickdata;

            switch (LG.Step)
            {
            case 1:
                whichproduct = Product.Inst.Stickdata.TrayData.ProductList.Count - 1;
                DataList.Clear();
                LG.StepNext(2);
                break;

            case 2:
                for (int i = 0; i < CTRCard.Axis_Z.Count; i++)
                {
                    CTRCard.Axis_Z[i].MC_MoveAbs(Para.ZSafePos);
                }
                LG.StepNext(3);
                break;

            case 3:
                if (CTRCard.ZArrive)
                {
                    if (Product.Inst.Stickdata.TrayData.ProductList.Count > 0)
                    {
                        LG.StepNext(4);
                    }
                    else
                    {
                        LG.StepNext(0xef);
                    }
                }
                break;

            case 4:
                if (Para.CanscanCode)
                {
                    CTRCard.Axis_X.MC_MoveAbs(Product.Inst.Stickdata.TrayData.ProductList[whichproduct].CodePoint2.X);
                    CTRCard.Axis_Y.MC_MoveAbs(Product.Inst.Stickdata.TrayData.ProductList[whichproduct].CodePoint2.Y);
                    LG.StepNext(5);
                }
                else
                {
                    LG.StepNext(0xef);
                }
                break;

            case 5:
                if (CTRCard.XYArrive)
                {
                    LG.StepNext(6);
                }
                break;

            case 6:
                if (CTRCard.XYArrive)
                {
                    LG.StepNext(7);
                    DeviceRsDef.Q_Light.ON();
                    DeviceRsDef.Q_HoldLightCtrl.OFF();
                }
                break;

            case 7:
                if (LG.Delay(10))
                {
                    //VisionProject.Instance.visionApi.TrigRun(2, 0);
                    LG.StepNext(8);
                }
                break;

            case 8:
                if (Product.Inst.IsAging)
                {
                    //老化模式下,不判断拍照结果
                    if (LG.TCnt(500))
                    {
                        LG.StepNext(10);
                    }
                }
                else
                {
                    //正常模式下
                    //if (VisionProject.Instance.visionApi.Trig == false)
                    //{
                    //    if (VisionProject.Instance.visionApi.Error == 0)
                    //    {
                    //        LG.StepNext(9);
                    //    }
                    //    else
                    //    {
                    //        LG.StepNext(10);
                    //    }
                    //}
                }
                break;

            case 9:
                //DataList.Add(VisionProject.Instance.visionApi.CodeString);//将读取到的二维码信息加进list里面
                //ShowMessge.SendStartMsg(string.Format("产品{0}二维码:{1}", whichproduct, VisionProject.Instance.visionApi.CodeString));
                LG.StepNext(10);
                break;

            case 10:
                whichproduct--;
                if (whichproduct <= -1)
                {
                    LG.StepNext(0xef);
                }
                else
                {
                    LG.StepNext(3);
                }
                break;

            case 0xef:
                DeviceRsDef.Q_HoldLightCtrl.ON();
                DeviceRsDef.Q_Light.OFF();
                LG.End();
                break;
            }
        }
Пример #17
0
        protected override void LogicImpl()
        {
            var Para = Product.Inst;

            switch (LG.Step)
            {
            case 1:
                whichMark = 0;
                Para.ProcessData.currWhichProduct = 0;    //第一个产品
                LG.StepNext(2);
                break;

            case 2:
                for (int i = 0; i < CTRCard.Axis_Z.Count; i++)
                {
                    CTRCard.Axis_Z[i].MC_MoveAbs(Para.Stickdata.ZSafePos);    //两个Z轴抬起到安全高度
                }
                LG.StepNext(3);
                break;

            case 3:
                if (CTRCard.ZArrive)                                                   //Z轴到达
                {
                    stickPos = Product.Inst.Stickdata.TrayData.ProductList[0].Clone(); //把产品树里的产品参数克隆过来
                    LG.StepNext(4);
                }
                break;

            case 4:
                CTRCard.Axis_X.MC_MoveAbs(Product.Inst.Stickdata.TrayData.ProductList[0].MarkPoint[whichMark].X); //XY到位
                CTRCard.Axis_Y.MC_MoveAbs(Product.Inst.Stickdata.TrayData.ProductList[0].MarkPoint[whichMark].Y);
                DeviceRsDef.Q_UpLighSource.ON();                                                                  //上光源打开
                LG.StepNext(5);
                break;

            case 5:
                if (CTRCard.XYArrive && LG.Delay(Para.Stickdata.CTDelay))    //XY到达
                {
                    TaskMain.UpCamLogc.ModelID = whichMark;
                    TaskMain.UpCamLogc.Triger();
                    LG.StepNext(6);
                }
                break;

            case 6:
                if (TaskMain.UpCamLogc.Finish)
                {
                    if (TaskMain.UpCamLogc.Result.Count > 0)
                    {
                        LG.StepNext(7);
                    }
                    else
                    {
                        LG.StepNext(8);
                    }
                }
                break;

            case 7:
                PointF3Vision mark = new PointF3Vision();
                mark.X = Product.Inst.Stickdata.TrayData.ProductList[0].MarkPoint[whichMark].X + TaskMain.UpCamLogc.Result[0].X;
                mark.Y = Product.Inst.Stickdata.TrayData.ProductList[0].MarkPoint[whichMark].Y + TaskMain.UpCamLogc.Result[0].Y;
                mark.R = Product.Inst.Stickdata.TrayData.ProductList[0].MarkPoint[whichMark].R + TaskMain.UpCamLogc.Result[0].R;
                VisionProject.Instance.Tool.PointLocation.SetBenchmark1(whichMark, mark.X, mark.Y);
                VisionProject.Instance.Tool.PointLocation.SetBenchmark2(whichMark, mark.X, mark.Y);

                whichMark++;
                if (whichMark >= 2)
                {
                    VisionProject.Instance.Tool.PointLocation.Calculation();
                    Product.Inst.Stickdata.TrayData.ProductList[0] = MarkCaculate(Product.Inst.Stickdata.TrayData.ProductList[0]);
                    LG.StepNext(8);
                }
                else
                {
                    LG.StepNext(4);
                }
                break;

            case 8:
                LG.StepNext(0xef);
                break;

            case 0xef:
                LG.End();
                break;
            }
        }
Пример #18
0
        protected override void LogicImpl()
        {
            var Para = Product.Inst;

            switch (LG.Step)
            {
            case 1:
                if (TaskMain.sticklogic.feeder.GetBusy)
                {
                    return;
                }
                TakeCount   = 0;  //取料个数
                whichNuzzle = 0;  //哪个吸嘴
                LG.StepNext(2);
                break;

            case 2:     //Z轴抬起到安全高度
                for (int i = 0; i < CTRCard.Axis_Z.Count; i++)
                {
                    CTRCard.Axis_Z[i].MC_MoveAbs(Para.Stickdata.ZSafePos);    //Z到安全位置
                    CTRCard.Axis_R[i].MC_MoveAbs(0);
                }
                LG.StepNext(3);
                break;

            case 3:
                if (CTRCard.ZArrive && CTRCard.RArrive)
                {
                    bool isCanTake = false;
                    if (
                        Para.Stickdata.NuzzleForbit[whichNuzzle] == false &&
                        Para.ProcessData.NuzzlePara[whichNuzzle].isHave == false)    //吸嘴没被禁用且没有料
                    {
                        isCanTake = true;
                    }
                    else
                    {
                        if (Para.Stickdata.NuzzleForbit[whichNuzzle] == true)    //吸嘴禁用取料加1
                        {
                            TakeCount++;
                        }
                    }
                    if (isCanTake)
                    {
                        if (TakeCount == 1 && whichNuzzle == 1)
                        {
                            LG.StepNext(7);    //如果左吸嘴取过一次且目前可以取料的是右吸嘴
                        }
                        else
                        {
                            LG.StepNext(4);    //可以取料  去取料位置
                        }
                    }
                    else
                    {
                        LG.StepNext(14);    //去 判断
                    }
                }
                break;

            case 4:
                if (whichNuzzle == 0)
                {
                    Ltime.Stop();
                    Lsticktime = (int)Ltime.ElapsedMilliseconds;
                    Ltime.Restart();
                }
                else
                {
                    Rtime.Stop();
                    Rsticktime = (int)Rtime.ElapsedMilliseconds;
                    Rtime.Restart();
                }
                CTRCard.Axis_X.MC_MoveAbs(Para.Stickdata.FeederPara.TakePos.X);
                CTRCard.Axis_Y.MC_MoveAbs(Para.Stickdata.FeederPara.TakePos.Y); //到拍照位置
                DeviceRsDef.Q_UpLighSource.ON();                                //上光源打开
                LG.StepNext(5);
                break;

            case 5:
                if (CTRCard.XYArrive)
                {
                    //VisionProject.Instance.visionApi.TrigRun(0, 2);//触发拍照
                    LG.StepNext(6);
                }
                break;

            case 6:
                if (Product.Inst.IsAging)
                {
                    if (LG.Delay(200))
                    {
                        CCDresult.X = 0;
                        CCDresult.Y = 0;
                        CCDresult.R = 0;
                        LG.StepNext(7);
                    }
                }
                else
                {
                    //if (VisionProject.Instance.visionApi.Trig == false)//相机触发的值
                    //{
                    //    if (VisionProject.Instance.visionApi.Error == 0)//相机接口错误码
                    //    {
                    //        LG.StepNext(7);//xy到取标位置
                    //        DeviceRsDef.Q_UpLighSource.OFF();//上相机光源关闭
                    //    }
                    //    else
                    //    {
                    //        LG.StepNext(101);//重新送料
                    //        CTCount++;//拍照识别次数
                    //        if (CTCount > 2)//大于2就视觉NG
                    //        {
                    //            CTCount = 0;//重新置零
                    //            Alarm.SetAlarm(AlarmLevelEnum.Level2, "Feeder视觉NG");//报警
                    //        }
                    //    }
                    //}
                }
                break;

            case 7:
                CTRCard.Q_Blow[whichNuzzle].OFF();    //吹气关闭
                if (Product.Inst.IsAging)
                {
                    if (LG.Delay(500))
                    {
                        CCDresult.X = 0;
                        CCDresult.Y = 0;
                        CCDresult.R = 0;
                    }
                }
                //else if (VisionProject.Instance.visionApi.Result.Length == 2)
                //{
                //    CCDresult.X = (float)VisionProject.Instance.visionApi.Result[TakeCount].X;//ccd的x值[改为链表形式]
                //    CCDresult.Y = (float)VisionProject.Instance.visionApi.Result[TakeCount].Y;//ccd的y值
                //    CCDresult.R = -(float)VisionProject.Instance.visionApi.Result[TakeCount].R;//ccd的r值
                //}
                //else
                //{
                //    CCDresult.X = (float)VisionProject.Instance.visionApi.Result[0].X;//ccd的x值[改为链表形式]
                //    CCDresult.Y = (float)VisionProject.Instance.visionApi.Result[0].Y;//ccd的y值
                //    CCDresult.R = -(float)VisionProject.Instance.visionApi.Result[0].R;//ccd的r值
                //}
                CTRCard.Axis_X.MC_MoveAbs(TakePos(whichNuzzle).X + (float)CCDresult.X);
                CTRCard.Axis_Y.MC_MoveAbs(TakePos(whichNuzzle).Y + (float)CCDresult.Y);
                CTRCard.Axis_R[whichNuzzle].MC_MoveAbs((float)CCDresult.R);
                LG.StepNext(8);
                break;

            case 8:    //XY到位后判断缓取,开始下压时打开吸嘴
                if (CTRCard.RArrive && CTRCard.XYArrive)
                {
                    if (whichNuzzle == 0)
                    {
                        CTRCard.Axis_Z[whichNuzzle].MC_MoveAbs(Para.Stickdata.TakeLabelPara.LiftTakePos_Z);
                    }
                    else
                    {
                        CTRCard.Axis_Z[whichNuzzle].MC_MoveAbs(Para.Stickdata.TakeLabelPara.RightTakePos_Z);
                    }
                    LG.StepNext(9);
                }
                break;

            case 9:
                if (CTRCard.ZArrive)
                {
                    CTRCard.Q_Nuzzle[whichNuzzle].ON();   //真空打开
                    CTRCard.Q_Blow[whichNuzzle].OFF();    //吹气关闭
                    LG.StepNext(10);
                }
                break;

            case 10:
                if (whichNuzzle == 0)
                {
                    Para.Stickdata.TakeLabelPara.TakeLableWholeLNum++;
                }
                else
                {
                    Para.Stickdata.TakeLabelPara.TakeLableWholeRNum++;
                }
                LG.StepNext(11);
                break;

            case 11:    //取标延时后Z轴抬起(缓抬)
                if (whichNuzzle == 0 && LG.Delay(Para.Stickdata.TakeLabelPara.LiftTakeDelay))
                {
                    LG.StepNext(201);
                }
                else if (whichNuzzle == 1 && LG.Delay(Para.Stickdata.TakeLabelPara.RightTakeDelay))
                {
                    LG.StepNext(201);
                }
                break;

            case 201:
                if (Para.Stickdata.FeederPara.FeederMode[1])
                {
                    //剥标板回退
                    LG.StepNext(202);
                }
                else
                {
                    LG.StepNext(12);
                }
                break;

            case 202:
                if (Para.Stickdata.FeederPara.FeederMode[1])                         //拨标板回退停止
                {
                    CTRCard.Axis_Z[whichNuzzle].MC_MoveAbs(Para.Stickdata.ZSafePos); //Z轴抬起
                    LG.StepNext(13);
                }
                break;

            case 12:    //取标延时后Z轴抬起
                if (CTRCard.ZArrive)
                {
                    CTRCard.Axis_Z[whichNuzzle].MC_MoveAbs(Para.Stickdata.ZSafePos);
                    LG.StepNext(13);
                }
                break;

            case 13:                 //检测真空//add
                if (CTRCard.ZArrive) //所有轴都到达
                {
                    if (!Product.Inst.IsAging && CTRCard.I_Vacuum[whichNuzzle].Value == false)
                    {
                        TakeNum++;
                        if (TakeNum >= 2)
                        {
                            TakeNum = 0;
                            LG.StepNext(101);                                        //运行状态下进入14 重新剥标
                            CTRCard.Q_Nuzzle[whichNuzzle].Value = false;             //吸真空电磁阀
                            Alarm.SetAlarm(AlarmLevelEnum.Level2, "取料失败,请检查真空和真空感应");
                            Para.ProcessData.NuzzlePara[whichNuzzle].isHave = false; //是否有料
                        }
                        else
                        {
                            LG.StepNext(4);    //到拍照位
                        }
                    }
                    else
                    {
                        if (whichNuzzle == 0)
                        {
                            Para.Stickdata.TakeLabelPara.TakeLableLNum++;
                        }
                        else
                        {
                            Para.Stickdata.TakeLabelPara.TakeLableRNum++;
                        }
                        LG.StepNext(14);                                        //结束
                        Para.ProcessData.NuzzlePara[whichNuzzle].isHave = true; //有料
                    }
                }
                break;

            case 101:
                if (CTRCard.ZArrive)
                {
                    LG.StepNext(4);
                }
                break;

            case 14:    //结束
                if (CTRCard.ZArrive)
                {
                    whichNuzzle++;    //吸嘴换成另一个吸嘴
                    TakeCount++;
                    if (whichNuzzle >= 2)
                    {
                        LG.StepNext(15);
                    }
                    else
                    {
                        LG.StepNext(2);
                    }
                }
                break;

            case 15:
                if (TakeCount >= 2)
                {
                    LG.StepNext(0xef);
                }
                //else if (VisionProject.Instance.visionApi.Result.Length == 1)
                //{
                //    TakeCount = 0;
                //    LG.StepNext(0xef);
                //}
                else if (Para.ProcessData.NuzzlePara[0].isHave == true &&
                         Para.ProcessData.NuzzlePara[1].isHave == true)
                {
                    TakeCount = 0;
                    LG.StepNext(0xef);
                }
                else
                {
                    LG.StepNext(2);
                }
                break;

            case 0xef:
                LG.End();
                break;
            }
        }