Refactorization : IRegValve.position is double, Uni.RegValve.adcChannel properly initialized, ver. 3.1.1603

This commit is contained in:
Milan Hanajik
2021-03-04 13:16:21 +01:00
parent 9495b9f3a3
commit 69fde570ce
57 changed files with 229 additions and 229 deletions
@@ -614,7 +614,7 @@ namespace TBF.BenchControl.ControlBoard.Legacy
/// <param name="valveMode">Valve regulation mode, see the enum</param>
/// <param name="valveValue">Target position or target frequency or pulse duration</param>
/// <param name="stableTime">Stabilization time when setting the flow: 0=200ms, step 50ms, max. 1.5 sec.</param>
public void ValveMove(int valveNo, RegulValveMode valveMode, float[] valveValue, int stableTime)
public void ValveMove(int valveNo, RegulValveMode valveMode, double[] valveValue, int stableTime)
{
controlCom.ValveMove(valveNo, valveMode, valveValue, stableTime);
}
@@ -128,7 +128,7 @@ namespace TBF.BenchControl.ControlBoard.Legacy
///
int regulValveNo;
RegulValveMode regulValveMode;
float[] regulValveValue;
double[] regulValveValue;
Random rand;
@@ -255,7 +255,7 @@ namespace TBF.BenchControl.ControlBoard.Legacy
/// <param name="regulValveMode">???</param>
/// <param name="regulValveValue">???</param>
/// <param name="stableTime">Stabilization time when setting the flow: 0=200ms, step 50ms, max. 1.5 sec.</param>
public void ValveMove(int regulValveNo, RegulValveMode regulValveMode, float[] regulValveValue, int stableTime)
public void ValveMove(int regulValveNo, RegulValveMode regulValveMode, double[] regulValveValue, int stableTime)
{
log.InfoFormat("ValveMove({0}, {1}, [{2},{3}], {4})", regulValveNo, regulValveMode, regulValveValue[0], regulValveValue[1], stableTime);
@@ -298,7 +298,7 @@ namespace TBF.BenchControl.ControlBoard.Legacy
switch (regulValveMode)
{
case RegulValveMode.TargetFrequency:
float targetFlow = ((regulValveValue[0] + regulValveValue[1]) / 2.0f) * (Qnom / 2000.0f);
double targetFlow = ((regulValveValue[0] + regulValveValue[1]) / 2.0) * (Qnom / 2000.0);
TestBenchSim.UpdateSimFlow(targetFlow);
//if (referenceFreq < valveValue[0]) referenceFreq += ((float)rand.Next(20) + 10.0f) / 2.0f;
@@ -76,7 +76,7 @@ namespace TBF.BenchControl.ControlBoard.Legacy
/// <param name="valveMode">???</param>
/// <param name="valveValue">???</param>
/// <param name="stableTime">Stabilization time when setting the flow: 0=200ms, step 50ms, max. 1.5 sec.</param>
void ValveMove(int valveNo, RegulValveMode valveMode, float[] valveValue, int stableTime);
void ValveMove(int valveNo, RegulValveMode valveMode, double[] valveValue, int stableTime);
void RunDeviceBefore();
void RunDeviceAfter();
@@ -14,7 +14,7 @@ namespace TBF.BenchControl.ControlBoard.Legacy
/// Set by the constructor
readonly CBoard controlBoard;
readonly IRegulValve regulValve;
readonly IRegValve regulValve;
readonly int regulValveNr;
readonly int regulValveStableTime;
readonly int flowMeterNr;
@@ -208,13 +208,13 @@ namespace TBF.BenchControl.ControlBoard.Legacy
if (regulValve.IsCoax)
{
controlBoard.ValveMove(regulValveNr, RegulValveMode.TargetFrequency,
new float[2] { (float)((freqLo + freqHi) / 2), (float)((freqLo + freqHi) / 2) },
new double[2] { (freqLo + freqHi) / 2, (freqLo + freqHi) / 2 },
regulValveStableTime);
}
else
{
controlBoard.ValveMove(regulValveNr, RegulValveMode.TargetFrequency,
new float[2] { (float)freqLo, (float)freqHi },
new double[2] { freqLo, freqHi },
regulValveStableTime);
}
@@ -754,10 +754,10 @@ namespace TBF.BenchControl.ControlBoard.Legacy
/// </summary>
/// <param name="targetFlow">Target flow [m3/h]</param>
/// <param name="nominalFlow">Nominal flow of the path [m3/h]</param>
public static void UpdateSimFlow(float targetFlow)
public static void UpdateSimFlow(double targetFlow)
{
float A = 0.7f; /// higher value -> slower regulation
float B = 1.0f - A;
double A = 0.7; /// higher value -> slower regulation
double B = 1.0 - A;
switch (regulValveNo)
{
@@ -90,7 +90,11 @@ namespace TBF.BenchControl.ControlBoard.Uni
/// A/D converters: Feedback from RV-s and diverters
for (int i = 0; i < Const.ADCsCount; i++) /// Byte 25 .. 56
{
AnalogInput[15 - i] = GetInt16(data, offs + (int)Poz.Analogy + 2 * i);
#if DEBUG
AnalogInput[Const.ADCsCount - 1 - i] = (short)(11 * (15 - i));
#else
AnalogInput[Const.ADCsCount - 1 - i] = GetInt16(data, offs + (int)Poz.Analogy + 2 * i);
#endif
}
/// Groch temperature meters
+1 -1
View File
@@ -138,7 +138,7 @@ namespace TBF.BenchControl.ControlBoard.Uni
OutputPath devices;
IFlowMeter flowMeter { get { return devices.FlowMeter; } }
IRegulValve regValve { get { return devices.RegValve; } }
IRegValve regValve { get { return devices.RegValve; } }
IDiverter diverter { get { return devices.Diverter; } }
@@ -1,5 +1,5 @@
///
/// Copyright (c) 2017 Sensus Metering Systems
/// Copyright (c) 2017-2021 Sensus Slovensko a.s.
///
using System;
using log4net;
@@ -16,7 +16,7 @@ namespace TBF.BenchControl.Dummy.RegulValve
/// Set by the constructor
readonly RegulValve regulValve;
readonly float timePulseSec;
readonly double timePulseSec;
/// <summary>
/// Set required water flow.
@@ -28,7 +28,7 @@ namespace TBF.BenchControl.Dummy.RegulValve
/// <param name="posHiPct">Upper limit of the position to be achieved</param>
/// <param name="timeout">Timeout in sec. for setting the flow</param>
/// <remarks>Only Elde.Valve flow are used, other flow on the lists are ignored</remarks>
public ChangeRegulValvePositionOp(RegulValve regulValve, float timePulseSec)
public ChangeRegulValvePositionOp(RegulValve regulValve, double timePulseSec)
{
this.regulValve = regulValve as RegulValve;
if (this.regulValve == null) throw new ArgumentNullException("regValve is null or not Elde");
@@ -8,7 +8,7 @@ using TBF.Boxes;
namespace TBF.BenchControl.Dummy.RegulValve
{
public class RegulValve : ComponentBase, IDevice, GenericDevices.IRegulValve, SchematicDrawing.IDrawingItCmpnt
public class RegulValve : ComponentBase, IDevice, GenericDevices.IRegValve, SchematicDrawing.IDrawingItCmpnt
{
private static readonly ILog log = LogManager.GetLogger(typeof(RegulValve));
public override string ToString() { return string.Format("RegulValve({0})", Cfg.ToString(1)); }
@@ -20,11 +20,11 @@ namespace TBF.BenchControl.Dummy.RegulValve
///
public bool IsCoax { get { return false; } }
public float Position { get { return 50.0f; } }
public double Position { get { return 50.0; } }
IDictionary<double, float> dict;
public IDictionary<double, float> Dict { get { return dict; } }
IDictionary<double, double> dict;
public IDictionary<double, double> Dict { get { return dict; } }
public RegulValve()
@@ -35,7 +35,7 @@ namespace TBF.BenchControl.Dummy.RegulValve
: base(cfg)
{
RegulValveCfg = cfg as RegulValveCfg;
dict = new Dictionary<double, float>();
dict = new Dictionary<double, double>();
log.Warn(this.ToString());
}
@@ -86,12 +86,12 @@ namespace TBF.BenchControl.Dummy.RegulValve
/// <param name="flowLo">Lower limit of the required valve position in [%]</param>
/// <param name="flowLo">Higher limit of the required valve position in [%]</param>
/// <returns>SetPositionOp instance</returns>
public IOperation SetRegulValvePositionOp(float pctLo, float pctHi, int timeoutMs)
public IOperation SetRegulValvePositionOp(double pctLo, double pctHi, int timeoutMs)
{
return new SetRegulValvePositionOp(this, pctLo, pctHi, timeoutMs);
}
public IOperation ChangeRegulValvePositionOp(float timePulseSec)
public IOperation ChangeRegulValvePositionOp(double timePulseSec)
{
return new ChangeRegulValvePositionOp(this, timePulseSec);
}
@@ -47,7 +47,7 @@ namespace TBF.BenchControl.Dummy.RegulValve
/// <param name="timeout">Timeout for the flow setting in [s]</param>
/// <param name="leaveMeasurementRunning">true = Leave the measurement running after op. stop</param>
/// <remarks>Only Elde.Valve flow are used, other flow on the lists are ignored</remarks>
public SetFlowOp(IRegulValve regulValve, IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi,
public SetFlowOp(IRegValve regulValve, IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi,
DoubleBox measuredFlow, int timeout, bool leaveMeasurementRunning)
{
this.regulValve = regulValve as RegulValve;
@@ -72,7 +72,7 @@ namespace TBF.BenchControl.Dummy.RegulValve
/// Set required water flow - Do not leave the measurement running.
/// Events: FlowSet
/// </summary>
public SetFlowOp(IRegulValve regValve, IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi, DoubleBox measuredFlow, int timeout)
public SetFlowOp(IRegValve regValve, IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi, DoubleBox measuredFlow, int timeout)
: this(regValve, flowMeter, requiredFlowLo, requiredFlowHi, measuredFlow, timeout, false)
{
}
@@ -81,7 +81,7 @@ namespace TBF.BenchControl.Dummy.RegulValve
/// Set required water flow - No timeout.
/// Events: FlowSet
/// </summary>
public SetFlowOp(IRegulValve regValve, IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi, DoubleBox measuredFlow)
public SetFlowOp(IRegValve regValve, IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi, DoubleBox measuredFlow)
: this(regValve, flowMeter, requiredFlowLo, requiredFlowHi, measuredFlow, int.MaxValue, false)
{
}
@@ -16,8 +16,6 @@ namespace TBF.BenchControl.Dummy.RegulValve
return string.Format("SetRegulValvePositionOp({0},{1},{2})", regulValve.Name, posLoPct, posHiPct);
}
const int CoaxValveNr = 7; /// Coax. valve has number 7
///
/// Internal states of this operation
///
@@ -32,8 +30,8 @@ namespace TBF.BenchControl.Dummy.RegulValve
/// Set by the constructor
readonly RegulValve regulValve;
readonly float posLoPct;
readonly float posHiPct;
readonly double posLoPct;
readonly double posHiPct;
readonly int timeout;
/// Process values
@@ -51,7 +49,7 @@ namespace TBF.BenchControl.Dummy.RegulValve
/// <param name="posHiPct">Upper limit of the position to be achieved</param>
/// <param name="timeout">Timeout in sec. for setting the flow</param>
/// <remarks>Only Elde.Valve flow are used, other flow on the lists are ignored</remarks>
public SetRegulValvePositionOp(RegulValve regulValve, float posLoPct, float posHiPct, int timeout)
public SetRegulValvePositionOp(RegulValve regulValve, double posLoPct, double posHiPct, int timeout)
{
this.regulValve = regulValve as RegulValve;
if (regulValve == null) throw new ArgumentNullException("regValve is null or not Elde");
@@ -68,7 +66,7 @@ namespace TBF.BenchControl.Dummy.RegulValve
/// Set required water flow - no timeout.
/// Events: FlowSet
/// </summary>
public SetRegulValvePositionOp(RegulValve regValve, float posLoPct, float posHiPct)
public SetRegulValvePositionOp(RegulValve regValve, double posLoPct, double posHiPct)
: this(regValve, posLoPct, posHiPct, int.MaxValue)
{
}
@@ -20,7 +20,7 @@ namespace TBF.BenchControl.Elde.RegulValve
readonly TBF.BenchControl.ControlBoard.Legacy.CBoard controlBoard;
readonly RegulValve regulValve;
readonly int regulValveNr;
readonly float timePulseSec;
readonly double timePulseSec;
/// <summary>
/// Set required water flow.
@@ -32,7 +32,7 @@ namespace TBF.BenchControl.Elde.RegulValve
/// <param name="posHiPct">Upper limit of the position to be achieved</param>
/// <param name="timeout">Timeout in sec. for setting the flow</param>
/// <remarks>Only Elde.Valve flow are used, other flow on the lists are ignored</remarks>
public ChangeRegulValvePositionOp(TBF.BenchControl.ControlBoard.IControlBoard cb, RegulValve rv, float timePulseSec)
public ChangeRegulValvePositionOp(TBF.BenchControl.ControlBoard.IControlBoard cb, RegulValve rv, double timePulseSec)
{
controlBoard = cb as TBF.BenchControl.ControlBoard.Legacy.CBoard;
if (controlBoard == null) throw new ArgumentNullException("ctrlBoard");
@@ -54,7 +54,7 @@ namespace TBF.BenchControl.Elde.RegulValve
controlBoard.ValveMove(regulValveNr,
TBF.BenchControl.ControlBoard.Legacy.RegulValveMode.PulseWidth,
new float[2] { timePulseSec, timePulseSec },
new double[2] { timePulseSec, timePulseSec },
regulValve.StableTime);
}
@@ -11,7 +11,7 @@ using TBF.Boxes;
namespace TBF.BenchControl.Elde.RegulValve
{
public class RegulValve : ComponentBase, IDevice, GenericDevices.IRegulValve, IDrawingItCmpntWithSetpoint
public class RegulValve : ComponentBase, IDevice, GenericDevices.IRegValve, IDrawingItCmpntWithSetpoint
{
private static readonly ILog log = LogManager.GetLogger(typeof(RegulValve));
public override string ToString() { return string.Format("RegulValve({0})", Cfg.ToString(1)); }
@@ -20,8 +20,8 @@ namespace TBF.BenchControl.Elde.RegulValve
public readonly RegulValveCfg RegulValveCfg;
public IDrawingItem DrawingItem { get { return RegulValveCfg as IDrawingItem; } }
IDictionary<double, float> dict;
public IDictionary<double, float> Dict { get { return dict; } }
IDictionary<double, double> dict;
public IDictionary<double, double> Dict { get { return dict; } }
public readonly CBoard ControlBoard;
@@ -34,7 +34,7 @@ namespace TBF.BenchControl.Elde.RegulValve
///
public bool IsCoax { get { return false; } }
///
public float Position { get { return ControlBoard.RValvePosition(Idx1); } }
public double Position { get { return ControlBoard.RValvePosition(Idx1); } }
///
public double SetpointVal
{
@@ -81,13 +81,13 @@ namespace TBF.BenchControl.Elde.RegulValve
}
else if (args.Command == CfgChangeCmd.RVOpenStep)
{
ControlBoard.ValveMove(Idx1, RegulValveMode.PulseWidth, new float[2] { 2.0f, 2.0f }, StableTime);
ControlBoard.ValveMove(Idx1, RegulValveMode.PulseWidth, new double[2] { 2.0, 2.0 }, StableTime);
// TODO: avoid conflicts
// TOTEST
}
else if (args.Command == CfgChangeCmd.RVCloseStep)
{
ControlBoard.ValveMove(Idx1, RegulValveMode.PulseWidth, new float[2] { -2.0f, -2.0f }, StableTime);
ControlBoard.ValveMove(Idx1, RegulValveMode.PulseWidth, new double[2] { -2.0, -2.0 }, StableTime);
// TODO: avoid conflicts
// TOTEST
}
@@ -115,7 +115,7 @@ namespace TBF.BenchControl.Elde.RegulValve
ControlBoard = (CBoard)TbfComponents.FindComponent(cfg.ParentName, components);
if (ControlBoard == null) throw new Exception("Cannot find " + Name + " parent");
this.dict = new Dictionary<double, float>();
this.dict = new Dictionary<double, double>();
#if GENESIS
adcChannel = (Idx1 < 6) ? (Idx1 - 1) : (Idx1 - 2);
@@ -199,12 +199,12 @@ namespace TBF.BenchControl.Elde.RegulValve
/// <param name="flowLo">Lower limit of the required valve position in [%]</param>
/// <param name="flowLo">Higher limit of the required valve position in [%]</param>
/// <returns>SetPositionOp instance</returns>
public IOperation SetRegulValvePositionOp(float pctLo, float pctHi, int timeoutMs)
public IOperation SetRegulValvePositionOp(double pctLo, double pctHi, int timeoutMs)
{
return new SetRegulValvePositionOp(ControlBoard, this, pctLo, pctHi, timeoutMs);
}
public IOperation ChangeRegulValvePositionOp(float timePulseSec)
public IOperation ChangeRegulValvePositionOp(double timePulseSec)
{
return new ChangeRegulValvePositionOp(ControlBoard, this, timePulseSec);
}
+14 -14
View File
@@ -56,8 +56,8 @@ namespace TBF.BenchControl.Elde.RegulValve
double currentReqFlowLo;
double currentReqFlowHi;
float targetPositionLo;
float targetPositionHi;
double targetPositionLo;
double targetPositionHi;
int startTime;
int expireTime;
@@ -78,7 +78,7 @@ namespace TBF.BenchControl.Elde.RegulValve
/// <param name="timeout">Timeout for the flow setting in [s]</param>
/// <param name="leaveMeasurementRunning">true = Leave the measurement running after op. stop</param>
/// <remarks>Only Elde.Valve flow are used, other flow on the lists are ignored</remarks>
public SetFlowOp(CBoard controlBoard, IRegulValve regulValve, IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi,
public SetFlowOp(CBoard controlBoard, IRegValve regulValve, IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi,
DoubleBox flowBox, bool reTryCmds, int timeout, bool leaveMeasurementRunning)
{
if (controlBoard == null) throw new ArgumentNullException("ctrlBoard");
@@ -114,7 +114,7 @@ namespace TBF.BenchControl.Elde.RegulValve
/// Set required water flow - Do not leave the measurement running.
/// Events: FlowSet
/// </summary>
public SetFlowOp(CBoard controlBoard, IRegulValve regValve, IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi,
public SetFlowOp(CBoard controlBoard, IRegValve regValve, IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi,
DoubleBox flowbox, bool reTryCmds, int timeout)
: this(controlBoard, regValve, flowMeter, requiredFlowLo, requiredFlowHi, flowbox, reTryCmds, timeout, false)
{
@@ -124,7 +124,7 @@ namespace TBF.BenchControl.Elde.RegulValve
/// Set required water flow - No timeout.
/// Events: FlowSet
/// </summary>
public SetFlowOp(CBoard controlBoard, IRegulValve regValve, IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi,
public SetFlowOp(CBoard controlBoard, IRegValve regValve, IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi,
DoubleBox flowbox, bool reTryCmds)
: this(controlBoard, regValve, flowMeter, requiredFlowLo, requiredFlowHi, flowbox, reTryCmds, int.MaxValue, false)
{
@@ -137,9 +137,9 @@ namespace TBF.BenchControl.Elde.RegulValve
/// <param name="positionLo">Target valve position low limit (output)</param>
/// <param name="positionHi">Target valve position high limit (output)</param>
/// <returns>true when positions for the target flow are stored in the memory, otherwise return false</returns>
bool FetchTargetPosition(double avgReqFlow, out float positionLo, out float positionHi)
bool FetchTargetPosition(double avgReqFlow, out double positionLo, out double positionHi)
{
float targetPosition;
double targetPosition;
if (regulValve.Dict.TryGetValue(avgReqFlow, out targetPosition))
{
positionLo = Math.Max(targetPosition * 0.95f, 0.0f);
@@ -154,11 +154,11 @@ namespace TBF.BenchControl.Elde.RegulValve
}
}
void StoreTargetPosition(double avgReqFlow, float actPosition)
void StoreTargetPosition(double avgReqFlow, double actPosition)
{
if (!regulValve.Dict.ContainsKey(reqFlowAve))
{
regulValve.Dict.Add(new KeyValuePair<double, float>(avgReqFlow, actPosition));
regulValve.Dict.Add(new KeyValuePair<double, double>(avgReqFlow, actPosition));
}
return;
}
@@ -261,7 +261,7 @@ namespace TBF.BenchControl.Elde.RegulValve
{
/// Issues the appropriate ValveMove(...) command
controlBoard.ValveMove(regulValveNr, RegulValveMode.TargetPosition,
new float[2] { targetPositionLo, targetPositionHi },
new double[2] { targetPositionLo, targetPositionHi },
regulValve.StableTime);
opState = OpState.SettingPosition;
@@ -290,7 +290,7 @@ namespace TBF.BenchControl.Elde.RegulValve
{
/// Repeat appropriate ValveMove(...) command
controlBoard.ValveMove(regulValveNr, RegulValveMode.TargetPosition,
new float[2] { targetPositionLo, targetPositionHi },
new double[2] { targetPositionLo, targetPositionHi },
regulValve.StableTime);
log.InfoFormat("SetFlowOp: ValveMove({0}, Position, {1}, {2}, {3})",
@@ -335,7 +335,7 @@ namespace TBF.BenchControl.Elde.RegulValve
double freqLo = 2000.0 * currentReqFlowLo / nominalFlow;
double freqHi = 2000.0 * currentReqFlowHi / nominalFlow;
controlBoard.ValveMove(regulValveNr, RegulValveMode.TargetFrequency,
new float[2] { (float)freqLo, (float)freqHi },
new double[2] { freqLo, freqHi },
regulValve.StableTime);
opState = OpState.ValveMoveToFlow3;
@@ -367,7 +367,7 @@ namespace TBF.BenchControl.Elde.RegulValve
double freqLo = 2000.0 * currentReqFlowLo / nominalFlow;
double freqHi = 2000.0 * currentReqFlowHi / nominalFlow;
controlBoard.ValveMove(regulValveNr, RegulValveMode.TargetFrequency,
new float[2] { (float)freqLo, (float)freqHi },
new double[2] { (float)freqLo, (float)freqHi },
regulValve.StableTime);
log.InfoFormat("SetFlowOp: ValveMove({0}, Frequency, {1}, {2}, {3})",
@@ -396,7 +396,7 @@ namespace TBF.BenchControl.Elde.RegulValve
if (regulValve.RegulValveCfg.StoredPositionReuse)
{
float storedPosition;
double storedPosition;
if (regulValve.Dict.TryGetValue(reqFlowAve, out storedPosition))
{
/// update the stored valve position
@@ -35,8 +35,8 @@ namespace TBF.BenchControl.Elde.RegulValve
readonly CBoard controlBoard;
readonly RegulValve regulValve;
readonly int regulValveNr;
readonly float posLoPct;
readonly float posHiPct;
readonly double posLoPct;
readonly double posHiPct;
readonly int timeout;
/// Process values
@@ -54,7 +54,7 @@ namespace TBF.BenchControl.Elde.RegulValve
/// <param name="posHiPct">Upper limit of the position to be achieved</param>
/// <param name="timeout">Timeout in sec. for setting the flow</param>
/// <remarks>Only Elde.Valve flow are used, other flow on the lists are ignored</remarks>
public SetRegulValvePositionOp(CBoard controlBoard, RegulValve regulValve, float posLoPct, float posHiPct, int timeout)
public SetRegulValvePositionOp(CBoard controlBoard, RegulValve regulValve, double posLoPct, double posHiPct, int timeout)
{
if (controlBoard == null) throw new ArgumentNullException("ctrlBoard");
this.controlBoard = controlBoard;
@@ -75,7 +75,7 @@ namespace TBF.BenchControl.Elde.RegulValve
/// Set required water flow - no timeout.
/// Events: FlowSet
/// </summary>
public SetRegulValvePositionOp(CBoard controlBoard, RegulValve regValve, float posLoPct, float posHiPct)
public SetRegulValvePositionOp(CBoard controlBoard, RegulValve regValve, double posLoPct, double posHiPct)
: this(controlBoard, regValve, posLoPct, posHiPct, int.MaxValue)
{
}
@@ -109,7 +109,7 @@ namespace TBF.BenchControl.Elde.RegulValve
controlBoard.ValveMove(regulValveNr,
RegulValveMode.TargetPosition,
new float[2] { posLoPct, posHiPct },
new double[2] { posLoPct, posHiPct },
regulValve.StableTime);
opState = OpState.CheckState;
return Event.None;
@@ -21,7 +21,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
readonly CBoard controlBoard;
readonly RegulValve regulValve;
readonly int regulValveNr;
readonly float timePulseSec;
readonly double timePulseSec;
/// <summary>
/// Set required water flow.
@@ -33,7 +33,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
/// <param name="posHiPct">Upper limit of the position to be achieved</param>
/// <param name="timeout">Timeout in sec. for setting the flow</param>
/// <remarks>Only Elde.Valve flow are used, other flow on the lists are ignored</remarks>
public ChangeRegulValvePositionOp(CBoard controlBoard, RegulValve _regulValve, float timePulseSec)
public ChangeRegulValvePositionOp(CBoard controlBoard, RegulValve _regulValve, double timePulseSec)
{
if (controlBoard == null) throw new ArgumentNullException("ctrlBoard");
this.controlBoard = controlBoard;
@@ -55,7 +55,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
controlBoard.ValveMove(regulValveNr,
RegulValveMode.PulseWidth,
new float[2] { timePulseSec, timePulseSec },
new double[2] { timePulseSec, timePulseSec },
regulValve.StableTime);
}
@@ -10,7 +10,7 @@ using TBF.Boxes;
namespace TBF.BenchControl.Elde.RegulValveCoax
{
public class RegulValve : ComponentBase, GenericDevices.IRegulValve, IDrawingItCmpntWithSetpoint
public class RegulValve : ComponentBase, GenericDevices.IRegValve, IDrawingItCmpntWithSetpoint
{
private static readonly ILog log = LogManager.GetLogger(typeof(RegulValve));
public override string ToString() { return string.Format("RegulValve({0})", Cfg.ToString(1)); }
@@ -19,8 +19,8 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
public readonly RegulValveCfg RegulValveCfg;
public IDrawingItem DrawingItem { get { return RegulValveCfg as IDrawingItem; } }
IDictionary<double, float> dict;
public IDictionary<double, float> Dict { get { return dict; } }
IDictionary<double, double> dict;
public IDictionary<double, double> Dict { get { return dict; } }
public readonly CBoard ControlBoard;
@@ -31,7 +31,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
///
public bool IsCoax { get { return true; } }
///
public float Position { get { return ControlBoard.RValvePosition(Idx1); } }
public double Position { get { return ControlBoard.RValvePosition(Idx1); } }
///
public double SetpointVal
{
@@ -62,7 +62,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
ControlBoard = (CBoard)TbfComponents.FindComponent(cfg.ParentName, components);
if (ControlBoard == null) throw new Exception("Cannot find " + Name + " parent");
this.dict = new Dictionary<double, float>();
this.dict = new Dictionary<double, double>();
log.Warn(this.ToString());
}
@@ -107,12 +107,12 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
/// <param name="flowLo">Lower limit of the required valve position in [%]</param>
/// <param name="flowLo">Higher limit of the required valve position in [%]</param>
/// <returns>SetPositionOp instance</returns>
public IOperation SetRegulValvePositionOp(float pctLo, float pctHi, int timeoutMs)
public IOperation SetRegulValvePositionOp(double pctLo, double pctHi, int timeoutMs)
{
return new SetRegulValvePositionOp(ControlBoard, this, pctLo, pctHi, timeoutMs);
}
public IOperation ChangeRegulValvePositionOp(float timePulseSec)
public IOperation ChangeRegulValvePositionOp(double timePulseSec)
{
return new ChangeRegulValvePositionOp(ControlBoard, this, timePulseSec);
}
@@ -56,8 +56,8 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
double currentReqFlowLo;
double currentReqFlowHi;
float targetPositionLo;
float targetPositionHi;
double targetPositionLo;
double targetPositionHi;
int expireTime;
DoubleBox measuredFlow;
@@ -77,7 +77,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
/// <param name="timeout">Timeout for the flow setting in [s]</param>
/// <param name="leaveMeasurementRunning">true = Leave the measurement running after op. stop</param>
/// <remarks>Only Elde.Valve flow are used, other flow on the lists are ignored</remarks>
public SetFlowOp(CBoard controlBoard, IRegulValve _regulValve, IFlowMeter flowMeter,
public SetFlowOp(CBoard controlBoard, IRegValve _regulValve, IFlowMeter flowMeter,
double requiredFlowLo, double requiredFlowHi, DoubleBox measuredFlow,
bool reTryCmds, int timeout, bool leaveMeasurementRunning)
{
@@ -121,7 +121,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
/// Set required water flow - Do not leave the measurement running.
/// Events: FlowSet
/// </summary>
public SetFlowOp(CBoard controlBoard, IRegulValve regValve, IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi,
public SetFlowOp(CBoard controlBoard, IRegValve regValve, IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi,
DoubleBox measuredFlow, bool reTryCmds, int timeout)
: this(controlBoard, regValve, flowMeter, requiredFlowLo, requiredFlowHi, measuredFlow, reTryCmds, timeout, false)
{
@@ -131,7 +131,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
/// Set required water flow - No timeout.
/// Events: FlowSet
/// </summary>
public SetFlowOp(CBoard controlBoard, IRegulValve regValve, IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi,
public SetFlowOp(CBoard controlBoard, IRegValve regValve, IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi,
DoubleBox measuredFlow, bool reTryCmds)
: this(controlBoard, regValve, flowMeter, requiredFlowLo, requiredFlowHi, measuredFlow, reTryCmds, int.MaxValue, false)
{
@@ -144,9 +144,9 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
/// <param name="positionLo">Target valve position low limit (output)</param>
/// <param name="positionHi">Target valve position high limit (output)</param>
/// <returns>true when positions for the target flow are stored in the memory, otherwise return false</returns>
bool FetchTargetPosition(double avgReqFlow, out float positionLo, out float positionHi)
bool FetchTargetPosition(double avgReqFlow, out double positionLo, out double positionHi)
{
float targetPosition;
double targetPosition;
if (regulValve.Dict.TryGetValue(avgReqFlow, out targetPosition))
{
positionLo = Math.Max(targetPosition * 0.95f, 0.0f);
@@ -161,11 +161,11 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
}
}
void StoreTargetPosition(double avgReqFlow, float actPosition)
void StoreTargetPosition(double avgReqFlow, double actPosition)
{
if (!regulValve.Dict.ContainsKey(reqFlowAve))
{
regulValve.Dict.Add(new KeyValuePair<double, float>(avgReqFlow, actPosition));
regulValve.Dict.Add(new KeyValuePair<double, double>(avgReqFlow, actPosition));
}
return;
}
@@ -276,7 +276,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
{
/// Issues the appropriate ValveMove(...) command
controlBoard.ValveMove(regulValveNr, RegulValveMode.TargetPosition,
new float[2] { (targetPositionLo + targetPositionHi) / 2, (targetPositionLo + targetPositionHi) / 2 },
new double[2] { (targetPositionLo + targetPositionHi) / 2, (targetPositionLo + targetPositionHi) / 2 },
regulValve.StableTime);
opState = OpState.SettingPosition;
@@ -308,7 +308,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
{
/// Repeat appropriate ValveMove(...) command
controlBoard.ValveMove(regulValveNr, RegulValveMode.TargetPosition,
new float[2] { (targetPositionLo + targetPositionHi) / 2, (targetPositionLo + targetPositionHi) / 2 },
new double[2] { (targetPositionLo + targetPositionHi) / 2, (targetPositionLo + targetPositionHi) / 2 },
regulValve.StableTime);
log.InfoFormat(" Run() ValveMove({0}, Position, {1}, {2}, {3})",
@@ -355,7 +355,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
double freqLo = 2000.0 * currentReqFlowLo / nominalFlow;
double freqHi = 2000.0 * currentReqFlowHi / nominalFlow;
controlBoard.ValveMove(regulValveNr, RegulValveMode.TargetFrequency,
new float[2] { (float)((freqLo + freqHi) / 2), (float)((freqLo + freqHi) / 2) },
new double[2] { (freqLo + freqHi) / 2, (freqLo + freqHi) / 2 },
regulValve.StableTime);
log.WarnFormat(" Run() ValveMove({0}, Freq., {1}, {2}, {3}) flowMtr#={4} TARGET: flowLo={5} flowHi={6}",
regulValveNr, (freqLo + freqHi) / 2, (freqLo + freqHi) / 2,
@@ -387,7 +387,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
double freqLo = 2000.0 * currentReqFlowLo / nominalFlow;
double freqHi = 2000.0 * currentReqFlowHi / nominalFlow;
controlBoard.ValveMove(regulValveNr, RegulValveMode.TargetFrequency,
new float[2] { (float)((freqLo + freqHi) / 2), (float)((freqLo + freqHi) / 2) },
new double[2] { (freqLo + freqHi) / 2, (freqLo + freqHi) / 2 },
regulValve.StableTime);
log.WarnFormat(" Run() ValveMove({0}, Frequency, {1}, {2}, {3}) flowMtr#={4} TARGET: flowLo={5} flowHi={6}",
@@ -417,7 +417,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
{
if (regulValve.RegulValveCfg.StoredPositionReuse)
{
float storedPosition;
double storedPosition;
if (regulValve.Dict.TryGetValue(reqFlowAve, out storedPosition))
{
/// update the stored valve position
@@ -35,8 +35,8 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
readonly CBoard controlBoard;
readonly RegulValve regulValve;
readonly int regulValveNr;
readonly float posLoPct;
readonly float posHiPct;
readonly double posLoPct;
readonly double posHiPct;
readonly int timeout;
/// Process values
@@ -54,7 +54,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
/// <param name="posHiPct">Upper limit of the position to be achieved</param>
/// <param name="timeout">Timeout in sec. for setting the flow</param>
/// <remarks>Only Elde.Valve flow are used, other flow on the lists are ignored</remarks>
public SetRegulValvePositionOp(CBoard controlBoard, RegulValve regulValve, float posLoPct, float posHiPct, int timeout)
public SetRegulValvePositionOp(CBoard controlBoard, RegulValve regulValve, double posLoPct, double posHiPct, int timeout)
{
if (controlBoard == null) throw new ArgumentNullException("ctrlBoard");
this.controlBoard = controlBoard;
@@ -75,7 +75,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
/// Set required water flow - no timeout.
/// Events: FlowSet
/// </summary>
public SetRegulValvePositionOp(CBoard controlBoard, RegulValve regValve, float posLoPct, float posHiPct)
public SetRegulValvePositionOp(CBoard controlBoard, RegulValve regValve, double posLoPct, double posHiPct)
: this(controlBoard, regValve, posLoPct, posHiPct, int.MaxValue)
{
}
@@ -109,7 +109,7 @@ namespace TBF.BenchControl.Elde.RegulValveCoax
controlBoard.ValveMove(regulValveNr,
RegulValveMode.TargetPosition,
new float[2] { posLoPct, posHiPct },
new double[2] { posLoPct, posHiPct },
regulValve.StableTime);
opState = OpState.CheckState;
return Event.None;
@@ -21,7 +21,7 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
readonly CBoard controlBoard;
readonly Elde.RegulValve.RegulValve regulValve;
readonly int regulValveNr;
readonly float timePulseSec;
readonly double timePulseSec;
/// <summary>
/// Set required water flow.
@@ -33,7 +33,7 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
/// <param name="posHiPct">Upper limit of the position to be achieved</param>
/// <param name="timeout">Timeout in sec. for setting the flow</param>
/// <remarks>Only Elde.Valve flow are used, other flow on the lists are ignored</remarks>
public ChangeRegulValvePositionOp(CBoard controlBoard, IRegulValve _regulValve, float timePulseSec)
public ChangeRegulValvePositionOp(CBoard controlBoard, IRegValve _regulValve, float timePulseSec)
{
if (controlBoard == null) throw new ArgumentNullException("ctrlBoard");
this.controlBoard = controlBoard;
@@ -50,12 +50,12 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
/// <summary>Start this operation</summary>
public void Start()
{
float positionPct = controlBoard.RValvePosition(regulValveNr);
double positionPct = controlBoard.RValvePosition(regulValveNr);
log.WarnFormat("RV#={0}, actPos={1}%", regulValveNr, positionPct.ToString("F1"));
controlBoard.ValveMove(regulValveNr,
RegulValveMode.PulseWidth,
new float[2] { timePulseSec, timePulseSec },
new double[2] { timePulseSec, timePulseSec },
regulValve.StableTime);
}
@@ -10,15 +10,15 @@ using TBF.Boxes;
namespace TBF.BenchControl.Elde.RegulValveTandem
{
public class RegulValveTandem : ComponentBase, GenericDevices.IRegulValve
public class RegulValveTandem : ComponentBase, GenericDevices.IRegValve
{
private static readonly ILog log = LogManager.GetLogger(typeof(RegulValveTandem));
public override string ToString() { return string.Format("RegulValve({0})", Cfg.ToString(1)); }
public readonly RegulValveTandemCfg RegulValveTandemCfg;
IDictionary<double, float> dict;
public IDictionary<double, float> Dict { get { return dict; } }
IDictionary<double, double> dict;
public IDictionary<double, double> Dict { get { return dict; } }
CBoard controlBoard { get { return regulValve.ControlBoard; } }
public ValveCategory Category { get { return RegulValveTandemCfg.Category; } }
@@ -33,7 +33,7 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
///
public bool IsCoax { get { return false; } }
public float Position
public double Position
{
get { return regulValve.Position; }
}
@@ -57,7 +57,7 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
fixedPctLo = Math.Max(0.0f, RegulValveTandemCfg.FixedRVPosition - 3.0f);
fixedPctHi = Math.Min(100.0f, RegulValveTandemCfg.FixedRVPosition + 3.0f);
this.dict = new Dictionary<double, float>();
this.dict = new Dictionary<double, double>();
log.Warn(this.ToString());
}
@@ -103,12 +103,12 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
/// <param name="flowLo">Lower limit of the required valve position in [%]</param>
/// <param name="flowLo">Higher limit of the required valve position in [%]</param>
/// <returns>SetPositionOp instance</returns>
public IOperation SetRegulValvePositionOp(float pctLo, float pctHi, int timeoutMs)
public IOperation SetRegulValvePositionOp(double pctLo, double pctHi, int timeoutMs)
{
return null;
}
public IOperation ChangeRegulValvePositionOp(float timePulseSec)
public IOperation ChangeRegulValvePositionOp(double timePulseSec)
{
return null;
}
@@ -24,8 +24,8 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
readonly int regulValveNr;
readonly Elde.RegulValve.RegulValve fixedRV;
readonly int fixedRVNr;
readonly float fixedPctLo;
readonly float fixedPctHi;
readonly double fixedPctLo;
readonly double fixedPctHi;
readonly int flowMeterNr;
readonly double finalReqFlowLo;
readonly double finalReqFlowHi;
@@ -51,9 +51,9 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
OpState opState;
double currentReqFlowLo;
double currentReqFlowHi;
float targetPositionLo;
float targetPositionHi;
double currentReqFlowHi;
double targetPositionLo;
double targetPositionHi;
int expireTime;
DoubleBox measuredFlow;
@@ -76,7 +76,7 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
/// <param name="timeout">Timeout for the flow setting in [s]</param>
/// <param name="leaveMeasurementRunning">true = Leave the measurement running after op. stop</param>
/// <remarks>Only Elde.Valve flow are used, other flow on the lists are ignored</remarks>
public SetFlowOp(CBoard controlBoard, IRegulValve regV, IRegulValve fxdRV, float fxdPctLo, float fxdPctHi,
public SetFlowOp(CBoard controlBoard, IRegValve regV, IRegValve fxdRV, float fxdPctLo, float fxdPctHi,
IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi, DoubleBox measuredFlow,
int timeout, bool leaveMeasurementRunning)
{
@@ -126,7 +126,7 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
/// Set required water flow - Do not leave the measurement running.
/// Events: FlowSet
/// </summary>
public SetFlowOp(CBoard controlBoard, IRegulValve regValve, IRegulValve fixedRV, float fixedPctLo, float fixedPctHi,
public SetFlowOp(CBoard controlBoard, IRegValve regValve, IRegValve fixedRV, float fixedPctLo, float fixedPctHi,
IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi, DoubleBox measuredFlow, int timeout)
: this(controlBoard, regValve, fixedRV, fixedPctLo, fixedPctHi, flowMeter, requiredFlowLo, requiredFlowHi, measuredFlow, timeout, false)
{
@@ -136,7 +136,7 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
/// Set required water flow - No timeout.
/// Events: FlowSet
/// </summary>
public SetFlowOp(CBoard controlBoard, IRegulValve regValve, IRegulValve fixedRV, float fixedPctLo, float fixedPctHi,
public SetFlowOp(CBoard controlBoard, IRegValve regValve, IRegValve fixedRV, float fixedPctLo, float fixedPctHi,
IFlowMeter flowMeter, double requiredFlowLo, double requiredFlowHi, DoubleBox measuredFlow)
: this(controlBoard, regValve, fixedRV, fixedPctLo, fixedPctHi, flowMeter, requiredFlowLo, requiredFlowHi, measuredFlow, int.MaxValue, false)
{
@@ -149,28 +149,28 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
/// <param name="positionLo">Target valve position low limit (output)</param>
/// <param name="positionHi">Target valve position high limit (output)</param>
/// <returns>true when positions for the target flow are stored in the memory, otherwise return false</returns>
bool FetchTargetPosition(double avgReqFlow, out float positionLo, out float positionHi)
bool FetchTargetPosition(double avgReqFlow, out double positionLo, out double positionHi)
{
float targetPosition;
double targetPosition;
if (regulValve.Dict.TryGetValue(avgReqFlow, out targetPosition))
{
positionLo = Math.Max(targetPosition * 0.95f, 0.0f);
positionHi = Math.Min(targetPosition * 1.05f, 100.0f);
positionLo = Math.Max(targetPosition * 0.95, 0.0);
positionHi = Math.Min(targetPosition * 1.05, 100.0);
return true;
}
else
{
positionLo = 0.0f;
positionHi = 0.0f;
positionLo = 0.0;
positionHi = 0.0;
return false;
}
}
void StoreTargetPosition(double avgReqFlow, float actPosition)
void StoreTargetPosition(double avgReqFlow, double actPosition)
{
if (!regulValve.Dict.ContainsKey(reqFlowAve))
{
regulValve.Dict.Add(new KeyValuePair<double, float>(avgReqFlow, actPosition));
regulValve.Dict.Add(new KeyValuePair<double, double>(avgReqFlow, actPosition));
}
return;
}
@@ -248,7 +248,7 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
/// Done once, issues an appropriate ValveMove(...) command
///
controlBoard.ValveMove(regulValveNr, RegulValveMode.TargetPosition,
new float[2] { targetPositionLo, targetPositionHi },
new double[2] { targetPositionLo, targetPositionHi },
regulValve.StableTime);
opState = OpState.SettingPosition;
@@ -271,7 +271,7 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
/// Done once, issues an appropriate ValveMove(...) command
///
controlBoard.ValveMove(fixedRVNr, RegulValveMode.TargetPosition,
new float[2] { fixedPctLo, fixedPctHi },
new double[2] { fixedPctLo, fixedPctHi },
regulValve.StableTime);
opState = OpState.SettingPosition_FixedRV;
@@ -304,7 +304,7 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
double freqLo = 2000.0 * currentReqFlowLo / nominalFlow;
double freqHi = 2000.0 * currentReqFlowHi / nominalFlow;
controlBoard.ValveMove(regulValveNr, RegulValveMode.TargetFrequency,
new float[2] { (float)freqLo, (float)freqHi },
new double[2] { freqLo, freqHi },
regulValve.StableTime);
opState = OpState.SettingFlow;
@@ -321,7 +321,7 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
{
if (regulValve.RegulValveCfg.StoredPositionReuse)
{
float storedPosition;
double storedPosition;
if (regulValve.Dict.TryGetValue(reqFlowAve, out storedPosition))
{
/// update the stored valve position
@@ -21,8 +21,8 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
readonly CBoard controlBoard;
readonly Elde.RegulValve.RegulValve regulValve;
readonly int regulValveNr;
readonly float posLoPct;
readonly float posHiPct;
readonly double posLoPct;
readonly double posHiPct;
readonly int timeout;
/// Process values
@@ -40,7 +40,7 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
/// <param name="posHiPct">Upper limit of the position to be achieved</param>
/// <param name="timeout">Timeout in sec. for setting the flow</param>
/// <remarks>Only Elde.Valve flow are used, other flow on the lists are ignored</remarks>
public SetRegulValvePositionOp(CBoard controlBoard, IRegulValve regV, float posLoPct, float posHiPct, int timeout)
public SetRegulValvePositionOp(CBoard controlBoard, IRegValve regV, float posLoPct, float posHiPct, int timeout)
{
if (controlBoard == null) throw new ArgumentNullException("ctrlBoard");
this.controlBoard = controlBoard;
@@ -94,7 +94,7 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
controlBoard.ValveMove(regulValveNr,
RegulValveMode.TargetPosition,
new float[2] { posLoPct, posHiPct },
new double[2] { posLoPct, posHiPct },
regulValve.StableTime);
return Event.None;
}
@@ -128,7 +128,7 @@ namespace TBF.BenchControl.Elde.RegulValveTandem
{
controlBoard.ValveMove(regulValveNr,
RegulValveMode.Stop,
new float[2] { posLoPct, posHiPct },
new double[2] { posLoPct, posHiPct },
regulValve.StableTime);
}
}
+3 -3
View File
@@ -13,7 +13,7 @@ namespace TBF.BenchControl
public float Qfrom;
public float Qto;
public IValve Pump; /// pump to use with this path or null
public IList<IRegulValve> RegulValves;
public IList<IRegValve> RegulValves;
public IList<float> RegulValvesPct;
public IList<IValve> ValvesOpen; /// a list of valves to open or null
public IList<IValve> ValvesClose; /// a list of valves to close or null
@@ -25,7 +25,7 @@ namespace TBF.BenchControl
Name = name;
ValvesOpen = new List<IValve>();
ValvesClose = new List<IValve>();
RegulValves = new List<IRegulValve>();
RegulValves = new List<IRegValve>();
RegulValvesPct = new List<float>();
}
@@ -42,7 +42,7 @@ namespace TBF.BenchControl
///
foreach (var cmpnt in components)
{
IRegulValve regValve = cmpnt as IRegulValve;
IRegValve regValve = cmpnt as IRegValve;
if (regValve != null && regValve.Category == TBF.BenchControl.ValveCategory.Feeding)
{
RegulValves.Add(regValve);
@@ -8,7 +8,7 @@ using TBF.Boxes;
namespace TBF.BenchControl.GenericDevices
{
public interface IRegulValve : IComponent
public interface IRegValve : IComponent
{
/// <summary>
/// All, Feeding, Bench, Output or None
@@ -23,12 +23,12 @@ namespace TBF.BenchControl.GenericDevices
/// <summary>
/// Regulation valve position 0.0 .. 100.0 %
/// </summary>
float Position { get; }
double Position { get; }
/// <summary>
/// Dictionary for position re-use
/// </summary>
IDictionary<double, float> Dict { get; }
IDictionary<double, double> Dict { get; }
/// <summary>
/// Operation to set the water flow within tolerances
@@ -65,7 +65,7 @@ namespace TBF.BenchControl.GenericDevices
/// <param name="posHiPct">Higher limit of the required valve position in %</param>
/// <param name="timeout">Timeout in [s]</param>
/// <returns>SetPositionOp instance</returns>
IOperation SetRegulValvePositionOp(float posLoPct, float posHiPct, int timeout);
IOperation SetRegulValvePositionOp(double posLoPct, double posHiPct, int timeout);
/// <summary>
/// Operation to set the regulation valve to a required position
@@ -73,6 +73,6 @@ namespace TBF.BenchControl.GenericDevices
/// </summary>
/// <param name="timePulseSec">Time pulse in sec</param>
/// <returns>SetPositionOp instance</returns>
IOperation ChangeRegulValvePositionOp(float timePulseSec);
IOperation ChangeRegulValvePositionOp(double timePulseSec);
}
}
@@ -16,7 +16,7 @@ namespace TBF.BenchControl.Operations
int rvCount;
IOperation[] setRVPosOps;
public SetAllRegulValvesOp(IList<IRegulValve> regulValves, IList<float> positions, int timeout)
public SetAllRegulValvesOp(IList<IRegValve> regulValves, IList<float> positions, int timeout)
{
if (regulValves == null || regulValves.Count == 0)
{
+2 -2
View File
@@ -13,7 +13,7 @@ namespace TBF.BenchControl
public float Qfrom;
public float Qto;
public IFlowMeter FlowMeter;
public IRegulValve RegValve;
public IRegValve RegValve;
public float PidCoef;
public IDiverter Diverter;
public ITempMeter TempMtrDiv;
@@ -45,7 +45,7 @@ namespace TBF.BenchControl
Qfrom = outputPathEntity.Qfrom;
Qto = outputPathEntity.Qto;
FlowMeter = (IFlowMeter)TbfComponents.FindComponent(outputPathEntity.FlowMeter, components);
RegValve = (IRegulValve)TbfComponents.FindComponent(outputPathEntity.RegValve, components);
RegValve = (IRegValve)TbfComponents.FindComponent(outputPathEntity.RegValve, components);
PidCoef = outputPathEntity.PidCoef;
Diverter = (IDiverter)TbfComponents.FindComponent(outputPathEntity.Diverter, components);
TempMtrDiv = (ITempMeter)TbfComponents.FindComponent(outputPathEntity.TempMtrDiv, components);
+3 -3
View File
@@ -36,7 +36,7 @@ namespace TBF.BenchControl.Sequences
/// Global static variables set only once.
///------------------------------------------------------------
public static IList<IFlowMeter> FlowMeters; /// list of reference flowmeters
public static IList<IRegulValve> RegulValves; /// list of regulation valves
public static IList<IRegValve> RegulValves; /// list of regulation valves
public static IList<IPumpFM> PumpsWithFM; /// list of FM controlled pumps
public static IList<IWaterMeter> WaterMeters; /// list of water meters
public static IList<ICamera> Cameras; /// list of cameras
@@ -951,7 +951,7 @@ namespace TBF.BenchControl.Sequences
}
protected Event SetFlowEtc(Test test, IFlowMeter flowMeter, IRegulValve regulValve, IValve pump, IValve stopBFValve, IList<IOperation> extraOperations, bool doNotWait)
protected Event SetFlowEtc(Test test, IFlowMeter flowMeter, IRegValve regulValve, IValve pump, IValve stopBFValve, IList<IOperation> extraOperations, bool doNotWait)
{
IList<Event> e;
Event retVal = Event.Done;
@@ -1866,7 +1866,7 @@ namespace TBF.BenchControl.Sequences
log.FatalFormat(" Output path: {0}", (outPath != null) ? outPath.ToString() : "none");
if (inPath.Pump is IPump) log.FatalFormat(" Pump power: {0}%", (inPath.Pump as IPump).Power);
else if (inPath.Pump is IValve) log.FatalFormat(" Feeding valve: {0}", (inPath.Pump as IValve).State ? "open" : "close");
if (outPath.RegValve is IRegulValve) log.FatalFormat(" Regulation valve position: {0}%", outPath.RegValve.Position);
if (outPath.RegValve is IRegValve) log.FatalFormat(" Regulation valve position: {0}%", outPath.RegValve.Position);
log.FatalFormat(" Flow: {0}", RefFlow);
log.FatalFormat(" Mass: {0}", Mass);
log.FatalFormat(" Start mass: {0}", StartMass);
+3 -3
View File
@@ -153,7 +153,7 @@ namespace TBF.BenchControl
ProcessData.IperlHeads = new List<TestMethods.iPerlCommunication.iPerlHead.IperlHead>();
SequenceBase.FlowMeters = new List<IFlowMeter>();
SequenceBase.RegulValves = new List<IRegulValve>();
SequenceBase.RegulValves = new List<IRegValve>();
SequenceBase.PumpsWithFM = new List<IPumpFM>();
SequenceBase.WaterMeters = new List<IWaterMeter>();
SequenceBase.Cameras = new List<ICamera>();
@@ -263,9 +263,9 @@ namespace TBF.BenchControl
}
if (cmpnt is IFlowMeter) SequenceBase.FlowMeters.Add(cmpnt as IFlowMeter);
if ((cmpnt is IRegulValve) && !(cmpnt is BenchControl.Elde.RegulValveTandem.RegulValveTandem))
if ((cmpnt is IRegValve) && !(cmpnt is BenchControl.Elde.RegulValveTandem.RegulValveTandem))
{
SequenceBase.RegulValves.Add(cmpnt as IRegulValve);
SequenceBase.RegulValves.Add(cmpnt as IRegValve);
}
if (cmpnt is IPumpFM && !(cmpnt is BuiltIn.PumpTandem.Pump)) SequenceBase.PumpsWithFM.Add(cmpnt as IPumpFM);
if (cmpnt is IWaterMeter) SequenceBase.WaterMeters.Add(cmpnt as IWaterMeter);
@@ -40,7 +40,7 @@ namespace TBF.BenchControl.TestMethods.Adjustment
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -55,7 +55,7 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -60,7 +60,7 @@ namespace TBF.BenchControl.TestMethods.DiverterTest
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -38,7 +38,7 @@ namespace TBF.BenchControl.TestMethods.Endurance
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -37,7 +37,7 @@ namespace TBF.BenchControl.TestMethods.FixedStart
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -40,7 +40,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -40,7 +40,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartDeferredEval
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -52,7 +52,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollAdvanced
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -54,7 +54,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollDeferredEval
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -52,7 +52,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -52,7 +52,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartTankCollection
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -40,7 +40,7 @@ namespace TBF.BenchControl.TestMethods.FlowAdjustment
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -39,7 +39,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -60,7 +60,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartFirstRepetWithMassColl
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -60,7 +60,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollComparative
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -51,7 +51,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollProlonged
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -60,7 +60,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -58,7 +58,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartTankCollection
return false;
}
if (!(devices.RegValve is GenericDevices.IRegulValve))
if (!(devices.RegValve is GenericDevices.IRegValve))
{
/// Regulation valve is missing
message = string.Format("{0}: {1}", test.Name, Strings.Missing_a_regulation_valve);
@@ -20,7 +20,7 @@ namespace TBF.BenchControl.Uni.RegValve
readonly TBF.BenchControl.ControlBoard.Legacy.CBoard controlBoard;
readonly RegValve regulValve;
readonly int regulValveNr;
readonly float timePulseSec;
readonly double timePulseSec;
/// <summary>
/// Set required water flow.
@@ -32,7 +32,7 @@ namespace TBF.BenchControl.Uni.RegValve
/// <param name="posHiPct">Upper limit of the position to be achieved</param>
/// <param name="timeout">Timeout in sec. for setting the flow</param>
/// <remarks>Only Elde.Valve flow are used, other flow on the lists are ignored</remarks>
public ChangeRegulValvePositionOp(TBF.BenchControl.ControlBoard.IControlBoard cb, RegValve rv, float timePulseSec)
public ChangeRegulValvePositionOp(TBF.BenchControl.ControlBoard.IControlBoard cb, RegValve rv, double timePulseSec)
{
controlBoard = cb as TBF.BenchControl.ControlBoard.Legacy.CBoard;
if (controlBoard == null) throw new ArgumentNullException("ctrlBoard");
@@ -49,12 +49,12 @@ namespace TBF.BenchControl.Uni.RegValve
/// <summary>Start this operation</summary>
public void Start()
{
float positionPct = controlBoard.RValvePosition(regulValveNr);
double positionPct = controlBoard.RValvePosition(regulValveNr);
log.WarnFormat("RV#={0}, actPos={1}%", regulValveNr, positionPct.ToString("F1"));
controlBoard.ValveMove(regulValveNr,
TBF.BenchControl.ControlBoard.Legacy.RegulValveMode.PulseWidth,
new float[2] { timePulseSec, timePulseSec },
new double[2] { timePulseSec, timePulseSec },
regulValve.StableTime);
}
+26 -28
View File
@@ -11,7 +11,7 @@ using TBF.Boxes;
namespace TBF.BenchControl.Uni.RegValve
{
public class RegValve : ComponentBase, IDevice, GenericDevices.IRegulValve, IDrawingItCmpntWithSetpoint
public class RegValve : ComponentBase, IDevice, GenericDevices.IRegValve, IDrawingItCmpntWithSetpoint
{
private static readonly ILog log = LogManager.GetLogger(typeof(RegValve));
public override string ToString() { return string.Format("RegulValve({0})", Cfg.ToString(1)); }
@@ -20,21 +20,31 @@ namespace TBF.BenchControl.Uni.RegValve
public readonly RegValveCfg regValveCfg;
public IDrawingItem DrawingItem { get { return regValveCfg as IDrawingItem; } }
IDictionary<double, float> dict;
public IDictionary<double, float> Dict { get { return dict; } }
IDictionary<double, double> dict;
public IDictionary<double, double> Dict { get { return dict; } }
readonly UniCB uniCB;
readonly int adcChannel;
public ValveCategory Category { get { return regValveCfg.Category; } }
public int Idx1 { get { return regValveCfg.Idx1; } } /// 1..7
public int DacValueClosed { get { return regValveCfg.AdcValueClosed; } } /// 0..1023
public int DacValueOpen { get { return regValveCfg.AdcValueOpen; } } /// 0..1023
public int Idx1 { get { return regValveCfg.Idx1; } } /// 1 .. 8
public int DacValueClosed { get { return regValveCfg.AdcValueClosed; } } /// 0 .. 1023
public int DacValueOpen { get { return regValveCfg.AdcValueOpen; } } /// 0 .. 1023
public int StableTime { get { return regValveCfg.StableTime; } } /// 0=200ms, step=50ms, max. 1500ms (max.26)
public int FlowStableSec { get { return regValveCfg.FlowStableSec; } } /// 0..60 sec
public int FlowStableSec { get { return regValveCfg.FlowStableSec; } } /// 0 .. 60 sec
///
public bool IsCoax { get { return false; } }
///
public float Position { get { return Raw2Position(uniCB.AnalogInput(AdcChannel)); } } /// 0 .. 100%
/// 0.0 .. 100.0
public double Position
{
get
{
int denominator = DacValueOpen - DacValueClosed;
if (denominator == 0) denominator = 1;
return 100.0 * Convert.ToDouble(uniCB.AnalogInput(adcChannel) - DacValueClosed) / Convert.ToDouble(denominator);
}
}
///
public double SetpointVal
{
@@ -52,21 +62,8 @@ namespace TBF.BenchControl.Uni.RegValve
/// TODO
}
public int AdcChannel;
public RegValveMode RegValveMode;
public RegValveState RegValveState;
public float TargetRegValvePosition;
/// <summary>
///
/// </summary>
/// <param name="analogInputValue"></param>
/// <returns></returns>
float Raw2Position(Int16 analogInputValue)
{
/// TODO
return 0.5f; /// return 50%
}
public double TargetRegValvePosition;
public void SendCommand(Command command, int v1, int v2, int v3, StopDevs v4)
{
@@ -131,7 +128,7 @@ namespace TBF.BenchControl.Uni.RegValve
}
else if (args.Command == CfgChangeCmd.GetAdc1 || args.Command == CfgChangeCmd.GetAdc2)
{
short adcValue = uniCB.AnalogInput(AdcChannel);
short adcValue = uniCB.AnalogInput(adcChannel);
RegValveCfgCtrl.OnCmdResponse(this, new CmdResponseArgs(args.Command, Idx1, adcValue));
}
}
@@ -149,11 +146,12 @@ namespace TBF.BenchControl.Uni.RegValve
: base(cfg)
{
regValveCfg = cfg as RegValveCfg;
adcChannel = regValveCfg.Idx1 - 1;
this.uniCB = TbfComponents.FindComponent(cfg.ParentName, components) as UniCB;
if (this.uniCB == null) throw new Exception(string.Format("Cannot find {0} (a parent of {1})", cfg.ParentName, Name));
this.dict = new Dictionary<double, float>();
this.dict = new Dictionary<double, double>();
StartChangeHandler();
@@ -167,7 +165,7 @@ namespace TBF.BenchControl.Uni.RegValve
public void Initialize() { }
public void RunDeviceBefore()
{
Int16 adcValue = uniCB.Data.AnalogInput[AdcChannel];
Int16 adcValue = uniCB.AnalogInput(adcChannel);
Handlers.OnAdcChanged(this, new CmdResponseArgs(CfgChangeCmd.GetAdc, Idx1, adcValue));
}
public void RunDeviceAfter() { }
@@ -214,12 +212,12 @@ namespace TBF.BenchControl.Uni.RegValve
/// <param name="flowLo">Lower limit of the required valve position in [%]</param>
/// <param name="flowLo">Higher limit of the required valve position in [%]</param>
/// <returns>SetPositionOp instance</returns>
public IOperation SetRegulValvePositionOp(float pctLo, float pctHi, int timeoutMs)
public IOperation SetRegulValvePositionOp(double pctLo, double pctHi, int timeoutMs)
{
return new SetRegValvePositionOp(uniCB, this, pctLo, pctHi, timeoutMs);
}
public IOperation ChangeRegulValvePositionOp(float timePulseSec)
public IOperation ChangeRegulValvePositionOp(double timePulseSec)
{
return new ChangeRegulValvePositionOp(uniCB, this, timePulseSec);
}
+16 -16
View File
@@ -56,8 +56,8 @@ namespace TBF.BenchControl.Uni.RegValve
double currentReqFlowLo;
double currentReqFlowHi;
float targetPositionLo;
float targetPositionHi;
double targetPositionLo;
double targetPositionHi;
int startTime;
int expireTime;
@@ -78,7 +78,7 @@ namespace TBF.BenchControl.Uni.RegValve
/// <param name="timeout">Timeout for the flow setting in [s]</param>
/// <param name="leaveMeasurementRunning">true = Leave the measurement running after op. stop</param>
/// <remarks>Only Elde.Valve flow are used, other flow on the lists are ignored</remarks>
public SetFlowOp(UniCB cBoard, IRegulValve regValve, IFlowMeter flowMeter, double targetFlowLo, double targetFlowHi,
public SetFlowOp(UniCB cBoard, IRegValve regValve, IFlowMeter flowMeter, double targetFlowLo, double targetFlowHi,
DoubleBox flowBox, bool reTryCmds, int timeout, bool leaveMeasurementRunning)
{
this.cBoard = cBoard;
@@ -113,7 +113,7 @@ namespace TBF.BenchControl.Uni.RegValve
/// Set required water flow - Do not leave the measurement running.
/// Events: FlowSet
/// </summary>
public SetFlowOp(UniCB cBoard, IRegulValve regValve, IFlowMeter flowMeter, double targetFlowLo, double targetFlowHi,
public SetFlowOp(UniCB cBoard, IRegValve regValve, IFlowMeter flowMeter, double targetFlowLo, double targetFlowHi,
DoubleBox flowbox, bool reTryCmds, int timeout)
: this(cBoard, regValve, flowMeter, targetFlowLo, targetFlowHi, flowbox, reTryCmds, timeout, false)
{
@@ -123,7 +123,7 @@ namespace TBF.BenchControl.Uni.RegValve
/// Set required water flow - No timeout.
/// Events: FlowSet
/// </summary>
public SetFlowOp(UniCB cBoard, IRegulValve regValve, IFlowMeter flowMeter, double targetFlowLo, double targetFlowHi,
public SetFlowOp(UniCB cBoard, IRegValve regValve, IFlowMeter flowMeter, double targetFlowLo, double targetFlowHi,
DoubleBox flowbox, bool reTryCmds)
: this(cBoard, regValve, flowMeter, targetFlowLo, targetFlowHi, flowbox, reTryCmds, int.MaxValue, false)
{
@@ -136,28 +136,28 @@ namespace TBF.BenchControl.Uni.RegValve
/// <param name="positionLo">Target valve position low limit (output)</param>
/// <param name="positionHi">Target valve position high limit (output)</param>
/// <returns>true when positions for the target flow are stored in the memory, otherwise return false</returns>
bool FetchTargetPosition(double avgReqFlow, out float positionLo, out float positionHi)
bool FetchTargetPosition(double avgReqFlow, out double positionLo, out double positionHi)
{
float targetPosition;
double targetPosition;
if (regV.Dict.TryGetValue(avgReqFlow, out targetPosition))
{
positionLo = Math.Max(targetPosition * 0.95f, 0.0f);
positionHi = Math.Min(targetPosition * 1.05f, 100.0f);
positionLo = Math.Max(targetPosition * 0.95, 0.0);
positionHi = Math.Min(targetPosition * 1.05, 100.0);
return true;
}
else
{
positionLo = 0.0f;
positionHi = 0.0f;
positionLo = 0;
positionHi = 0;
return false;
}
}
void StoreTargetPosition(double avgReqFlow, float actPosition)
void StoreTargetPosition(double avgReqFlow, double actPosition)
{
if (!regV.Dict.ContainsKey(targetFlowAve))
{
regV.Dict.Add(new KeyValuePair<double, float>(avgReqFlow, actPosition));
regV.Dict.Add(new KeyValuePair<double, double>(avgReqFlow, actPosition));
}
return;
}
@@ -212,7 +212,7 @@ namespace TBF.BenchControl.Uni.RegValve
/// </returns>
public Event Run()
{
float rvPosition = regV.Position;
double rvPosition = regV.Position;
double flowMtrFreq = flowMeter.ReadFrequency();
double flow = flowMeter.ReadFlow();
@@ -387,12 +387,12 @@ namespace TBF.BenchControl.Uni.RegValve
if (regV.regValveCfg.StoredPositionReuse)
{
float storedPosition;
double storedPosition;
if (regV.Dict.TryGetValue(targetFlowAve, out storedPosition))
{
/// update the stored valve position
StoreTargetPosition(targetFlowAve, (rvPosition + storedPosition) / 2.0f);
StoreTargetPosition(targetFlowAve, (rvPosition + storedPosition) / 2.0);
log.InfoFormat("Run(): rv#={0} reqFlow={1} pos={2}% stored={3} <--- Updating a stored position",
regulValveNr, targetFlowAve, rvPosition.ToString("F1"), storedPosition);
}
@@ -35,8 +35,8 @@ namespace TBF.BenchControl.Uni.RegValve
readonly UniCB cBoard;
readonly RegValve regV;
readonly int regValveNr;
readonly float posLoPct;
readonly float posHiPct;
readonly double posLoPct;
readonly double posHiPct;
readonly int timeout;
/// Process values
@@ -54,7 +54,7 @@ namespace TBF.BenchControl.Uni.RegValve
/// <param name="posHiPct">Upper limit of the position to be achieved</param>
/// <param name="timeout">Timeout in sec. for setting the flow</param>
/// <remarks>Only Elde.Valve flow are used, other flow on the lists are ignored</remarks>
public SetRegValvePositionOp(UniCB cBoard, RegValve regValve, float posLoPct, float posHiPct, int timeout)
public SetRegValvePositionOp(UniCB cBoard, RegValve regValve, double posLoPct, double posHiPct, int timeout)
{
this.cBoard = cBoard;
if (this.cBoard == null) throw new ArgumentNullException("ctrlBoard");
@@ -114,7 +114,7 @@ namespace TBF.BenchControl.Uni.RegValve
if (positionReached) return Event.PositionReached;
float positionPct = regV.Position;
double positionPct = regV.Position;
log.WarnFormat("Run(): RV#={0}, actPos={1}%", regValveNr, positionPct.ToString("F1"));
if (opState == OpState.CheckState)
+2 -2
View File
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("3.1.1602.0")]
[assembly: AssemblyFileVersion("3.1.1602.0")]
[assembly: AssemblyVersion("3.1.1603.0")]
[assembly: AssemblyFileVersion("3.1.1603.0")]
+1 -1
View File
@@ -1964,7 +1964,7 @@
<Compile Include="BenchControl\GenericDevices\IDiverter.cs" />
<Compile Include="BenchControl\GenericDevices\IFlowMeter.cs" />
<Compile Include="BenchControl\GenericDevices\IPressureMeter.cs" />
<Compile Include="BenchControl\GenericDevices\IRegulValve.cs" />
<Compile Include="BenchControl\GenericDevices\IRegValve.cs" />
<Compile Include="BenchControl\GenericDevices\ITempMeter.cs" />
<Compile Include="BenchControl\GenericDevices\IValve.cs" />
<Compile Include="BenchControl\Generic\IComponent.cs" />
+3 -3
View File
@@ -33,7 +33,7 @@ namespace TBF.UI.Bench.Paths
public IList<BenchControl.Generic.IComponent> TbfComponents;
public IList<IValve> Valves;
public IList<IRegulValve> FeedingRegulValves;
public IList<IRegValve> FeedingRegulValves;
public ISession Session; /// One common DB session passed also to the controls inside tab pages
public IList<Procedure> Procedures;
public IList<Test> Tests;
@@ -71,10 +71,10 @@ namespace TBF.UI.Bench.Paths
Valves = BenchControl.BuiltIn.ValveBase.GetMasterValves(TbfComponents);
/// Find all feeding regulation valves
FeedingRegulValves = new List<IRegulValve>();
FeedingRegulValves = new List<IRegValve>();
foreach (var cmpnt in TbfComponents)
{
IRegulValve regValve = cmpnt as IRegulValve;
IRegValve regValve = cmpnt as IRegValve;
if (regValve != null && regValve.Category == TBF.BenchControl.ValveCategory.Feeding)
{
FeedingRegulValves.Add(regValve);
+1 -1
View File
@@ -131,7 +131,7 @@ namespace TBF.UI.Bench.Paths
foreach (var cmpnt in parent.TbfComponents)
{
if (cmpnt is IFlowMeter) flowMeterComboBox.Items.Add(cmpnt.Cfg.Name);
if (cmpnt is IRegulValve) regulValveComboBox.Items.Add(cmpnt.Cfg.Name);
if (cmpnt is IRegValve) regulValveComboBox.Items.Add(cmpnt.Cfg.Name);
if (cmpnt is IDiverter) diverterComboBox.Items.Add(cmpnt.Cfg.Name);
if (cmpnt is ITempMeter) tempMeterDivComboBox.Items.Add(cmpnt.Cfg.Name);
if (cmpnt is IScaleOrTank) scaleComboBox.Items.Add(cmpnt.Cfg.Name);
+4 -4
View File
@@ -53,7 +53,7 @@ namespace TBF.UI.Bench.Transitions
/// Auxiliary public lists used also by user controls in tab pages
public IList<BenchControl.Generic.IComponent> TbfComponents;
public IList<IValve> Valves;
public IList<IRegulValve> RegulValves;
public IList<IRegValve> RegulValves;
IList<ITabWithListViewEx> seqStepsCtrls;
@@ -98,12 +98,12 @@ namespace TBF.UI.Bench.Transitions
var cmptnEntities = Session.QueryOver<Component>().OrderBy(x => x.ItemNr).Asc.List();
TbfComponents = BenchControl.TbfComponents.LoadComponentsFromDB(cmptnEntities);
Valves = BenchControl.BuiltIn.ValveBase.GetMasterValves(TbfComponents);
RegulValves = new List<IRegulValve>();
RegulValves = new List<IRegValve>();
foreach (var cmpnt in TbfComponents)
{
if ((cmpnt is IRegulValve) && !(cmpnt is BenchControl.Elde.RegulValveTandem.RegulValveTandem))
if ((cmpnt is IRegValve) && !(cmpnt is BenchControl.Elde.RegulValveTandem.RegulValveTandem))
{
RegulValves.Add(cmpnt as IRegulValve);
RegulValves.Add(cmpnt as IRegValve);
}
}
+3 -3
View File
@@ -46,7 +46,7 @@ namespace TBF.UI.Procedures
/// Auxiliary public lists used also by user controls in tab pages
public IList<BenchControl.Generic.IComponent> TbfComponents;
public IList<IValve> Valves;
public IList<IRegulValve> RegulValves;
public IList<IRegValve> RegulValves;
public IList<ITestMethod> TestMethods;
public IList<ITestMethod> UsedTestMethods;
ComboBox methodCBox;
@@ -146,7 +146,7 @@ namespace TBF.UI.Procedures
var cmptnEntities = session.QueryOver<Component>().OrderBy(x => x.ItemNr).Asc.List();
TbfComponents = BenchControl.TbfComponents.LoadComponentsFromDB(cmptnEntities);
Valves = BenchControl.BuiltIn.ValveBase.GetMasterValves(TbfComponents);
RegulValves = new List<IRegulValve>();
RegulValves = new List<IRegValve>();
TestMethods = new List<ITestMethod>();
dataEntryComboBox.Items.Add("---");
printer1ComboBox.Items.Add("---");
@@ -161,7 +161,7 @@ namespace TBF.UI.Procedures
foreach (var cmpnt in TbfComponents)
{
if (cmpnt is IRegulValve) RegulValves.Add(cmpnt as IRegulValve);
if (cmpnt is IRegValve) RegulValves.Add(cmpnt as IRegValve);
if (cmpnt is ITestMethod) TestMethods.Add(cmpnt as ITestMethod);
if (cmpnt is IDataEntry) dataEntryComboBox.Items.Add(cmpnt.Cfg.Name);
if (cmpnt is IResultsPrinter)