public PIDController(double Kp, double Ki, double Kd, double Kf, IPIDSource source, IPIDOutput output, double period) { if (source == null) throw new ArgumentNullException(nameof(source), "Null PIDSource was given"); if (output == null) throw new ArgumentNullException(nameof(output), "Null PIDOutput was given"); m_controlLoop = new Notifier(CallCalculate, this); m_P = Kp; m_I = Ki; m_D = Kd; m_F = Kf; m_ipidInput = source; m_ipidOutput = output; m_period = period; m_controlLoop.StartPeriodic(m_period); s_instances++; HLUsageReporting.ReportPIDController(s_instances); m_toleranceType = ToleranceType.NoTolerance; }
/// <summary> /// Creates a new Managed Compressor, which will turn off when the volrage is below the specified level. /// </summary> /// <param name="voltageThreshold">Voltage to turn off the compressor at</param> /// <param name="Period">time to wait between on and off values.</param> public ManagedCompressor(double voltageThreshold, double period) { m_period = period; VoltageThreshold = voltageThreshold; m_periodic = new Notifier(Update); UseTimer = true; }
public override void RobotInit() { DateTime old = DateTime.Now; notifier = new Notifier(() => { DateTime current = DateTime.Now; var delta = current - old; Console.WriteLine(delta); old = current; }); notifier.StartPeriodic(0.1); }
/// <summary> /// Creates a new PID object with the given contants for P, I, D and F. /// </summary> /// <param name="kp">The proportional coefficient.</param> /// <param name="ki">The integral coefficient</param> /// <param name="kd">The derivative coefficient</param> /// <param name="kf">The feed forward term.</param> /// <param name="source">The PIDSource object that is used to get values.</param> /// <param name="output">The PIDOutput object that is set to the output percentage.</param> /// <param name="period">The loop time for doing calculations.</param> public PIDController(double kp, double ki, double kd, double kf, IPIDSource source, IPIDOutput output, double period) { if (source == null) throw new ArgumentNullException(nameof(source), "Null PIDSource was given"); if (output == null) throw new ArgumentNullException(nameof(output), "Null PIDOutput was given"); CalculateCallback = Calculate; m_controlLoop = new Notifier(CalculateCallback); m_setpointTimer = new Timer(); m_setpointTimer.Start(); m_P = kp; m_I = ki; m_D = kd; m_F = kf; PIDInput = source; PIDOutput = output; m_period = period; m_controlLoop.StartPeriodic(m_period); s_instances++; HLUsageReporting.ReportPIDController(s_instances); m_toleranceType = ToleranceType.NoTolerance; m_buf = new Queue<double>(); }
/// <inheritdoc/> public void Dispose() { m_controlLoop.Stop(); lock (this) { PIDOutput = null; PIDInput = null; m_controlLoop.Dispose(); m_controlLoop = null; } Table?.RemoveTableListener(this); }