public void Initialize() { this.requestedControlMode = ElmoWhistleMotor.ControlModes.singleLoopPosition; this.requestedMode = ElmoWhistleMotor.Modes.undefined; this.requestedVelocity = 0; this.requestedCurrent = 0; }
private void UpdateReelMotor() { if (null == this.reelMotor.FaultReason) { ElmoWhistleMotor.ControlModes neededControlMode = ElmoWhistleMotor.ControlModes.singleLoopPosition; ElmoWhistleMotor.Modes neededMode = ElmoWhistleMotor.Modes.current; double neededValue = 0; bool modeChange = false; if (ReelModes.off == this.reelModeSetPoint) { neededControlMode = ElmoWhistleMotor.ControlModes.singleLoopPosition; neededMode = ElmoWhistleMotor.Modes.off; neededValue = 0; } else if (ReelModes.reverse == this.reelModeSetPoint) { if (MovementForwardControls.current == ParameterAccessor.Instance.ReelMotionMode) { neededControlMode = ElmoWhistleMotor.ControlModes.singleLoopPosition; neededMode = ElmoWhistleMotor.Modes.current; neededValue = ParameterAccessor.Instance.ReelReverseCurrent.OperationalValue; } else { neededControlMode = ElmoWhistleMotor.ControlModes.singleLoopPosition; neededMode = ElmoWhistleMotor.Modes.velocity; neededValue = ParameterAccessor.Instance.ReelReverseSpeed.OperationalValue * ParameterAccessor.Instance.ReelVelocityToRpm; } } else if (ReelModes.locked == this.reelModeSetPoint) { neededControlMode = ElmoWhistleMotor.ControlModes.microStepper; neededValue = ParameterAccessor.Instance.ReelLockCurrent.OperationalValue; } else if (ReelModes.manual == this.reelModeSetPoint) { if (MovementForwardControls.current == ParameterAccessor.Instance.ReelMotionMode) { neededControlMode = ElmoWhistleMotor.ControlModes.singleLoopPosition; neededMode = ElmoWhistleMotor.Modes.current; neededValue = this.reelManualCurrentSetPoint * -1; } else { neededControlMode = ElmoWhistleMotor.ControlModes.singleLoopPosition; neededMode = ElmoWhistleMotor.Modes.velocity; neededValue = this.reelManualSpeedSetPoint * -1 * ParameterAccessor.Instance.ReelVelocityToRpm; } } if ((neededControlMode != this.reelRequestedControlMode) || (neededMode != this.reelRequestedMode)) { bool requestedZero = false; bool atZero = false; if (((ElmoWhistleMotor.ControlModes.microStepper == this.reelRequestedControlMode) && (0 == this.reelRequestedCurrent)) || ((ElmoWhistleMotor.ControlModes.singleLoopPosition == this.reelRequestedControlMode) && (ElmoWhistleMotor.Modes.undefined == this.reelRequestedMode)) || ((ElmoWhistleMotor.ControlModes.singleLoopPosition == this.reelRequestedControlMode) && (ElmoWhistleMotor.Modes.off == this.reelRequestedMode)) || ((ElmoWhistleMotor.ControlModes.singleLoopPosition == this.reelRequestedControlMode) && (ElmoWhistleMotor.Modes.current == this.reelRequestedMode) && (0 == this.reelRequestedCurrent)) || ((ElmoWhistleMotor.ControlModes.singleLoopPosition == this.reelRequestedControlMode) && (ElmoWhistleMotor.Modes.velocity == this.reelRequestedMode) && (0 == this.reelRequestedSpeed))) { requestedZero = true; } if (((ElmoWhistleMotor.ControlModes.microStepper == this.reelRequestedControlMode) && (0 == this.reelMotor.Torque)) || ((ElmoWhistleMotor.ControlModes.singleLoopPosition == this.reelRequestedControlMode) && (ElmoWhistleMotor.Modes.undefined == this.reelRequestedMode)) || ((ElmoWhistleMotor.ControlModes.singleLoopPosition == this.reelRequestedControlMode) && (ElmoWhistleMotor.Modes.off == this.reelRequestedMode)) || ((ElmoWhistleMotor.ControlModes.singleLoopPosition == this.reelRequestedControlMode) && (ElmoWhistleMotor.Modes.current == this.reelRequestedMode) && (0 == this.reelMotor.Torque)) || ((ElmoWhistleMotor.ControlModes.singleLoopPosition == this.reelRequestedControlMode) && (ElmoWhistleMotor.Modes.velocity == this.reelRequestedMode) && (0 == this.reelMotor.RPM))) { atZero = true; } if ((false == requestedZero) || (false == atZero)) { neededValue = 0; } else { this.reelMotor.SetControlMode(neededControlMode); this.reelRequestedControlMode = neededControlMode; if (ElmoWhistleMotor.ControlModes.singleLoopPosition == this.reelRequestedControlMode) { this.reelMotor.SetMode(neededMode); this.reelRequestedMode = neededMode; } else { // mode assignment not needed for Micro Stepper mode this.reelRequestedMode = neededMode; } Tracer.WriteMedium(TraceGroup.TBUS, null, "{0} control={1} mode={2}", this.reelMotor.Name, this.reelRequestedControlMode, this.reelRequestedMode); modeChange = true; } } if (((neededControlMode == this.reelRequestedControlMode) && (neededMode == this.reelRequestedMode)) || (0 == neededValue)) { if (ElmoWhistleMotor.ControlModes.singleLoopPosition == this.reelRequestedControlMode) { if (ElmoWhistleMotor.Modes.current == this.reelRequestedMode) { if ((neededValue != this.reelRequestedCurrent) || (false != modeChange)) { float torqueCurrent = (float)neededValue; this.reelMotor.SetTorque(torqueCurrent); this.reelRequestedCurrent = neededValue; Tracer.WriteMedium(TraceGroup.TBUS, null, "{0} current {1}", this.reelMotor.Name, neededValue); } } else if (ElmoWhistleMotor.Modes.velocity == this.reelRequestedMode) { if ((neededValue != this.reelRequestedSpeed) || (false != modeChange)) { int velocity = (int)((neededValue > 0) ? (neededValue + 0.55) : (neededValue - 0.55)); this.reelMotor.SetVelocity(velocity); this.reelRequestedSpeed = neededValue; Tracer.WriteMedium(TraceGroup.TBUS, null, "{0} speed {1:0.000} {2}", this.reelMotor.Name, neededValue, velocity); } } } else if (ElmoWhistleMotor.ControlModes.microStepper == this.reelRequestedControlMode) { if ((neededValue != this.reelRequestedCurrent) || (false != modeChange)) { float torqueCurrent = (float)neededValue; this.reelMotor.SetStepperCurrent(torqueCurrent); this.reelRequestedCurrent = neededValue; Tracer.WriteMedium(TraceGroup.TBUS, null, "{0} lock current {1}", this.reelMotor.Name, neededValue); } } } } }
private void InitializeReelMotor() { this.reelMotor.Initialize(); this.reelRequestedControlMode = ElmoWhistleMotor.ControlModes.singleLoopPosition; this.reelRequestedMode = ElmoWhistleMotor.Modes.undefined; this.reelRequestedCurrent = 0; this.reelRequestedSpeed = 0; }