TempControl.Novus : Setpoint step is configurable (incl. rounding)
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user