diff --git a/TBF/Rig/Modbus/TempControl/Novus/SetRequiredTemperatureOp.cs b/TBF/Rig/Modbus/TempControl/Novus/SetRequiredTemperatureOp.cs
index 455f479b9..6cee43c48 100644
--- a/TBF/Rig/Modbus/TempControl/Novus/SetRequiredTemperatureOp.cs
+++ b/TBF/Rig/Modbus/TempControl/Novus/SetRequiredTemperatureOp.cs
@@ -13,32 +13,32 @@ namespace TBF.Rig.Modbus.TempControl.Novus
public override string ToString() { return string.Format("SetRequiredTemperatureOp({0})", eventDone); }
/// Set by the constructor
- readonly TControl easytherm;
+ readonly TControl tempControl;
readonly Event eventDone;
///
/// Events: PressureInDone, PressureOutDone or Error
///
- /// Pressure meter reference
+ /// Pressure meter reference
/// Reference to the measured pressure variable, value is in bar
/// Event to be returned by Run() when completed OK
- public SetRequiredTemperatureOp(TControl easytherm, Event eventDone)
+ public SetRequiredTemperatureOp(TControl tempControl, Event eventDone)
{
- if (easytherm == null) throw new ArgumentNullException("easytherm");
- this.easytherm = easytherm;
+ if (tempControl == null) throw new ArgumentNullException("tempControl");
+ this.tempControl = tempControl;
this.eventDone = eventDone;
log.Debug(this.ToString());
}
- public SetRequiredTemperatureOp(TControl easytherm)
- : this(easytherm, Event.ConditionMet)
+ public SetRequiredTemperatureOp(TControl tempControl)
+ : this(tempControl, Event.ConditionMet)
{
}
/// Start this operation
public void Start()
{
- easytherm.SetTemperatureSetpoint();
+ tempControl.SetTemperatureSetpoint();
}
/// Run this operation
diff --git a/TBF/Rig/Modbus/TempControl/Novus/TControl.cs b/TBF/Rig/Modbus/TempControl/Novus/TControl.cs
index d45d9a61e..5e30d1485 100644
--- a/TBF/Rig/Modbus/TempControl/Novus/TControl.cs
+++ b/TBF/Rig/Modbus/TempControl/Novus/TControl.cs
@@ -13,8 +13,8 @@ using TBF.Rig.Generic;
namespace TBF.Rig.Modbus.TempControl.Novus
{
- public class TControl : ComponentBase, IDevice, ITempControl, IDrawingItCmpntWithSetpoint,
- IDrawingItCmpntWithMeasuredVal, IDrawingItCmpntWithCustomBmp
+ public class TControl : ComponentBase, IDevice, ITempControl, GenericDevices.ISequenceCondition,
+ IDrawingItCmpntWithSetpoint, IDrawingItCmpntWithMeasuredVal, IDrawingItCmpntWithCustomBmp
{
private static readonly ILog log = LogManager.GetLogger(typeof(TControl));
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
@@ -40,19 +40,21 @@ namespace TBF.Rig.Modbus.TempControl.Novus
public double SetpointVal
{
get { return temperatureSetPoint; }
- set { temperatureSetPoint = value; }
+ set { SetTemperatureSetpoint(value); }
}
///
public void IncreaseSetpoint()
{
- temperatureSetPoint += 0.5;
- if (temperatureSetPoint > 95.0) temperatureSetPoint = 95.0;
+ double temperatureStep = isFahrenheit ? Units.ConvertFrom(Unit.F, 0.5) : 0.5;
+ double newSetpoint = Math.Min(temperatureSetPoint + temperatureStep, 95.0);
+ SetTemperatureSetpoint(newSetpoint);
}
///
public void DecreaseSetpoint()
{
- temperatureSetPoint -= 0.5;
- if (temperatureSetPoint <= 5) temperatureSetPoint = 5;
+ double temperatureStep = isFahrenheit ? Units.ConvertFrom(Unit.F, 0.5) : 0.5;
+ double newSetpoint = Math.Max(temperatureSetPoint - temperatureStep, 5.0);
+ SetTemperatureSetpoint(newSetpoint);
}
@@ -79,7 +81,6 @@ namespace TBF.Rig.Modbus.TempControl.Novus
bool novusDataValid;
bool temperatureSetPointValid { get { return novusDataValid; } }
- bool temperatureSetPointRequested;
Int16 status1;
Int16 status2;
@@ -89,9 +90,8 @@ namespace TBF.Rig.Modbus.TempControl.Novus
double temperatureSetPoint;
double actualTemperature;
- bool isInvOutput { get { return (status2 & (1 << 2)) != 0; } }
- bool isHeating { get { return isInvOutput ? ((status2 & (1 << 11)) == 0) : ((status2 & (1 << 11)) != 0); } } /// Output 1
- bool isCooling { get { return isInvOutput ? ((status2 & (1 << 12)) == 0) : ((status2 & (1 << 12)) != 0); } } /// Output 2
+ bool isHeating { get { return (status2 & (1 << 11)) != 0; } } /// Output 1: Heating
+ bool isCooling { get { return (status2 & (1 << 12)) != 0; } } /// Output 2: Cooling
bool isFahrenheit { get { return (status2 & (1 << 9)) != 0; } }
@@ -117,7 +117,6 @@ namespace TBF.Rig.Modbus.TempControl.Novus
public override void Initialize()
{
novusDataValid = false;
- temperatureSetPointRequested = false;
if (novusCfg.DebugLevel == DebugMode.Simulate)
{
@@ -133,6 +132,14 @@ namespace TBF.Rig.Modbus.TempControl.Novus
modbus.ComponentNames[novusCfg.ModbusAddress] = Name;
ticketNumber = modbus.RegisterForPolling();
+ TBF.UiBridge.Bridge.SetpointChangeHandler += delegate(object sndr, TBF.UiBridge.SetpointChangeArgs args)
+ {
+ if (args.Name == Name)
+ {
+ if (args.Increase) IncreaseSetpoint(); else DecreaseSetpoint();
+ }
+ };
+
log.FatalFormat("{0} initialized: {1}", Name, this);
}
}
@@ -141,47 +148,48 @@ namespace TBF.Rig.Modbus.TempControl.Novus
/// Run this device
public void RunDeviceBefore()
{
- if (novusCfg.DebugLevel != DebugMode.Simulate &&
- novusCfg.DebugLevel != DebugMode.FailureDuringOperation &&
- modbus.ReceivedTelegrams[novusCfg.ModbusAddress].Count > 0)
+ if (DebugLevel != DebugMode.Simulate && DebugLevel != DebugMode.FailureDuringOperation)
{
- byte[] telegram = modbus.ReceivedTelegrams[novusCfg.ModbusAddress].Dequeue();
+ while (modbus.ReceivedTelegrams[novusCfg.ModbusAddress].Count > 0)
+ {
+ byte[] telegram = modbus.ReceivedTelegrams[novusCfg.ModbusAddress].Dequeue();
- if (telegram.Length == 5)
- {
- log.InfoFormat("[{0}] received 5 bytes", Name);
- }
- else if (telegram.Length == 27 && telegram[1] == (byte)Function.ReadHoldingRegisters && telegram[2] == 22)
- {
- Int16[] values = new Int16[11];
- for (int i = 0; i < values.Length; i++)
+ if (telegram.Length == 5)
{
- values[i] = (Int16)(256 * telegram[2 * i + 3] + telegram[2 * i + 4]
- - ((telegram[2 * i + 3] & 0x80) != 0 ? 65536 : 0));
+ log.InfoFormat("[{0}] received 5 bytes", Name);
}
+ else if (telegram.Length == 27 && telegram[1] == (byte)Function.ReadHoldingRegisters && telegram[2] == 22)
+ {
+ Int16[] values = new Int16[11];
+ for (int i = 0; i < values.Length; i++)
+ {
+ values[i] = (Int16)(256 * telegram[2 * i + 3] + telegram[2 * i + 4]
+ - ((telegram[2 * i + 3] & 0x80) != 0 ? 65536 : 0));
+ }
- status1 = values[Status1Address];
- status2 = values[Status2Address];
- status3 = values[Status3Address];
- fwVersion = values[FWVersionAddress];
- controllerId = values[ControllerIdAddress];
+ status1 = values[Status1Address];
+ status2 = values[Status2Address];
+ status3 = values[Status3Address];
+ fwVersion = values[FWVersionAddress];
+ controllerId = values[ControllerIdAddress];
- double setpointCorF = (double)values[SetpointAddress] * 0.1;
- temperatureSetPoint = isFahrenheit ? Units.ConvertFrom(Unit.F, setpointCorF) : setpointCorF;
+ double setpointCorF = (double)values[SetpointAddress] * 0.1;
+ temperatureSetPoint = isFahrenheit ? Units.ConvertFrom(Unit.F, setpointCorF) : setpointCorF;
- double temperatureCorF = (double)values[ProcessValueAddress] * 0.1;
- actualTemperature = isFahrenheit ? Units.ConvertFrom(Unit.F, temperatureCorF) : temperatureCorF;
+ double temperatureCorF = (double)values[ProcessValueAddress] * 0.1;
+ actualTemperature = isFahrenheit ? Units.ConvertFrom(Unit.F, temperatureCorF) : temperatureCorF;
- novusDataValid = true;
+ novusDataValid = true;
- log.InfoFormat("[{0}] setpoint = {1} temperature = {2}", Name, temperatureSetPoint, actualTemperature);
- log.InfoFormat("[{0}] s1={1} s2={2} s3={3} fw={4} id={5}",
- Name, status1.ToString("X02"), status2.ToString("X02"), status3.ToString("X02"),
- fwVersion, controllerId == 18 ? "N1200HC" : controllerId == 48 ? "N1200" : "unknonw");
- }
- else
- {
- log.InfoFormat("[{0}] received soemthing else", Name);
+ log.InfoFormat("[{0}] setpoint = {1} temperature = {2}", Name, temperatureSetPoint, actualTemperature);
+ log.InfoFormat("[{0}] s1=0x{1} s2=0x{2} s3=0x{3} fw={4} id={5}",
+ Name, status1.ToString("X4"), status2.ToString("X4"), status3.ToString("X4"),
+ fwVersion, controllerId == 18 ? "N1200HC" : controllerId == 48 ? "N1200" : "unknonw");
+ }
+ else
+ {
+ log.InfoFormat("[{0}] received soemthing else", Name);
+ }
}
}
else if (novusCfg.DebugLevel == DebugMode.Simulate)
@@ -198,21 +206,12 @@ namespace TBF.Rig.Modbus.TempControl.Novus
/// Run this device
public void RunDeviceAfter()
{
- if (novusCfg.DebugLevel != DebugMode.Simulate &&
- novusCfg.DebugLevel != DebugMode.FailureDuringOperation &&
+ if (DebugLevel != DebugMode.Simulate && DebugLevel != DebugMode.FailureDuringOperation &&
modbus.IsMyTurn(ticketNumber))
{
- if (novusDataValid && (requiredTemp != 0) && (requiredTemp != temperatureSetPoint))
- {
- SetTemperatureSetpoint(requiredTemp);
- log.InfoFormat("{0} - Set new temperature setpoint = {1}", Name, requiredTemp);
- }
- else
- {
- SendValueToNovus(Function.ReadHoldingRegisters, 0, 11); /// Read setpoint, PV (actual temperature), status1, status2, status3, FW version etc.
- //SendValueToNovus(Function.ReadHoldingRegisters, 0, 2); /// Read setpoint and PV (actual temperature)
- //SendValueToNovus(Function.ReadHoldingRegisters, 6, 5); /// Read status1, status2, status3, FW version etc.
- }
+ SendValueToNovus(Function.ReadHoldingRegisters, 0, 11); /// Read setpoint, PV (actual temperature), status1, status2, status3, FW version etc.
+ //SendValueToNovus(Function.ReadHoldingRegisters, 0, 2); /// Read setpoint and PV (actual temperature)
+ //SendValueToNovus(Function.ReadHoldingRegisters, 6, 5); /// Read status1, status2, status3, FW version etc.
}
}
@@ -311,5 +310,35 @@ namespace TBF.Rig.Modbus.TempControl.Novus
{
return new ReadTempOp(this, ref temp, eventDone);
}
- }
+
+
+ public int ConditionsCount
+ {
+ get { return 3; }
+ }
+
+ /// Strings are added to the combo-box for transition sequence condition selection
+ public string ConditionName(int i)
+ {
+ switch (i)
+ {
+ case 0: return string.Format("{0} open_the_drain_valve", Name);
+ case 1: return string.Format("{0} close_the_drain_valve", Name);
+ case 2: return string.Format("{0} wait_until_the_tank_is_empty", Name);
+ default: return string.Empty;
+ }
+ }
+
+ /// Operation to be executed as a part of a transition sequence
+ public IOperation ConditionOp(int i)
+ {
+ switch (i)
+ {
+ case 0: return null;
+ case 1: return null;
+ case 2: return null;
+ default: return null;
+ }
+ }
+ }
}