- FLyngStart sequence (without balances) tested -> OK, Todo: use

corrections
- totalPulses calculated correctly in case of I11+I12 (use of two flowmeters)
This commit is contained in:
Milan Hanajik 2014-09-12 07:17:30 +02:00
parent 3559ab0ab3
commit a919a3e9d6
8 changed files with 52 additions and 43 deletions

View File

@ -6,11 +6,11 @@ namespace TBF.BenchControl.Elde
public class StartMeasurementOp : IOperation
{
private static readonly ILog log = LogManager.GetLogger(typeof(StartMeasurementOp));
public override string ToString() { return string.Format("StartMeasurementOp(ref={0},pulses={1})", flowMeter.Idx1, refPulses); }
public override string ToString() { return string.Format("StartMeasurementOp(ref={0},pulses={1})", flowMeterIdx, refPulses); }
/// Set by the constructor
readonly ControlBoardDev controlBoard;
readonly Elde.FlowMeter.FlowMeter flowMeter;
readonly int flowMeterIdx;
readonly int refPulses; /// Number of reference pulses for a complete test
readonly TestMethods testMethod;
readonly float filterConstant;
@ -31,8 +31,18 @@ namespace TBF.BenchControl.Elde
if (controlBoardDev == null) throw new ArgumentNullException("controlBoardDev");
this.controlBoard = controlBoardDev;
this.flowMeter = flowMeter as Elde.FlowMeter.FlowMeter;
if (this.flowMeter == null) throw new ArgumentException("flowMeter is null or is not Elde");
if (flowMeter is Elde.FlowMeter.FlowMeter)
{
flowMeterIdx = (flowMeter as Elde.FlowMeter.FlowMeter).Idx1;
}
else if (flowMeter is Elde.FlowMeterCouple.FlowMeter)
{
flowMeterIdx = 0;
}
else
{
throw new ArgumentException("flowMeter is null or is not Elde");
}
this.refPulses = refPulses;
this.testMethod = method;
@ -44,7 +54,7 @@ namespace TBF.BenchControl.Elde
/// <summary>Start this operation</summary>
public void Start()
{
controlBoard.SendCommand(Command.Start, flowMeter.Idx1, controlBoard.RRoute, refPulses, testMethod,
controlBoard.SendCommand(Command.Start, flowMeterIdx, controlBoard.RRoute, refPulses, testMethod,
filterConstant, 20, 0, StopDevs.None);
}

View File

@ -609,7 +609,7 @@ namespace TBF.BenchControl.Sequences
data.TestResult = tstRslt;
//float ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse]
float refPulsesPerLtr = 7200.0f / outPath.FlowMeter.NominalFlow; /// [pulse/ltr]
float refPulsesPerLtr = 1.0f / outPath.FlowMeter.LtrPerPulse; /// [pulse/ltr]
data.RefPulses = cBrd.EtPulses(0);
@ -710,7 +710,7 @@ namespace TBF.BenchControl.Sequences
sb.Append(";"); sb.Append(tstRslt.Time); /// t
sb.Append(";"); sb.Append(tstRslt.ErrorMaster); /// Eelm . . . chyba etalonu voci komercne pravej hodnote
sb.Append(";"); sb.Append(" "); /// Emass . . . chyba druheho etalonu voci komercne pravej hodnote (teraz vynechavame)
sb.Append(";"); sb.Append(7200.0f / outPath.FlowMeter.NominalFlow);
sb.Append(";"); sb.Append(1.0f / outPath.FlowMeter.LtrPerPulse);
/// Const.MID . konstanta eatlonu
sb.Append(";"); sb.Append(" "); /// Const.MA . . konstanta druheho etalonu
sb.Append(";"); sb.Append(tstRslt.TimeDivStart0); /// Time Div Start celkovy cas v [ms]

View File

@ -36,11 +36,13 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters
IList<Event> e; /// Events from currently running operations
Event retVal = Event.Done;
/// Notes:
/// float timeHr = volumeLtr / (1000.0f * targetFlow);
/// float timeSec = 3600.0f * timeHr;
/// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow));
int totalPulses = (int)(7200.0f * test.Volume / outPath.FlowMeter.NominalFlow); /// Nominal flow in [m3/h]
ltrPerRefPulse = outPath.FlowMeter.LtrPerPulse; /// [ltr/pulse], nominal flow in [m3/h]
/// Notes:
/// float timeHr = volumeLtr / (1000.0f * targetFlow);
/// float timeSec = 3600.0f * timeHr;
/// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow));
int totalPulses = (int)(test.Volume / ltrPerRefPulse);
ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse]
///

View File

@ -40,14 +40,14 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
while (!e.Contains(Event.PreviousStopped));
/// Notes:
/// float timeHr = volumeLtr / (1000.0f * targetFlow);
/// float timeSec = 3600.0f * timeHr;
/// uint refPulses = (uint)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow));
int totalPulses = (int)(7200.0f * test.Volume / outPath.FlowMeter.NominalFlow); /// Nominal flow in [m3/h]
ltrPerRefPulse = outPath.FlowMeter.LtrPerPulse; /// [ltr/pulse], nominal flow in [m3/h]
ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse]
///
/// Notes:
/// float timeHr = volumeLtr / (1000.0f * targetFlow);
/// float timeSec = 3600.0f * timeHr;
/// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow));
int totalPulses = (int)(test.Volume / ltrPerRefPulse);
processDataLoggingOp = new TBF.BenchControl.Operations.ProcessDataLoggingOp(processDataLogger, this);
/// Meters path is required for the following:

View File

@ -36,13 +36,13 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
IList<Event> e; /// Events from currently running operations
Event retVal = Event.Done;
/// Notes:
/// float timeHr = volumeLtr / (1000.0f * targetFlow);
/// float timeSec = 3600.0f * timeHr;
/// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow));
int totalPulses = (int)(7200.0f * test.Volume / outPath.FlowMeter.NominalFlow); /// Nominal flow in [m3/h]
ltrPerRefPulse = outPath.FlowMeter.LtrPerPulse; /// [ltr/pulse], nominal flow in [m3/h]
ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse]
/// Notes:
/// float timeHr = volumeLtr / (1000.0f * targetFlow);
/// float timeSec = 3600.0f * timeHr;
/// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow));
int totalPulses = (int)(test.Volume / ltrPerRefPulse);
processDataLoggingOp = new TBF.BenchControl.Operations.ProcessDataLoggingOp(processDataLogger, this);

View File

@ -36,13 +36,13 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
IList<Event> e; /// Events from currently running operations
Event retVal = Event.Done;
/// Notes:
/// float timeHr = volumeLtr / (1000.0f * targetFlow);
/// float timeSec = 3600.0f * timeHr;
/// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow));
int totalPulses = (int)(7200.0f * test.Volume / outPath.FlowMeter.NominalFlow); /// Nominal flow in [m3/h]
ltrPerRefPulse = outPath.FlowMeter.LtrPerPulse; /// [ltr/pulse], nominal flow in [m3/h]
ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse]
/// Notes:
/// float timeHr = volumeLtr / (1000.0f * targetFlow);
/// float timeSec = 3600.0f * timeHr;
/// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow));
int totalPulses = (int)(test.Volume / ltrPerRefPulse);
processDataLoggingOp = new TBF.BenchControl.Operations.ProcessDataLoggingOp(processDataLogger, this);
@ -253,9 +253,9 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
tstRslt.FlowVolume = 3600.0f * ltrPerRefPulse * cBrd.EtPulses(0) / tstRslt.Time; /// [l/h]
tstRslt.PulsesMaster = cBrd.EtPulses(0); /// Pulses of the master flow meter (test total)
/// TODO: tuto pokracovat
tstRslt.VolumeMaster = ltrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
tstRslt.VolumeCTV = 1.00103f * 1000.0f * tstRslt.MassDiff / tstRslt.DensityOut; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.ConstMaster = ltrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster;
tstRslt.VolumeMaster = ltrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
tstRslt.ConstMaster = outPath.FlowMeter.LtrPerPulseCorrected(tstRslt.FlowVolume);
tstRslt.VolumeCTV = tstRslt.ConstMaster * tstRslt.PulsesMaster; /// [l] 1000.0f is because density is in [kg/m3]
/// Corrected master pulses per liter
if (tstRslt.VolumeCTV <= float.Epsilon)
{

View File

@ -43,9 +43,6 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
/// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow));
int totalPulses = (int)(test.Volume / ltrPerRefPulse);
/// Double total pulses for 'added' flowmeters
if (outPath.FlowMeter.Cfg.Name.Contains("+")) { totalPulses *= 2; }
processDataLoggingOp = new TBF.BenchControl.Operations.ProcessDataLoggingOp(processDataLogger, this);
int repetitionNr = 1; /// First test: repetitionNr=1

View File

@ -36,13 +36,13 @@ namespace TBF.BenchControl.TestMethods.ReferenceFlowmeterCalibration
IList<Event> e; /// Events from currently running operations
Event retVal = Event.Done;
/// Notes:
/// float timeHr = volumeLtr / (1000.0f * targetFlow);
/// float timeSec = 3600.0f * timeHr;
/// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow));
int totalPulses = (int)(7200.0f * test.Volume / outPath.FlowMeter.NominalFlow); /// Nominal flow in [m3/h]
ltrPerRefPulse = outPath.FlowMeter.LtrPerPulse; /// [ltr/pulse], nominal flow in [m3/h]
ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse]
/// Notes:
/// float timeHr = volumeLtr / (1000.0f * targetFlow);
/// float timeSec = 3600.0f * timeHr;
/// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow));
int totalPulses = (int)(test.Volume / ltrPerRefPulse);
processDataLoggingOp = new TBF.BenchControl.Operations.ProcessDataLoggingOp(processDataLogger, this);