Example #1
0
        private void flowRepeatMove(TProcVar S)
        {
            switch (S.StrStep1)
            {
            case "0":
                if (!axis.IsBusy)
                {
                    S.StrStep1 = "1";
                }
                break;

            case "1":
                double dest1;
                if (!Double.TryParse(ntxbPosition1.Text, out dest1))
                {
                    dest1 = 0;
                }
                axis.AbsolueMove(dest1);
                S.StrStep1 = "2";
                break;

            case "2":
                if (axis.IsReached && !axis.IsBusy)
                {
                    S.TM1.Restart();
                    S.StrStep1 = "3";
                }
                break;

            case "3":
                double delayTime1;
                if (!Double.TryParse(ntxbDelayTime.Text, out delayTime1))
                {
                    delayTime1 = 0;
                }
                if (S.TM1.ElapsedMilliseconds > delayTime1)
                {
                    S.StrStep1 = "4";
                }
                break;

            case "4":
                double dest2;
                if (!Double.TryParse(ntxbPosition2.Text, out dest2))
                {
                    dest2 = 0;
                }
                axis.AbsolueMove(dest2);
                S.StrStep1 = "5";
                break;

            case "5":
                if (axis.IsReached && !axis.IsBusy)
                {
                    S.TM1.Restart();
                    S.StrStep1 = "6";
                }
                break;

            case "6":
                double delayTime2;
                if (!Double.TryParse(ntxbDelayTime.Text, out delayTime2))
                {
                    delayTime1 = 0;
                }
                if (S.TM1.ElapsedMilliseconds > delayTime2)
                {
                    S.StrStep1 = "0";
                }
                break;
            }
        }
Example #2
0
        private void flowHome(TProcVar S)
        {
            switch (S.Step1)
            {
                #region flow init

            case 0:
                //關掉軟體極限,
                DisableSoftLimit();
                Stop(StopType.SlowDown, false);
                ServoOn(CmdStatus.ON);
                status.Home = false;
                S.Step1     = 1;
                S.Timeout   = 30000;
                if (HomeStarted != null)
                {
                    HomeStarted(DeviceName);
                }
                break;

            case 1:
                if (!IsBusy)
                {
                    switch (axisPara.HomeMode)
                    {
                    case HomeMode.OnePoint:
                        S.Step1 = 1000;
                        break;

                    case HomeMode.TwoPoint:
                        S.Step1 = 2000;
                        break;

                    case HomeMode.ThreePointWithZPhase:
                        S.Step1 = 2000;
                        break;

                    case HomeMode.ThreePoint:
                        S.Step1 = 3000;
                        break;
                    }
                }
                break;

                #endregion flow init

                #region OnePoint

            case 1000:
                //不在原點上
                if (!status.ORG)
                {
                    JogM(axisPara.OPRDevVelH, RotationDirection.CCW);
                }
                S.Step1 = 1010;
                break;

            case 1010:
                if (status.ORG)
                {
                    Stop(StopType.Emergency, false);
                    S.TM1.Restart();
                    S.Step1 = 1020;
                }
                break;

            case 1020:
                if (S.TM1.ElapsedMilliseconds > 100)
                {
                    JogM(5, RotationDirection.CW);
                    S.TM1.Restart();
                    S.Step1 = 1030;
                }
                break;

            case 1030:
                if (S.TM1.ElapsedMilliseconds > S.Timeout)
                {
                    S.Result.Value   = -1030;
                    S.Result.Message = LanguageResourceManager.GetString("TimeoutOutOfORG") + "(" + DeviceName + ")";
                    S.Step1          = 9000;
                }
                else
                {
                    if (!status.ORG)
                    {
                        Stop(StopType.Emergency, false);
                        doHomeOrg();
                        S.TM1.Restart();
                        S.Step1 = 7000;
                    }
                }
                break;

                #endregion OnePoint

                #region TwoPoint

            case 2000:
                if (status.LimitN)
                {
                    JogM(axisPara.OPRDevVelH, RotationDirection.CW);
                    S.TM1.Restart();
                    S.Step1 = 2100;
                }
                else if (status.LimitP)
                {
                    JogM(axisPara.OPRDevVelH, RotationDirection.CCW);
                    S.TM1.Restart();
                    S.Step1 = 2100;
                }
                else
                {
                    S.TM1.Restart();
                    S.Step1 = 2100;
                }
                break;

            case 2100:
                if (S.TM1.ElapsedMilliseconds > S.Timeout)
                {
                    S.Result.Value   = -2100;
                    S.Result.Message = LanguageResourceManager.GetString("TimeoutOutOfLimitN") + "(" + DeviceName + ")";
                    S.Step1          = 9000;
                }
                else
                {
                    if (!status.LimitN && !status.LimitP)
                    {
                        Stop(StopType.Emergency, false);
                        S.TM1.Restart();
                        S.Step1 = 2010;
                    }
                }
                break;

            case 2010:
                if (S.TM1.ElapsedMilliseconds > S.Timeout)
                {
                    S.Result.Value   = -2010;
                    S.Result.Message = LanguageResourceManager.GetString("TimeoutOutOfLimitN") + "(" + DeviceName + ")";
                    S.Step1          = 9000;
                }
                else
                {
                    if (!status.LimitN)
                    {
                        JogM(axisPara.OPRDevVelH, RotationDirection.CCW);
                    }
                    S.Step1 = 2020;
                }
                break;

            case 2020:
                if (status.LimitN)
                {
                    Stop(StopType.Emergency, false);
                    S.TM1.Restart();
                    S.Step1 = 2030;
                }
                break;

            case 2030:
                if (S.TM1.ElapsedMilliseconds > 100)
                {
                    if (axisPara.HomeMode == HomeMode.ThreePointWithZPhase)
                    {
                        doHomeLimWithZPhase();
                    }
                    else
                    {
                        doHomeLim();
                    }
                    S.Step1 = 7000;
                }
                break;

            case 2040:
                if (status.LimitN)
                {
                    Stop(StopType.Emergency, false);
                    S.Step1 = 7000;
                }
                break;

                #endregion TwoPoint

                #region ThreePoint

            case 3000:
                if (!status.ORG && !status.LimitN)
                {
                    JogM(axisPara.OPRDevVelH, RotationDirection.CCW);
                }
                S.Step1 = 3010;
                break;

            case 3010:
                if (status.ORG || status.LimitN)
                {
                    Stop(StopType.Emergency, false);
                    S.TM1.Restart();
                    S.Step1 = 3020;
                }
                break;

            case 3020:
                if (S.TM1.ElapsedMilliseconds > 100)
                {
                    JogM(axisPara.CreepDevVelH, RotationDirection.CW);
                    S.Step1 = 3030;
                }
                break;

            case 3030:
                if (S.TM1.ElapsedMilliseconds > S.Timeout)
                {
                    S.Result.Value   = -3030;
                    S.Result.Message = LanguageResourceManager.GetString("TimeoutEnterORG") + "(" + DeviceName + ")";
                    S.Step1          = 9000;
                }
                else
                {
                    if (status.ORG)
                    {
                        S.Step1 = 3040;
                    }
                }
                break;

            case 3040:
                if (!status.ORG)
                {
                    Stop(StopType.Emergency, false);
                    S.TM1.Restart();
                    S.Step1 = 3050;
                }
                break;

            case 3050:
                if (S.TM1.ElapsedMilliseconds > 100)
                {
                    doHomeOrg();
                    S.Step1 = 7000;
                }
                break;

                #endregion ThreePoint

                #region flow continue

            case 7000:
                if (S.TM1.ElapsedMilliseconds > 500 && !IsBusy)
                {
                    S.Step1 = 7010;
                }
                break;

            case 7010:
                ResetPos();
                Move(axisPara.OffsetH, SpeedMode.Manual);
                S.Step1 = 7020;
                break;

            case 7020:
                if (IsReached)
                {
                    S.TM1.Restart();
                    S.Step1 = 7030;
                }
                break;

            case 7030:
                if (S.TM1.ElapsedMilliseconds >= axisPara.ClearDelay * 1000)
                {
                    ResetPos();
                    S.Step1 = 8000;
                }
                break;

                #endregion flow continue

                #region flow end

            //flow finish
            case 8000:
                if (HomeCompleted != null)
                {
                    HomeCompleted(DeviceName);
                }
                status.Home = true;
                homeTask.TurnOff(itemHome);
                break;

            //flow trip
            case 9000:
                if (HomeFailure != null)
                {
                    HomeFailure(DeviceName);
                }
                status.Home = false;
                homeTask.TurnOff(itemHome);

                break;

                #endregion flow end
            }
        }