private OPM402 GetOperatingMode(MMCSingleAxis singleAxis) { OPM402 opMode = OPM402.OPM402_NO; try { opMode = singleAxis.GetOpMode(); } catch (Exception ex) { U.LogPopup(ex, "Cannot Get Op Mode for '{0}'", singleAxis.AxisName); } return(opMode);; }
private void MoveAbsAxis(CompBase compAxis, double pos, float velocity, bool waitForCompletion) { if (listAxis.ContainsKey(compAxis)) { MMCSingleAxis singleAxis = listAxis[compAxis]; if (!WaitForMoveReady(singleAxis, 20000.0)) { return; } MMC_MOTIONPARAMS_SINGLE singleParam = new MMC_MOTIONPARAMS_SINGLE(); if (compAxis is RotaryBase) { singleParam.fAcceleration = 250f; singleParam.fDeceleration = 250f; } else { singleParam.fAcceleration = 1000f; singleParam.fDeceleration = 1000f; } singleParam.fVelocity = velocity; singleParam.eDirection = MC_DIRECTION_ENUM.MC_SHORTEST_WAY; singleParam.fJerk = 100f; singleParam.eBufferMode = MC_BUFFERED_MODE_ENUM.MC_BUFFERED_MODE; singleParam.ucExecute = 1; singleAxis.SetDefaultParams(singleParam); OPM402 opMode = singleAxis.GetOpMode(); if (opMode != OPM402.OPM402_CYCLIC_SYNC_POSITION_MODE) { try { singleAxis.SetOpMode(OPM402.OPM402_CYCLIC_SYNC_POSITION_MODE); Thread.Sleep(500); //'Wait Mode change before move' } catch (Exception ex) { U.LogPopup(ex, "Cannot set to OPM402_CYCLIC_SYNC_POSITION_MODE mode axis {0}", compAxis.Name); return; } } try { double actualPos = singleAxis.GetActualPosition(); if (actualPos != pos) { singleAxis.MoveAbsolute(pos, velocity, MC_BUFFERED_MODE_ENUM.MC_BUFFERED_MODE); if (waitForCompletion) { double curPos = 0.0; if (compAxis is RotaryBase) { curPos = (compAxis as RotaryBase).CurrentPosition; } else if (compAxis is RealAxis) { curPos = (compAxis as RealAxis).CurrentPosition; } else { U.LogPopup("Unexpected Axis type for MoveAbsAxis: Type={0} Axis={1}", compAxis.GetType().Name, compAxis.Nickname); } // Calculate approximate time to wait for completion (a little less than) double mSecWait = Math.Abs(pos - curPos) * 950.0 / velocity; if (!WaitMoveDone(singleAxis, (int)mSecWait)) { U.LogPopup("Timeout moving {0}", compAxis.Name); } } } } catch (Exception ex) { U.LogError(ex, "Failed To Move '{0}'", compAxis.Name); } } }
private bool HomeAxisDS402(CompBase compAxis, int homeMethod) { if (listAxis.ContainsKey(compAxis)) { MMCSingleAxis singleAxis = listAxis[compAxis]; if (!OKtoCmdMove(singleAxis)) { return(false); } try { OPM402 opMode = singleAxis.GetOpMode(); if (opMode != OPM402.OPM402_HOMING_MODE) { try { singleAxis.SetOpMode(OPM402.OPM402_HOMING_MODE); Thread.Sleep(500); //wait Mode Change; } catch (Exception ex) { U.LogPopup(ex, "Cannot change to Homing mode for axis '{0}'", compAxis.Name); return(false);; } } MMC_HOMEDS402Params hParam = new MMC_HOMEDS402Params(); hParam.dbPosition = 0; hParam.eBufferMode = MC_BUFFERED_MODE_ENUM.MC_BUFFERED_MODE; hParam.uiHomingMethod = homeMethod; // Index_Axis = 33, X_Axis = 1, Y_Axis = 1, Z_Axis = 2 hParam.fAcceleration = 200f; //hParam.fDistanceLimit = 200f; //hParam.uiTimeLimit = 10000; //hParam.fTorqueLimit = 0f; hParam.fVelocity = 20f; hParam.ucExecute = 1; if (GetOperatingMode(singleAxis) != OPM402.OPM402_HOMING_MODE) { try { singleAxis.SetOpMode(OPM402.OPM402_HOMING_MODE); Thread.Sleep(500); //wait Mode Change; } catch (MMCException ex) { U.LogPopup(ex, "Cannot change to Homing mode for '{0}'", singleAxis.AxisName); return(false);; } } try { singleAxis.HomeDS402(hParam); U.SleepWithEvents(200); WaitHomingDone(singleAxis, 25000);//(int)hParam.uiTimeLimit); } catch (MMCException ex) { U.LogPopup(ex, "Homing error for '{0}'", singleAxis.AxisName); singleAxis.Reset(); return(false); } return(true); } catch (Exception ex) { U.LogError(ex, "Failed to home '{0}'", compAxis.Name); singleAxis.Reset(); } } return(false); }