public async Task TestRampingDown() { var operationService = new AsyncOperationService(); var targetTemperature = new Value <Unit.Temperature>(3.0, Unit.Temperature.TemperatureInDegC); var rampRate = new Value <Unit.TemperatureRate>(2.5, Unit.TemperatureRate.TemperatureRateInDegCPerMinute); var minBand = new Value <Unit.Temperature>(targetTemperature.Number - 1, Unit.Temperature.TemperatureInDegC); var maxBand = new Value <Unit.Temperature>(targetTemperature.Number + 1, Unit.Temperature.TemperatureInDegC); var band = new ReadOnlyRange <Unit.Temperature>(minBand, maxBand); var time = TimeSpan.FromMinutes(5); await operationService.RampingDownAsync(targetTemperature, rampRate, band, time); var currentTemp = operationService.GetCurrentTemperature().Number; Assert.AreEqual(3.0, currentTemp); }
public void TestCancelRamp() { var operationService = new AsyncOperationService(); var targetTemperature = new Value <Unit.Temperature>(69.56, Unit.Temperature.TemperatureInDegC); var rampRate = new Value <Unit.TemperatureRate>(2.5, Unit.TemperatureRate.TemperatureRateInDegCPerMinute); var minBand = new Value <Unit.Temperature>(targetTemperature.Number - 3, Unit.Temperature.TemperatureInDegC); var maxBand = new Value <Unit.Temperature>(targetTemperature.Number + 3, Unit.Temperature.TemperatureInDegC); var band = new ReadOnlyRange <Unit.Temperature>(minBand, maxBand); var time = TimeSpan.FromMinutes(5); Task.Run(async() => { await operationService.RampingDownAsync(targetTemperature, rampRate, band, time); }); operationService.CancelOperation(); Assert.IsFalse(operationService.GetOperationStatus()); Assert.AreNotEqual(69.56, operationService.GetCurrentTemperature()); }
public ActionResult StartRamping([FromBody] string targetTemp, string rampRate, string settlingBand, string settlingTime) { var result = ""; try { var rate = new Value <Unit.TemperatureRate>(Convert.ToDouble(rampRate), Unit.TemperatureRate.TemperatureRateInDegCPerMinute); if ((rate.Number < RampRateRange.Min) || (rate.Number > RampRateRange.Max)) { result = "Ramp rate is out of range"; return(Json(result, JsonRequestBehavior.AllowGet)); } var target = new Value <Unit.Temperature>(Convert.ToDouble(targetTemp), Unit.Temperature.TemperatureInDegC); if ((target < TargetTemperatureRange.Min) || (target > TargetTemperatureRange.Max)) { result = "Target temperature is out of range"; return(Json(result, JsonRequestBehavior.AllowGet)); } var bandNumber = Convert.ToDouble(settlingBand); var minBand = new Value <Unit.Temperature>(target.Number - bandNumber, Unit.Temperature.TemperatureInDegC); var maxBand = new Value <Unit.Temperature>(target.Number + bandNumber, Unit.Temperature.TemperatureInDegC); var band = new ReadOnlyRange <Unit.Temperature>(minBand, maxBand); var time = TimeSpan.FromMinutes(Convert.ToDouble(settlingTime)); var operation = BeginRampToTemperature(target, rate, band, time); result = !operation.GetOperationStatus() ? "Ramping request accept" : "Request reject, another operation has not finished"; } catch (Exception e) { Console.WriteLine(e.Message); result = e.Message; } return(Json(result, JsonRequestBehavior.AllowGet)); }
public IAsyncOperationContext BeginRampToTemperature(Value <Unit.Temperature> targetTemperature, Value <Unit.TemperatureRate> rampRateAbs, ReadOnlyRange <Unit.Temperature> settlingBand, TimeSpan settlingTime) { if (_operationService.GetOperationStatus()) { return(_operationService); } if (_operationService.GetCurrentTemperature() < targetTemperature) { var task = _operationService.RampingUpAsync(targetTemperature, rampRateAbs, settlingBand, settlingTime); try { task.ConfigureAwait(false); } catch (Exception e) { Console.WriteLine(e.Message); } } else if (_operationService.GetCurrentTemperature() > targetTemperature) { var task = _operationService.RampingDownAsync(targetTemperature, rampRateAbs, settlingBand, settlingTime); try { task.ConfigureAwait(false); } catch (Exception e) { Console.WriteLine(e.Message); } } return(_operationService); }