コード例 #1
0
ファイル: EposMotor.cs プロジェクト: Brzobohaty/Robot
 /// <summary>
 /// Nastavení parametrů motoru
 /// </summary>
 /// <param name="positionVeocity">rychlost motoru v otáčkách při pozicování</param>
 /// <param name="positionAceleration">zrychlení motoru v otáčkách při pozicování</param>
 /// <param name="positionDeceleration">zpomalení motoru v otáčkách při pozicování</param>
 /// <param name="velocity">maximální rychlost motoru při rychlostním řízení</param>
 /// <param name="aceleration">zrychlení motoru při rychlostním řízení</param>
 /// <param name="deceleration">zpomalení motoru při rychlostním řízení</param>
 public void setParameters(uint positionVelocity, uint positionAceleration, uint positionDeceleration, uint velocity, uint aceleration, uint deceleration)
 {
     maxSpeed = (int)velocity;
     if (velocityHandler != null)
     {
         velocityHandler.SetVelocityProfile(aceleration, deceleration);
     }
     if (positionHandler != null)
     {
         positionHandler.SetPositionProfile(positionVelocity, positionAceleration, positionDeceleration);
     }
 }
コード例 #2
0
ファイル: EposMotor.cs プロジェクト: Brzobohaty/Robot
        /// <summary>
        /// Inicializace motoru
        /// </summary>
        /// <param name="connector">connector sběrnice</param>
        /// <param name="stateObserver">posluchač stavu motoru</param>
        /// <param name="nodeNumber">číslo node</param>
        /// <param name="id">id motoru</param>
        /// <param name="mode">defaultní nastavení módu</param>
        /// <param name="reverse">příznak obrácení směru točení</param>
        /// <param name="multiplier">násobitel otáček v případě, že je motor za převodovkou</param>
        /// <param name="positionVeocity">rychlost motoru v otáčkách při pozicování</param>
        /// <param name="positionAceleration">zrychlení motoru v otáčkách při pozicování</param>
        /// <param name="positionDeceleration">zpomalení motoru v otáčkách při pozicování</param>
        /// <param name="velocity">maximální rychlost motoru při rychlostním řízení</param>
        /// <param name="aceleration">zrychlení motoru při rychlostním řízení</param>
        /// <param name="deceleration">zpomalení motoru při rychlostním řízení</param>
        public void inicialize(DeviceManager connector, IStateObserver stateObserver, Action motorErrorOccuredObserver, int nodeNumber, MotorId id, MotorMode mode, bool reverse, int multiplier, uint positionVelocity, uint positionAceleration, uint positionDeceleration, uint velocity, uint aceleration, uint deceleration)
        {
            try
            {
                this.mode                      = mode;
                this.stateObserver             = stateObserver;
                this.motorErrorOccuredObserver = motorErrorOccuredObserver;
                this.id         = id;
                this.multiplier = multiplier;

                if (reverse)
                {
                    rev = -1;
                }

                motor        = connector.CreateDevice(Convert.ToUInt16(nodeNumber));
                stateHandler = motor.Operation.MotionInfo;

                sm = motor.Operation.StateMachine;
                if (sm.GetFaultState())
                {
                    sm.ClearFault();
                }
                sm.SetEnableState();

                maxSpeed        = (int)velocity;
                velocityHandler = motor.Operation.ProfileVelocityMode;
                velocityHandler.SetVelocityProfile(aceleration, deceleration);
                positionHandler = motor.Operation.ProfilePositionMode;
                positionHandler.SetPositionProfile(positionVelocity, positionAceleration, positionDeceleration);
                homingHandler = motor.Operation.HomingMode;
                changeMode(mode);

                setStateObserver();
                state = MotorState.enabled;
                stateObserver.motorStateChanged(MotorState.enabled, "", id, 0, 0, 0, 0);
                targetPosition = stateHandler.GetPositionIs();
                targetAngle    = getAngleFromPosition(targetPosition);
            }
            catch (DeviceException e)
            {
                sm = null;
                disableStateObserver();
                state = MotorState.error;
                stateObserver.motorStateChanged(MotorState.error, String.Format("{0}\nError: {1}", e.ErrorMessage, errorDictionary.getComunicationErrorMessage(e.ErrorCode)), id, 0, 0, 0, 0);
            }
        }
コード例 #3
0
        /// <summary>
        /// sets engine into <see cref="PositionMode"/>
        /// </summary>
        /// <returns>bool that indicates, if operation was successful</returns>
        private bool ActivatePositionMode()
        {
            //if engine is not in PositionMode, set PositionMode
            if (_engineMode == EngineMode.Position)
            {
                return(false);
            }

            //set PositionMode for both motors separately
            _ppm1.ActivateProfilePositionMode();
            _ppm2.ActivateProfilePositionMode();

            //PostionProfile is only set, when acceleration and deceleration are not 0
            if (ProfileAcceleration != 0 && ProfileDeceleration != 0)
            {
                _ppm1.SetPositionProfile(1000000, ProfileAcceleration, ProfileDeceleration);
                _ppm2.SetPositionProfile(1000000, ProfileAcceleration, ProfileDeceleration);
            }
            //set state machine to EngineMode.POSITION
            _engineMode = EngineMode.Position;

            //returns true, if ActivatePositionMode() was successful
            return(true);
        }
コード例 #4
0
ファイル: EposMotor.cs プロジェクト: Brzobohaty/Robot
        /// <summary>
        /// Inicializace motoru
        /// </summary>
        /// <param name="connector">connector sběrnice</param>
        /// <param name="stateObserver">posluchač stavu motoru</param>
        /// <param name="nodeNumber">číslo node</param>
        /// <param name="id">id motoru</param>
        /// <param name="mode">defaultní nastavení módu</param>
        /// <param name="reverse">příznak obrácení směru točení</param>
        /// <param name="multiplier">násobitel otáček v případě, že je motor za převodovkou</param>
        /// <param name="positionVeocity">rychlost motoru v otáčkách při pozicování</param>
        /// <param name="positionAceleration">zrychlení motoru v otáčkách při pozicování</param>
        /// <param name="positionDeceleration">zpomalení motoru v otáčkách při pozicování</param>
        /// <param name="velocity">maximální rychlost motoru při rychlostním řízení</param>
        /// <param name="aceleration">zrychlení motoru při rychlostním řízení</param>
        /// <param name="deceleration">zpomalení motoru při rychlostním řízení</param>
        public void inicialize(DeviceManager connector, IStateObserver stateObserver, Action motorErrorOccuredObserver, int nodeNumber, MotorId id, MotorMode mode, bool reverse, int multiplier, uint positionVelocity, uint positionAceleration, uint positionDeceleration, uint velocity, uint aceleration, uint deceleration)
        {
            try
            {
                this.mode = mode;
                this.stateObserver = stateObserver;
                this.motorErrorOccuredObserver = motorErrorOccuredObserver;
                this.id = id;
                this.multiplier = multiplier;

                if (reverse)
                {
                    rev = -1;
                }

                motor = connector.CreateDevice(Convert.ToUInt16(nodeNumber));
                stateHandler = motor.Operation.MotionInfo;

                sm = motor.Operation.StateMachine;
                if (sm.GetFaultState())
                    sm.ClearFault();
                sm.SetEnableState();

                maxSpeed = (int)velocity;
                velocityHandler = motor.Operation.ProfileVelocityMode;
                velocityHandler.SetVelocityProfile(aceleration, deceleration);
                positionHandler = motor.Operation.ProfilePositionMode;
                positionHandler.SetPositionProfile(positionVelocity, positionAceleration, positionDeceleration);
                homingHandler = motor.Operation.HomingMode;
                changeMode(mode);

                setStateObserver();
                state = MotorState.enabled;
                stateObserver.motorStateChanged(MotorState.enabled, "", id, 0, 0, 0, 0);
                targetPosition = stateHandler.GetPositionIs();
                targetAngle = getAngleFromPosition(targetPosition);
            }
            catch (DeviceException e)
            {
                sm = null;
                disableStateObserver();
                state = MotorState.error;
                stateObserver.motorStateChanged(MotorState.error, String.Format("{0}\nError: {1}", e.ErrorMessage, errorDictionary.getComunicationErrorMessage(e.ErrorCode)), id, 0, 0, 0, 0);
            }
        }