Esempio n. 1
0
        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);;
        }
Esempio n. 2
0
        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);
                }
            }
        }
Esempio n. 3
0
        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);
        }