Components Initialize() rewritten, double StartChangeHandler() calls avoided, ToString() methods are equl, use ClassName.

This commit is contained in:
Milan Hanajik
2021-04-08 12:03:18 +02:00
parent 331803e51d
commit 1d50b7206d
178 changed files with 2003 additions and 2151 deletions
+29 -31
View File
@@ -16,7 +16,7 @@ namespace TBF.BenchControl.Elde
public class ControlBoardDev : ComponentBase, IDevice, IValveControl
{
private static readonly ILog log = LogManager.GetLogger(typeof(ControlBoardDev));
public override string ToString() { return string.Format("ControlBoard({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
const int FiltersCount = 8;
@@ -167,7 +167,7 @@ namespace TBF.BenchControl.Elde
public UInt128 Route { get { return benchModelRoute; } }
UInt128 benchModelRoute;
UInt128 valvesToInvert; /// Route = valesToInvert ^ RequiredRouteWithoutInvertedVlaves
readonly UInt128 routeMask; /// This mask masks out virtual valves, routeMask is set in the constructor
UInt128 routeMask; /// This mask masks out virtual valves, routeMask is set in the constructor
int[] filters;
float[] FMFreq;
@@ -271,9 +271,8 @@ namespace TBF.BenchControl.Elde
controlCom.SetReservoirTemp(nr, temp);
}
public ControlBoardDev()
{
}
public ControlBoardDev() { }
/// <summary>
/// Constructor
@@ -282,29 +281,6 @@ namespace TBF.BenchControl.Elde
: base(cfg)
{
controlBoardCfg = cfg as ControlBoardCfg;
cbCommandQueue = new Queue<SendCommandArgs>();
lastSentFilters = new uint[FiltersCount];
#if DN100 || FUZHOU_150 || MUNICH
FMFreq = new float[2] { 0, 0 }; /// Nr. of pumps: Fuzhou150=2, Fuzhou300=6, newer=6
#elif SLM_END || WARSAW_END
FMFreq = new float[4] { 0, 0, 0, 0 };
#else /// all newer benches
FMFreq = new float[6] { 0, 0, 0, 0, 0, 0 };
#endif
emergencyStop = false;
previousEmergencyStop = false;
routeMask = 0;
for (int i = 0; i < 128; i++)
{
if (i < controlBoardCfg.VirtualValvesRangeLo || i > controlBoardCfg.VirtualValvesRangeHi)
{
routeMask = routeMask | ((UInt128)1 << i);
}
}
log.Warn(this.ToString());
}
@@ -349,9 +325,31 @@ namespace TBF.BenchControl.Elde
}
/// <summary>Initialize this device</summary>
public void Initialize()
public override void Initialize()
{
int divertersCount = BenchControl.Elde.Diverter.Diverter.DivertersCount;
cbCommandQueue = new Queue<SendCommandArgs>();
lastSentFilters = new uint[FiltersCount];
#if DN100 || FUZHOU_150 || MUNICH
FMFreq = new float[2] { 0, 0 }; /// Nr. of pumps: Fuzhou150=2, Fuzhou300=6, newer=6
#elif SLM_END || WARSAW_END
FMFreq = new float[4] { 0, 0, 0, 0 };
#else /// all newer benches
FMFreq = new float[6] { 0, 0, 0, 0, 0, 0 };
#endif
emergencyStop = false;
previousEmergencyStop = false;
routeMask = 0;
for (int i = 0; i < 128; i++)
{
if (i < controlBoardCfg.VirtualValvesRangeLo || i > controlBoardCfg.VirtualValvesRangeHi)
{
routeMask = routeMask | ((UInt128)1 << i);
}
}
int divertersCount = BenchControl.Elde.Diverter.Diverter.DivertersCount;
DiverterEdge = new uint[divertersCount];
for (int i = 0; i < divertersCount; i++)
@@ -370,7 +368,7 @@ namespace TBF.BenchControl.Elde
BalanceRange,
MeretProtocol);
log.FatalFormat("Successfully initialized device {0}", ToString());
log.FatalFormat("Device successfully initialized {0}", ToString());
}
/// <summary>
+16 -14
View File
@@ -15,20 +15,20 @@ namespace TBF.BenchControl.Elde.CoverTest
private static readonly ILog log = LogManager.GetLogger(typeof(CoverTest));
private static readonly ILog bypassLog = LogManager.GetLogger("BypassLog");
public override string ToString() { return string.Format("CoverTest({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly CoverTestCfg coverTestCfg;
readonly ControlBoardDev controlBoard;
readonly int bitPosition; /// 0 .. 63
readonly ulong mask; /// derived from bitPosition in the constructor
readonly ulong target;
readonly string message;
readonly Users.Entities.GID[] bypassLevel;
int bitPosition; /// 0 .. 127
ulong mask; /// derived from bitPosition in the constructor
ulong target;
string message;
Users.Entities.GID[] bypassLevel;
public CoverTest()
{
}
public CoverTest() { }
public CoverTest(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -37,15 +37,17 @@ namespace TBF.BenchControl.Elde.CoverTest
controlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
if (controlBoard == null) throw new Exception("Cannot find " + Name + " parent");
}
public override void Initialize()
{
bitPosition = coverTestCfg.BitPosition;
mask = (((ulong)1) << coverTestCfg.BitPosition);
target = coverTestCfg.Invert ? 0 : mask;
target = coverTestCfg.Invert ? 0 : mask;
message = coverTestCfg.Message;
bypassLevel = coverTestCfg.BypassLevel;
log.Warn(this.ToString());
}
log.FatalFormat("{0} initialized: {1}", Name, this);
}
public int ConditionsCount { get { return 1; } }
+102 -110
View File
@@ -14,38 +14,33 @@ namespace TBF.BenchControl.Elde.Diverter
public class Diverter : ComponentBase, IDevice, GenericDevices.IDiverter, GenericDevices.ISequenceCondition, GenericDevices.IHasCalendarEvents
{
private static readonly ILog log = LogManager.GetLogger(typeof(Diverter));
public override string ToString() { return string.Format("Diverter({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
/// <summary>
/// Enumeration of balances via static fields and methods
/// </summary>
static int nextIdx = 0;
public static new void ResetStaticProperties()
{
nextIdx = 0;
}
public static int DivertersCount { get { return nextIdx; } }
public static GenericDevices.IDiverter[] Diverters;
readonly int diverterNr0; /// 0-based diverter number
public int DiverterNr { get { return diverterNr0 + 1; } } /// 1-based public diverter number
readonly DiverterCfg diverterCfg;
readonly ControlBoardDev controlBoard;
readonly UInt128 mask; /// derived from bitPosition in the constructor
readonly DiverterCfg diverterCfg;
public int AdcNr { get { return diverterCfg.AdcNr; } }
readonly int flowMtrNr4Cmd;
readonly IOperation diverterToTankOp;
readonly IOperation diverterToSinkOp;
public bool State { get { return (controlBoard.RRoute & mask) != 0; } }
public int ThresholdGate { get { return diverterCfg.StartingLevel; } }
public int ThresholdLo { get { return diverterCfg.ThresholdLo; } }
public int ThresholdHi { get { return diverterCfg.ThresholdHi; } }
readonly ControlBoardDev controlBoard;
public bool State { get { return (controlBoard.RRoute & mask) != 0; } }
/// <summary>
/// Enumeration of balances via static fields and methods
/// </summary>
static int nextIdx = 0;
public static int DivertersCount { get { return nextIdx; } }
public static GenericDevices.IDiverter[] Diverters;
///
int diverterNr0; /// 0-based diverter number assigned in Initialize()
public int DiverterNr { get { return diverterNr0 + 1; } } /// 1-based public diverter number
UInt128 mask; /// derived from bitPosition in the constructor
int flowMtrNr4Cmd;
IOperation diverterToTankOp;
IOperation diverterToSinkOp;
FloatBox switchTimeStart;
FloatBox switchTimeEnd;
public FloatBox SwitchTimeStart { get { return switchTimeStart; } }
@@ -60,98 +55,97 @@ namespace TBF.BenchControl.Elde.Diverter
}
public Diverter()
{
}
public Diverter() { }
public Diverter(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
{
diverterCfg = cfg as DiverterCfg;
if (cfg.DebugLevel != Config.Entities.DebugMode.Off)
controlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
if (controlBoard == null) throw new Exception("Cannot find " + Name + " parent");
/// Prepare data for SendCalibData() control board component method
if (diverterCfg.AdcNr >= 0 && diverterCfg.AdcNr < controlBoard.RegValveCalib.GetLength(0))
{
controlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
if (controlBoard == null) throw new Exception("Cannot find " + Name + " parent");
if (diverterCfg.BitPosition < 0 || diverterCfg.BitPosition >= 64) throw new ArgumentOutOfRangeException("position");
this.mask = (((UInt128)1) << diverterCfg.BitPosition);
switchTimeStart = new FloatBox(diverterCfg.DfltSwithTimeStartMs / 1000.0f);
switchTimeEnd = new FloatBox(diverterCfg.DfltSwithTimeEndMs / 1000.0f);
diverterNr0 = nextIdx++;
///
if (Diverters == null || Diverters.Length < nextIdx)
{
GenericDevices.IDiverter[] divertersSoFar = Diverters;
Diverters = new GenericDevices.IDiverter[nextIdx];
if (divertersSoFar != null)
{
for (int i = 0; i < divertersSoFar.Length; i++) Diverters[i] = divertersSoFar[i];
}
Diverters[nextIdx - 1] = this;
}
/// Prepare arguments of SendCalibData()
if (diverterCfg.AdcNr >= 0 && diverterCfg.AdcNr < controlBoard.RegValveCalib.GetLength(0))
{
controlBoard.RegValveCalib[diverterCfg.AdcNr, 0] = (uint)diverterCfg.AdcValueToSink;
controlBoard.RegValveCalib[diverterCfg.AdcNr, 1] = (uint)diverterCfg.AdcValueToTank;
}
else
{
log.ErrorFormat("Unable to set {0} ADC levels: RegValveCalib array size={1}, diverter AdcNr={2}",
Name, controlBoard.RegValveCalib.GetLength(0), diverterCfg.AdcNr);
}
int divNrFromName;
if (!int.TryParse(Name.Substring(3), out divNrFromName))
{
divNrFromName = nextIdx;
}
#if FUZHOU_50 || FUZHOU_150 || FUZHOU_300 || GENESIS || PETERSBURG_50 || PETERSBURG_200 || ROMA_200 || SLM_150
flowMtrNr4Cmd = divNrFromName + 1;
#elif BADGER_STREDNA_TRAT
flowMtrNr4Cmd = (divNrFromName == 1) ? 1 : ((divNrFromName == 2) ? 9 : 20);
#elif BADGER_VELKA_TRAT
flowMtrNr4Cmd = ((divNrFromName % 10) == 1) ? 0x11 : (((divNrFromName % 10) == 2) ? 0x22 : 0x33);
#elif CEVAK_200
flowMtrNr4Cmd = (divNrFromName == 4) ? 5 : divNrFromName;
#elif DEWA_300 || PUCHONG_200
flowMtrNr4Cmd = divNrFromName + 2; /// Div1: 1,2,3, Div2: 4, Div3: 5, Div4: 6, Div5: 7
#elif FILIPINY_50
flowMtrNr4Cmd = (divNrFromName == 1) ? 1 : 7;
#elif FUZHOU_100
flowMtrNr4Cmd = divNrFromName;
#elif GELSENWASSER
switch (divNrFromName)
{
default:
case 1: flowMtrNr4Cmd = 1; break;
case 2: flowMtrNr4Cmd = 0x12; break;
case 3: flowMtrNr4Cmd = 3; break;
case 4: flowMtrNr4Cmd = 5; break;
}
#elif TURA_IPERL || TURA_IPERL_NEW
flowMtrNr4Cmd = divNrFromName + 16 * divNrFromName;
#elif MILWAUKEE
flowMtrNr4Cmd = (divNrFromName == 1) ? 1 : 68;
#else /// all other benches
flowMtrNr4Cmd = (divNrFromName == 1) ? 1 : 3;
#endif
diverterToTankOp = new SwitchDiverterOp(controlBoard, true, flowMtrNr4Cmd);
diverterToSinkOp = new SwitchDiverterOp(controlBoard, false, flowMtrNr4Cmd);
log.Warn(this.ToString());
controlBoard.RegValveCalib[diverterCfg.AdcNr, 0] = (uint)diverterCfg.AdcValueToSink;
controlBoard.RegValveCalib[diverterCfg.AdcNr, 1] = (uint)diverterCfg.AdcValueToTank;
}
else
{
log.ErrorFormat("Unable to set {0} ADC levels: RegValveCalib array size={1}, diverter AdcNr={2}",
Name, controlBoard.RegValveCalib.GetLength(0), diverterCfg.AdcNr);
}
}
public override void Initialize()
{
if (diverterCfg.BitPosition < 0 || diverterCfg.BitPosition >= 127) throw new ArgumentOutOfRangeException("position");
mask = (((UInt128)1) << diverterCfg.BitPosition);
switchTimeStart = new FloatBox(diverterCfg.DfltSwithTimeStartMs / 1000.0f);
switchTimeEnd = new FloatBox(diverterCfg.DfltSwithTimeEndMs / 1000.0f);
diverterNr0 = nextIdx++;
///
if (Diverters == null || Diverters.Length < nextIdx)
{
GenericDevices.IDiverter[] divertersSoFar = Diverters;
Diverters = new GenericDevices.IDiverter[nextIdx];
if (divertersSoFar != null)
{
for (int i = 0; i < divertersSoFar.Length; i++) Diverters[i] = divertersSoFar[i];
}
Diverters[nextIdx - 1] = this;
}
int divNrFromName;
if (!int.TryParse(Name.Substring(3), out divNrFromName))
{
divNrFromName = nextIdx;
}
#if FUZHOU_50 || FUZHOU_150 || FUZHOU_300 || GENESIS || PETERSBURG_50 || PETERSBURG_200 || ROMA_200 || SLM_150
flowMtrNr4Cmd = divNrFromName + 1;
#elif BADGER_STREDNA_TRAT
flowMtrNr4Cmd = (divNrFromName == 1) ? 1 : ((divNrFromName == 2) ? 9 : 20);
#elif BADGER_VELKA_TRAT
flowMtrNr4Cmd = ((divNrFromName % 10) == 1) ? 0x11 : (((divNrFromName % 10) == 2) ? 0x22 : 0x33);
#elif CEVAK_200
flowMtrNr4Cmd = (divNrFromName == 4) ? 5 : divNrFromName;
#elif DEWA_300 || PUCHONG_200
flowMtrNr4Cmd = divNrFromName + 2; /// Div1: 1,2,3, Div2: 4, Div3: 5, Div4: 6, Div5: 7
#elif FILIPINY_50
flowMtrNr4Cmd = (divNrFromName == 1) ? 1 : 7;
#elif FUZHOU_100
flowMtrNr4Cmd = divNrFromName;
#elif GELSENWASSER
switch (divNrFromName)
{
default:
case 1: flowMtrNr4Cmd = 1; break;
case 2: flowMtrNr4Cmd = 0x12; break;
case 3: flowMtrNr4Cmd = 3; break;
case 4: flowMtrNr4Cmd = 5; break;
}
#elif TURA_IPERL || TURA_IPERL_NEW
flowMtrNr4Cmd = divNrFromName + 16 * divNrFromName;
#elif MILWAUKEE
flowMtrNr4Cmd = (divNrFromName == 1) ? 1 : 68;
#else /// all other benches
flowMtrNr4Cmd = (divNrFromName == 1) ? 1 : 3;
#endif
diverterToTankOp = new SwitchDiverterOp(controlBoard, true, flowMtrNr4Cmd);
diverterToSinkOp = new SwitchDiverterOp(controlBoard, false, flowMtrNr4Cmd);
log.FatalFormat("{0} initialized: {1}", Name, this);
}
///
/// Calendar support
///
@@ -186,11 +180,9 @@ namespace TBF.BenchControl.Elde.Diverter
return calendarEvents;
}
///
/// IDevice interface implementation
///
public void Initialize() { }
public void RunDeviceBefore()
{
int adcValue = (int)StateMachine.ControlBoard.AnalogInputRaw(diverterCfg.AdcNr, 0);
@@ -11,7 +11,7 @@ namespace TBF.BenchControl.Elde.FixedStartRegisterReader
public class RegisterReader : ComponentBase, GenericDevices.IRegReader, IOperation
{
private static readonly ILog log = LogManager.GetLogger(typeof(RegisterReader));
public override string ToString() { return string.Format("FixedStartRegisterReader({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly RegisterReaderCfg registerReaderCfg;
readonly ControlBoardDev controlBoard;
@@ -54,9 +54,7 @@ namespace TBF.BenchControl.Elde.FixedStartRegisterReader
public RegisterReader()
{
}
public RegisterReader() { }
public RegisterReader(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -66,12 +64,15 @@ namespace TBF.BenchControl.Elde.FixedStartRegisterReader
/// Control board is used to read reference flowmeter pulses
controlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
if (controlBoard == null) throw new Exception("Cannot find " + Name + " parent");
Clear();
log.Warn(this.ToString());
}
public override void Initialize()
{
Clear();
log.FatalFormat("{0} initialized: {1}", Name, this);
}
public void Clear()
{
log.DebugFormat("{0}:Clear()", Name);
+5 -8
View File
@@ -12,7 +12,7 @@ namespace TBF.BenchControl.Elde.FlowMeter
public class FlowMeter : ComponentBase, Generic.IDevice, GenericDevices.IFlowMeter, GenericDevices.IHasCalendarEvents
{
private static readonly ILog log = LogManager.GetLogger(typeof(FlowMeter));
public override string ToString() { return string.Format("FlowMeter({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly FlowMeterCfg flowMeterCfg;
readonly ControlBoardDev controlBoard;
@@ -41,9 +41,7 @@ namespace TBF.BenchControl.Elde.FlowMeter
public double GetPressHi(int ix) { return flowMeterCfg.GetPressHi(ix); }
public FlowMeter()
{
}
public FlowMeter() { }
public FlowMeter(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -58,14 +56,12 @@ namespace TBF.BenchControl.Elde.FlowMeter
{
controlBoard.EtCalib[Idx1] = (float)flowMeterCfg.NominalFlow;
}
log.Warn(this.ToString());
}
///
/// IDevice interface functions
///
public void Initialize()
public override void Initialize()
{
for (int r = 0; r <= 5; r++)
{
@@ -76,8 +72,9 @@ namespace TBF.BenchControl.Elde.FlowMeter
}
}
log.FatalFormat("Successfully initialized device {0}", Name);
log.FatalFormat("{0} initialized: {1}", Name, this);
}
public void RunDeviceBefore() { }
public void RunDeviceAfter() { }
public void StopDevice() { }
@@ -12,17 +12,17 @@ namespace TBF.BenchControl.Elde.FlowMeterDewa
public class FlowMeter : ComponentBase, IFlowMeter
{
private static readonly ILog log = LogManager.GetLogger(typeof(FlowMeter));
public override string ToString() { return string.Format("FlowMeter({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly FlowMeterCfg flowMeterCfg;
readonly ControlBoardDev controlBoard;
readonly IFlowMeter flowMeter1;
readonly IFlowMeter flowMeter2;
readonly IFlowMeter flowMeter3;
readonly double nominalFlow;
readonly double ltrPerPulse;
readonly int flowMetersCount;
readonly int flowMetersBitfield;
double nominalFlow;
double ltrPerPulse;
int flowMetersCount;
int flowMetersBitfield;
public int Idx1 { get { return flowMetersBitfield; } }
public double NominalFlow { get { return nominalFlow; } }
@@ -99,11 +99,7 @@ namespace TBF.BenchControl.Elde.FlowMeterDewa
public double GetPressHi(int ix) { return flowMeterCfg.GetPressHi(ix); }
public FlowMeter()
{
refFreq = new double[4];
refPulses = new int[4];
}
public FlowMeter() { }
public FlowMeter(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -116,6 +112,12 @@ namespace TBF.BenchControl.Elde.FlowMeterDewa
if (!string.IsNullOrEmpty(flowMeterCfg.Flowmeter1)) flowMeter1 = TbfComponents.FindComponent(flowMeterCfg.Flowmeter1, components) as IFlowMeter;
if (!string.IsNullOrEmpty(flowMeterCfg.Flowmeter2)) flowMeter2 = TbfComponents.FindComponent(flowMeterCfg.Flowmeter2, components) as IFlowMeter;
if (!string.IsNullOrEmpty(flowMeterCfg.Flowmeter3)) flowMeter3 = TbfComponents.FindComponent(flowMeterCfg.Flowmeter3, components) as IFlowMeter;
}
public override void Initialize()
{
refFreq = new double[4];
refPulses = new int[4];
nominalFlow = 0;
flowMetersCount = 0;
@@ -126,11 +128,9 @@ namespace TBF.BenchControl.Elde.FlowMeterDewa
if (flowMetersCount == 0) throw new Exception("Missing flowmeters");
ltrPerPulse = nominalFlow / (flowMetersCount * 7200.0); /// Nominal freq. is flowMetersCount * 2000 Hz (2000, 4000 or 6000 Hz)
refFreq = new double[4];
refPulses = new int[4];
log.FatalFormat("{0} initialized: {1}", Name, this);
}
log.Warn(this.ToString());
}
public double ReadFlow() { return controlBoard.ReferenceFlow; }
public double ReadFrequency() { return controlBoard.ReferenceFreq; }
@@ -11,7 +11,7 @@ namespace TBF.BenchControl.Elde.FlowMeterTriplet
public class FlowMeter : ComponentBase, GenericDevices.IFlowMeter
{
private static readonly ILog log = LogManager.GetLogger(typeof(FlowMeter));
public override string ToString() { return string.Format("FlowMeter({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly FlowMeterCfg flowMeterCfg;
readonly ControlBoardDev controlBoard;
@@ -27,9 +27,8 @@ namespace TBF.BenchControl.Elde.FlowMeterTriplet
return (LtrPerPulse * correctedFlow / flow);
}
public FlowMeter()
{
}
public FlowMeter() { }
public FlowMeter(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -42,9 +41,13 @@ namespace TBF.BenchControl.Elde.FlowMeterTriplet
/// Prepare data for SendCalibData() control board component method
if (Idx1 >= controlBoard.EtCalib.Length) throw new Exception("Flowmeter " + Name + " parameter 'Idx1' is out of range");
controlBoard.EtCalib[Idx1] = (float)flowMeterCfg.NominalFlow;
log.Warn(this.ToString());
}
public override void Initialize()
{
log.FatalFormat("{0} initialized: {1}", Name, this);
}
public double ReadFlow() { return controlBoard.ReferenceFlow; }
public double ReadFrequency() { return controlBoard.ReferenceFreq; }
@@ -12,7 +12,7 @@ namespace TBF.BenchControl.Elde.FlowMeterTwins
public class FlowMeter : ComponentBase, GenericDevices.IFlowMeter
{
private static readonly ILog log = LogManager.GetLogger(typeof(FlowMeter));
public override string ToString() { return string.Format("FlowMeterTwins({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly FlowMeterCfg flowMeterCfg;
readonly ControlBoardDev controlBoard;
@@ -33,9 +33,7 @@ namespace TBF.BenchControl.Elde.FlowMeterTwins
}
public FlowMeter()
{
}
public FlowMeter() { }
public FlowMeter(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -51,13 +49,16 @@ namespace TBF.BenchControl.Elde.FlowMeterTwins
FlowMeter2 = TbfComponents.FindComponent(flowMeterCfg.FlowMeter2, components) as Elde.FlowMeter.FlowMeter;
if (FlowMeter2 == null) throw new Exception("Cannot find FlowMeter2 component");
/// Prepare data for SendCalibData() control board component method
controlBoard.EtCalib[Idx1] = (float)flowMeterCfg.NominalFlow; /// Idx1==0 for FlowMeterTwins
/// Prepare data for SendCalibData() control board component method
log.Warn(this.ToString());
}
public override void Initialize()
{
log.FatalFormat("{0} initialized: {1}", Name, this);
}
public double ReadFlow() { return controlBoard.ReferenceFlow; }
public double ReadFrequency() { return controlBoard.ReferenceFreq; }
@@ -13,7 +13,7 @@ namespace TBF.BenchControl.Elde.PressureMeter
public class PressureMeter : ComponentBase, GenericDevices.IPressureMeter, GenericDevices.IHasCalendarEvents
{
private static readonly ILog log = LogManager.GetLogger(typeof(PressureMeter));
public override string ToString() { return string.Format("PressureMeter({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly PressureMeterCfg pressureMeterCfg;
@@ -22,9 +22,8 @@ namespace TBF.BenchControl.Elde.PressureMeter
public readonly int Idx0; /// 0..3
public readonly byte RS485Address; /// 0..255
public PressureMeter()
{
}
public PressureMeter() { }
public PressureMeter(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -48,10 +47,13 @@ namespace TBF.BenchControl.Elde.PressureMeter
{
ControlBoard.MeretProtocol |= (byte)(1 << Idx0);
}
log.Warn(this.ToString());
}
public override void Initialize()
{
log.FatalFormat("{0} initialized: {1}", Name, this);
}
public IList<Config.CalendarEvent.ICalendarEvent> GetCalendarEvents()
{
@@ -14,7 +14,7 @@ namespace TBF.BenchControl.Elde.PressureMeterInternal
public class PressureMeter : ComponentBase, GenericDevices.IPressureMeter, GenericDevices.IHasCalendarEvents
{
private static readonly ILog log = LogManager.GetLogger(typeof(PressureMeter));
public override string ToString() { return string.Format("PressureMeter({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly PressureMeterCfg pressureMeterCfg;
@@ -22,9 +22,8 @@ namespace TBF.BenchControl.Elde.PressureMeterInternal
public int Idx0 { get { return pressureMeterCfg.Idx0; } } /// 0..7
public PressureMeter()
{
}
public PressureMeter() { }
public PressureMeter(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -42,9 +41,13 @@ namespace TBF.BenchControl.Elde.PressureMeterInternal
ControlBoard.TempCalibData[pressureMeterCfg.CoefsIdx0, 4] = pressureMeterCfg.A5;
ControlBoard.MeretRS485Address[0] = 0; /// This disables Merets, Groch temperatures, enables on-board A/D pressure and temperature
log.Warn(this.ToString());
}
public override void Initialize()
{
log.FatalFormat("{0} initialized: {1}", Name, this);
}
public IList<Config.CalendarEvent.ICalendarEvent> GetCalendarEvents()
{
+12 -13
View File
@@ -11,7 +11,7 @@ namespace TBF.BenchControl.Elde.Pump
public class Pump : ComponentBase, GenericDevices.IPump, GenericDevices.IValve
{
private static readonly ILog log = LogManager.GetLogger(typeof(Pump));
public override string ToString() { return string.Format("Pump({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly PumpCfg pumpCfg;
@@ -27,15 +27,12 @@ namespace TBF.BenchControl.Elde.Pump
public float Power { get { return State ? 100.0f : 0; } }
readonly ControlBoardDev controlBoard;
readonly int bitPosition; /// 0 .. 127
public readonly UInt128 Mask; /// derived from bitPosition in the constructor
ControlBoardDev controlBoard;
int bitNr; /// 0 .. 127
public UInt128 Mask; /// derived from bitPosition
public Pump()
{
}
public Pump() { }
public Pump(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -44,13 +41,15 @@ namespace TBF.BenchControl.Elde.Pump
controlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
if (controlBoard == null) throw new Exception("Cannot find " + Name + " parent");
bitPosition = pumpCfg.BitPosition;
Mask = (((UInt128)1) << pumpCfg.BitPosition);
log.Warn(this.ToString());
}
public override void Initialize()
{
bitNr = pumpCfg.BitPosition;
Mask = (((UInt128)1) << pumpCfg.BitPosition);
log.FatalFormat("{0} initialized: {1}", Name, this);
}
public bool State
{
get { return (controlBoard.Route & Mask) != 0; }
+24 -24
View File
@@ -11,15 +11,15 @@ namespace TBF.BenchControl.Elde.PumpTandem
public class Pump : ComponentBase, GenericDevices.IPumpFM, GenericDevices.IValve, IOperation
{
private static readonly ILog log = LogManager.GetLogger(typeof(Pump));
public override string ToString() { return string.Format("PumpTandem({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly PumpCfg pumpCfg;
readonly GenericDevices.IPump pump1;
readonly GenericDevices.IPump pump2;
readonly GenericDevices.IPumpFM pumpFm1;
readonly GenericDevices.IPumpFM pumpFm2;
GenericDevices.IPumpFM pumpFm1;
GenericDevices.IPumpFM pumpFm2;
public bool State { get { return pump1.State || pump2.State; } }
public int Delay { get { return Math.Max(pump1.Delay, pump2.Delay); } }
@@ -37,15 +37,12 @@ namespace TBF.BenchControl.Elde.PumpTandem
get { return (pump1.Power + pump2.Power) / 2.0f; }
}
readonly UInt128 mask1;
readonly UInt128 mask2;
UInt128 mask1;
UInt128 mask2;
public UInt128 Mask { get { return mask1 | mask2; } } /// derived from masks of two pumps
public Pump()
{
}
public Pump() { }
public Pump(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -57,23 +54,26 @@ namespace TBF.BenchControl.Elde.PumpTandem
pump2 = (GenericDevices.IPump)TbfComponents.FindComponent(pumpCfg.Pump2, components);
if (pump2 == null) throw new Exception("Cannot find component Pump 2");
pumpFm1 = pump1 as GenericDevices.IPumpFM;
pumpFm2 = pump2 as GenericDevices.IPumpFM;
if (pump1 is Elde.Pump.Pump) { mask1 = (pump1 as Elde.Pump.Pump).Mask; }
else if (pump1 is Elde.PumpWithFM.Pump) { mask1 = (pump1 as Elde.PumpWithFM.Pump).Mask; }
else if (pump1 is Danfoss.VLT2800.Pump) { mask1 = (pump1 as Danfoss.VLT2800.Pump).Mask; }
else { mask1 = 0; }
if (pump2 is Elde.Pump.Pump) { mask2 = (pump2 as Elde.Pump.Pump).Mask; }
else if (pump2 is Elde.PumpWithFM.Pump) { mask2 = (pump2 as Elde.PumpWithFM.Pump).Mask; }
else if (pump2 is Danfoss.VLT2800.Pump) { mask2 = (pump2 as Danfoss.VLT2800.Pump).Mask; }
else { mask2 = 0; }
log.Warn(this.ToString());
}
public override void Initialize()
{
pumpFm1 = pump1 as GenericDevices.IPumpFM;
pumpFm2 = pump2 as GenericDevices.IPumpFM;
if (pump1 is Elde.Pump.Pump) { mask1 = (pump1 as Elde.Pump.Pump).Mask; }
else if (pump1 is Elde.PumpWithFM.Pump) { mask1 = (pump1 as Elde.PumpWithFM.Pump).Mask; }
else if (pump1 is Danfoss.VLT2800.Pump) { mask1 = (pump1 as Danfoss.VLT2800.Pump).Mask; }
else { mask1 = 0; }
if (pump2 is Elde.Pump.Pump) { mask2 = (pump2 as Elde.Pump.Pump).Mask; }
else if (pump2 is Elde.PumpWithFM.Pump) { mask2 = (pump2 as Elde.PumpWithFM.Pump).Mask; }
else if (pump2 is Danfoss.VLT2800.Pump) { mask2 = (pump2 as Danfoss.VLT2800.Pump).Mask; }
else { mask2 = 0; }
log.FatalFormat("{0} initialized: {1}", Name, this);
}
public void TurnOn(float powerArg)
{
+11 -11
View File
@@ -11,7 +11,7 @@ namespace TBF.BenchControl.Elde.PumpWithFM
public class Pump : ComponentBase, GenericDevices.IPumpFM, GenericDevices.IValve, IOperation
{
private static readonly ILog log = LogManager.GetLogger(typeof(Pump));
public override string ToString() { return string.Format("PumpWithFM({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly PumpCfg pumpCfg;
@@ -23,10 +23,10 @@ namespace TBF.BenchControl.Elde.PumpWithFM
public int LagClosing { get { return 0; } }
readonly ControlBoardDev controlBoard;
readonly int bitPosition; /// 0 .. 63
int FMIndex; /// 0 .. FMPumpsCount-1
public readonly UInt128 Mask; /// derived from bitPosition in the constructor
int bitNr; /// 0 .. 127
int FMIndex; /// 0 .. FMPumpsCount-1
public UInt128 Mask; /// derived from bitPosition in the constructor
public bool State
{
@@ -43,9 +43,7 @@ namespace TBF.BenchControl.Elde.PumpWithFM
}
public Pump()
{
}
public Pump() { }
/// <summary>
/// Constructor
@@ -59,13 +57,15 @@ namespace TBF.BenchControl.Elde.PumpWithFM
controlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
if (controlBoard == null) throw new Exception("Cannot find " + Name + " parent");
}
bitPosition = pumpCfg.BitPosition;
public override void Initialize()
{
bitNr = pumpCfg.BitPosition;
Mask = (((UInt128)1) << pumpCfg.BitPosition);
FMIndex = pumpCfg.FMIndex;
log.Warn(this.ToString());
}
log.FatalFormat("{0} initialized: {1}", Name, this);
}
public void TurnOn(float powerArg)
+10 -11
View File
@@ -12,7 +12,7 @@ namespace TBF.BenchControl.Elde.RegulValve
public class RegulValve : ComponentBase, IDevice, GenericDevices.IRegulValve
{
private static readonly ILog log = LogManager.GetLogger(typeof(RegulValve));
public override string ToString() { return string.Format("RegulValve({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
public readonly RegulValveCfg RegulValveCfg;
@@ -83,9 +83,7 @@ namespace TBF.BenchControl.Elde.RegulValve
#endregion Configuration Change Handling
public RegulValve()
{
}
public RegulValve() { }
public RegulValve(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -95,7 +93,6 @@ namespace TBF.BenchControl.Elde.RegulValve
ControlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
if (ControlBoard == null) throw new Exception("Cannot find " + Name + " parent");
this.dict = new Dictionary<double, float>();
#if GENESIS
adcChannel = (Idx1 < 6) ? (Idx1 - 1) : (Idx1 - 2);
@@ -109,7 +106,8 @@ namespace TBF.BenchControl.Elde.RegulValve
adcChannel = Idx1 - 1;
#endif
if (Idx1 < ControlBoard.RegValveCalib.GetLength(0))
/// Prepare data for SendCalibData() control board component method
if (Idx1 < ControlBoard.RegValveCalib.GetLength(0))
{
this.ControlBoard.RegValveCalib[adcChannel, 0] = (uint)DacValueClosed;
this.ControlBoard.RegValveCalib[adcChannel, 1] = (uint)DacValueOpen;
@@ -119,17 +117,18 @@ namespace TBF.BenchControl.Elde.RegulValve
log.ErrorFormat("Unable to set {0} ADC levels: RegValveCalib array size={1}, RV Idx1={2}, RV AdcNr={3}",
Name, ControlBoard.RegValveCalib.GetLength(0), Idx1, Idx1 - 1);
}
StartChangeHandler();
log.Warn(this.ToString());
}
public override void Initialize()
{
this.dict = new Dictionary<double, float>();
log.FatalFormat("{0} initialized: {1}", Name, this);
}
///
/// IDevice interface implementation
///
public void Initialize() { }
public void RunDeviceBefore()
{
int adcValue = (int)ControlBoard.AnalogInputRaw(adcChannel, 0);
@@ -11,7 +11,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
public class RegulValve : ComponentBase, GenericDevices.IRegulValve
{
private static readonly ILog log = LogManager.GetLogger(typeof(RegulValve));
public override string ToString() { return string.Format("RegulValve({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
public readonly RegulValveCfg RegulValveCfg;
@@ -31,9 +31,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
public float Position { get { return ControlBoard.RValvePosition(Idx1); } }
public RegulValve()
{
}
public RegulValve() { }
public RegulValve(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -42,12 +40,14 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
ControlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
if (ControlBoard == null) throw new Exception("Cannot find " + Name + " parent");
this.dict = new Dictionary<double, float>();
log.Warn(this.ToString());
}
public override void Initialize()
{
dict = new Dictionary<double, float>();
log.FatalFormat("{0} initialized: {1}", Name, this);
}
/// <summary>
/// Operation to set the water flow within tolerances
@@ -12,7 +12,7 @@ namespace TBF.BenchControl.Elde.RegulValveMilwaukee
public class RegulValve : ComponentBase, IDevice, GenericDevices.IRegulValve
{
private static readonly ILog log = LogManager.GetLogger(typeof(RegulValve));
public override string ToString() { return string.Format("RegulValve({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
public readonly RegulValveCfg RegulValveCfg;
@@ -83,9 +83,7 @@ namespace TBF.BenchControl.Elde.RegulValveMilwaukee
#endregion Configuration Change Handling
public RegulValve()
{
}
public RegulValve() { }
public RegulValve(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -95,11 +93,9 @@ namespace TBF.BenchControl.Elde.RegulValveMilwaukee
ControlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
if (ControlBoard == null) throw new Exception("Cannot find " + Name + " parent");
this.dict = new Dictionary<double, float>();
/// Prepare data for SendCalibData() control board component method
adcChannel = Idx1 - 1;
if (Idx1 < ControlBoard.RegValveCalib.GetLength(0))
if (adcChannel >= 0 && adcChannel < ControlBoard.RegValveCalib.GetLength(0))
{
this.ControlBoard.RegValveCalib[adcChannel, 0] = (uint)DacValueClosed;
this.ControlBoard.RegValveCalib[adcChannel, 1] = (uint)DacValueOpen;
@@ -109,17 +105,19 @@ namespace TBF.BenchControl.Elde.RegulValveMilwaukee
log.ErrorFormat("Unable to set {0} ADC levels: RegValveCalib array size={1}, RV Idx1={2}, RV AdcNr={3}",
Name, ControlBoard.RegValveCalib.GetLength(0), Idx1, Idx1 - 1);
}
StartChangeHandler();
log.Warn(this.ToString());
}
public override void Initialize()
{
adcChannel = Idx1 - 1;
dict = new Dictionary<double, float>();
log.FatalFormat("{0} initialized: {1}", Name, this);
}
///
/// IDevice interface implementation
///
public void Initialize() { }
public void RunDeviceBefore()
{
int adcValue = (int)ControlBoard.AnalogInputRaw(adcChannel, 0);
@@ -12,7 +12,7 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
public class RegulValveTandem : ComponentBase, GenericDevices.IRegulValve
{
private static readonly ILog log = LogManager.GetLogger(typeof(RegulValveTandem));
public override string ToString() { return string.Format("RegulValve({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
public readonly RegulValveTandemCfg RegulValveTandemCfg;
@@ -25,8 +25,8 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
readonly RegulValve.RegulValve regulValve;
readonly RegulValve.RegulValve fixedRV;
readonly float fixedPctLo; /// [%]
readonly float fixedPctHi; /// [%]
float fixedPctLo; /// [%]
float fixedPctHi; /// [%]
public int FlowStableSec { get { return RegulValveTandemCfg.FlowStableSec; } } /// 0..60 sec
///
@@ -38,9 +38,7 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
}
public RegulValveTandem()
{
}
public RegulValveTandem() { }
public RegulValveTandem(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -52,15 +50,17 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
fixedRV = (RegulValve.RegulValve)TbfComponents.FindComponent(RegulValveTandemCfg.FixedRVName, components);
if (fixedRV == null) throw new Exception("Cannot find fixed RV");
fixedPctLo = Math.Max(0.0f, RegulValveTandemCfg.FixedRVPosition - 3.0f);
fixedPctHi = Math.Min(100.0f, RegulValveTandemCfg.FixedRVPosition + 3.0f);
this.dict = new Dictionary<double, float>();
log.Warn(this.ToString());
}
public override void Initialize()
{
fixedPctLo = Math.Max(0.0f, RegulValveTandemCfg.FixedRVPosition - 3.0f);
fixedPctHi = Math.Min(100.0f, RegulValveTandemCfg.FixedRVPosition + 3.0f);
dict = new Dictionary<double, float>();
log.FatalFormat("{0} initialized: {1}", Name, this);
}
/// <summary>
/// Operation to set the water flow within tolerances
/// Events: Event.None, Event.FlowReached, Event.FlowTimeOut
+8 -6
View File
@@ -13,7 +13,7 @@ namespace TBF.BenchControl.Elde.TempMeter
public class TempMeter : ComponentBase, GenericDevices.ITempMeter, GenericDevices.IHasCalendarEvents
{
private static readonly ILog log = LogManager.GetLogger(typeof(TempMeter));
public override string ToString() { return string.Format("TempMeter({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly TempMeterCfg tempMtrCfg;
@@ -26,9 +26,8 @@ namespace TBF.BenchControl.Elde.TempMeter
public double A4 { get { return tempMtrCfg.A4; } }
public double A5 { get { return tempMtrCfg.A5; } }
public TempMeter()
{
}
public TempMeter() { }
public TempMeter(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -44,10 +43,13 @@ namespace TBF.BenchControl.Elde.TempMeter
ControlBoard.TempCalibData[Idx0, 2] = (float)A3;
ControlBoard.TempCalibData[Idx0, 3] = (float)A4;
ControlBoard.TempCalibData[Idx0, 4] = (float)A5;
log.Warn(this.ToString());
}
public override void Initialize()
{
log.FatalFormat("{0} initialized: {1}", Name, this);
}
public IList<Config.CalendarEvent.ICalendarEvent> GetCalendarEvents()
{
@@ -13,7 +13,7 @@ namespace TBF.BenchControl.Elde.TempMeterInternal
public class TempMeter : ComponentBase, GenericDevices.ITempMeter, GenericDevices.IHasCalendarEvents
{
private static readonly ILog log = LogManager.GetLogger(typeof(TempMeter));
public override string ToString() { return string.Format("TempMeter({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly TempMeterCfg tempMtrCfg;
@@ -21,9 +21,8 @@ namespace TBF.BenchControl.Elde.TempMeterInternal
public int Idx0 { get { return tempMtrCfg.Idx0; } } /// 0..7
public TempMeter()
{
}
public TempMeter() { }
public TempMeter(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -39,10 +38,13 @@ namespace TBF.BenchControl.Elde.TempMeterInternal
ControlBoard.TempCalibData[tempMtrCfg.CoefsIdx0, 2] = tempMtrCfg.A3;
ControlBoard.TempCalibData[tempMtrCfg.CoefsIdx0, 3] = tempMtrCfg.A4;
ControlBoard.TempCalibData[tempMtrCfg.CoefsIdx0, 4] = tempMtrCfg.A5;
log.Warn(this.ToString());
}
public override void Initialize()
{
log.FatalFormat("{0} initialized: {1}", Name, this);
}
public IList<Config.CalendarEvent.ICalendarEvent> GetCalendarEvents()
{
@@ -12,13 +12,14 @@ namespace TBF.BenchControl.Elde.TempMeterMeret
public class TempMeter : ComponentBase, GenericDevices.ITempMeter, GenericDevices.IHasCalendarEvents
{
private static readonly ILog log = LogManager.GetLogger(typeof(TempMeter));
public override string ToString() { return string.Format("TempMeter({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly TempMeterCfg tempMtrCfg;
public readonly ControlBoardDev ControlBoard;
public TempMeter() {}
public TempMeter() { }
public TempMeter(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -30,10 +31,13 @@ namespace TBF.BenchControl.Elde.TempMeterMeret
/// Prepare data for SendCalibData() control board component method
ControlBoard.MeretRS485Address[tempMtrCfg.MeretIdx0] = tempMtrCfg.ModbusAddress;
log.Warn(this.ToString());
}
public override void Initialize()
{
log.FatalFormat("{0} initialized: {1}", Name, this);
}
public IList<Config.CalendarEvent.ICalendarEvent> GetCalendarEvents()
{
+24 -29
View File
@@ -12,31 +12,29 @@ namespace TBF.BenchControl.Elde.Valve
public class Valve : GenericDevices.ValveBase, IValve
{
private static readonly ILog log = LogManager.GetLogger(typeof(Valve));
public override string ToString() { return string.Format("Valve({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly ValveCfg valveCfg;
///
public ValveCategory Category { get { return valveCfg.Category; } }
public int Delay { get { return valveCfg.OpenCloseTime; } }
public bool Inverted { get { return valveCfg.Inverted; } }
public bool InvertCouple { get { return valveCfg.InvertCouple; } }
public int LagOpening { get { return valveCfg.LagOpening; } }
public int LagClosing { get { return valveCfg.LagClosing; } }
readonly ControlBoardDev controlBoard;
public bool State { get { return (controlBoard.Route & Mask) != 0; } }
public ValveCategory Category { get { return valveCfg.Category; } }
public int Delay { get { return valveCfg.OpenCloseTime; } }
public bool Inverted { get { return valveCfg.Inverted; } }
public IValve CoupledTo { get { return coupledTo; } }
readonly IValve coupledTo;
public bool InvertCouple { get { return valveCfg.InvertCouple; } }
public int LagOpening { get { return valveCfg.LagOpening; } }
public int LagClosing { get { return valveCfg.LagClosing; } }
public readonly UInt128 Mask; /// derived from bitPosition in the constructor
public int BitPosition { get { return valveCfg.BitPosition; } }
public int BitPosition { get { return valveCfg.BitPosition; } }
public UInt128 Mask; /// derived from bitPosition in the constructor
public Valve()
{
}
public Valve() { }
public Valve(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
@@ -46,25 +44,22 @@ namespace TBF.BenchControl.Elde.Valve
controlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
if (controlBoard == null) throw new Exception("Cannot find " + Name + " parent");
if (valveCfg.BitPosition < 0 || valveCfg.BitPosition >= 128)
{
throw new ArgumentOutOfRangeException("position");
}
this.Mask = (((UInt128)1) << valveCfg.BitPosition);
if (valveCfg.CoupledToName != null)
if (!string.IsNullOrEmpty(valveCfg.CoupledToName))
{
coupledTo = (IValve)TbfComponents.FindComponent(valveCfg.CoupledToName, components);
}
log.Warn(this.ToString());
}
public bool State
{
get { return (controlBoard.Route & Mask) != 0; }
if (coupledTo == null) throw new Exception("Cannot find " + valveCfg.CoupledToName);
}
}
public override void Initialize()
{
if (valveCfg.BitPosition < 0 || valveCfg.BitPosition >= 128)
{
throw new ArgumentOutOfRangeException("position");
}
this.Mask = (((UInt128)1) << valveCfg.BitPosition);
log.FatalFormat("{0} initialized: {1}", Name, this);
}
#region Configuration Change Handling
+15 -17
View File
@@ -12,31 +12,20 @@ namespace TBF.BenchControl.Elde.ValveEx
public class Valve : ComponentBase, Generic.IComponent
{
private static readonly ILog log = LogManager.GetLogger(typeof(Valve));
public override string ToString() { return string.Format("ValveEx({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("{0}({1})", ClassName, Cfg.ToString(-1)); }
readonly ValveCfg valveCfg;
public readonly UInt128 Mask; /// derived from bitPosition in the constructor
///
public readonly IValve[] InputValves;
public UInt128 Mask; /// derived from bitPosition in the constructor
public Valve()
{
}
public Valve() { }
public Valve(Generic.IComponentCfg cfg, IList<Generic.IComponent> components)
: base(cfg)
{
valveCfg = cfg as ValveCfg;
//controlBoard = (ControlBoardDev)TbfComponents.FindComponent(cfg.ParentName, components);
//if (controlBoard == null) throw new Exception("Cannot find " + Name + " parent");
if (valveCfg.BitPosition < 0 || valveCfg.BitPosition >= 128)
{
throw new ArgumentOutOfRangeException("position");
}
this.Mask = (((UInt128)1) << valveCfg.BitPosition);
InputValves = new IValve[valveCfg.InputValvesCount];
InputValves[0] = TbfComponents.FindComponent(valveCfg.Input1, components) as IValve;
@@ -47,10 +36,19 @@ namespace TBF.BenchControl.Elde.ValveEx
InputValves[3] = TbfComponents.FindComponent(valveCfg.Input4, components) as IValve;
if (InputValves.Length > 4)
InputValves[4] = TbfComponents.FindComponent(valveCfg.Input5, components) as IValve;
log.Warn(this.ToString());
}
public override void Initialize()
{
if (valveCfg.BitPosition < 0 || valveCfg.BitPosition > 127)
{
throw new ArgumentOutOfRangeException("position");
}
Mask = (((UInt128)1) << valveCfg.BitPosition);
log.FatalFormat("{0} initialized: {1}", Name, this);
}
public void UpdateRoute(ref UInt128 route)
{
bool output;