예제 #1
0
        public enuPositionerStatus SetAxisAbsolutePosition(enuAxes _axis, double _position)
        {
            if (Settings.AutoValidateParam)
            {
                if (ValidateAxisAbsolutePosition(_axis, ref _position) != enuPositionerStatus.Ready)
                {
                    return(mPosStatus);
                }

                double mSpeed = 0;
                if (GetAxisSpeed(_axis, ref mSpeed) != enuPositionerStatus.Ready)
                {
                    return(mPosStatus);
                }

                if (ValidateAxisSpeed(_axis, ref mSpeed) != enuPositionerStatus.Ready)
                {
                    return(mPosStatus);
                }
            }

            if (mPosStatus == enuPositionerStatus.Ready)
            {
                HWStatus = LogError(Positioner.MoveAbsSingleAxis(AxisIndex(_axis), _position, true));
                //if (HWStatus == enuHWStatus.Ready) mPosStatus = enuPositionerStatus.Ready;
            }
            return(mPosStatus);
        }
예제 #2
0
 public enuPositionerStatus GetAxisAbsolutePosition(enuAxes _axis, ref double _pos)
 {
     if (mPosStatus == enuPositionerStatus.Ready)
     {
         HWStatus = LogError(Positioner.GetPosSingleAxis(AxisIndex(_axis), ref _pos));
     }
     return(mPosStatus);// mPosStatus was modified by HWStatus already
 }
예제 #3
0
        public enuPositionerStatus ValidateAxisSpeed(enuAxes _axis, ref double _speed)
        {
            if (mPosStatus == enuPositionerStatus.Ready)
            {
                switch (_axis)
                {
                case enuAxes.XAxis:
                    if (_speed > Settings.X.MaxSpeed)
                    {
                        _speed = Settings.X.MaxSpeed;
                    }
                    if (_speed <= 0)
                    {
                        _speed = Settings.X.FailSafeSpeed;
                    }
                    break;

                case enuAxes.YAxis:
                    if (_speed > Settings.Y.MaxSpeed)
                    {
                        _speed = Settings.Y.MaxSpeed;
                    }
                    if (_speed <= 0)
                    {
                        _speed = Settings.Y.FailSafeSpeed;
                    }
                    break;

                case enuAxes.ZAxis:
                    if (_speed > Settings.Z.MaxSpeed)
                    {
                        _speed = Settings.Z.MaxSpeed;
                    }
                    if (_speed <= 0)
                    {
                        _speed = Settings.Z.FailSafeSpeed;
                    }
                    break;

                case enuAxes.AAxis:
                    if (_speed > Settings.A.MaxSpeed)
                    {
                        _speed = Settings.A.MaxSpeed;
                    }
                    if (_speed <= 0)
                    {
                        _speed = Settings.A.FailSafeSpeed;
                    }
                    break;

                default:
                    mPosStatus = enuPositionerStatus.Error;
                    break;
                }
            }
            return(mPosStatus);
        }
예제 #4
0
        private int AxisIndex(enuAxes _axis)
        {
            switch (_axis)
            {
            case enuAxes.XAxis:
                return(Settings.X.AxisNumber);

            case enuAxes.YAxis:
                return(Settings.Y.AxisNumber);

            case enuAxes.ZAxis:
                return(Settings.Z.AxisNumber);
            }
            return(0);
        }
예제 #5
0
 public enuPositionerStatus SetAxisSpeed(enuAxes _axis, double _speed)
 {
     if (mPosStatus == enuPositionerStatus.Ready)
     {
         if (Settings.AutoValidateParam)
         {
             if (ValidateAxisSpeed(_axis, ref _speed) != enuPositionerStatus.Ready)
             {
                 return(mPosStatus);                                                                                               // mPosStatus was modified by ValidateAxisSpeed already
             }
         }
         HWStatus = LogError(Positioner.SetVelSingleAxis(AxisIndex(_axis), _speed));
     }
     return(mPosStatus);  // mPosStatus was modified by HWStatus already
 }
예제 #6
0
        private int AxisIndex(enuAxes _axis)
        {
            switch (_axis)
            {
            case enuAxes.XAxis:
                return(Settings.X.AxisNumber);

            case enuAxes.YAxis:
                return(Settings.Y.AxisNumber);

            case enuAxes.ZAxis:
                return(Settings.Z.AxisNumber);

            default:
                return(-1);    //todo: log an error event (implement a-axis as well?)
            }
        }
예제 #7
0
        public enuPositionerStatus GetAxisSpeed(enuAxes _axis, ref double _speed)
        {
            switch (_axis)
            {
            case enuAxes.XAxis:
                _speed = mSpeeds.X;
                break;

            case enuAxes.YAxis:
                _speed = mSpeeds.Y;
                break;

            case enuAxes.ZAxis:
                _speed = mSpeeds.Z;
                break;
            }
            return(enuPositionerStatus.Ready);
        }
예제 #8
0
        public enuPositionerStatus GetAxisAbsolutePosition(enuAxes _axis, ref double _pos)
        {
            switch (_axis)
            {
            case enuAxes.XAxis:
                _pos = mPos.X;
                break;

            case enuAxes.YAxis:
                _pos = mPos.Y;
                break;

            case enuAxes.ZAxis:
                _pos = mPos.Z;
                break;
            }
            return(enuPositionerStatus.Ready);
        }
예제 #9
0
        public enuPositionerStatus SetAxisSpeed(enuAxes _axis, double _speed)
        {
            switch (_axis)
            {
            case enuAxes.XAxis:
                mSpeeds.X = _speed;
                break;

            case enuAxes.YAxis:
                mSpeeds.Y = _speed;
                break;

            case enuAxes.ZAxis:
                mSpeeds.Z = _speed;
                break;
            }
            return(enuPositionerStatus.Ready);
        }
예제 #10
0
        public enuPositionerStatus SetAxisAbsolutePosition(enuAxes _axis, double _position)
        {
            switch (_axis)
            {
            case enuAxes.XAxis:
                Thread.Sleep((int)((Math.Abs(mPos.X - _position) / mSpeeds.X)));
                mPos.X = _position;
                break;

            case enuAxes.YAxis:
                Thread.Sleep((int)((Math.Abs(mPos.Y - _position) / mSpeeds.Y)));
                mPos.Y = _position;
                break;

            case enuAxes.ZAxis:
                Thread.Sleep((int)((Math.Abs(mPos.Z - _position) / mSpeeds.Z)));
                mPos.Z = _position;
                break;
            }
            return(enuPositionerStatus.Ready);
        }
예제 #11
0
        public enuPositionerStatus SetAxisRelativePosition(enuAxes _axis, double _increment)
        {
            switch (_axis)
            {
            case enuAxes.XAxis:
                mPos.X += _increment;
                Thread.Sleep((int)(_increment / mSpeeds.X));
                break;

            case enuAxes.YAxis:
                mPos.Y += _increment;
                Thread.Sleep((int)(_increment / mSpeeds.Y));
                break;

            case enuAxes.ZAxis:
                mPos.Z += _increment;
                Thread.Sleep((int)(_increment / mSpeeds.Z));
                break;
            }
            return(enuPositionerStatus.Ready);
        }
예제 #12
0
        public enuPositionerStatus GetAxisSpeed(enuAxes _axis, ref double _speed)
        {
            double X = 0, Y = 0, Z = 0, A = 0;

            _speed = 0;
            if (mPosStatus == enuPositionerStatus.Ready)
            {
                HWStatus = LogError(Positioner.GetVel(ref X, ref Y, ref Z, ref A));
            }
            if (mPosStatus == enuPositionerStatus.Ready) // mPosStatus was modified by HWStatus already
            {
                switch (_axis)
                {
                case enuAxes.XAxis:
                    _speed = X;
                    break;

                case enuAxes.YAxis:
                    _speed = Y;
                    break;

                case enuAxes.ZAxis:
                    _speed = Z;
                    break;

                case enuAxes.AAxis:
                    _speed = A;
                    break;

                default:
                    mPosStatus = enuPositionerStatus.Error;
                    break;
                }
            }
            return(mPosStatus);
        }
예제 #13
0
 public enuPositionerStatus SetAxisRelativePosition(enuAxes _axis, double _increment)
 {
     if (mPosStatus == enuPositionerStatus.Ready)
     {
         if (Settings.AutoValidateParam)
         {
             if (ValidateAxisRelativeMovement(_axis, ref _increment) != enuPositionerStatus.Ready)
             {
                 return(mPosStatus);                                                                                 // mPosStatus was modified by ValidateAxisRelativeMovement already
             }
             double mSpeed = 0;
             if (GetAxisSpeed(_axis, ref mSpeed) != enuPositionerStatus.Ready)
             {
                 return(mPosStatus);                                                              // mPosStatus was modified by GetAxisSpeed already
             }
             if (ValidateAxisSpeed(_axis, ref mSpeed) != enuPositionerStatus.Ready)
             {
                 return(mPosStatus);                                                                  // mPosStatus was modified by ValidateAxisSpeed already
             }
         }
         HWStatus = LogError(Positioner.MoveRelSingleAxis(AxisIndex(_axis), _increment, true));
     }
     return(mPosStatus);  // mPosStatus was evtl. modified by HWStatus already
 }
예제 #14
0
 public enuPositionerStatus ValidateAxisRelativeMovement(enuAxes _axis, ref double _distance)
 {                       //check, if the position can be reached including distance and precision
     return(mPosStatus); //todo, log error
 }
예제 #15
0
 public enuPositionerStatus AxisStop(enuAxes _axis)
 {
     return(enuPositionerStatus.Ready);
 }
예제 #16
0
 public enuPositionerStatus ValidateAxisAbsolutePosition(enuAxes _axis, ref double _pos)
 {
     return(enuPositionerStatus.Ready);
 }
예제 #17
0
 public enuPositionerStatus ValidateAxisSpeed(enuAxes _axis, ref double _speed)
 {
     return(enuPositionerStatus.Ready);
 }
예제 #18
0
 public enuPositionerStatus AxisStop(enuAxes _axis)
 {
     // mHWStatus = LogError(Positioner.SetAbortFlag());
     HWStatus = LogError(Positioner.StopAxes());
     return(mPosStatus);
 }
예제 #19
0
 public enuPositionerStatus ValidateAxisRelativeMovement(enuAxes _axis, ref double _distance)
 {
     return(enuPositionerStatus.Ready);
 }
예제 #20
0
        public enuPositionerStatus GetAxisStatus(enuAxes _axis)
        {
            string strStatus = new String('\0', 256);
            enuPositionerStatus axisState = enuPositionerStatus.Error;

            switch (strStatus.Substring(AxisIndex(_axis), 1))
            {
            case "M":
                // Achse ist in Bewegung (Motion)
                axisState = enuPositionerStatus.Busy;
                break;

            case "-":
                axisState = enuPositionerStatus.NotInitialized;
                break;

            case "@":
                axisState = enuPositionerStatus.Ready;
                break;

            case "S":
                // Achse steht in Endschalter
                axisState = enuPositionerStatus.Error;
                break;

            case "F":
                axisState = enuPositionerStatus.Error;
                break;

            default:
                axisState = enuPositionerStatus.Error;
                break;
            }

            return(axisState);

            /*
             *  int intSwitches = 0;
             *  ErrCheck(Positioner.GetSwitches(ref intSwitches));
             *
             *  if (intSwitches > 0)
             *  {
             *      return enuPositionerStatus.Error;
             *      //todo: log
             *  }
             *
             *  if ((intSwitches | 1024) == 1024)
             *  {
             *      ErrCheck(Positioner.RMeasureEx(4));
             *  }
             *  else if ((intSwitches | 512) == 512)
             *  {
             *      ErrCheck(Positioner.RMeasureEx(2));
             *  }
             *  else if ((intSwitches | 256) == 256)
             *  {
             *      ErrCheck(Positioner.RMeasureEx(1));
             *  }
             *  else if ((intSwitches | 4) == 4)
             *  {
             *      ErrCheck(Positioner.CalibrateEx(4));
             *  }
             *  else if ((intSwitches | 2) == 2)
             *  {
             *      ErrCheck(Positioner.CalibrateEx(2));
             *  }
             *  else if ((intSwitches | 1) == 1)
             *  {
             *      ErrCheck(Positioner.CalibrateEx(1));
             *  }
             *  //todo: objLogger.LogEvent(Me, "The stage was moved across the end-switch, stored positions are now invalid!", LL_Warning)
             *
             *  // return mStatus; //todo:
             * }
             */
        }