TempControl.Novus : Setpoint step is configurable (incl. rounding)

This commit is contained in:
Milan Hanajik
2022-05-12 12:16:12 +02:00
parent 1a49390ba8
commit 451faf1586
2 changed files with 55 additions and 8 deletions
+28 -6
View File
@@ -49,16 +49,38 @@ namespace TBF.Rig.Modbus.TempControl.Novus
///
public void IncreaseSetpoint()
{
double temperatureStep = isFahrenheit ? Units.ConvertFrom(Unit.F, 0.5) : 0.5;
double newSetpoint = Math.Min(temperatureSetPoint + temperatureStep, 95.0);
SetTemperatureSetpoint(newSetpoint);
double tempStepC = isFahrenheit ? Units.ConvertFrom(Unit.F, novusCfg.SetpStep) : novusCfg.SetpStep;
double newSetpoint;
if (novusCfg.RoundToSetpStep)
{
double roundedSetpoint = tempStepC * Math.Round(temperatureSetPoint / tempStepC);
newSetpoint = (roundedSetpoint <= temperatureSetPoint) ? (roundedSetpoint + tempStepC) : roundedSetpoint;
}
else
{
newSetpoint = temperatureSetPoint + tempStepC;
}
SetTemperatureSetpoint(Math.Min(newSetpoint, 95.0));
}
///
public void DecreaseSetpoint()
{
double temperatureStep = isFahrenheit ? Units.ConvertFrom(Unit.F, 0.5) : 0.5;
double newSetpoint = Math.Max(temperatureSetPoint - temperatureStep, 5.0);
SetTemperatureSetpoint(newSetpoint);
double tempStepC = isFahrenheit ? Units.ConvertFrom(Unit.F, novusCfg.SetpStep) : novusCfg.SetpStep;
double newSetpoint;
if (novusCfg.RoundToSetpStep)
{
double roundedSetpoint = tempStepC * Math.Round(temperatureSetPoint / tempStepC);
newSetpoint = (roundedSetpoint >= temperatureSetPoint) ? (roundedSetpoint - tempStepC) : roundedSetpoint;
}
else
{
newSetpoint = temperatureSetPoint - tempStepC;
}
SetTemperatureSetpoint(Math.Max(newSetpoint, 5.0));
}
@@ -9,6 +9,7 @@ using Common;
using Config.Entities;
using SchematicDrawing;
using TBF.Rig.Generic;
using TBF.Resources;
namespace TBF.Rig.Modbus.TempControl.Novus
{
@@ -52,6 +53,9 @@ namespace TBF.Rig.Modbus.TempControl.Novus
public string SetpFormat { get; set; } /// 3
public Unit SetpUnit { get; set; } /// 4
public double SetpStep { get; set; } /// 5
public bool RoundToSetpStep { get; set; } /// 6
[XmlIgnore]
public IList<GNode> GNodes { get; set; }
@@ -95,6 +99,8 @@ namespace TBF.Rig.Modbus.TempControl.Novus
MsrdUnit = Unit.C;
SetpFormat = "{0:F1} °C";
SetpUnit = Unit.C;
SetpStep = 1.0;
RoundToSetpStep = true;
}
string[] paramNames = new string[]
@@ -104,6 +110,8 @@ namespace TBF.Rig.Modbus.TempControl.Novus
"Unit of measured temperature", /// 2
"Setpoint format", /// 3
"Unit of temperature setpoint", /// 4
"Setpoint step", /// 5
"Round to setpoint step", /// 6
};
public string ParamName(int i) { return paramNames[i]; }
public int ParamsCount() { return paramNames.Length; }
@@ -115,6 +123,8 @@ namespace TBF.Rig.Modbus.TempControl.Novus
case 2:
case 4:
return new string[] { "°C", "°F", "K" };
case 6:
return new string[] { Strings.yes, Strings.no };
default:
return null;
}
@@ -130,6 +140,8 @@ namespace TBF.Rig.Modbus.TempControl.Novus
case 2: return (MsrdUnit == Unit.K) ? "K" : (MsrdUnit == Unit.F) ? "°F" : "°C";
case 3: return SetpFormat;
case 4: return (SetpUnit == Unit.K) ? "K" : (SetpUnit == Unit.F) ? "°F" : "°C";
case 5: return SetpStep.ToString();
case 6: return RoundToSetpStep ? Strings.yes : Strings.no;
default:
return string.Format("{0}({1}) address={2}", Name, string.IsNullOrEmpty(ParentName) ? "-" : ParentName, ModbusAddress);
}
@@ -143,11 +155,15 @@ namespace TBF.Rig.Modbus.TempControl.Novus
case 1: MsrdFormat = str; return CfgUpdateFlags.RestartRqrd;
case 2: MsrdUnit = (str == "°K" || str == "K") ? Unit.K
: (str == "°F" || str == "F") ? Unit.F
: Unit.C; return CfgUpdateFlags.RestartRqrd;
: Unit.C;
return CfgUpdateFlags.RestartRqrd;
case 3: SetpFormat = str; return CfgUpdateFlags.RestartRqrd;
case 4: SetpUnit = (str == "°K" || str == "K") ? Unit.K
: (str == "°F" || str == "F") ? Unit.F
: Unit.C; return CfgUpdateFlags.RestartRqrd;
: Unit.C;
return CfgUpdateFlags.RestartRqrd;
case 5: SetpStep = Utils.ParseUDouble(str); return CfgUpdateFlags.RestartRqrd;
case 6: RoundToSetpStep = (str == Strings.yes); return CfgUpdateFlags.RestartRqrd;
default: return CfgUpdateFlags.None;
}
}
@@ -156,6 +172,7 @@ namespace TBF.Rig.Modbus.TempControl.Novus
{
message = string.Empty;
int idummy;
double ddummy;
switch (i)
{
@@ -169,6 +186,12 @@ namespace TBF.Rig.Modbus.TempControl.Novus
case 4:
if (str == "°K" || str == "K" || str == "°F" || str == "F" || str == "°C" || str == "C") return true;
break;
case 5:
if (Utils.TryParseUDouble(str, out ddummy)) return true;
break;
case 6:
if (str == Strings.yes || str == Strings.no) return true;
break;
default:
message = "Invalid index";
return false;
@@ -201,6 +224,8 @@ namespace TBF.Rig.Modbus.TempControl.Novus
prms.MsrdUnit = MsrdUnit;
prms.MsrdValLimLo = MsrdValLimLo;
prms.MsrdValLimHi = MsrdValLimHi;
prms.SetpStep = SetpStep;
prms.RoundToSetpStep = RoundToSetpStep;
}
public IParamsProvider Clone()