Esempio n. 1
0
        public void Run(RunModeDef RunMode)
        {
            if (!movedriverZm.Succeed)
            {
                return;
            }
            this.RunMode = RunMode;
            BaseData RunMode_Reg = new BaseData(1504, new int[] { (int)RunMode });

            movedriverZm.WriteRegister(RunMode_Reg);
            while (RunMode_Reg.Succeed == false)
            {
                Thread.Sleep(1);
            }
            BaseData FsmCmd_Reg = new BaseData(1500, new int[] { (int)FsmStaDef.RUN });

            movedriverZm.WriteRegister(FsmCmd_Reg);
            while (FsmCmd_Reg.Succeed == false)
            {
                Thread.Sleep(1);
            }
            this.Status = FsmStaDef.RUN;
        }
Esempio n. 2
0
        //private int whichNuzzle;
        public void Logic(RunModeDef runMode)
        {
            LG.Start();
            switch (LG.step)
            {
            case 1:    //走剥膜长度
                if (MotionCard.MotionFun.MC_AxGetStatus((int)AxisName.FeedLable) == 0)
                {
                    MotionCard.MotionFun.OutputON((int)OutputName.Q_Suck);
                    if (MotionCard.MotionFun.InputGet((int)InputName.I_LableCheck_1) == false)
                    {
                        MotionCard.MotionFun.MC_MoveRel((int)AxisName.FeedLable, Para.speed, Para.labelLength);
                        LG.TonRst();
                        LG.step = 2;
                    }
                    else
                    {
                        LG.step = 4;
                    }
                }
                break;

            case 2:    //检测感应
                if (LG.Ton(MotionCard.MotionFun.InputGet((int)InputName.I_LableCheck_1) || MotionCard.MotionFun.InputGet((int)InputName.I_LableCheck_2), Para.checkDelay))
                {
                    MotionCard.MotionFun.MC_Stop((int)AxisName.FeedLable);
                    LG.step = 3;
                }
                else if (MotionCard.MotionFun.MC_AxGetStatus((int)AxisName.FeedLable) == 0)
                {
                    LG.count++;
                    if (runMode == RunModeDef.NORMAL)
                    {
                        if (LG.count > Para.StripNumAlrm)
                        {
                            LG.count = 0;
                            LG.step  = 0xfe;
                            if (Para.StripNumAlrm > 0)
                            {
                                MachineAlarm.SetAlarm(AlarmLevelEnum.Level2, "剥标失败,请检查卷料是否用完");
                            }
                        }
                        else
                        {
                            LG.step = 1;
                        }
                    }
                    else
                    {
                        LG.step = 3;
                    }
                }
                break;

            case 3:    //
                if (MotionCard.MotionFun.MC_AxGetStatus((int)AxisName.FeedLable) == 0)
                {
                    MotionCard.MotionFun.MC_MoveRel((int)AxisName.FeedLable, Para.speed, -Para.LableSupplyBack);
                    LG.step = 4;
                }
                break;

            case 4:    //
                if (MotionCard.MotionFun.MC_AxGetStatus((int)AxisName.FeedLable) == 0)
                {
                    LG.step = 0xff;
                }
                break;

            case 0xfe:
                LG.ErrorStop();
                break;

            case 0xff:
                LG.End();
                break;

            default:
                break;
            }
        }
Esempio n. 3
0
        public void Logic(RunModeDef runMode)
        {
            LG.Start();
            switch (LG.step)
            {
            case 1:     //Z轴抬起到安全高度
                if (Para.OverTake == 1)
                {
                    whichNuzzle = (int)LogicDef.NuzzleNum - 1;
                }
                else
                {
                    whichNuzzle = 0;
                }

                //if (AllAxisArrive())
                {
                    for (int i = 0; i < (int)LogicDef.NuzzleNum; i++)
                    {
                        MotionCard.MotionFun.MC_MoveAbs((int)AxisName.Z, Para.SafePos_Z);
                    }
                    LG.step = 2;
                }
                break;

            case 2:     //xy到取标位置
                if (MotionCard.MotionFun.MC_AxGetStatus((int)AxisName.Z) == 0)
                {
                    //取标的时候将吹气关
                    for (int i = 0; i < (int)LogicDef.NuzzleNum; i++)
                    {
                        MotionCard.MotionFun.OutputOFF((int)OutputName.Q_Suck_1);
                    }
                    //确定哪一个吸嘴是禁用的
                    if (Para.OverTake == 1)
                    {
                        if (Functions.GetBitValue(Para.NuzzleSwitch, (ushort)whichNuzzle) == false)
                        {
                            if (whichNuzzle > 0)
                            {
                                whichNuzzle--;
                            }
                            else
                            {
                                LG.step = 9;
                            }
                        }
                        else
                        {
                            MotionCard.MotionFun.MC_MoveAbs((int)AxisName.X, Para.PointData.X);
                            MotionCard.MotionFun.MC_MoveAbs((int)AxisName.Y, Para.PointData.Y);
                            for (int i = 0; i < (int)LogicDef.NuzzleNum; i++)
                            {
                                if (Functions.GetBitValue(Para.NuzzleSwitch, (ushort)i) == true)
                                {
                                    MotionCard.MotionFun.MC_MoveAbs((int)AxisName.R, Para.PointData.R);
                                }
                            }
                            LG.step = 3;
                        }
                    }
                    else
                    {
                        for (int i = whichNuzzle; i < (int)LogicDef.NuzzleNum; i++)
                        {
                            if (Functions.GetBitValue(Para.NuzzleSwitch, (ushort)i) == false)
                            {
                                whichNuzzle++;
                            }
                            else
                            {
                                break;
                            }
                        }

                        if (whichNuzzle < (int)LogicDef.NuzzleNum)
                        {
                            MotionCard.MotionFun.MC_MoveAbs((int)AxisName.X, Para.PointData.X);
                            MotionCard.MotionFun.MC_MoveAbs((int)AxisName.Y, Para.PointData.Y);
                            for (int i = 0; i < (int)LogicDef.NuzzleNum; i++)
                            {
                                if (Functions.GetBitValue(Para.NuzzleSwitch, (ushort)i) == true)
                                {
                                    MotionCard.MotionFun.MC_MoveAbs((int)AxisName.R, Para.PointData.R);
                                }
                            }
                            LG.step = 3;
                        }
                        else
                        {
                            LG.step = 9;
                        }
                    }
                }
                break;

            case 3:    //XY到位后判断缓取,开始下压时打开吸嘴
                if (AllAxisArrive())
                {
                    MotionCard.MotionFun.OutputON((int)OutputName.Q_Suck_1);
                    if (Para.TakeSlowDistance_Z > 0)
                    {
                        MotionCard.MotionFun.MC_MoveAbs((int)AxisName.Z, Para.TakePos_Z - Para.TakeSlowDistance_Z);
                        LG.step = 4;
                    }
                    else
                    {
                        MotionCard.MotionFun.MC_MoveAbs((int)AxisName.Z, Para.TakePos_Z);
                        LG.step = 5;
                    }
                }
                break;

            case 4:    //Z轴缓慢到取标高度
                if (AllAxisArrive())
                {
                    MotionCard.MotionFun.MC_MoveAbs((int)AxisName.Z, Para.TakeSlowSpeed_Z, Para.TakePos_Z);
                    LG.step = 5;
                }
                break;

            case 5:    //Z轴到达
                if (AllAxisArrive() && MotionCard.MotionFun.MC_AxGetStatus((int)AxisName.Y) == 0)
                {
                    LG.step = 6;
                }
                break;

            case 6:    //取标延时后Z轴抬起(缓抬)
                if (LG.TCnt((uint)Para.TakeDelay))
                {
                    LG.step = 7;
                }
                break;

            case 7:    //取标延时后Z轴抬起
                if (AllAxisArrive())
                {
                    MotionCard.MotionFun.MC_MoveAbs((int)AxisName.Z, Para.SafePos_Z);

                    LG.step = 8;
                }
                break;

            case 8:    //检测真空
                if (MotionCard.MotionFun.MC_AxGetStatus((int)AxisName.Z) == 0)
                {
                    if (MotionCard.MotionFun.InputGet((int)InputName.I_VacuoCheck) == false && Para.CheckVacuumEn == 1)
                    {
                        LG.step = 9;
                        //判断是否在老化模式
                        if (runMode == RunModeDef.NORMAL)
                        {
                            LG.count++;
                            if (LG.count >= 2)
                            {
                                LG.step = 9;
                                MotionCard.MotionFun.OutputON((int)OutputName.Q_Suck_2);
                                MachineAlarm.SetAlarm(AlarmLevelEnum.Level2, "取料失败,请检查真空和真空感应");
                            }
                            else
                            {
                                LG.step = 3;
                            }
                        }
                    }
                    else
                    {
                        LG.step = 9;
                    }
                }
                break;


            case 9:    //结束
                if (MotionCard.MotionFun.MC_AxGetStatus((int)AxisName.Z) == 0)
                {
                    LG.count = 0;
                    if (Para.OverTake == 1)
                    {
                        if (whichNuzzle > 0)
                        {
                            whichNuzzle--;
                            LG.step = 3;
                        }
                        else
                        {
                            LG.step = 10;
                        }
                    }
                    else
                    {
                        whichNuzzle++;
                        if (whichNuzzle < (int)LogicDef.NuzzleNum)
                        {
                            LG.step = 3;
                        }
                        else
                        {
                            LG.step = 10;
                        }
                    }
                }
                break;


            case 10:
                if (MotionCard.MotionFun.MC_AxGetStatus((int)AxisName.Z) == 0)
                {
                    //确定哪一个吸嘴是禁用的
                    for (int i = 0; i < (int)LogicDef.NuzzleNum; i++)
                    {
                        if (Functions.GetBitValue(Para.NuzzleSwitch, (ushort)i) == false)
                        {
                            whichNuzzle++;
                        }
                        else
                        {
                            break;
                        }
                    }
                }
                LG.step = 0xff;
                break;

            case 0xff:
                LG.End();
                break;
            }
        }
Esempio n. 4
0
 public FsmDef(Device.BoardCtrllerManager movedriverZm)
 {
     this.movedriverZm = movedriverZm;
     Status            = FsmStaDef.INIT;
     RunMode           = RunModeDef.NORMAL;
 }