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; } }
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 } }