Many changes, new results used, all test sequences modified, simulated tests rewritten.

This commit is contained in:
Milan Hanajik 2016-01-03 02:05:35 +01:00
parent 494c6edf76
commit 26982a5729
71 changed files with 2609 additions and 2692 deletions

1
Questions.txt Normal file
View File

@ -0,0 +1 @@
Test StartTime: when? Start of flow set or start of real test?

View File

@ -8,6 +8,8 @@ namespace Results
{
public class BatchResults
{
public readonly int WMPositionsCount;
public IList<Entities.TestData> TestDataList;
public IList<Entities.Components> ComponentsList;
public IList<Entities.WaterMeterData> WaterMeterDataList;
@ -17,45 +19,38 @@ namespace Results
public IDictionary<string, MeterTestRslt>[] MainMeterTestRsltsMap;
public IDictionary<string, MeterTestRslt>[] AuxMeterTestRsltsMap;
private BatchResults()
private BatchResults(int wmPositionsCount)
{
WMPositionsCount = wmPositionsCount;
TestDataList = new List<Entities.TestData>();
ComponentsList = new List<Entities.Components>();
WaterMeterDataList = new List<Entities.WaterMeterData>();
TestRsltsMap = new Dictionary<string, TestRslt>();
MeterTestRsltsMap = new Dictionary<string, MeterTestRslt>[WMPositionsCount];
MainMeterTestRsltsMap = new Dictionary<string, MeterTestRslt>[WMPositionsCount];
AuxMeterTestRsltsMap = new Dictionary<string, MeterTestRslt>[WMPositionsCount];
for (int wmnr = 0; wmnr < WMPositionsCount; wmnr++)
{
MeterTestRsltsMap[wmnr] = new Dictionary<string, MeterTestRslt>();
MainMeterTestRsltsMap[wmnr] = new Dictionary<string, MeterTestRslt>();
AuxMeterTestRsltsMap[wmnr] = new Dictionary<string, MeterTestRslt>();
}
}
public int WMPositionsCount;
public Batch Batch;
public WaterMeter[] WaterMeters;
public IList<TestRslt> TestRslts;
public IList<TestRslt> MeterTestRslts;
public static BatchResults NewFromProcedure(int batchNr,
int benchId,
string user,
string programVer,
Config.Entities.Procedure procedure,
WaterMeterData[] waterMeterDatas,
int[] waterMeterParts)
public static BatchResults NewFromProcedure(int batchNr, int benchId, string user, string programVer,
Config.Entities.Procedure procedure,
WaterMeterData[] waterMeterDatas, int[] waterMeterParts)
{
BatchResults d = new BatchResults();
d.WMPositionsCount = waterMeterDatas.Length;
///
d.MeterTestRsltsMap = new Dictionary<string, MeterTestRslt>[d.WMPositionsCount];
d.MainMeterTestRsltsMap = new Dictionary<string, MeterTestRslt>[d.WMPositionsCount];
d.AuxMeterTestRsltsMap = new Dictionary<string, MeterTestRslt>[d.WMPositionsCount];
for (int wmnr = 0; wmnr < d.WMPositionsCount; wmnr++)
{
d.MeterTestRsltsMap[wmnr] = new Dictionary<string, MeterTestRslt>();
d.MainMeterTestRsltsMap[wmnr] = new Dictionary<string, MeterTestRslt>();
d.AuxMeterTestRsltsMap[wmnr] = new Dictionary<string, MeterTestRslt>();
}
BatchResults d = new BatchResults(waterMeterDatas.Length);
/// Create new batch
d.Batch = new Batch()
@ -154,6 +149,26 @@ namespace Results
}
/// <summary>
/// Returns true when all tests were done
/// </summary>
/// <returns>true = all tests done</returns>
public bool AllTestsDone()
{
for (int i = 0; i < WMPositionsCount; i++)
{
if (WaterMeters[i] != null)
{
foreach (var mtr in WaterMeters[i].MeterTestRslts)
{
if (!mtr.TestDone) return false;
}
}
}
return true;
}
/// <summary>
/// Adds non-null water meters from an array to a Batch water meters list.
/// This method should be used when results are prepared and

View File

@ -10,9 +10,10 @@ namespace Results.Entities
public virtual int Id { get; protected set; }
public virtual byte CompoundMeterId { get; set; } /// 0=single, 1=compound/main, 2=compound/aux., 3=compound/overal
public virtual double PulsesMeter { get; set; } /// # of pulses
public virtual double PulsesMaster { get; set; }
public virtual double VolumeStart { get; set; } /// liter
public virtual double PulsesMeter { get; set; } /// # of water meter pulses
public virtual double PulsesMaster { get; set; } /// # of reference flowmeter pulses (gated by this water meter pulses)
public virtual double PulsesPerLiter { get; set; } /// # of water meter pulses per one liter
public virtual double VolumeStart { get; set; } /// liter
public virtual double VolumeEnd { get; set; } /// liter
public virtual double VolumeMeter { get; set; } /// liter
public virtual double VolumeRef { get; set; } /// liter
@ -32,7 +33,7 @@ namespace Results.Entities
public virtual DateTime EndTime() { return TestRslt.EndTime; }
public virtual double FlowSetTime() { return TestRslt.FlowSetTime; }
public virtual double FlowMass() { return TestRslt.FlowMass; }
public virtual double FlowCTV() { return TestRslt.FlowCTV; }
public virtual double FlowCTV() { return TestRslt.FlowVolume; }
public virtual double ErrorMaster() { return TestRslt.ErrorMaster; }
public virtual Components Components(){ return TestRslt.Components; }
///

View File

@ -19,7 +19,7 @@ namespace Results.Entities
/// Main results
public virtual DateTime StartTime { get; set; } /// Date and time of the test start
public virtual DateTime EndTime { get; set; } /// Date and time of the test end
public virtual double FlowSetTime { get; set; } /// [s] Measurement time in seconds
public virtual int FlowSetTime { get; set; } /// [s] Measurement time in seconds
public virtual double TestTime { get; set; } /// [s] Measurement time in seconds
public virtual double PulsesMaster { get; set; }
public virtual double ConstMaster { get; set; } /// [pls/l] Pulses per liter master flow meter
@ -27,13 +27,12 @@ namespace Results.Entities
public virtual double MassStart { get; set; } /// [kg]
public virtual double MassEndRaw { get; set; } /// [kg]
public virtual double MassEnd { get; set; } /// [kg]
public virtual double MassDiff { get; set; } /// [kg]
public virtual double DensityIn { get; set; } /// [kg/m3]
public virtual double DensityOut { get; set; } /// [kg/m3]
public virtual double DensityDiv { get; set; } /// [kg/m3]
public virtual double Buoyancy { get; set; }
public virtual double FlowMass { get; set; } /// [kg/h] calculated from conventional true value
public virtual double FlowCTV { get; set; } ///![m3/h] calculated from conventional true value
public virtual double FlowVolume { get; set; } ///![m3/h]
public virtual double VolumeCTV { get; set; } /// [l] Volume conventional true value
public virtual double VolumeMaster { get; set; } /// [l] Volume from the master flow meter
public virtual double ErrorMaster { get; set; } /// [%]
@ -80,11 +79,7 @@ namespace Results.Entities
public virtual float Custom8 { get; set; }
/// Wrappers
public virtual string Name()
{
if (TestData.Repeats == 1) { return TestData.Name; }
else { return string.Format("{0} ({1}/{2})", TestData.Name, RepetitionNr, TestData.Repeats); }
}
public virtual string Name() { return Utils.GetTestName(TestData.Name, TestData.Repeats, RepetitionNr); }
public virtual int Repeats() { return TestData.Repeats; }
public virtual double Qfrom() { return TestData.Qfrom; }
public virtual double Qto() { return TestData.Qto; }

View File

@ -9,7 +9,8 @@ namespace Results.Entities
public class WaterMeter
{
public virtual int Id { get; protected set; }
public virtual string SerialNr { get; set; } /// PCB Number for iPerl water meter
public virtual string SerialNr { get; set; } /// Main s/n for compound meters, PCB Number for iPerl water meter
public virtual string SerialNrEx { get; set; } /// Aux s/n for compound meters, Serial number for iPerl water meter
public virtual string PurchaseOrder { get; set; }
public virtual int WMPosition { get; set; }
public virtual string EndState { get; set; }
@ -18,7 +19,6 @@ namespace Results.Entities
public virtual int YearOfProduction { get; set; }
public virtual bool Passed { get; set; }
#if IPERLST
public virtual int SerialNrEx { get; set; } /// iPerl : This is the serial number assigned later
public virtual double OrigCalibFactor { get; set; } /// iPerl calibration factor used during the test - Not mapped to DB !!!
public virtual double CalibFactor { get; set; } /// iPerl calibration factor used during the test - Not mapped to DB !!!
public virtual bool Q2CorrectionDone { get; set; } /// true = iPerl Q2 correction was done

View File

@ -14,6 +14,7 @@ namespace Results.Mappings
Map(x => x.CompoundMeterId);
Map(x => x.PulsesMeter);
Map(x => x.PulsesMaster);
Map(x => x.PulsesPerLiter);
Map(x => x.VolumeStart);
Map(x => x.VolumeEnd);
Map(x => x.VolumeMeter);

View File

@ -27,13 +27,12 @@ namespace Results.Mappings
Map(x => x.MassStart);
Map(x => x.MassEndRaw);
Map(x => x.MassEnd);
Map(x => x.MassDiff);
Map(x => x.DensityIn);
Map(x => x.DensityOut);
Map(x => x.DensityDiv);
Map(x => x.Buoyancy);
Map(x => x.FlowMass);
Map(x => x.FlowCTV);
Map(x => x.FlowVolume);
Map(x => x.VolumeCTV);
Map(x => x.VolumeMaster);
Map(x => x.ErrorMaster);

View File

@ -12,6 +12,7 @@ namespace Results.Mappings
{
Id(x => x.Id);
Map(x => x.SerialNr);
Map(x => x.SerialNrEx);
Map(x => x.PurchaseOrder);
Map(x => x.WMPosition);
Map(x => x.EndState);
@ -20,7 +21,6 @@ namespace Results.Mappings
Map(x => x.YearOfProduction);
Map(x => x.Passed);
#if IPERLST
Map(x => x.SerialNrEx);
Map(x => x.OrigCalibFactor);
Map(x => x.CalibFactor);
Map(x =? x.Q2CorrectionDone);

View File

@ -73,6 +73,7 @@
<Compile Include="Mappings\WaterMeterDataMap.cs" />
<Compile Include="Mappings\WaterMeterMap.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Utils.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Config\Config.csproj">

14
Results/Utils.cs Normal file
View File

@ -0,0 +1,14 @@
using System;
using System.Text;
namespace Results
{
public static class Utils
{
public static string GetTestName(string name, int repeats, int repetitionNr)
{
if (repeats == 1) return name;
return string.Format("{0} ({1}/{2})", name, repetitionNr, repeats);
}
}
}

View File

@ -73,13 +73,13 @@ namespace TBF.BenchControl.DataEntry.Combined
radioButton2.Text = ProtocolName2;
radioButton3.Text = ProtocolName3;
qRise1TextBox.Text = Utils.FloatToStr(Sequences.SequenceBase.Qrise, 3);
qFall1TextBox.Text = Utils.FloatToStr(Sequences.SequenceBase.Qfall, 3);
qRise1TextBox.Text = Utils.DoubleToStr(Sequences.SequenceBase.Qrise, 3);
qFall1TextBox.Text = Utils.DoubleToStr(Sequences.SequenceBase.Qfall, 3);
if (Config.Data.CompoundWMsCount >= 2)
{
qRise2TextBox.Text = Utils.FloatToStr(Sequences.SequenceBase.Qrise, 3);
qFall2TextBox.Text = Utils.FloatToStr(Sequences.SequenceBase.Qfall, 3);
qRise2TextBox.Text = Utils.DoubleToStr(Sequences.SequenceBase.Qrise, 3);
qFall2TextBox.Text = Utils.DoubleToStr(Sequences.SequenceBase.Qfall, 3);
}
else
{
@ -89,8 +89,8 @@ namespace TBF.BenchControl.DataEntry.Combined
if (Config.Data.CompoundWMsCount >= 3)
{
qRise3TextBox.Text = Utils.FloatToStr(Sequences.SequenceBase.Qrise, 3);
qFall3TextBox.Text = Utils.FloatToStr(Sequences.SequenceBase.Qfall, 3);
qRise3TextBox.Text = Utils.DoubleToStr(Sequences.SequenceBase.Qrise, 3);
qFall3TextBox.Text = Utils.DoubleToStr(Sequences.SequenceBase.Qfall, 3);
}
else
{

View File

@ -43,9 +43,9 @@ namespace TBF.BenchControl.DataEntry.Combined
System.Windows.Forms.Form modelessDlg;
float refVolume;
float errLimLo;
float errLimHi;
double refVolume;
double errLimLo;
double errLimHi;
bool resultSaved;
@ -109,7 +109,7 @@ namespace TBF.BenchControl.DataEntry.Combined
}
/// <returns>Reference to the operation</returns>
public IOperation ShowTestEndFormOp(float refVolume, float errLimLo, float errLimHi)
public IOperation ShowTestEndFormOp(double refVolume, double errLimLo, double errLimHi)
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.EnterTestEndStates;

View File

@ -35,9 +35,9 @@ namespace TBF.BenchControl.DataEntry.Combined
public float[] AuxEndState;
bool endStates; /// false=start states, true=end states
float refVolume;
float warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
float warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi
double refVolume;
double warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
double warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi
int TextBoxesCount;
///
@ -103,7 +103,7 @@ namespace TBF.BenchControl.DataEntry.Combined
/// <param name="errLimLo">Error limit low, it is used to verify the end state, show/hide exclamation if necessary</param>
/// <param name="errLimHi">Error limit high, it is used to verify the end state, show/hide exclamation if necessary</param>
public TestStartEndForm(int waterMetersCount, string[] mainStartStateStr, string[] auxStartStateStr,
bool[] disabled, float refVolume, float errLimLo, float errLimHi)
bool[] disabled, double refVolume, double errLimLo, double errLimHi)
: this()
{
endStates = true;
@ -290,12 +290,12 @@ namespace TBF.BenchControl.DataEntry.Combined
/// </summary>
private void main1EndTextBox_TextChanged(object sender, EventArgs e)
{
//float err = 0;
//double err = 0;
//try
//{
// float endState = Utils.ParseUFloat(main1EndTextBox.Text);
// float startState = Utils.ParseUFloat(main1StartTextBox.Text);
// err = 100.0f * (endState - startState - refVolume) / refVolume;
// err = 100.0 * (endState - startState - refVolume) / refVolume;
//}
//catch { };
@ -304,12 +304,12 @@ namespace TBF.BenchControl.DataEntry.Combined
private void aux1EndTextBox_TextChanged(object sender, EventArgs e)
{
//float err = 0;
//double err = 0;
//try
//{
// float endState = Utils.ParseUFloat(aux1EndTextBox.Text);
// float startState = Utils.ParseUFloat(aux1StartTextBox.Text);
// err = 100.0f * (endState - startState - refVolume) / refVolume;
// err = 100.0 * (endState - startState - refVolume) / refVolume;
//}
//catch { err = 1000.0f; };
@ -318,12 +318,12 @@ namespace TBF.BenchControl.DataEntry.Combined
private void main2EndTextBox_TextChanged(object sender, EventArgs e)
{
//float err = 0;
//double err = 0;
//try
//{
// float endState = Utils.ParseUFloat(main2EndTextBox.Text);
// float startState = Utils.ParseUFloat(main2StartTextBox.Text);
// err = 100.0f * (endState - startState - refVolume) / refVolume;
// err = 100.0 * (endState - startState - refVolume) / refVolume;
//}
//catch { err = 1000.0f; };
@ -332,12 +332,12 @@ namespace TBF.BenchControl.DataEntry.Combined
private void aux2EndTextBox_TextChanged(object sender, EventArgs e)
{
//float err = 0;
//double err = 0;
//try
//{
// float endState = Utils.ParseUFloat(aux2EndTextBox.Text);
// float startState = Utils.ParseUFloat(aux2StartTextBox.Text);
// err = 100.0f * (endState - startState - refVolume) / refVolume;
// err = 100.0 * (endState - startState - refVolume) / refVolume;
//}
//catch { err = 1000.0f; };
@ -346,12 +346,12 @@ namespace TBF.BenchControl.DataEntry.Combined
private void main3EndTextBox_TextChanged(object sender, EventArgs e)
{
//float err = 0;
//double err = 0;
//try
//{
// float endState = Utils.ParseUFloat(main3EndTextBox.Text);
// float startState = Utils.ParseUFloat(main3StartTextBox.Text);
// err = 100.0f * (endState - startState - refVolume) / refVolume;
// err = 100.0 * (endState - startState - refVolume) / refVolume;
//}
//catch { err = 1000.0f; };
@ -360,12 +360,12 @@ namespace TBF.BenchControl.DataEntry.Combined
private void aux3EndTextBox_TextChanged(object sender, EventArgs e)
{
//float err = 0;
//double err = 0;
//try
//{
// float endState = Utils.ParseUFloat(aux3EndTextBox.Text);
// float startState = Utils.ParseUFloat(aux3StartTextBox.Text);
// err = 100.0f * (endState - startState - refVolume) / refVolume;
// err = 100.0 * (endState - startState - refVolume) / refVolume;
//}
//catch { err = 1000.0f; };

View File

@ -73,13 +73,13 @@ namespace TBF.BenchControl.DataEntry.Munich
radioButton2.Text = ProtocolName2;
radioButton3.Text = ProtocolName3;
qRise1TextBox.Text = Utils.FloatToStr(Sequences.SequenceBase.Qrise, 3);
qFall1TextBox.Text = Utils.FloatToStr(Sequences.SequenceBase.Qfall, 3);
qRise1TextBox.Text = Utils.DoubleToStr(Sequences.SequenceBase.Qrise, 3);
qFall1TextBox.Text = Utils.DoubleToStr(Sequences.SequenceBase.Qfall, 3);
if (Config.Data.CompoundWMsCount >= 2)
{
qRise2TextBox.Text = Utils.FloatToStr(Sequences.SequenceBase.Qrise, 3);
qFall2TextBox.Text = Utils.FloatToStr(Sequences.SequenceBase.Qfall, 3);
qRise2TextBox.Text = Utils.DoubleToStr(Sequences.SequenceBase.Qrise, 3);
qFall2TextBox.Text = Utils.DoubleToStr(Sequences.SequenceBase.Qfall, 3);
}
else
{
@ -89,8 +89,8 @@ namespace TBF.BenchControl.DataEntry.Munich
if (Config.Data.CompoundWMsCount >= 3)
{
qRise3TextBox.Text = Utils.FloatToStr(Sequences.SequenceBase.Qrise, 3);
qFall3TextBox.Text = Utils.FloatToStr(Sequences.SequenceBase.Qfall, 3);
qRise3TextBox.Text = Utils.DoubleToStr(Sequences.SequenceBase.Qrise, 3);
qFall3TextBox.Text = Utils.DoubleToStr(Sequences.SequenceBase.Qfall, 3);
}
else
{

View File

@ -43,9 +43,9 @@ namespace TBF.BenchControl.DataEntry.Standard
System.Windows.Forms.Form modelessDlg;
float refVolume;
float errLimLo;
float errLimHi;
double refVolume;
double errLimLo;
double errLimHi;
bool resultSaved; /// Set in Run() when results are saved
@ -109,7 +109,7 @@ namespace TBF.BenchControl.DataEntry.Standard
}
/// <returns>Reference to the operation</returns>
public IOperation ShowTestEndFormOp(float refVolume, float errLimLo, float errLimHi)
public IOperation ShowTestEndFormOp(double refVolume, double errLimLo, double errLimHi)
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.EnterTestEndStates;

View File

@ -31,9 +31,9 @@ namespace TBF.BenchControl.DataEntry.Standard
public float[] WMEndState;
bool endStates; /// false=start states, true=end states
float refVolume;
float warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
float warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi
double refVolume;
double warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
double warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi
/// <summary>
/// Constructor to fill in start states
@ -58,7 +58,7 @@ namespace TBF.BenchControl.DataEntry.Standard
/// </summary>
/// <param name="waterMetersCount">Number of text boxes for serial numbers</param>
public TestStartEndForm(int waterMetersCount, string[] wmStartStateStr, bool[] disabled,
float refVolume, float errLimLo, float errLimHi)
double refVolume, double errLimLo, double errLimHi)
{
endStates = true;
@ -219,12 +219,12 @@ namespace TBF.BenchControl.DataEntry.Standard
private void wmEndStateTextBox1_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(wmEndStateTextBox1.Text);
float startState = Utils.ParseUFloat(wmStartStateTextBox1.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { };
@ -233,12 +233,12 @@ namespace TBF.BenchControl.DataEntry.Standard
private void wmEndStateTextBox2_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(wmEndStateTextBox2.Text);
float startState = Utils.ParseUFloat(wmStartStateTextBox2.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
@ -247,12 +247,12 @@ namespace TBF.BenchControl.DataEntry.Standard
private void wmEndStateTextBox3_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(wmEndStateTextBox3.Text);
float startState = Utils.ParseUFloat(wmStartStateTextBox3.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
@ -261,12 +261,12 @@ namespace TBF.BenchControl.DataEntry.Standard
private void wmEndStateTextBox4_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(wmEndStateTextBox4.Text);
float startState = Utils.ParseUFloat(wmStartStateTextBox4.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
@ -275,12 +275,12 @@ namespace TBF.BenchControl.DataEntry.Standard
private void wmEndStateTextBox5_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(wmEndStateTextBox5.Text);
float startState = Utils.ParseUFloat(wmStartStateTextBox5.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
@ -289,12 +289,12 @@ namespace TBF.BenchControl.DataEntry.Standard
private void wmEndStateTextBox6_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(wmEndStateTextBox6.Text);
float startState = Utils.ParseUFloat(wmStartStateTextBox6.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };

View File

@ -43,9 +43,9 @@ namespace TBF.BenchControl.DataEntry.Standard12
System.Windows.Forms.Form modelessDlg;
float refVolume;
float errLimLo;
float errLimHi;
double refVolume;
double errLimLo;
double errLimHi;
bool resultSaved; /// Set in Run() when results are saved
@ -109,7 +109,7 @@ namespace TBF.BenchControl.DataEntry.Standard12
}
/// <returns>Reference to the operation</returns>
public IOperation ShowTestEndFormOp(float refVolume, float errLimLo, float errLimHi)
public IOperation ShowTestEndFormOp(double refVolume, double errLimLo, double errLimHi)
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.EnterTestEndStates;

View File

@ -32,9 +32,9 @@ namespace TBF.BenchControl.DataEntry.Standard12
public float[] WMEndState;
bool endStates; /// false=start states, true=end states
float refVolume;
float warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
float warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi
double refVolume;
double warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
double warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi
int TextBoxesCount;
///
@ -102,7 +102,7 @@ namespace TBF.BenchControl.DataEntry.Standard12
/// <param name="errLimLo">Error limit low, it is used to verify the end state, show/hide exclamation if necessary</param>
/// <param name="errLimHi">Error limit high, it is used to verify the end state, show/hide exclamation if necessary</param>
public TestStartEndForm(int waterMetersCount, string[] wmStartStateStr, bool[] disabled,
float refVolume, float errLimLo, float errLimHi)
double refVolume, double errLimLo, double errLimHi)
: this()
{
endStates = true;
@ -272,108 +272,108 @@ namespace TBF.BenchControl.DataEntry.Standard12
/// </summary>
private void endTextBox1_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox1.Text);
float startState = Utils.ParseUFloat(startTextBox1.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { };
exclamation1.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox2_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox2.Text);
float startState = Utils.ParseUFloat(startTextBox2.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation2.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox3_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox3.Text);
float startState = Utils.ParseUFloat(startTextBox3.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation3.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox4_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox4.Text);
float startState = Utils.ParseUFloat(startTextBox4.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation4.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox5_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox5.Text);
float startState = Utils.ParseUFloat(startTextBox5.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation5.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox6_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox6.Text);
float startState = Utils.ParseUFloat(startTextBox6.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation6.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox7_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox7.Text);
float startState = Utils.ParseUFloat(startTextBox7.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation7.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox8_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox8.Text);
float startState = Utils.ParseUFloat(startTextBox8.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation8.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox9_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox9.Text);
float startState = Utils.ParseUFloat(startTextBox9.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation9.Visible = (err < warningLimLo) || (warningLimHi < err);
@ -381,12 +381,12 @@ namespace TBF.BenchControl.DataEntry.Standard12
private void endTextBox10_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox10.Text);
float startState = Utils.ParseUFloat(startTextBox10.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation10.Visible = (err < warningLimLo) || (warningLimHi < err);
@ -394,24 +394,24 @@ namespace TBF.BenchControl.DataEntry.Standard12
private void endTextBox11_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox11.Text);
float startState = Utils.ParseUFloat(startTextBox11.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation11.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox12_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox12.Text);
float startState = Utils.ParseUFloat(startTextBox12.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation12.Visible = (err < warningLimLo) || (warningLimHi < err);

View File

@ -32,9 +32,9 @@ namespace TBF.BenchControl.DataEntry.Standard24
public float[] WMEndState;
bool endStates; /// false=start states, true=end states
float refVolume;
float warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
float warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi
double refVolume;
double warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
double warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi
int TextBoxesCount;
///
@ -123,7 +123,7 @@ namespace TBF.BenchControl.DataEntry.Standard24
/// <param name="errLimLo">Error limit low, it is used to verify the end state, show/hide exclamation if necessary</param>
/// <param name="errLimHi">Error limit high, it is used to verify the end state, show/hide exclamation if necessary</param>
public AdvancedFixedStartTestForm(int waterMetersCount, string[] wmStartStateStr, bool[] disabled,
float refVolume, float errLimLo, float errLimHi)
double refVolume, double errLimLo, double errLimHi)
: this()
{
endStates = true;
@ -295,108 +295,108 @@ namespace TBF.BenchControl.DataEntry.Standard24
/// </summary>
private void endTextBox1_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox1.Text);
float startState = Utils.ParseUFloat(startTextBox1.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { };
exclamation1.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox2_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox2.Text);
float startState = Utils.ParseUFloat(startTextBox2.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation2.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox3_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox3.Text);
float startState = Utils.ParseUFloat(startTextBox3.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation3.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox4_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox4.Text);
float startState = Utils.ParseUFloat(startTextBox4.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation4.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox5_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox5.Text);
float startState = Utils.ParseUFloat(startTextBox5.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation5.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox6_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox6.Text);
float startState = Utils.ParseUFloat(startTextBox6.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation6.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox7_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox7.Text);
float startState = Utils.ParseUFloat(startTextBox7.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation7.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox8_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox8.Text);
float startState = Utils.ParseUFloat(startTextBox8.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation8.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox9_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox9.Text);
float startState = Utils.ParseUFloat(startTextBox9.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation9.Visible = (err < warningLimLo) || (warningLimHi < err);
@ -404,12 +404,12 @@ namespace TBF.BenchControl.DataEntry.Standard24
private void endTextBox10_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox10.Text);
float startState = Utils.ParseUFloat(startTextBox10.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation10.Visible = (err < warningLimLo) || (warningLimHi < err);
@ -417,168 +417,168 @@ namespace TBF.BenchControl.DataEntry.Standard24
private void endTextBox11_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox11.Text);
float startState = Utils.ParseUFloat(startTextBox11.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation11.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox12_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox12.Text);
float startState = Utils.ParseUFloat(startTextBox12.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation12.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox13_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox13.Text);
float startState = Utils.ParseUFloat(startTextBox13.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation13.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox14_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox14.Text);
float startState = Utils.ParseUFloat(startTextBox14.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation14.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox15_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox15.Text);
float startState = Utils.ParseUFloat(startTextBox15.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation15.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox16_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox16.Text);
float startState = Utils.ParseUFloat(startTextBox16.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation16.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox17_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox17.Text);
float startState = Utils.ParseUFloat(startTextBox17.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation17.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox18_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox18.Text);
float startState = Utils.ParseUFloat(startTextBox18.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation18.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox19_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox19.Text);
float startState = Utils.ParseUFloat(startTextBox19.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation19.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox20_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox20.Text);
float startState = Utils.ParseUFloat(startTextBox20.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation20.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox21_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox21.Text);
float startState = Utils.ParseUFloat(startTextBox21.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation21.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox22_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox22.Text);
float startState = Utils.ParseUFloat(startTextBox22.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation22.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox23_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox23.Text);
float startState = Utils.ParseUFloat(startTextBox23.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation23.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox24_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox24.Text);
float startState = Utils.ParseUFloat(startTextBox24.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation24.Visible = (err < warningLimLo) || (warningLimHi < err);

View File

@ -43,9 +43,9 @@ namespace TBF.BenchControl.DataEntry.Standard24
System.Windows.Forms.Form modelessDlg;
float refVolume;
float errLimLo;
float errLimHi;
double refVolume;
double errLimLo;
double errLimHi;
bool resultSaved; /// Set in Run() when results are saved
@ -109,7 +109,7 @@ namespace TBF.BenchControl.DataEntry.Standard24
}
/// <returns>Reference to the operation</returns>
public IOperation ShowTestEndFormOp(float refVolume, float errLimLo, float errLimHi)
public IOperation ShowTestEndFormOp(double refVolume, double errLimLo, double errLimHi)
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.EnterTestEndStates;

View File

@ -32,9 +32,9 @@ namespace TBF.BenchControl.DataEntry.Standard24
public float[] WMEndState;
bool endStates; /// false=start states, true=end states
float refVolume;
float warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
float warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi
double refVolume;
double warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
double warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi
int TextBoxesCount;
///
@ -107,7 +107,7 @@ namespace TBF.BenchControl.DataEntry.Standard24
/// <param name="errLimLo">Error limit low, it is used to verify the end state, show/hide exclamation if necessary</param>
/// <param name="errLimHi">Error limit high, it is used to verify the end state, show/hide exclamation if necessary</param>
public TestStartEndForm(int waterMetersCount, string[] wmStartStateStr, bool[] disabled,
float refVolume, float errLimLo, float errLimHi)
double refVolume, double errLimLo, double errLimHi)
: this()
{
endStates = true;
@ -277,108 +277,108 @@ namespace TBF.BenchControl.DataEntry.Standard24
/// </summary>
private void endTextBox1_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox1.Text);
float startState = Utils.ParseUFloat(startTextBox1.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { };
exclamation1.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox2_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox2.Text);
float startState = Utils.ParseUFloat(startTextBox2.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation2.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox3_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox3.Text);
float startState = Utils.ParseUFloat(startTextBox3.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation3.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox4_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox4.Text);
float startState = Utils.ParseUFloat(startTextBox4.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation4.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox5_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox5.Text);
float startState = Utils.ParseUFloat(startTextBox5.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation5.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox6_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox6.Text);
float startState = Utils.ParseUFloat(startTextBox6.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation6.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox7_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox7.Text);
float startState = Utils.ParseUFloat(startTextBox7.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation7.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox8_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox8.Text);
float startState = Utils.ParseUFloat(startTextBox8.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation8.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox9_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox9.Text);
float startState = Utils.ParseUFloat(startTextBox9.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation9.Visible = (err < warningLimLo) || (warningLimHi < err);
@ -386,12 +386,12 @@ namespace TBF.BenchControl.DataEntry.Standard24
private void endTextBox10_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox10.Text);
float startState = Utils.ParseUFloat(startTextBox10.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation10.Visible = (err < warningLimLo) || (warningLimHi < err);
@ -399,168 +399,168 @@ namespace TBF.BenchControl.DataEntry.Standard24
private void endTextBox11_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox11.Text);
float startState = Utils.ParseUFloat(startTextBox11.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation11.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox12_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox12.Text);
float startState = Utils.ParseUFloat(startTextBox12.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation12.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox13_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox13.Text);
float startState = Utils.ParseUFloat(startTextBox13.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation13.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox14_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox14.Text);
float startState = Utils.ParseUFloat(startTextBox14.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation14.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox15_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox15.Text);
float startState = Utils.ParseUFloat(startTextBox15.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation15.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox16_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox16.Text);
float startState = Utils.ParseUFloat(startTextBox16.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation16.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox17_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox17.Text);
float startState = Utils.ParseUFloat(startTextBox17.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation17.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox18_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox18.Text);
float startState = Utils.ParseUFloat(startTextBox18.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation18.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox19_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox19.Text);
float startState = Utils.ParseUFloat(startTextBox19.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation19.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox20_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox20.Text);
float startState = Utils.ParseUFloat(startTextBox20.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation20.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox21_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox21.Text);
float startState = Utils.ParseUFloat(startTextBox21.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation21.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox22_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox22.Text);
float startState = Utils.ParseUFloat(startTextBox22.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation22.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox23_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox23.Text);
float startState = Utils.ParseUFloat(startTextBox23.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation23.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox24_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox24.Text);
float startState = Utils.ParseUFloat(startTextBox24.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation24.Visible = (err < warningLimLo) || (warningLimHi < err);

View File

@ -43,9 +43,9 @@ namespace TBF.BenchControl.DataEntry.Standard48
System.Windows.Forms.Form modelessDlg;
float refVolume;
float errLimLo;
float errLimHi;
double refVolume;
double errLimLo;
double errLimHi;
bool resultSaved; /// Set in Run() when results are saved
@ -109,7 +109,7 @@ namespace TBF.BenchControl.DataEntry.Standard48
}
/// <returns>Reference to the operation</returns>
public IOperation ShowTestEndFormOp(float refVolume, float errLimLo, float errLimHi)
public IOperation ShowTestEndFormOp(double refVolume, double errLimLo, double errLimHi)
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.EnterTestEndStates;

View File

@ -32,9 +32,9 @@ namespace TBF.BenchControl.DataEntry.Standard48
public float[] WMEndState;
bool endStates; /// false=start states, true=end states
float refVolume;
float warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
float warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi
double refVolume;
double warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
double warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi
int TextBoxesCount;
///
@ -107,7 +107,7 @@ namespace TBF.BenchControl.DataEntry.Standard48
/// <param name="errLimLo">Error limit low, it is used to verify the end state, show/hide exclamation if necessary</param>
/// <param name="errLimHi">Error limit high, it is used to verify the end state, show/hide exclamation if necessary</param>
public TestStartEndForm(int waterMetersCount, string[] wmStartStateStr, bool[] disabled,
float refVolume, float errLimLo, float errLimHi)
double refVolume, double errLimLo, double errLimHi)
: this()
{
endStates = true;
@ -277,108 +277,108 @@ namespace TBF.BenchControl.DataEntry.Standard48
/// </summary>
private void endTextBox1_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox1.Text);
float startState = Utils.ParseUFloat(startTextBox1.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { };
exclamation1.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox2_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox2.Text);
float startState = Utils.ParseUFloat(startTextBox2.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation2.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox3_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox3.Text);
float startState = Utils.ParseUFloat(startTextBox3.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation3.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox4_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox4.Text);
float startState = Utils.ParseUFloat(startTextBox4.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation4.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox5_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox5.Text);
float startState = Utils.ParseUFloat(startTextBox5.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation5.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox6_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox6.Text);
float startState = Utils.ParseUFloat(startTextBox6.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation6.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox7_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox7.Text);
float startState = Utils.ParseUFloat(startTextBox7.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation7.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox8_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox8.Text);
float startState = Utils.ParseUFloat(startTextBox8.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation8.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox9_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox9.Text);
float startState = Utils.ParseUFloat(startTextBox9.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation9.Visible = (err < warningLimLo) || (warningLimHi < err);
@ -386,12 +386,12 @@ namespace TBF.BenchControl.DataEntry.Standard48
private void endTextBox10_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox10.Text);
float startState = Utils.ParseUFloat(startTextBox10.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation10.Visible = (err < warningLimLo) || (warningLimHi < err);
@ -399,168 +399,168 @@ namespace TBF.BenchControl.DataEntry.Standard48
private void endTextBox11_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox11.Text);
float startState = Utils.ParseUFloat(startTextBox11.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation11.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox12_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox12.Text);
float startState = Utils.ParseUFloat(startTextBox12.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation12.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox13_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox13.Text);
float startState = Utils.ParseUFloat(startTextBox13.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation13.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox14_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox14.Text);
float startState = Utils.ParseUFloat(startTextBox14.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation14.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox15_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox15.Text);
float startState = Utils.ParseUFloat(startTextBox15.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation15.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox16_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox16.Text);
float startState = Utils.ParseUFloat(startTextBox16.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation16.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox17_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox17.Text);
float startState = Utils.ParseUFloat(startTextBox17.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation17.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox18_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox18.Text);
float startState = Utils.ParseUFloat(startTextBox18.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation18.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox19_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox19.Text);
float startState = Utils.ParseUFloat(startTextBox19.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation19.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox20_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox20.Text);
float startState = Utils.ParseUFloat(startTextBox20.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation20.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox21_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox21.Text);
float startState = Utils.ParseUFloat(startTextBox21.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation21.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox22_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox22.Text);
float startState = Utils.ParseUFloat(startTextBox22.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation22.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox23_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox23.Text);
float startState = Utils.ParseUFloat(startTextBox23.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation23.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox24_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox24.Text);
float startState = Utils.ParseUFloat(startTextBox24.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation24.Visible = (err < warningLimLo) || (warningLimHi < err);

View File

@ -111,7 +111,7 @@ namespace TBF.BenchControl.DataEntry.WMStates
}
/// <returns>Reference to the operation</returns>
public IOperation ShowTestEndFormOp(float refVolume, float errLimLo, float errLimHi)
public IOperation ShowTestEndFormOp(double refVolume, double errLimLo, double errLimHi)
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.EnterTestEndStates;

View File

@ -43,9 +43,9 @@ namespace TBF.BenchControl.DataEntry.iPerl
System.Windows.Forms.Form modelessDlg;
float refVolume;
float errLimLo;
float errLimHi;
double refVolume;
double errLimLo;
double errLimHi;
bool resultSaved; /// Set in Run() when results are saved
@ -109,7 +109,7 @@ namespace TBF.BenchControl.DataEntry.iPerl
}
/// <returns>Reference to the operation</returns>
public IOperation ShowTestEndFormOp(float refVolume, float errLimLo, float errLimHi)
public IOperation ShowTestEndFormOp(double refVolume, double errLimLo, double errLimHi)
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.EnterTestEndStates;

View File

@ -32,9 +32,9 @@ namespace TBF.BenchControl.DataEntry.iPerl
public float[] WMEndState;
bool endStates; /// false=start states, true=end states
float refVolume;
float warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
float warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi
double refVolume;
double warningLimLo; /// limit to display exclamation mark, typically 2x errLimLo
double warningLimHi; /// limit to display exclamation mark, typically 2x errLimHi
int TextBoxesCount;
///
@ -107,7 +107,7 @@ namespace TBF.BenchControl.DataEntry.iPerl
/// <param name="errLimLo">Error limit low, it is used to verify the end state, show/hide exclamation if necessary</param>
/// <param name="errLimHi">Error limit high, it is used to verify the end state, show/hide exclamation if necessary</param>
public TestStartEndForm(int waterMetersCount, string[] wmStartStateStr, bool[] disabled,
float refVolume, float errLimLo, float errLimHi)
double refVolume, double errLimLo, double errLimHi)
: this()
{
endStates = true;
@ -277,108 +277,108 @@ namespace TBF.BenchControl.DataEntry.iPerl
/// </summary>
private void endTextBox1_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox1.Text);
float startState = Utils.ParseUFloat(startTextBox1.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { };
exclamation1.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox2_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox2.Text);
float startState = Utils.ParseUFloat(startTextBox2.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation2.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox3_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox3.Text);
float startState = Utils.ParseUFloat(startTextBox3.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation3.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox4_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox4.Text);
float startState = Utils.ParseUFloat(startTextBox4.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation4.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox5_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox5.Text);
float startState = Utils.ParseUFloat(startTextBox5.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation5.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox6_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox6.Text);
float startState = Utils.ParseUFloat(startTextBox6.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation6.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox7_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox7.Text);
float startState = Utils.ParseUFloat(startTextBox7.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation7.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox8_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox8.Text);
float startState = Utils.ParseUFloat(startTextBox8.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation8.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox9_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox9.Text);
float startState = Utils.ParseUFloat(startTextBox9.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation9.Visible = (err < warningLimLo) || (warningLimHi < err);
@ -386,12 +386,12 @@ namespace TBF.BenchControl.DataEntry.iPerl
private void endTextBox10_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox10.Text);
float startState = Utils.ParseUFloat(startTextBox10.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation10.Visible = (err < warningLimLo) || (warningLimHi < err);
@ -399,168 +399,168 @@ namespace TBF.BenchControl.DataEntry.iPerl
private void endTextBox11_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox11.Text);
float startState = Utils.ParseUFloat(startTextBox11.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation11.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox12_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox12.Text);
float startState = Utils.ParseUFloat(startTextBox12.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation12.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox13_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox13.Text);
float startState = Utils.ParseUFloat(startTextBox13.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation13.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox14_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox14.Text);
float startState = Utils.ParseUFloat(startTextBox14.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation14.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox15_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox15.Text);
float startState = Utils.ParseUFloat(startTextBox15.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation15.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox16_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox16.Text);
float startState = Utils.ParseUFloat(startTextBox16.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation16.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox17_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox17.Text);
float startState = Utils.ParseUFloat(startTextBox17.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation17.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox18_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox18.Text);
float startState = Utils.ParseUFloat(startTextBox18.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation18.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox19_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox19.Text);
float startState = Utils.ParseUFloat(startTextBox19.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation19.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox20_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox20.Text);
float startState = Utils.ParseUFloat(startTextBox20.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation20.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox21_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox21.Text);
float startState = Utils.ParseUFloat(startTextBox21.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation21.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox22_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox22.Text);
float startState = Utils.ParseUFloat(startTextBox22.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation22.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox23_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox23.Text);
float startState = Utils.ParseUFloat(startTextBox23.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation23.Visible = (err < warningLimLo) || (warningLimHi < err);
}
private void endTextBox24_TextChanged(object sender, EventArgs e)
{
float err = 0;
double err = 0;
try
{
float endState = Utils.ParseUFloat(endTextBox24.Text);
float startState = Utils.ParseUFloat(startTextBox24.Text);
err = 100.0f * (endState - startState - refVolume) / refVolume;
err = 100.0 * (endState - startState - refVolume) / refVolume;
}
catch { err = 1000.0f; };
exclamation24.Visible = (err < warningLimLo) || (warningLimHi < err);

View File

@ -23,13 +23,13 @@ namespace TBF.BenchControl.Elde.FlowMeter
public float LtrPerPulse { get { return flowMeterCfg.NominalFlow / 7200.0f; } }
public float LtrPerPulseCorrected(float flow)
public float LtrPerPulseCorrected(double flow)
{
if (flow < 0.1f * NominalFlow) return LtrPerPulse; /// No correction for small flow
if (flow < 0.1 * NominalFlow) return LtrPerPulse; /// No correction for small flow
/// Apply correction
float correctedFlow = BenchControl.Formulas.CorrectedValue(flow, Corrections);
return LtrPerPulse * correctedFlow / flow;
double correctedFlow = BenchControl.Formulas.CorrectedValue(flow, Corrections);
return (float)(LtrPerPulse * correctedFlow / flow);
}

View File

@ -27,9 +27,9 @@ namespace TBF.BenchControl.Elde.FlowMeterTwins
public float LtrPerPulse { get { return flowMeterCfg.NominalFlow / 14400.0f; } }
/// Calculates the average of values of two flowmeters. Assumes the flow is divided evenly.
public float LtrPerPulseCorrected(float flow)
public float LtrPerPulseCorrected(double flow)
{
float flow2 = flow / 2;
double flow2 = flow / 2.0;
return (FlowMeter1.LtrPerPulseCorrected(flow2) + FlowMeter2.LtrPerPulseCorrected(flow2)) / 2;
}

View File

@ -13,7 +13,7 @@ namespace TBF.BenchControl
/// </summary>
/// <param name="t">Temperature in [degC]</param>
/// <returns>Density in [kg/m3]</returns>
public static float DistilledWaterDensityFromTemp(float t)
public static double DistilledWaterDensityFromTemp(float t)
{
double tt = (double)t;
const double a0 = 999.842594;
@ -23,7 +23,7 @@ namespace TBF.BenchControl
const double a4 = -0.000001120083;
const double a5 = 6.536332e-09;
return (float)(((((a5 * tt + a4) * tt + a3) * tt + a2) * tt + a1) * tt + a0);
return ((((a5 * tt + a4) * tt + a3) * tt + a2) * tt + a1) * tt + a0;
}
/// <summary>
@ -31,12 +31,12 @@ namespace TBF.BenchControl
/// </summary>
/// <param name="t">Temperature in [degC]</param>
/// <returns>Density in [kg/m3]</returns>
public static float WaterDensityFromTemp(float t)
public static double WaterDensityFromTemp(float t)
{
float realDensity = Program.LocalSettings.RealDensity;
double realDensity = Program.LocalSettings.RealDensity;
float atTemperature = Program.LocalSettings.AtTemperature;
float c_rho = realDensity / DistilledWaterDensityFromTemp(atTemperature);
double c_rho = realDensity / DistilledWaterDensityFromTemp(atTemperature);
return c_rho * DistilledWaterDensityFromTemp(t);
}
@ -58,23 +58,23 @@ namespace TBF.BenchControl
/// <summary>
/// Convert 'pulses' to 'volume', prevent division by zero
/// </summary>
public static float VolumeFromPulses(int pulses, float pulsesPerLiter)
public static double VolumeFromPulses(int pulses, double pulsesPerLiter)
{
if (pulsesPerLiter <= float.Epsilon) return 0;
return Convert.ToSingle(pulses) / pulsesPerLiter;
if (pulsesPerLiter <= double.Epsilon) return 0;
return Convert.ToDouble(pulses) / pulsesPerLiter;
}
/// <summary>
/// Calculate the error in % from 'measured' and 'true' volume, prevent division by zero
/// </summary>
public static float ErrorFromVolumes(float measuredVolume, float trueVolume)
public static double ErrorFromVolumes(double measuredVolume, double trueVolume)
{
if (trueVolume <= float.Epsilon)
{
if (measuredVolume <= float.Epsilon) return 0;
return 100.0f;
return 99.0;
}
return 100.0f * (measuredVolume - trueVolume) / trueVolume;
return 100.0 * (measuredVolume - trueVolume) / trueVolume;
}
/// <summary>
@ -115,7 +115,7 @@ namespace TBF.BenchControl
/// <param name="rawMeasurement">Raw uncorrected value</param>
/// <param name="corrections">Sorted (value, correction) pairs</param>
/// <returns>Corrected value</returns>
public static float CorrectedValue(float rawValue, IList<Config.Entities.MeasurementCorrection> corrections)
public static double CorrectedValue(double rawValue, IList<Config.Entities.MeasurementCorrection> corrections)
{
if (corrections == null || corrections.Count == 0) return rawValue;
@ -129,13 +129,13 @@ namespace TBF.BenchControl
{
if (rawValue < corrections[i].Measurement)
{
float d1 = rawValue - corrections[i-1].Measurement;
float d2 = corrections[i].Measurement - rawValue;
double d1 = rawValue - corrections[i-1].Measurement;
double d2 = corrections[i].Measurement - rawValue;
float corr;
double corr;
if (d1 + d2 <= float.Epsilon)
{
corr = (corrections[i - 1].Correction + corrections[i].Correction) / 2.0f;
corr = (corrections[i - 1].Correction + corrections[i].Correction) / 2.0;
}
else
{

View File

@ -27,7 +27,7 @@ namespace TBF.BenchControl.GenericDevices
/// Corrected volume per flowmeter pulse in [l].
/// </summary>
/// <param name="flow">Water flow in [m3/h]</param>
float LtrPerPulseCorrected(float flow);
float LtrPerPulseCorrected(double flow);
/// <summary>
/// 1 based index of the reference flowmeter

View File

@ -25,6 +25,6 @@ namespace TBF.BenchControl.GenericDevices
/// Displays form at the end of the test to enter water meter start start.
/// </summary>
/// <returns>Operation to be used in the sequence</returns>
IOperation ShowTestEndFormOp(float volumeRef, float errLimLo, float errLimHi);
IOperation ShowTestEndFormOp(double volumeRef, double errLimLo, double errLimHi);
}
}

View File

@ -0,0 +1,63 @@
using System;
namespace TBF.BenchControl.Sequences
{
public class FloatStatistics
{
float first;
float last;
float min;
float max;
float sum;
UInt32 count;
public float First { get { return first; } }
public float Last { get { return last; } }
public float Min { get { return min; } }
public float Max { get { return max; } }
public float Average { get { if (Count > 0) return sum / (float)count; else return 0; } }
public UInt32 Count { get { return count; } }
public FloatStatistics()
{
Clear();
}
/// <summary>
/// Resets statistics
/// </summary>
public void Clear()
{
sum = 0;
min = float.MaxValue;
max = float.MinValue;
first = 0;
last = 0;
count = 0;
}
/// <summary>
/// Updates statistics
/// </summary>
/// <param name="value">New value</param>
public void Update(float value)
{
if (count == 0) first = value;
last = value;
sum += value;
if (value < min) min = value;
if (value > max) max = value;
count++;
}
/// <summary>
/// Updates statistics
/// </summary>
/// <param name="value">New boxed value</param>
public void Update(TBF.Boxes.FloatBox box)
{
Update(box.Val);
}
}
}

View File

@ -24,9 +24,9 @@ namespace TBF.BenchControl.Sequences
System.Windows.Forms.Form modelessDlg;
///
delegate void iPerlCommFormDlgt(MainSeq myRef, Generic.IComponentCfg cfg, IList<Generic.ITestParams> multiTestParams);
delegate void iPerlCommFormDlgt(MainSeq myRef, Generic.IComponentCfg cfg, IList<string> testNames, IList<Generic.ITestParams> multiTestParams);
///
void OpenIPerlCommForm(MainSeq myRef, Generic.IComponentCfg cfg, IList<Generic.ITestParams> multiTestParams)
void OpenIPerlCommForm(MainSeq myRef, Generic.IComponentCfg cfg, IList<string> testNames, IList<Generic.ITestParams> multiTestParams)
{
try
{
@ -40,11 +40,13 @@ namespace TBF.BenchControl.Sequences
/// 2nd argument
TestMethods.iPerlCommunication.TestMethodCfg iPerlCfg = cfg as TestMethods.iPerlCommunication.TestMethodCfg;
/// 3rd argument
/// 3rd argument: as is
/// 4th argument
IList<TestMethods.iPerlCommunication.iPerlCommunicationParams> iPerlCommParams = new List<TestMethods.iPerlCommunication.iPerlCommunicationParams>();
foreach (var tp in multiTestParams) iPerlCommParams.Add(tp as TestMethods.iPerlCommunication.iPerlCommunicationParams);
myRef.modelessDlg = new TestMethods.iPerlCommunication.iPerlCommunicationForm(wMtrs, iPerlCfg, iPerlCommParams);
myRef.modelessDlg = new TestMethods.iPerlCommunication.iPerlCommunicationForm(wMtrs, iPerlCfg, testNames, iPerlCommParams);
myRef.modelessDlg.Show();
}
catch (Exception e)
@ -259,7 +261,6 @@ namespace TBF.BenchControl.Sequences
StateMachine.CycleStartTimeStamp = BatchRslts.Batch.StartTime;
foreach (var wm in WaterMeters) wm.ClearData(); /// Clean water meter data
ResetResults();
StateMachine.LoadProcedureParams(StateMachine.Procedure);
Bridge.OnProcedureSelected(this, new ProcedureSelectedEventArgs(StateMachine.Procedure));
@ -582,7 +583,7 @@ namespace TBF.BenchControl.Sequences
}
}
if (ResultsAreComplete(StateMachine.Tests))
if (BatchRslts.AllTestsDone())
{
Bridge.Bench2UI(ButtonsEtc.AcceptResultsBtnEn | ButtonsEtc.ResetResultsBtnEn);
}
@ -661,18 +662,19 @@ namespace TBF.BenchControl.Sequences
}
while (e.Contains(Event.Busy));
///
/// Save to database and to 'summary results' logger
///
IList<TestResult> sortedResults = Utils.GetSortedTestResults(StateMachine.Procedure, results, 0);
foreach (var rslt in sortedResults)
{
if (rslt != null)
{
Config.FluentCommon.SaveToDb(StateMachine.WtSession, rslt);
summaryResults.Info(TestResult2CsvLine(rslt));
}
}
/// TODO: Reimplement !!!!!!!!!!!
/////
///// Save to database and to 'summary results' logger
/////
//IList<TestResult> sortedResults = Utils.GetSortedTestResults(StateMachine.Procedure, results, 0);
//foreach (var rslt in sortedResults)
//{
// if (rslt != null)
// {
// Config.FluentCommon.SaveToDb(StateMachine.WtSession, rslt);
// summaryResults.Info(TestResult2CsvLine(rslt));
// }
//}
Program.LocalSettings.BatchNr++;

View File

@ -1,4 +1,5 @@
using TBF.BenchControl.GenericDevices;
using System;
using TBF.BenchControl.GenericDevices;
using TBF.Boxes;
namespace TBF.BenchControl.Sequences
@ -10,18 +11,61 @@ namespace TBF.BenchControl.Sequences
public static FloatBox AmbientTemp = new FloatBox() { Name = "Ambient Temperature", Format = "F1" }; /// [Celsius]
public static FloatBox AmbientPressure = new FloatBox() { Name = "Ambient Pressure", Format = "F1" };
public static FloatBox AmbientHumidity = new FloatBox() { Name = "Ambient Humidity", Format = "F1" }; /// [%]
public static FloatBox TempIn = new FloatBox() { Name = "Temperature In", Format = "F2" }; /// [Celsius]
public static FloatBox TempOut = new FloatBox() { Name = "Temperature Out", Format = "F2" }; /// [Celsius]
public static FloatBox TempDiv = new FloatBox() { Name = "Temperature Div", Format = "F2" }; /// [Celsius]
public static FloatBox PressureUp = new FloatBox() { Name = "Pressure In", Format = "F3", Factor = 0.01f };
public static FloatBox PressureDown = new FloatBox() { Name = "Pressure Out", Format = "F3", Factor = 0.01f };
public static IntBox RefCount = new IntBox() { Name = "RefCount" };
public static FloatBox RefFreq = new FloatBox() { Name = "RefFreq", Format = "F2" };
public static FloatBox RefFlow = new FloatBox() { Name = "RefFlow", Format = "F2" }; /// [m3/h]
public static FloatBox Mass = new FloatBox() { Name = "Mass", Format = "F3" }; /// [kg]
public static DateTime TestStartTime;
public static DateTime TestEndTime;
public static double StartMassRaw; /// [kg]
public static double CurrentMassRaw; /// [kg]
public static double EndMassRaw; /// [kg]
public static Results.BatchResults BatchRslts;
///
/// Statistics
///
public static FloatStatistics AmbientTempStat = new FloatStatistics();
public static FloatStatistics AmbientPressureStat = new FloatStatistics();
public static FloatStatistics AmbientHumidityStat = new FloatStatistics();
public static FloatStatistics TempInStat = new FloatStatistics();
public static FloatStatistics TempOutStat = new FloatStatistics();
public static FloatStatistics TempDivStat = new FloatStatistics();
public static FloatStatistics PressureUpStat = new FloatStatistics();
public static FloatStatistics PressureDownStat = new FloatStatistics();
protected static void ClearAllStatistics()
{
AmbientTempStat.Clear();
AmbientPressureStat.Clear();
AmbientHumidityStat.Clear();
TempInStat.Clear();
TempOutStat.Clear();
TempDivStat.Clear();
PressureUpStat.Clear();
PressureDownStat.Clear();
}
protected static void UpdateAllStatistics()
{
AmbientTempStat.Update(AmbientTemp);
AmbientPressureStat.Update(AmbientPressure);
AmbientHumidityStat.Update(AmbientHumidity);
TempInStat.Update(TempIn);
TempOutStat.Update(TempOut);
TempDivStat.Update(TempDiv);
PressureUpStat.Update(PressureUp);
PressureDownStat.Update(PressureDown);
}
}
}

View File

@ -38,68 +38,11 @@ namespace TBF.BenchControl.Sequences
/// Procedure related (static) variables.
/// They are re-initialized when LoadProcedure() is called
///------------------------------------------------------------
protected static IList<TestResult> results;
public static int ReferenceFlowmetersCount;
public static float[] LtrPerRefPulse; /// Reference flowmeter coefficients
public static float Qrise;
public static float Qfall;
/// <summary>
/// Clear all test results.
/// </summary>
protected static void ResetResults()
{
results = new List<TestResult>();
Qrise = 0;
Qfall = 0;
}
public static double Qrise;
public static double Qfall;
/// <summary>
/// Add result to the list of results.
/// Overwrite (=delete) any previous result with the same name.
/// </summary>
/// <param name="newTestResult">New test result</param>
public static void AddOrOverwriteResult(TestResult newTestResult)
{
if (newTestResult == null) return;
TestResult toDelete =
results.FirstOrDefault<TestResult>(x => x.Name.Equals(newTestResult.Name) &&
(x.Part == newTestResult.Part) &&
(x.TestId == newTestResult.TestId));
if (toDelete != null) results.Remove(toDelete);
results.Add(newTestResult);
}
/// <summary>
/// Check whether the results are complete, whether there is a result for each test.
/// </summary>
/// <param name="tests">All tests</param>
/// <returns>true = The results are complete</returns>
protected static bool ResultsAreComplete(IList<Test> tests)
{
foreach (var test in tests)
{
if (!test.Method.Contains("RoiDetection")) /// TODO: Use 'DoNotEvaluate' etc.
{
for (int r = 1; r <= test.Repeats; r++)
{
bool resultExists = false;
foreach (var tr in results)
{
if ((tr.DoNotEvaluate == false) && (tr.RepetitionNr == r) && (tr.TestName == test.Name))
{
resultExists = true;
break;
}
}
if (!resultExists) return false;
}
}
}
return true;
}
protected static float TimeEstimateTotal; /// Time estimate of the selected cycle or test
protected static float TimeEstimateBeginRpts; /// Time estimate at the beginning of all repetitions of the current tests
@ -107,8 +50,6 @@ namespace TBF.BenchControl.Sequences
static SequenceBase()
{
results = new List<TestResult>();
WMVolumes = new FloatBox[Config.Data.WMsCount];
WMErrors = new FloatBox[Config.Data.WMsCount];
for (int i = 0; i < Config.Data.WMsCount; i++)
@ -131,65 +72,6 @@ namespace TBF.BenchControl.Sequences
protected static TransitionSequence transitionAfter;
#region Temperature_Pressure_Humidity
protected float tempInSum;
protected float tempOutSum;
protected float tempDivSum;
protected float pressInSum;
protected float pressOutSum;
protected float ambientTempSum;
protected float ambientPressSum;
protected float ambientHumiSum;
///
protected int averagedDataCount;
///
protected void ResetAveragedData()
{
tempInSum = 0;
tempOutSum = 0;
tempDivSum = 0;
pressInSum = 0;
pressOutSum = 0;
ambientTempSum = 0;
ambientPressSum = 0;
ambientHumiSum = 0;
///
averagedDataCount = 0;
}
///
protected void AccumulateAveragedData()
{
tempInSum += TempIn.Val;
tempOutSum += TempOut.Val;
tempDivSum += TempDiv.Val;
pressInSum += PressureUp.Val;
pressOutSum += PressureDown.Val;
ambientTempSum += AmbientTemp.Val;
ambientPressSum += AmbientPressure.Val;
ambientHumiSum += AmbientHumidity.Val;
///
averagedDataCount++;
}
///
protected void UpdateTestRsltWithAveragedData(TestResult tstRslt)
{
if (averagedDataCount != 0)
{
float denominator = (float)averagedDataCount;
tstRslt.AmbientTempAve = ambientTempSum / denominator;
tstRslt.AmbientPressAve = ambientPressSum / denominator;
tstRslt.AmbientHumiAve = ambientHumiSum / denominator;
tstRslt.PressInAvrg = pressInSum / denominator;
tstRslt.PressOutAvrg = pressOutSum / denominator;
tstRslt.TempInAvrg = tempInSum / denominator;
tstRslt.TempOutAvrg = tempOutSum / denominator;
tstRslt.TempDivAvrg = tempDivSum / denominator;
}
}
#endregion
protected float ltrPerRefPulse;
protected IOperation readRegistersOp;
@ -749,11 +631,11 @@ namespace TBF.BenchControl.Sequences
/// <param name="time">Current test time in [s]</param>
/// <param name="progress">Current progress 0 .. 1.0f</param>
/// <returns>Data for the UI</returns>
protected TestProgressEventArgs GetTestProgressData(Test test, TestResult tstRslt, bool testRunning, Elde.ControlBoardDev cBrd, float time, float progress)
protected TestProgressEventArgs GetTestProgressData(Test test, int repetitionNr, bool testRunning, Elde.ControlBoardDev cBrd, float time, float progress)
{
TestProgressEventArgs data = new TestProgressEventArgs();
data.TestResult = tstRslt;
data.RepetitionNr = repetitionNr;
RefFreq.Val = cBrd.ReferenceFreq;
data.FlowMtrFreq = RefFreq;
@ -764,7 +646,7 @@ namespace TBF.BenchControl.Sequences
data.Mass = Mass;
data.Progress = progress;
float estCurrentTime = TimeEstimateBeginRpts + ((float)(tstRslt.RepetitionNr - 1) + progress) * TimeEstimateOneTest;
float estCurrentTime = TimeEstimateBeginRpts + ((float)(repetitionNr - 1) + progress) * TimeEstimateOneTest;
data.OveralProgress = estCurrentTime / TimeEstimateTotal;
data.Tin = TempIn;
@ -782,20 +664,21 @@ namespace TBF.BenchControl.Sequences
/// Only when test is running
data.RefPulses = cBrd.EtPulses(0);
float refPulsesPerLtr = 1.0f / outPath.FlowMeter.LtrPerPulseCorrected(RefFlow.Val); /// [pulse/ltr]
data.Volume = new FloatBox() { Name = "Volume", Format = "F1", Val = Formulas.VolumeFromPulses(data.RefPulses, refPulsesPerLtr) };
data.Volume = new FloatBox() { Name = "Volume", Format = "F1", Val = (float)Formulas.VolumeFromPulses(data.RefPulses, refPulsesPerLtr) };
int count = Math.Min(Config.Data.WMsCount, data.TestResult.Meters.Count);
for (int i = 0; i < count; i++)
{
if (sensPath.RegisterReaders[i] != null)
{
data.TestResult.Meters[i].PulsesMeter = WMPulses[i];
data.TestResult.Meters[i].PulsesMaster = WMRefPulses[i];
data.TestResult.Meters[i].VolumeMeter = Formulas.VolumeFromPulses(WMPulses[i], sensPath.RegisterReaders[i].PulsesPerLtr);
data.TestResult.Meters[i].VolumeRef = Formulas.VolumeFromPulses(WMRefPulses[i], refPulsesPerLtr);
data.TestResult.Meters[i].VolumeErrorPct = Formulas.ErrorFromVolumes(data.TestResult.Meters[i].VolumeMeter, data.TestResult.Meters[i].VolumeRef);
}
}
/// TODO: Reimplement
//int count = Math.Min(Config.Data.WMsCount, data.TestResult.Meters.Count);
//for (int i = 0; i < count; i++)
//{
// if (sensPath.RegisterReaders[i] != null)
// {
// data.TestResult.Meters[i].PulsesMeter = WMPulses[i];
// data.TestResult.Meters[i].PulsesMaster = WMRefPulses[i];
// data.TestResult.Meters[i].VolumeMeter = Formulas.VolumeFromPulses(WMPulses[i], sensPath.RegisterReaders[i].PulsesPerLtr);
// data.TestResult.Meters[i].VolumeRef = Formulas.VolumeFromPulses(WMRefPulses[i], refPulsesPerLtr);
// data.TestResult.Meters[i].VolumeErrorPct = Formulas.ErrorFromVolumes(data.TestResult.Meters[i].VolumeMeter, data.TestResult.Meters[i].VolumeRef);
// }
//}
}
else
{
@ -805,21 +688,23 @@ namespace TBF.BenchControl.Sequences
return data;
}
protected string TestResult2CsvLine(TestResult tstRslt)
protected string TestResult2CsvLine(string testName, int part)
{
Results.Entities.TestRslt tstRslt = ProcessData.BatchRslts.GetTestRslt(testName, part);
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append(tstRslt.TimeStart);
sb.Append(";"); sb.Append(tstRslt.BatchNr);
sb.Append(";"); sb.Append(tstRslt.TestName);
sb.Append(tstRslt.StartTime);
sb.Append(";"); sb.Append(tstRslt.Batch.BatchNr);
sb.Append(";"); sb.Append(tstRslt.Name());
sb.Append(";"); sb.Append(tstRslt.RepetitionNr);
sb.Append(";"); sb.Append("1");
sb.Append(";"); sb.Append(tstRslt.Method);
sb.Append(";"); sb.Append(tstRslt.Volume);
sb.Append(";"); sb.Append(tstRslt.Qfrom);
sb.Append(";"); sb.Append(tstRslt.Qto);
sb.Append(";"); sb.Append(tstRslt.ErrLimLo + tstRslt.Uncertainty);
sb.Append(";"); sb.Append(tstRslt.ErrLimHi - tstRslt.Uncertainty);
sb.Append(";"); sb.Append(tstRslt.Method());
sb.Append(";"); sb.Append(tstRslt.TargetVolume());
sb.Append(";"); sb.Append(tstRslt.Qfrom());
sb.Append(";"); sb.Append(tstRslt.Qto());
sb.Append(";"); sb.Append(tstRslt.ErrLimLo() + tstRslt.Uncertainty());
sb.Append(";"); sb.Append(tstRslt.ErrLimHi() - tstRslt.Uncertainty());
sb.Append(";"); sb.Append("0");
sb.Append(";"); sb.Append("60");
sb.Append(";"); sb.Append("0");
@ -830,12 +715,12 @@ namespace TBF.BenchControl.Sequences
sb.Append(";"); sb.Append(tstRslt.AmbientTempAve);
sb.Append(";"); sb.Append(tstRslt.AmbientPressAve);
sb.Append(";"); sb.Append(tstRslt.AmbientHumiAve);
sb.Append(";"); sb.Append(tstRslt.PressInAvrg);
sb.Append(";"); sb.Append(tstRslt.PressOutAvrg);
sb.Append(";"); sb.Append(tstRslt.PressInStart);
sb.Append(";"); sb.Append(tstRslt.PressOutStart);
sb.Append(";"); sb.Append(tstRslt.PressInEnd);
sb.Append(";"); sb.Append(tstRslt.PressOutEnd);
sb.Append(";"); sb.Append(tstRslt.PressUpAvrg);
sb.Append(";"); sb.Append(tstRslt.PressDownAvrg);
sb.Append(";"); sb.Append(tstRslt.PressUpStart);
sb.Append(";"); sb.Append(tstRslt.PressDownStart);
sb.Append(";"); sb.Append(tstRslt.PressUpEnd);
sb.Append(";"); sb.Append(tstRslt.PressDownEnd);
sb.Append(";"); sb.Append(tstRslt.TempInAvrg);
sb.Append(";"); sb.Append(tstRslt.TempOutAvrg);
sb.Append(";"); sb.Append(tstRslt.TempDivAvrg);
@ -849,7 +734,7 @@ namespace TBF.BenchControl.Sequences
sb.Append(";"); sb.Append(tstRslt.MassStart);
sb.Append(";"); sb.Append(tstRslt.MassEndRaw);
sb.Append(";"); sb.Append(tstRslt.MassEnd);
sb.Append(";"); sb.Append(tstRslt.MassDiff);
sb.Append(";"); sb.Append(tstRslt.MassEnd - tstRslt.MassStart);
sb.Append(";"); sb.Append(tstRslt.DensityDiv);
sb.Append(";"); sb.Append(tstRslt.DensityIn);
sb.Append(";"); sb.Append(tstRslt.DensityOut);
@ -863,7 +748,7 @@ namespace TBF.BenchControl.Sequences
sb.Append(";"); sb.Append(tstRslt.VolumeCTV); /// Vet . . . komercne prava hodnota - podla vahy
sb.Append(";"); sb.Append(tstRslt.VolumeMaster); /// Velm . . . . objem podla etalonu
sb.Append(";"); sb.Append(" "); /// Vmass . . . objem podla druheho etalonu / prietokomeru pred tratou (teraz vynechavame)
sb.Append(";"); sb.Append(tstRslt.Time); /// t
sb.Append(";"); sb.Append(tstRslt.TestTime); /// 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(";"); if (outPath.FlowMeter != null && outPath.FlowMeter.LtrPerPulse != 0)
@ -871,65 +756,96 @@ namespace TBF.BenchControl.Sequences
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]
sb.Append(";"); sb.Append(tstRslt.TimeDivStart1); /// Time Div Start1
sb.Append(";"); sb.Append(tstRslt.TimeDivStart2); /// Time Div Start2
sb.Append(";"); sb.Append(tstRslt.TimeDivStart3); /// Time Div Start3
sb.Append(";"); sb.Append(tstRslt.TimeDivStart4); /// Time Div Start4
sb.Append(";"); sb.Append(tstRslt.TimeDivStart5); /// Time Div Start5
sb.Append(";"); sb.Append(tstRslt.TimeDivEnd0); /// Time Div End celkovy cas v [ms]
sb.Append(";"); sb.Append(tstRslt.TimeDivEnd1); /// Time Div End1
sb.Append(";"); sb.Append(tstRslt.TimeDivEnd2); /// Time Div End2
sb.Append(";"); sb.Append(tstRslt.TimeDivEnd3); /// Time Div End3
sb.Append(";"); sb.Append(tstRslt.TimeDivEnd4); /// Time Div End4
sb.Append(";"); sb.Append(tstRslt.TimeDivEnd5); /// Time Div End5
//sb.Append(";"); sb.Append(tstRslt.TimeDivStart0); /// Time Div Start celkovy cas v [ms]
//sb.Append(";"); sb.Append(tstRslt.TimeDivStart1); /// Time Div Start1
//sb.Append(";"); sb.Append(tstRslt.TimeDivStart2); /// Time Div Start2
//sb.Append(";"); sb.Append(tstRslt.TimeDivStart3); /// Time Div Start3
//sb.Append(";"); sb.Append(tstRslt.TimeDivStart4); /// Time Div Start4
//sb.Append(";"); sb.Append(tstRslt.TimeDivStart5); /// Time Div Start5
//sb.Append(";"); sb.Append(tstRslt.TimeDivEnd0); /// Time Div End celkovy cas v [ms]
//sb.Append(";"); sb.Append(tstRslt.TimeDivEnd1); /// Time Div End1
//sb.Append(";"); sb.Append(tstRslt.TimeDivEnd2); /// Time Div End2
//sb.Append(";"); sb.Append(tstRslt.TimeDivEnd3); /// Time Div End3
//sb.Append(";"); sb.Append(tstRslt.TimeDivEnd4); /// Time Div End4
//sb.Append(";"); sb.Append(tstRslt.TimeDivEnd5); /// Time Div End5
sb.Append(";"); sb.Append(tstRslt.PulsesMaster); /// Celkovy pocet et. pulzov skusky
sb.Append(";"); sb.Append(" "); /// - '' - pre druhy
for (int i = 0; i < tstRslt.Meters.Count; i++)
{
MeterTestResult mtrRslt = tstRslt.Meters[i];
sb.Append(";"); sb.Append(mtrRslt.SerialNr); /// WM Ser.No.
sb.Append(";"); sb.Append(mtrRslt.VolumeStart); /// WM Vstart - pociatocny stav pri pevnom starte alebo zachyteny pri data streame
sb.Append(";"); sb.Append(mtrRslt.VolumeEnd); /// WM Vend - konecny stav pri pevnom starte alebo zachyteny pri data streame
sb.Append(";"); sb.Append(mtrRslt.VolumeMeter); /// WM Vmer - objem namerany vodomerom
sb.Append(";"); sb.Append(mtrRslt.VolumeRef); /// WM Vref - objem namerany stanicou
sb.Append(";"); sb.Append(mtrRslt.VolumeErrorPct); /// WM Emt - chyba vodomerom nameraneho objemu
sb.Append(";"); sb.Append(mtrRslt.CalibFactor); /// iPerl calibration factor used during the test / ...
sb.Append(";"); sb.Append(mtrRslt.PulsesMeter); /// WM Np met - pocet impulzov zo skusaneho meradla
sb.Append(";"); sb.Append(mtrRslt.PulsesMaster); /// WM Np elm - pocet impulzov etalonu pocas merania pre prislusny vodomer
sb.Append(";"); sb.Append(mtrRslt.Time); /// WM Tmet - cas merania (obmedzany pri synchro skuske)
bool ok = (mtrRslt.VolumeErrorPct >= tstRslt.ErrLimLo + tstRslt.Uncertainty)
&& (mtrRslt.VolumeErrorPct <= tstRslt.ErrLimHi - tstRslt.Uncertainty);
sb.Append(";"); sb.Append(ok ? "OK" : "NOK"); /// WM Vysledok (t.j. ci je v hraniciach chyb) - OK/NOK
sb.Append(";"); sb.Append(mtrRslt.Q2Correction.ToString("F1")); /// iPerl Q2 correction factor used during the test / AN value - hodnota z analogoveho prevodnika
sb.Append(";"); sb.Append(mtrRslt.VolumeStart); /// WM Volume_start - pri datastreamovych hodnotach (alebo kamera)
sb.Append(";"); sb.Append(mtrRslt.TimeStart); /// WM Time_start - ' ' -
sb.Append(";"); sb.Append(mtrRslt.VolumeEnd); /// WM Volume_end - ' ' -
sb.Append(";"); sb.Append(mtrRslt.TimeEnd); /// WM Time_end - ' ' -
}
for (int i = 0; i < tstRslt.CombinedMeters.Count; i++)
for (int i = 0; i < ProcessData.BatchRslts.WMPositionsCount; i++)
{
MeterTestResult mtrRslt = tstRslt.CombinedMeters[i];
if (ProcessData.BatchRslts.WaterMeters[i] != null)
{
if (!ProcessData.BatchRslts.WaterMeters[i].Compound())
{
Results.Entities.MeterTestRslt mtrRslt = ProcessData.BatchRslts.GetMeterTestRslt(testName, i, CompoundMeterId.Single);
sb.Append(";"); sb.Append(mtrRslt.SerialNr); /// WM Ser.No.
sb.Append(";"); sb.Append(mtrRslt.VolumeStart); /// WM Vinit - pri pevnom starte pociatocny stav natukany alebo cez inteligentny system
sb.Append(";"); sb.Append(mtrRslt.VolumeEnd); /// WM Vfin - pri pevnom starte konecny stav natukany alebo cez inteligentny system
sb.Append(";"); sb.Append(mtrRslt.VolumeMeter); /// WM Vmer - objem namerany vodomerom
sb.Append(";"); sb.Append(mtrRslt.VolumeRef); /// WM Vet - objem namerany stanicou
sb.Append(";"); sb.Append(mtrRslt.VolumeErrorPct); /// WM Emt - chyba vodomerom nameraneho objemu
sb.Append(";"); sb.Append(" "); /// WM U - neistota (zatial nechat prazdne)
sb.Append(";"); sb.Append(mtrRslt.PulsesMeter); /// WM Np met - pocet impulzov zo skusaneho meradla
sb.Append(";"); sb.Append(mtrRslt.PulsesMaster); /// WM Np elm - pocet impulzov etalonu pocas merania pre prislusny vodomer
sb.Append(";"); sb.Append(mtrRslt.Time); /// WM Tmet - cas merania (obmedzany pri synchro skuske)
bool ok = (mtrRslt.VolumeErrorPct >= tstRslt.ErrLimLo + tstRslt.Uncertainty)
&& (mtrRslt.VolumeErrorPct <= tstRslt.ErrLimHi - tstRslt.Uncertainty);
sb.Append(";"); sb.Append(ok ? "OK" : "NOK"); /// WM Vysledok (t.j. ci je v hraniciach chyb) - OK/NOK
sb.Append(";"); sb.Append(" "); /// WM AN value - hodnota z analogoveho prevodnika (teraz nic)
sb.Append(";"); sb.Append(mtrRslt.VolumeStart); /// WM Volume_start - pri datastreamovych hodnotach (alebo kamera)
sb.Append(";"); sb.Append(mtrRslt.TimeStart); /// WM Time_start - ' ' -
sb.Append(";"); sb.Append(mtrRslt.VolumeEnd); /// WM Volume_end - ' ' -
sb.Append(";"); sb.Append(mtrRslt.TimeEnd); /// WM Time_end - ' ' -
if (mtrRslt != null)
{
sb.Append(";"); sb.Append(ProcessData.BatchRslts.WaterMeters[i].SerialNr); /// WM Ser.No.
sb.Append(";"); sb.Append(mtrRslt.VolumeStart); /// WM Vstart - pociatocny stav pri pevnom starte alebo zachyteny pri data streame
sb.Append(";"); sb.Append(mtrRslt.VolumeEnd); /// WM Vend - konecny stav pri pevnom starte alebo zachyteny pri data streame
sb.Append(";"); sb.Append(mtrRslt.VolumeMeter); /// WM Vmer - objem namerany vodomerom
sb.Append(";"); sb.Append(mtrRslt.VolumeRef); /// WM Vref - objem namerany stanicou
sb.Append(";"); sb.Append(mtrRslt.Error); /// WM Emt - chyba vodomerom nameraneho objemu
#if IPERLST
sb.Append(";"); sb.Append(ProcessData.BatchRslts.WaterMeters[i].CalibFactor); /// iPerl calibration factor used during the test / ...
#else
sb.Append(";"); sb.Append(" "); /// nechat prazdne
#endif
sb.Append(";"); sb.Append(mtrRslt.PulsesMeter); /// WM Np met - pocet impulzov zo skusaneho meradla
sb.Append(";"); sb.Append(mtrRslt.PulsesMaster); /// WM Np elm - pocet impulzov etalonu pocas merania pre prislusny vodomer
sb.Append(";"); sb.Append(mtrRslt.TestTime); /// WM Tmet - cas merania (obmedzany pri synchro skuske)
sb.Append(";"); sb.Append(mtrRslt.Passed ? "OK" : "NOK"); /// WM Vysledok (t.j. ci je v hraniciach chyb) - OK/NOK
#if IPERLST
sb.Append(";"); sb.Append(mtrRslt.Q2Correction.ToString("F1")); /// iPerl Q2 correction factor used during the test / AN value - hodnota z analogoveho prevodnika
#else
sb.Append(";"); sb.Append(" "); /// nechat prazdne
#endif
sb.Append(";"); sb.Append(mtrRslt.VolumeStart); /// WM Volume_start - pri datastreamovych hodnotach (alebo kamera)
sb.Append(";"); sb.Append(mtrRslt.TimestampStart); /// WM Time_start - ' ' -
sb.Append(";"); sb.Append(mtrRslt.VolumeEnd); /// WM Volume_end - ' ' -
sb.Append(";"); sb.Append(mtrRslt.TimestampEnd); /// WM Time_end - ' ' -
}
}
else
{
for (byte b = (byte)CompoundMeterId.CompoundMain; b <= (byte)CompoundMeterId.Compound; b++)
{
Results.Entities.MeterTestRslt mtrRslt = ProcessData.BatchRslts.GetMeterTestRslt(testName, i, (CompoundMeterId)b);
if (mtrRslt != null)
{
sb.Append(";");
switch ((CompoundMeterId)b)
{
case CompoundMeterId.CompoundMain:
sb.Append(ProcessData.BatchRslts.WaterMeters[i].SerialNr);
break;
case CompoundMeterId.CompoundAux:
sb.Append(ProcessData.BatchRslts.WaterMeters[i].SerialNrEx);
break;
case CompoundMeterId.Compound:
sb.Append(ProcessData.BatchRslts.WaterMeters[i].SerialNr);
break;
}
sb.Append(";"); sb.Append(mtrRslt.VolumeStart); /// WM Vinit - pri pevnom starte pociatocny stav natukany alebo cez inteligentny system
sb.Append(";"); sb.Append(mtrRslt.VolumeEnd); /// WM Vfin - pri pevnom starte konecny stav natukany alebo cez inteligentny system
sb.Append(";"); sb.Append(mtrRslt.VolumeMeter); /// WM Vmer - objem namerany vodomerom
sb.Append(";"); sb.Append(mtrRslt.VolumeRef); /// WM Vet - objem namerany stanicou
sb.Append(";"); sb.Append(mtrRslt.Error); /// WM Emt - chyba vodomerom nameraneho objemu
sb.Append(";"); sb.Append(" "); /// WM U - neistota (zatial nechat prazdne)
sb.Append(";"); sb.Append(mtrRslt.PulsesMeter); /// WM Np met - pocet impulzov zo skusaneho meradla
sb.Append(";"); sb.Append(mtrRslt.PulsesMaster); /// WM Np elm - pocet impulzov etalonu pocas merania pre prislusny vodomer
sb.Append(";"); sb.Append(mtrRslt.TestTime); /// WM Tmet - cas merania (obmedzany pri synchro skuske)
sb.Append(";"); sb.Append(mtrRslt.Passed ? "OK" : "NOK"); /// WM Vysledok (t.j. ci je v hraniciach chyb) - OK/NOK
sb.Append(";"); sb.Append(" "); /// WM AN value - hodnota z analogoveho prevodnika (teraz nic)
sb.Append(";"); sb.Append(mtrRslt.VolumeStart); /// WM Volume_start - pri datastreamovych hodnotach (alebo kamera)
sb.Append(";"); sb.Append(mtrRslt.TimestampStart); /// WM Time_start - ' ' -
sb.Append(";"); sb.Append(mtrRslt.VolumeEnd); /// WM Volume_end - ' ' -
sb.Append(";"); sb.Append(mtrRslt.TimestampEnd); /// WM Time_end - ' ' -
}
}
}
}
}
sb.Append(";");
@ -942,92 +858,92 @@ namespace TBF.BenchControl.Sequences
/// </summary>
/// <param name="test">Test to be simulated</param>
/// <returns>Test result</returns>
protected TestResult MakeSimulated(Test test, int repetitionNr, float errorPctBase)
protected void MakeSimulated(string testName, int repeats, int repetitionNr, int part, float errorPctBase)
{
TestResult tstRslt = new TestResult(test, repetitionNr, MetersKind.Single);
string fullTestName = Results.Utils.GetTestName(testName, repeats, repetitionNr);
tstRslt.TimeStart = DateTime.Now;
tstRslt.TimeEnd = DateTime.Now;
Results.Entities.TestRslt tstRslt = ProcessData.BatchRslts.GetTestRslt(fullTestName, part);
tstRslt.StartTime = DateTime.Now;
tstRslt.EndTime = DateTime.Now;
tstRslt.FlowSetTime = 10;
tstRslt.TestTime = tstRslt.TargetTime();
/// TODO: Verify whether 'ltrPerRefPulse' is up to date
tstRslt.PulsesMaster = (ltrPerRefPulse > 1E-6) ? (tstRslt.TargetVolume() / ltrPerRefPulse) : 1;
tstRslt.ConstMaster = ltrPerRefPulse;
tstRslt.MassStartRaw = 0;
tstRslt.MassStart = 0;
tstRslt.MassEndRaw = tstRslt.TargetVolume() * Program.LocalSettings.RealDensity / 1000.0f;
tstRslt.MassEnd = tstRslt.MassEndRaw;
tstRslt.DensityIn = Program.LocalSettings.RealDensity;
tstRslt.DensityOut = Program.LocalSettings.RealDensity;
tstRslt.DensityDiv = Program.LocalSettings.RealDensity;
tstRslt.Buoyancy = 0; /// TODO
tstRslt.FlowMass = tstRslt.MassEnd / tstRslt.TargetTime();
tstRslt.FlowVolume = tstRslt.TargetVolume() / tstRslt.TargetTime();
tstRslt.VolumeCTV = tstRslt.TargetVolume();
tstRslt.VolumeMaster = tstRslt.TargetVolume();
tstRslt.ErrorMaster = 0;
tstRslt.AmbientTempAve = 20.0f;
tstRslt.AmbientPressAve = 1000.0f;
tstRslt.AmbientHumiAve = 50.0f;
tstRslt.PressInStart = 1000.0f;
tstRslt.PressOutStart = 1000.0f;
tstRslt.PressUpStart = 1000.0f;
tstRslt.PressDownStart = 1000.0f;
tstRslt.TempInStart = 20.0f;
tstRslt.TempOutStart = 20.0f;
tstRslt.TempDivStart = 20.0f;
tstRslt.PressInEnd = 1000.0f;
tstRslt.PressOutEnd = 1000.0f;
tstRslt.PressUpEnd = 1000.0f;
tstRslt.PressDownEnd = 1000.0f;
tstRslt.TempInEnd = 20.0f;
tstRslt.TempOutEnd = 20.0f;
tstRslt.TempDivEnd = 20.0f;
tstRslt.PressInAvrg = 1000.0f;
tstRslt.PressOutAvrg = 1000.0f;
tstRslt.PressUpAvrg = 1000.0f;
tstRslt.PressDownAvrg = 1000.0f;
tstRslt.TempInAvrg = 20.0f;
tstRslt.TempOutAvrg = 20.0f;
tstRslt.TempDivAvrg = 20.0f;
tstRslt.PressUpMin = 1000.0f;
tstRslt.PressDownMin = 1000.0f;
tstRslt.TempInMin = 20.0f;
tstRslt.TempOutMin = 20.0f;
tstRslt.TempDivMin = 20.0f;
tstRslt.PressUpMax = 1000.0f;
tstRslt.PressDownMax = 1000.0f;
tstRslt.TempInMax = 20.0f;
tstRslt.TempOutMax = 20.0f;
tstRslt.TempDivMax = 20.0f;
tstRslt.BatchNr = Program.LocalSettings.BatchNr;
tstRslt.MassStartRaw = 0;
tstRslt.MassStart = 0;
tstRslt.MassEndRaw = test.Volume * Program.LocalSettings.RealDensity / 1000.0f;
tstRslt.MassEnd = tstRslt.MassEndRaw;
tstRslt.MassDiff = tstRslt.MassEnd;
tstRslt.DensityIn = Program.LocalSettings.RealDensity;
tstRslt.DensityOut = Program.LocalSettings.RealDensity;
tstRslt.DensityDiv = Program.LocalSettings.RealDensity;
tstRslt.Time = test.TstTime;
tstRslt.FlowMass = tstRslt.MassDiff / test.TstTime;
tstRslt.FlowVolume = test.Volume / test.TstTime;
tstRslt.VolumeCTV = test.Volume;
tstRslt.VolumeMaster = test.Volume;
tstRslt.PulsesMaster = (ltrPerRefPulse > 1E-6) ? (test.Volume / ltrPerRefPulse) : 1;
tstRslt.ConstMaster = ltrPerRefPulse;
tstRslt.ErrorMaster = 0;
tstRslt.FlowMin = 0; /// TODO
tstRslt.FlowMax = 0; /// TODO
for (int i = 0; i < Config.Data.WMsCount; i++)
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{
float errorPct = errorPctBase + 0.05f * i;
/// Reference to iPerl water meter or null:
WaterMeters.iPerl.WaterMeter iPerl = ((sensPath.RegisterReaders != null) && (i < sensPath.RegisterReaders.Length))
? (sensPath.RegisterReaders[i] as WaterMeters.iPerl.WaterMeter)
: null;
Results.Entities.MeterTestRslt meterRslt = ProcessData.BatchRslts.GetMeterTestRslt(fullTestName, i, CompoundMeterId.Single);
IRegisterReader regReader = sensPath.RegisterReaders[i];
if ((sensPath.RegisterReaders[i] != null) && (WaterMeters.Count > i) && !WaterMeters[i].Disabled)
if (meterRslt != null && regReader != null)
{
tstRslt.Meters[i].SerialNr = (WaterMeters.Count > i) ? WaterMeters[i].SerialNr : string.Empty;
tstRslt.Meters[i].PulsesPerLiter = sensPath.RegisterReaders[i].PulsesPerLtr;
tstRslt.Meters[i].VolumeRef = test.Volume;
tstRslt.Meters[i].Time = test.TstTime;
tstRslt.Meters[i].TimeStart = 0;
tstRslt.Meters[i].TimeEnd = test.TstTime;
tstRslt.Meters[i].PulsesMaster = tstRslt.PulsesMaster;
tstRslt.Meters[i].VolumeStart = 0;
tstRslt.Meters[i].VolumeErrorPct = errorPct;
tstRslt.Meters[i].Passed = (errorPct >= test.ErrLimLo + test.Uncertainty)
&& (errorPct <= test.ErrLimHi - test.Uncertainty);
tstRslt.Meters[i].VolumeMeter = test.Volume * (1.0f + 0.01f * errorPct);
tstRslt.Meters[i].PulsesMeter = sensPath.RegisterReaders[i].PulsesPerLtr * tstRslt.Meters[i].VolumeMeter;
tstRslt.Meters[i].Disabled = false;
meterRslt.VolumeMeter = tstRslt.TargetVolume() * (1.0 + 0.01 * errorPct);
if (iPerl == null)
{
tstRslt.Meters[i].VolumeEnd = 0; /// Normal meter
}
else
{
/// iPerl
tstRslt.Meters[i].VolumeEnd = tstRslt.Meters[i].VolumeStart + tstRslt.Meters[i].VolumeMeter;
}
meterRslt.PulsesMeter = regReader.PulsesPerLtr * meterRslt.VolumeMeter;
meterRslt.PulsesMaster = tstRslt.PulsesMaster;
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
meterRslt.VolumeStart = 0;
meterRslt.VolumeEnd = meterRslt.VolumeMeter;
meterRslt.VolumeRef = tstRslt.TargetVolume();
meterRslt.TimestampStart = 0;
meterRslt.TimestampEnd = tstRslt.TargetTime();
meterRslt.TestTime = tstRslt.TargetTime();
meterRslt.Error = errorPct;
meterRslt.Passed = (errorPct >= tstRslt.ErrLimLo() + tstRslt.Uncertainty())
&& (errorPct <= tstRslt.ErrLimHi() - tstRslt.Uncertainty());
meterRslt.TestDone = true;
}
}
return tstRslt;
}
@ -1036,122 +952,112 @@ namespace TBF.BenchControl.Sequences
/// </summary>
/// <param name="test">Test to be simulated</param>
/// <returns>Test result</returns>
protected TestResult MakeSimulatedCompound(Test test, CompoundTestType testType, int repetitionNr, float errorPct)
protected void MakeSimulatedCompound(string testName, int repeats, int repetitionNr, int part, float errorPct, float mainPart)
{
TestResult tstRslt = new TestResult(test, repetitionNr, MetersKind.Combined);
string fullTestName = Results.Utils.GetTestName(testName, repeats, repetitionNr);
tstRslt.TimeStart = DateTime.Now;
tstRslt.TimeEnd = DateTime.Now;
Results.Entities.TestRslt tstRslt = ProcessData.BatchRslts.GetTestRslt(fullTestName, part);
tstRslt.StartTime = DateTime.Now;
tstRslt.EndTime = DateTime.Now;
tstRslt.FlowSetTime = 10;
tstRslt.TestTime = tstRslt.TargetTime();
/// TODO: Verify whether 'ltrPerRefPulse' is up to date
tstRslt.PulsesMaster = (ltrPerRefPulse > 1E-6) ? (tstRslt.TargetVolume() / ltrPerRefPulse) : 1;
tstRslt.ConstMaster = ltrPerRefPulse;
tstRslt.MassStartRaw = 0;
tstRslt.MassStart = 0;
tstRslt.MassEndRaw = tstRslt.TargetVolume() * Program.LocalSettings.RealDensity / 1000.0f;
tstRslt.MassEnd = tstRslt.MassEndRaw;
tstRslt.DensityIn = Program.LocalSettings.RealDensity;
tstRslt.DensityOut = Program.LocalSettings.RealDensity;
tstRslt.DensityDiv = Program.LocalSettings.RealDensity;
tstRslt.Buoyancy = 0; /// TODO
tstRslt.FlowMass = tstRslt.MassEnd / tstRslt.TargetTime();
tstRslt.FlowVolume = tstRslt.TargetVolume() / tstRslt.TargetTime();
tstRslt.VolumeCTV = tstRslt.TargetVolume();
tstRslt.VolumeMaster = tstRslt.TargetVolume();
tstRslt.ErrorMaster = 0;
tstRslt.AmbientTempAve = 20.0f;
tstRslt.AmbientPressAve = 1000.0f;
tstRslt.AmbientHumiAve = 50.0f;
tstRslt.PressInStart = 1000.0f;
tstRslt.PressOutStart = 1000.0f;
tstRslt.PressUpStart = 1000.0f;
tstRslt.PressDownStart = 1000.0f;
tstRslt.TempInStart = 20.0f;
tstRslt.TempOutStart = 20.0f;
tstRslt.TempDivStart = 20.0f;
tstRslt.PressInEnd = 1000.0f;
tstRslt.PressOutEnd = 1000.0f;
tstRslt.PressUpEnd = 1000.0f;
tstRslt.PressDownEnd = 1000.0f;
tstRslt.TempInEnd = 20.0f;
tstRslt.TempOutEnd = 20.0f;
tstRslt.TempDivEnd = 20.0f;
tstRslt.PressInAvrg = 1000.0f;
tstRslt.PressOutAvrg = 1000.0f;
tstRslt.PressUpAvrg = 1000.0f;
tstRslt.PressDownAvrg = 1000.0f;
tstRslt.TempInAvrg = 20.0f;
tstRslt.TempOutAvrg = 20.0f;
tstRslt.TempDivAvrg = 20.0f;
tstRslt.PressUpMin = 1000.0f;
tstRslt.PressDownMin = 1000.0f;
tstRslt.TempInMin = 20.0f;
tstRslt.TempOutMin = 20.0f;
tstRslt.TempDivMin = 20.0f;
tstRslt.PressUpMax = 1000.0f;
tstRslt.PressDownMax = 1000.0f;
tstRslt.TempInMax = 20.0f;
tstRslt.TempOutMax = 20.0f;
tstRslt.TempDivMax = 20.0f;
tstRslt.BatchNr = Program.LocalSettings.BatchNr;
tstRslt.MassStartRaw = 0;
tstRslt.MassStart = 0;
tstRslt.MassEndRaw = test.Volume * Program.LocalSettings.RealDensity / 1000.0f;
tstRslt.MassEnd = tstRslt.MassEndRaw;
tstRslt.MassDiff = tstRslt.MassEnd;
tstRslt.DensityIn = Program.LocalSettings.RealDensity;
tstRslt.DensityOut = Program.LocalSettings.RealDensity;
tstRslt.DensityDiv = Program.LocalSettings.RealDensity;
tstRslt.Time = test.TstTime;
tstRslt.FlowMass = tstRslt.MassDiff / test.TstTime;
tstRslt.FlowVolume = test.Volume / test.TstTime;
tstRslt.VolumeCTV = test.Volume;
tstRslt.VolumeMaster = test.Volume;
tstRslt.PulsesMaster = (ltrPerRefPulse > 1E-6) ? (test.Volume / ltrPerRefPulse) : 1;
tstRslt.ConstMaster = ltrPerRefPulse;
tstRslt.ErrorMaster = 0;
tstRslt.FlowMin = 0; /// TODO
tstRslt.FlowMax = 0; /// TODO
for (int iCmbnd = 0; iCmbnd < Config.Data.CompoundWMsCount; iCmbnd++)
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{
tstRslt.CombinedMeters[iCmbnd].VolumeRef = tstRslt.VolumeCTV; /// [l] must be calculated before main & aux. meter error
Results.Entities.MeterTestRslt compoundRslt = ProcessData.BatchRslts.GetMeterTestRslt(fullTestName, i, CompoundMeterId.Compound);
Results.Entities.MeterTestRslt mainRslt = ProcessData.BatchRslts.GetMeterTestRslt(fullTestName, i, CompoundMeterId.CompoundMain);
Results.Entities.MeterTestRslt auxRslt = ProcessData.BatchRslts.GetMeterTestRslt(fullTestName, i, CompoundMeterId.CompoundAux);
for (int i = 2 * iCmbnd; i < 2 * iCmbnd + 2; i++)
double compoundVolume = tstRslt.TargetVolume() * (1.0 + 0.01 * errorPct);
double mainVolume = compoundVolume * mainPart;
double auxVolume = compoundVolume * (1.0 - mainPart);
for (int isAux = 0; isAux <= 1; isAux++) /// 0=main, 1=aux
{
if (sensPath.RegisterReaders[i] == null || sensPath.RegisterReaders[i].PulsesPerLtr <= float.Epsilon)
{
tstRslt.Meters[i].PulsesPerLiter = 1.0f;
tstRslt.Meters[i].VolumeMeter = 0;
}
else
{
tstRslt.Meters[i].PulsesPerLiter = sensPath.RegisterReaders[i].PulsesPerLtr;
tstRslt.Meters[i].VolumeMeter = Convert.ToSingle(WMPulses[i]) / sensPath.RegisterReaders[i].PulsesPerLtr;
}
GenericDevices.IRegisterReader regReader = sensPath.RegisterReaders[2 * i + isAux];
Results.Entities.MeterTestRslt meterRslt = (isAux == 0) ? mainRslt : auxRslt;
tstRslt.Meters[i].SerialNr = (WaterMeters.Count > i) ? WaterMeters[i].SerialNr : string.Empty;
tstRslt.Meters[i].VolumeStart = 0;
tstRslt.Meters[i].VolumeEnd = 0; /// Normal meter
if (meterRslt != null && regReader != null)
{
meterRslt.VolumeMeter = (isAux == 0) ? mainVolume : auxVolume;
tstRslt.Meters[i].VolumeRef = test.Volume;
if (testType == CompoundTestType.Regular && IsMainMtr(i))
{
tstRslt.Meters[i].VolumeMeter = test.Volume * (1.0f + 0.01f * errorPct);
meterRslt.PulsesMeter = regReader.PulsesPerLtr * meterRslt.VolumeMeter;
meterRslt.PulsesMaster = tstRslt.PulsesMaster;
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
meterRslt.VolumeStart = 0;
meterRslt.VolumeEnd = meterRslt.VolumeMeter;
meterRslt.VolumeRef = tstRslt.TargetVolume();
meterRslt.TimestampStart = 0;
meterRslt.TimestampEnd = tstRslt.TargetTime();
meterRslt.TestTime = tstRslt.TargetTime();
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, tstRslt.VolumeCTV);
meterRslt.Passed = (errorPct >= tstRslt.ErrLimLo() + tstRslt.Uncertainty())
&& (errorPct <= tstRslt.ErrLimHi() - tstRslt.Uncertainty());
meterRslt.TestDone = true;
}
else if (testType == CompoundTestType.DetectionRise && !IsMainMtr(i))
{
tstRslt.Meters[i].VolumeMeter = test.Volume * (1.0f + 0.01f * errorPct);
}
else if (testType == CompoundTestType.DetectionFall && IsMainMtr(i))
{
tstRslt.Meters[i].VolumeMeter = test.Volume * (1.0f + 0.01f * errorPct);
}
else
{
tstRslt.Meters[i].VolumeMeter = 0;
}
tstRslt.Meters[i].Time = test.TstTime;
tstRslt.Meters[i].TimeStart = 0;
tstRslt.Meters[i].TimeEnd = test.TstTime;
tstRslt.Meters[i].PulsesMaster = tstRslt.PulsesMaster;
tstRslt.Meters[i].VolumeErrorPct = errorPct;
tstRslt.Meters[i].Passed = (errorPct >= test.ErrLimLo + test.Uncertainty)
&& (errorPct <= test.ErrLimHi - test.Uncertainty);
tstRslt.Meters[i].PulsesMeter = sensPath.RegisterReaders[i].PulsesPerLtr * tstRslt.Meters[i].VolumeMeter;
}
tstRslt.CombinedMeters[iCmbnd].VolumeMeter = tstRslt.Meters[2 * iCmbnd].VolumeMeter + tstRslt.Meters[2 * iCmbnd + 1].VolumeMeter;
compoundRslt.VolumeRef = tstRslt.VolumeCTV; /// [l] must be calculated before main & aux. meter error
compoundRslt.VolumeMeter = mainRslt.VolumeMeter + auxRslt.VolumeMeter;
tstRslt.CombinedMeters[iCmbnd].PulsesMaster = tstRslt.PulsesMaster;
tstRslt.CombinedMeters[iCmbnd].Time = test.TstTime;
tstRslt.CombinedMeters[iCmbnd].VolumeErrorPct = Formulas.ErrorFromVolumes(tstRslt.CombinedMeters[iCmbnd].VolumeMeter, tstRslt.CombinedMeters[iCmbnd].VolumeRef);
tstRslt.CombinedMeters[iCmbnd].Passed = (tstRslt.CombinedMeters[iCmbnd].VolumeErrorPct >= tstRslt.ErrLimLo + tstRslt.Uncertainty)
&& (tstRslt.CombinedMeters[iCmbnd].VolumeErrorPct <= tstRslt.ErrLimHi - tstRslt.Uncertainty);
compoundRslt.PulsesMaster = tstRslt.PulsesMaster;
compoundRslt.TestTime = tstRslt.TargetTime();
compoundRslt.Error = Formulas.ErrorFromVolumes(compoundRslt.VolumeMeter, tstRslt.VolumeCTV);
compoundRslt.Passed = (compoundRslt.Error >= tstRslt.ErrLimLo() + tstRslt.Uncertainty())
&& (compoundRslt.Error <= tstRslt.ErrLimHi() - tstRslt.Uncertainty());
compoundRslt.TestDone = true;
}
return tstRslt;
}
/// <summary>
/// Returns information whether a meter is a main meter or an aux. meter (compound meters).
/// </summary>
/// <param name="i">Index to TestResult.Meters[] array</param>
/// <returns>true = main meter, false = aux. meter</returns>
bool IsMainMtr(int i)
{
return (i % 2) == 0;
}
}
}

View File

@ -42,7 +42,7 @@ namespace TBF.BenchControl
Factories.Add(new Elde.FlowMeter.FlowMeterFactory());
Factories.Add(new Elde.FlowMeterTwins.FlowMeterFactory());
Factories.Add(new TestMethods.FlyingStart.TestMethodFactory());
Factories.Add(new TestMethods.FlyingStartCollectionMethod.TestMethodFactory());
Factories.Add(new TestMethods.FlyingStartMassCollection.TestMethodFactory());
Factories.Add(new DataEntry.WMStates.EntryFormFactory());
Factories.Add(new Ambient.Comet.Factory());
Factories.Add(new Ambient.Greco.Factory());

View File

@ -86,9 +86,11 @@ namespace TBF.BenchControl.TestMethods.Adjustment
/// Start the test, initialize test results
Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, repetitionNr, inPath, benchPath, outPath, sensPath, totalPulses));
TestResult tstRslt;
string testName = Results.Utils.GetTestName(test.Name, test.Repeats, repetitionNr);
TestStartTime = DateTime.Now;
int flowSetTime0 = StateMachine.Time;
int flowSetTime = 0;
float estFlowSetTime = 10.0f;
//------------------------------------------------
@ -104,9 +106,9 @@ namespace TBF.BenchControl.TestMethods.Adjustment
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
//Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
//Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@ -121,9 +123,9 @@ namespace TBF.BenchControl.TestMethods.Adjustment
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
//Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
//Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@ -138,9 +140,9 @@ namespace TBF.BenchControl.TestMethods.Adjustment
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
//Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
//Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.OpArgumentError)) { retVal = Event.OpArgumentError; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
@ -175,7 +177,8 @@ namespace TBF.BenchControl.TestMethods.Adjustment
//------------------------------------------------
if (mode == Config.Entities.DebugMode.Simulate)
{
tstRslt = MakeSimulated(test, 1, simulatedError);
/// TODO: Reimplement
//tstRslt = MakeSimulated(test, 1, simulatedError);
simulatedError *= 0.6f;
State.Create("Adjustment : Simulating the test")
@ -192,12 +195,6 @@ namespace TBF.BenchControl.TestMethods.Adjustment
}
else
{
tstRslt = new TestResult(test, repetitionNr, MetersKind.Single);
tstRslt.DoNotEvaluate = true;
tstRslt.DoNotPublish = true;
tstRslt.TimeStart = DateTime.Now;
State.Create("Adjustment : Starting the test")
.AddOperation(checkUiOp)
.AddOperations(measureOperations)
@ -217,8 +214,7 @@ namespace TBF.BenchControl.TestMethods.Adjustment
queryEnd1 = cBrd.QueryMeasurementEndOp();
queryEnd2 = cBrd.QueryMeasurementEndOp();
bool firstTime = true; /// To reset sums for averaging
ResetAveragedData();
ClearAllStatistics();
/// Measurement loop - begin
while (true)
@ -231,30 +227,10 @@ namespace TBF.BenchControl.TestMethods.Adjustment
case Event.MeasurementCompleted: goto one_test_completed;
}
if (firstTime)
{
firstTime = false; /// Do the following only once
tstRslt.TempInStart = TempIn.Val;
tstRslt.TempOutStart = TempOut.Val;
tstRslt.TempDivStart = TempDiv.Val;
tstRslt.PressInStart = PressureUp.Val;
tstRslt.PressOutStart = PressureDown.Val;
}
tstRslt.TempInEnd = TempIn.Val;
tstRslt.TempOutEnd = TempOut.Val;
tstRslt.TempDivEnd = TempDiv.Val;
tstRslt.PressInEnd = PressureUp.Val;
tstRslt.PressOutEnd = PressureDown.Val;
tstRslt.MassEndRaw = Mass.Val;
AccumulateAveragedData();
UpdateAllStatistics();
CurrentMassRaw = Mass.Val;
RefFreq.Val = cBrd.ReferenceFreq;
RefFlow.Val = cBrd.ReferenceFlow;
tstRslt.AmbientTempAve = AmbientTemp.Val;
tstRslt.AmbientPressAve = AmbientPressure.Val;
tstRslt.AmbientHumiAve = AmbientHumidity.Val;
string logstr = string.Format("E={0} f={1} q={2}", cBrd.EtPulses(0), cBrd.ReferenceFreq,
cBrd.ReferenceFlow * outPath.FlowMeter.NominalFlow);
@ -266,7 +242,7 @@ namespace TBF.BenchControl.TestMethods.Adjustment
float progress = Formulas.TestProgress(cBrd.EtPulses(0), totalPulses, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, true, cBrd, cBrd.TTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, true, cBrd, cBrd.TTime, progress));
}
/// Measurement loop - end
@ -276,81 +252,92 @@ namespace TBF.BenchControl.TestMethods.Adjustment
Bridge.OnActivity(this, Strings.Adjustment_in_progress);
//------------------------------------------------
TestEndTime = DateTime.Now;
/// Make sure the CycleBeginForm is closed so that water meter data (s/n) can be copied into results
if (UIFlowControl.Stop == WaitBeginFormClosed()) goto stopTest;
///
/// Populate TestResult data entity with data
///
UpdateTestRsltWithAveragedData(tstRslt);
Results.Entities.TestRslt tstRslt = BatchRslts.GetTestRslt(testName, test.Part);
tstRslt.TimeEnd = DateTime.Now;
tstRslt.BatchNr = Program.LocalSettings.BatchNr;
tstRslt.MassStart = 0;
tstRslt.MassEnd = 0;
tstRslt.MassDiff = 0;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
tstRslt.Time = cBrd.TTime; /// [s] measurement time
tstRslt.FlowMass = 0; /// [kg/h]
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)
tstRslt.VolumeMaster = ltrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
tstRslt.ConstMaster = outPath.FlowMeter.LtrPerPulseCorrected(tstRslt.FlowVolume / 1000.0f); /// Convert the flow to [m3/h]
tstRslt.VolumeCTV = tstRslt.ConstMaster * tstRslt.PulsesMaster; /// [l] 1000.0f is because density is in [kg/m3]
/// Corrected master pulses per liter
tstRslt.ErrorMaster = 0.0f; /// Cannot be determined without the collected water mass measurement
tstRslt.TimeDivStart0 = 0;
tstRslt.TimeDivStart1 = 0;
tstRslt.TimeDivStart2 = 0;
tstRslt.TimeDivStart3 = 0;
tstRslt.TimeDivStart4 = 0;
tstRslt.TimeDivStart5 = 0;
tstRslt.TimeDivEnd0 = 0;
tstRslt.TimeDivEnd1 = 0;
tstRslt.TimeDivEnd2 = 0;
tstRslt.TimeDivEnd3 = 0;
tstRslt.TimeDivEnd4 = 0;
tstRslt.TimeDivEnd5 = 0;
for (int i = 0; i < Config.Data.WMsCount; i++)
if (tstRslt != null)
{
if ((sensPath.RegisterReaders[i] != null) && (WaterMeters.Count > i) && !WaterMeters[i].Disabled)
{
tstRslt.Meters[i].SerialNr = (WaterMeters.Count > i) ? WaterMeters[i].SerialNr : string.Empty;
tstRslt.Meters[i].VolumeStart = 0; /// liter
tstRslt.Meters[i].VolumeEnd = 0; /// liter
tstRslt.Meters[i].PulsesPerLiter = (sensPath.RegisterReaders[i] == null ? 1.0f : sensPath.RegisterReaders[i].PulsesPerLtr);
if (sensPath.RegisterReaders[i].PulsesPerLtr <= float.Epsilon) tstRslt.Meters[i].VolumeMeter = 0;
else tstRslt.Meters[i].VolumeMeter = Convert.ToSingle(WMPulses[i]) / sensPath.RegisterReaders[i].PulsesPerLtr;
tstRslt.Meters[i].VolumeRef = tstRslt.ConstMaster * WMRefPulses[i]; /// liter
tstRslt.Meters[i].PulsesMeter = WMPulses[i];
tstRslt.Meters[i].PulsesMaster = WMRefPulses[i];
tstRslt.Meters[i].Time = cBrd.TTime;
if (WMPulses[i] > 0 && tstRslt.Meters[i].VolumeRef > 0)
{
tstRslt.Meters[i].VolumeErrorPct =
100 * (tstRslt.Meters[i].VolumeMeter - tstRslt.Meters[i].VolumeRef) / tstRslt.Meters[i].VolumeRef;
/// %
}
else
{
tstRslt.Meters[i].VolumeErrorPct = -100;
}
tstRslt.Meters[i].Passed = (tstRslt.Meters[i].VolumeErrorPct >= tstRslt.ErrLimLo + tstRslt.Uncertainty)
&& (tstRslt.Meters[i].VolumeErrorPct <= tstRslt.ErrLimHi - tstRslt.Uncertainty);
/// Auxiliary results
tstRslt.AmbientTempAve = AmbientTempStat.Average;
tstRslt.AmbientPressAve = AmbientPressureStat.Average;
tstRslt.AmbientHumiAve = AmbientHumidityStat.Average;
tstRslt.PressUpAvrg = PressureUpStat.Average;
tstRslt.PressUpStart = PressureUpStat.First;
tstRslt.PressUpEnd = PressureUpStat.Last;
tstRslt.PressUpMin = PressureUpStat.Min;
tstRslt.PressUpMax = PressureUpStat.Max;
tstRslt.PressDownAvrg = PressureDownStat.Average;
tstRslt.PressDownStart = PressureDownStat.First;
tstRslt.PressDownEnd = PressureDownStat.Last;
tstRslt.PressDownMin = PressureDownStat.Min;
tstRslt.PressDownMax = PressureDownStat.Max;
tstRslt.TempInAvrg = TempInStat.Average;
tstRslt.TempInStart = TempInStat.First;
tstRslt.TempInEnd = TempInStat.Last;
tstRslt.TempInMin = TempInStat.Min;
tstRslt.TempInMax = TempInStat.Max;
tstRslt.TempOutAvrg = TempOutStat.Average;
tstRslt.TempOutStart = TempOutStat.First;
tstRslt.TempOutEnd = TempOutStat.Last;
tstRslt.TempOutMin = TempOutStat.Min;
tstRslt.TempOutMax = TempOutStat.Max;
tstRslt.TempDivAvrg = TempDivStat.Average;
tstRslt.TempDivStart = TempDivStat.First;
tstRslt.TempDivEnd = TempDivStat.Last;
tstRslt.TempDivMin = TempDivStat.Min;
tstRslt.TempDivMax = TempDivStat.Max;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
tstRslt.Meters[i].Disabled = false;
}
else
/// Main results
tstRslt.StartTime = TestStartTime;
tstRslt.EndTime = TestEndTime;
tstRslt.FlowSetTime = flowSetTime;
tstRslt.TestTime = cBrd.TTime; /// [s] measurement time
tstRslt.PulsesMaster = Convert.ToDouble(cBrd.EtPulses(0)); /// Pulses of the master flow meter (test total)
tstRslt.MassStart = 0;
tstRslt.MassEnd = 0;
tstRslt.FlowMass = 0; /// [kg/h]
tstRslt.FlowVolume = 3.6 * ltrPerRefPulse * cBrd.EtPulses(0) / tstRslt.TestTime; /// [m3/h]
tstRslt.VolumeMaster = ltrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
tstRslt.ConstMaster = outPath.FlowMeter.LtrPerPulseCorrected(tstRslt.FlowVolume); /// Calculate master flowmeter coefficient
tstRslt.VolumeCTV = tstRslt.ConstMaster * tstRslt.PulsesMaster; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.ErrorMaster = 0.0f; /// Cannot be determined without the collected water mass measurement
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{
tstRslt.Meters[i].Disabled = true;
Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, CompoundMeterId.Single);
GenericDevices.IRegisterReader regReader = (sensPath.RegisterReaders == null) ? null : sensPath.RegisterReaders[i];
if (meterRslt != null && regReader != null)
{
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
meterRslt.PulsesMeter = Convert.ToDouble(WMPulses[i]);
meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[i]);
meterRslt.VolumeStart = 0; /// liter
meterRslt.VolumeEnd = 0; /// liter
meterRslt.VolumeMeter = (meterRslt.PulsesPerLiter <= float.Epsilon) ? 0 : meterRslt.PulsesMeter / meterRslt.PulsesPerLiter;
meterRslt.VolumeRef = tstRslt.ConstMaster * meterRslt.PulsesMaster; /// liter
meterRslt.TestTime = tstRslt.TestTime;
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
meterRslt.Passed = (meterRslt.Error >= test.ErrLimLo + test.Uncertainty)
&& (meterRslt.Error <= test.ErrLimHi - test.Uncertainty);
meterRslt.TestDone = meterRslt.Passed;
}
}
}
/// Add data - end
}
/// Update modeless dialog error information
Bridge.OnAdjustmentInProgress(this, new AdjustmentInProgressEventArgs(tstRslt));
@ -365,11 +352,10 @@ namespace TBF.BenchControl.TestMethods.Adjustment
///
/// Add to results (after user quits the adjustment loop)
///
AddOrOverwriteResult(tstRslt);
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(tstRslt));
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(testName));
/// Append the results to the CSV-file
allResults.Info(TestResult2CsvLine(tstRslt));
allResults.Info(TestResult2CsvLine(testName, test.Part));
stopTest:

View File

@ -134,7 +134,7 @@ namespace TBF.BenchControl.TestMethods.CameraRoiDetection
/// Quit this sequence ///
///----------------------///
State.Create("FlyingStartCollectionMethod : Stopping diverter, gate, etc.")
State.Create("RoiDetection : Stopping diverter, gate, etc.")
.AddOperation(checkUiOp)
.AddOperation(cBrd.StopPreviousOp())
.EnterState();

View File

@ -61,10 +61,12 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters
loop:
/// Start the test, initialize test results
Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, repetitionNr, inPath, benchPath, outPath, sensPath, totalPulses));
Config.Entities.TestResult tstRslt = new Config.Entities.TestResult(test, repetitionNr, Config.Entities.MetersKind.Combined);
string testName = Results.Utils.GetTestName(test.Name, test.Repeats, repetitionNr);
TestStartTime = DateTime.Now;
int flowSetTime0 = StateMachine.Time;
int flowSetTime = 0;
float estFlowSetTime = 10.0f;
//------------------------------------------------
@ -80,9 +82,9 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@ -97,9 +99,9 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@ -152,9 +154,9 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.OpArgumentError)) { retVal = Event.OpArgumentError; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
@ -221,8 +223,7 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters
}
while (!e.Contains(Event.BalanceDone));
tstRslt.TimeStart = DateTime.Now;
tstRslt.MassStartRaw = startMass.Val;
StartMassRaw = startMass.Val;
Mass.Val = startMass.Val;
//------------------------------------------------
@ -247,8 +248,7 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters
queryEnd1 = cBrd.QueryMeasurementEndOp();
queryEnd2 = cBrd.QueryMeasurementEndOp();
bool firstTime = true; /// To reset sums for averaging
ResetAveragedData();
ClearAllStatistics();
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
/// Measurement loop - begin
@ -272,30 +272,10 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters
Bridge.OnActivity(this, string.Format("{0} ... {1} s", Strings.Test_in_progress, remainingTime));
}
if (firstTime)
{
firstTime = false; /// Do the following only once
tstRslt.TempInStart = TempIn.Val;
tstRslt.TempOutStart = TempOut.Val;
tstRslt.TempDivStart = TempDiv.Val;
tstRslt.PressInStart = PressureUp.Val;
tstRslt.PressOutStart = PressureDown.Val;
}
tstRslt.TempInEnd = TempIn.Val;
tstRslt.TempOutEnd = TempOut.Val;
tstRslt.TempDivEnd = TempDiv.Val;
tstRslt.PressInEnd = PressureUp.Val;
tstRslt.PressOutEnd = PressureDown.Val;
tstRslt.MassEndRaw = Mass.Val;
AccumulateAveragedData();
UpdateAllStatistics();
CurrentMassRaw = Mass.Val;
RefFreq.Val = cBrd.ReferenceFreq;
RefFlow.Val = cBrd.ReferenceFlow;
tstRslt.AmbientTempAve = AmbientTemp.Val;
tstRslt.AmbientPressAve = AmbientPressure.Val;
tstRslt.AmbientHumiAve = AmbientHumidity.Val;
string logstr = string.Format("E={0} f={1} q={2}", cBrd.EtPulses(0), cBrd.ReferenceFreq,
cBrd.ReferenceFlow * outPath.FlowMeter.NominalFlow);
@ -306,17 +286,18 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters
log.Debug(logstr);
float progress = Formulas.TestProgress(cBrd.EtPulses(0), totalPulses, estFlowSetTime, test.TstTime);
TestProgressEventArgs data = GetTestProgressData(test, tstRslt, true, cBrd, cBrd.TTime, progress);
for (int i = 0; i < Config.Data.CompoundWMsCount; i++)
{
data.TestResult.CombinedMeters[i].VolumeMeter = data.TestResult.Meters[2 * i].VolumeMeter
+ data.TestResult.Meters[2 * i + 1].VolumeMeter;
if (data.Volume.Valid)
{
data.TestResult.CombinedMeters[i].VolumeErrorPct =
Formulas.ErrorFromVolumes(data.TestResult.CombinedMeters[i].VolumeMeter, data.Volume.Val);
}
}
TestProgressEventArgs data = GetTestProgressData(test, repetitionNr, true, cBrd, cBrd.TTime, progress);
/// TODO: Reimplement
//for (int i = 0; i < Config.Data.CompoundWMsCount; i++)
//{
// data.TestResult.CombinedMeters[i].VolumeMeter = data.TestResult.Meters[2 * i].VolumeMeter
// + data.TestResult.Meters[2 * i + 1].VolumeMeter;
// if (data.Volume.Valid)
// {
// data.TestResult.CombinedMeters[i].VolumeErrorPct =
// Formulas.ErrorFromVolumes(data.TestResult.CombinedMeters[i].VolumeMeter, data.Volume.Val);
// }
//}
Bridge.OnTestProgress(this, data);
}
/// Measurement loop - end
@ -361,8 +342,8 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters
}
while (!e.Contains(Event.BalanceDone));
///
tstRslt.MassEndRaw = endMass.Val;
tstRslt.TimeEnd = DateTime.Now;
EndMassRaw = endMass.Val;
TestEndTime = DateTime.Now;
//------------------------------------------------
Bridge.OnActivity(this, Strings.Test_completed);
@ -371,107 +352,121 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters
/// Make sure the CycleBeginForm is closed so that water meter data (s/n) can be copied into results
if (UIFlowControl.Stop == WaitBeginFormClosed()) goto stopTest;
/// Optionally supress pulses from the large water meter
if (testParams.SupressTrills)
{
for (int i = 0; i < tstRslt.Meters.Count; i += 2)
{
WMPulses[i] = 0;
tstRslt.Meters[i].PulsesMeter = 0;
}
}
///
/// Populate TestResult data entity with data
///
UpdateTestRsltWithAveragedData(tstRslt);
Results.Entities.TestRslt tstRslt = BatchRslts.GetTestRslt(testName, test.Part);
tstRslt.BatchNr = Program.LocalSettings.BatchNr;
tstRslt.MassStart = Formulas.CorrectedValue(tstRslt.MassStartRaw, outPath.Balance.Corrections);
tstRslt.MassEnd = Formulas.CorrectedValue(tstRslt.MassEndRaw, outPath.Balance.Corrections);
tstRslt.MassDiff = tstRslt.MassEnd - tstRslt.MassStart;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
tstRslt.Time = cBrd.TTime; /// [s] measurement time
tstRslt.FlowMass = 3600.0f * tstRslt.MassDiff / tstRslt.Time; /// [kg/h]
tstRslt.FlowVolume = 3600.0f * ltrPerRefPulse * cBrd.EtPulses(0) / tstRslt.Time; /// [l/h]
tstRslt.VolumeCTV = 1.00103f * 1000.0f * tstRslt.MassDiff / tstRslt.DensityOut; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.VolumeMaster = ltrPerRefPulse * cBrd.EtPulses(0); /// [l] volume from the master flow meter
tstRslt.PulsesMaster = cBrd.EtPulses(0); /// Pulses of the master flow meter (test total)
tstRslt.ConstMaster = ltrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster; /// Corrected master pulses per liter
if (tstRslt.VolumeCTV <= float.Epsilon)
{
tstRslt.ErrorMaster = 0.1f;
}
else
{
tstRslt.ErrorMaster = 100 * (tstRslt.VolumeMaster - tstRslt.VolumeCTV) / tstRslt.VolumeCTV;
}
tstRslt.TimeDivStart0 = 0;
tstRslt.TimeDivStart1 = 0;
tstRslt.TimeDivStart2 = 0;
tstRslt.TimeDivStart3 = 0;
tstRslt.TimeDivStart4 = 0;
tstRslt.TimeDivStart5 = 0;
tstRslt.TimeDivEnd0 = 0;
tstRslt.TimeDivEnd1 = 0;
tstRslt.TimeDivEnd2 = 0;
tstRslt.TimeDivEnd3 = 0;
tstRslt.TimeDivEnd4 = 0;
tstRslt.TimeDivEnd5 = 0;
for (int iCmbnd = 0; iCmbnd < Config.Data.CompoundWMsCount; iCmbnd++)
if (tstRslt != null)
{
tstRslt.CombinedMeters[iCmbnd].VolumeRef = tstRslt.VolumeCTV; /// [l] must be calculated before main & aux. meter error
for (int i = 2 * iCmbnd; i < 2 * iCmbnd + 2; i++)
/// Auxiliary results
tstRslt.AmbientTempAve = AmbientTempStat.Average;
tstRslt.AmbientPressAve = AmbientPressureStat.Average;
tstRslt.AmbientHumiAve = AmbientHumidityStat.Average;
tstRslt.PressUpAvrg = PressureUpStat.Average;
tstRslt.PressUpStart = PressureUpStat.First;
tstRslt.PressUpEnd = PressureUpStat.Last;
tstRslt.PressUpMin = PressureUpStat.Min;
tstRslt.PressUpMax = PressureUpStat.Max;
tstRslt.PressDownAvrg = PressureDownStat.Average;
tstRslt.PressDownStart = PressureDownStat.First;
tstRslt.PressDownEnd = PressureDownStat.Last;
tstRslt.PressDownMin = PressureDownStat.Min;
tstRslt.PressDownMax = PressureDownStat.Max;
tstRslt.TempInAvrg = TempInStat.Average;
tstRslt.TempInStart = TempInStat.First;
tstRslt.TempInEnd = TempInStat.Last;
tstRslt.TempInMin = TempInStat.Min;
tstRslt.TempInMax = TempInStat.Max;
tstRslt.TempOutAvrg = TempOutStat.Average;
tstRslt.TempOutStart = TempOutStat.First;
tstRslt.TempOutEnd = TempOutStat.Last;
tstRslt.TempOutMin = TempOutStat.Min;
tstRslt.TempOutMax = TempOutStat.Max;
tstRslt.TempDivAvrg = TempDivStat.Average;
tstRslt.TempDivStart = TempDivStat.First;
tstRslt.TempDivEnd = TempDivStat.Last;
tstRslt.TempDivMin = TempDivStat.Min;
tstRslt.TempDivMax = TempDivStat.Max;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
/// Main results
tstRslt.StartTime = TestStartTime;
tstRslt.EndTime = TestEndTime;
tstRslt.FlowSetTime = flowSetTime;
tstRslt.TestTime = cBrd.TTime; /// [s] measurement time
tstRslt.PulsesMaster = Convert.ToDouble(cBrd.EtPulses(0)); /// Pulses of the master flow meter (test total)
tstRslt.MassStartRaw = startMass.Val;
tstRslt.MassStart = Formulas.CorrectedValue(tstRslt.MassStartRaw, outPath.Balance.Corrections);
tstRslt.MassEndRaw = endMass.Val;
tstRslt.MassEnd = Formulas.CorrectedValue(tstRslt.MassEndRaw, outPath.Balance.Corrections);
tstRslt.FlowMass = 3600.0 * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.TestTime; /// [kg/h]
tstRslt.FlowVolume = 3.6 * ltrPerRefPulse * tstRslt.PulsesMaster / tstRslt.TestTime; /// [m3/h]
tstRslt.VolumeCTV = 1001.03 * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.DensityOut; /// [l] 1001.03f is because density is in [kg/m3]
tstRslt.VolumeMaster = ltrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
tstRslt.ConstMaster = ltrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster; /// Corrected master pulses per liter
tstRslt.ErrorMaster = Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.VolumeCTV);
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{
if (sensPath.RegisterReaders[i] == null || sensPath.RegisterReaders[i].PulsesPerLtr <= float.Epsilon)
{
tstRslt.Meters[i].PulsesPerLiter = 1.0f;
tstRslt.Meters[i].VolumeMeter = 0;
}
else
{
tstRslt.Meters[i].PulsesPerLiter = sensPath.RegisterReaders[i].PulsesPerLtr;
tstRslt.Meters[i].VolumeMeter = Convert.ToSingle(WMPulses[i]) / sensPath.RegisterReaders[i].PulsesPerLtr;
}
Results.Entities.MeterTestRslt mainMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.CompoundMain);
Results.Entities.MeterTestRslt auxMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.CompoundAux);
tstRslt.Meters[i].SerialNr = (WaterMeters.Count > i) ? WaterMeters[i].SerialNr : string.Empty;
tstRslt.Meters[i].VolumeStart = 0; /// [l]
tstRslt.Meters[i].VolumeEnd = 0; /// [l]
tstRslt.Meters[i].VolumeRef = tstRslt.VolumeCTV; /// [l]
if (WMRefPulses[i] != 0)
for (int isAux = 0; isAux <= 1; isAux++) /// 0=main, 1=aux
{
tstRslt.Meters[i].VolumeMeter *= ((float)cBrd.EtPulses(0) / (float)WMRefPulses[i]);
GenericDevices.IRegisterReader regReader = sensPath.RegisterReaders[2 * i + isAux];
Results.Entities.MeterTestRslt meterRslt = (isAux == 0) ? mainMeterRslt : auxMeterRslt;
if (meterRslt != null && regReader != null)
{
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
/// Optionally supress pulses from the large water meter
meterRslt.PulsesMeter = (isAux == 0 && testParams.SupressTrills) ? 0 : Convert.ToDouble(WMPulses[2 * i + isAux]);
meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[2 * i + isAux]);
meterRslt.TestTime = tstRslt.TestTime;
meterRslt.VolumeStart = 0;
meterRslt.VolumeEnd = 0;
meterRslt.VolumeRef = tstRslt.VolumeCTV;
meterRslt.VolumeMeter = (regReader.PulsesPerLtr <= float.Epsilon)
? 0 : meterRslt.PulsesMeter / meterRslt.PulsesPerLiter;
if (meterRslt.PulsesMaster != 0)
{
meterRslt.VolumeMeter *= (tstRslt.PulsesMaster / meterRslt.PulsesMaster);
}
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, tstRslt.VolumeCTV); /// Main/Aux meter error is not usedfor evaluation
}
}
tstRslt.Meters[i].PulsesMeter = WMPulses[i];
tstRslt.Meters[i].PulsesMaster = WMRefPulses[i];
tstRslt.Meters[i].Time = cBrd.TTime;
Results.Entities.MeterTestRslt compoundMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Compound);
tstRslt.Meters[i].VolumeErrorPct = Formulas.ErrorFromVolumes(tstRslt.Meters[i].VolumeMeter, tstRslt.CombinedMeters[iCmbnd].VolumeRef); /// Not used
if (compoundMeterRslt != null && mainMeterRslt != null && auxMeterRslt != null)
{
compoundMeterRslt.VolumeRef = tstRslt.VolumeCTV;
compoundMeterRslt.VolumeMeter = mainMeterRslt.VolumeMeter + auxMeterRslt.VolumeMeter;
compoundMeterRslt.PulsesMaster = tstRslt.PulsesMaster;
compoundMeterRslt.TestTime = tstRslt.TestTime;
compoundMeterRslt.Error = Formulas.ErrorFromVolumes(compoundMeterRslt.VolumeMeter, compoundMeterRslt.VolumeRef);
compoundMeterRslt.Passed = (compoundMeterRslt.Error >= test.ErrLimLo + test.Uncertainty)
&& (compoundMeterRslt.Error <= test.ErrLimHi - test.Uncertainty);
mainMeterRslt.Passed = auxMeterRslt.Passed = compoundMeterRslt.Passed;
mainMeterRslt.TestDone = auxMeterRslt.TestDone = compoundMeterRslt.TestDone = true;
}
}
tstRslt.CombinedMeters[iCmbnd].VolumeMeter = tstRslt.Meters[2 * iCmbnd].VolumeMeter + tstRslt.Meters[2 * iCmbnd + 1].VolumeMeter;
tstRslt.CombinedMeters[iCmbnd].PulsesMaster = cBrd.EtPulses(0);
tstRslt.CombinedMeters[iCmbnd].Time = cBrd.TTime;
tstRslt.CombinedMeters[iCmbnd].VolumeErrorPct = Formulas.ErrorFromVolumes(tstRslt.CombinedMeters[iCmbnd].VolumeMeter, tstRslt.CombinedMeters[iCmbnd].VolumeRef);
tstRslt.CombinedMeters[iCmbnd].Passed = (tstRslt.CombinedMeters[iCmbnd].VolumeErrorPct >= tstRslt.ErrLimLo + tstRslt.Uncertainty)
&& (tstRslt.CombinedMeters[iCmbnd].VolumeErrorPct <= tstRslt.ErrLimHi - tstRslt.Uncertainty);
}
/// Add data - end
AddOrOverwriteResult(tstRslt);
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(tstRslt));
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(testName));
/// Append the results to the CSV-file
allResults.Info(TestResult2CsvLine(tstRslt));
allResults.Info(TestResult2CsvLine(testName, test.Part));
if (++repetitionNr <= test.Repeats)

View File

@ -78,8 +78,11 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
loop:
/// Start the test, initialize test results
Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, repetitionNr, inPath, benchPath, outPath, sensPath, (int)totalPulses));
Config.Entities.TestResult tstRslt = new Config.Entities.TestResult(test, repetitionNr, Config.Entities.MetersKind.Combined);
string testName = Results.Utils.GetTestName(test.Name, test.Repeats, repetitionNr);
TestStartTime = DateTime.Now;
Qrise = 0;
Qfall = 0;
if (!test.Emptying) /// Do not skip emptying if test.Emptying==true
{
@ -112,7 +115,8 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
switching_flow_detection:
int flowSetTime0 = StateMachine.Time;
int flowDetectTime0 = StateMachine.Time;
int flowDetectTime = 0;
float estFlowSetTime = 100.0f;
/// Extract cameras from the current sensors path, add operations to the detection state
@ -136,9 +140,9 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
flowDetectTime = StateMachine.Time - flowDetectTime0;
float progress = Formulas.TestProgress(flowDetectTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowDetectTime, progress));
if (e.Contains(Event.UiCmdStop)) goto stopTest;
}
@ -154,9 +158,9 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
flowDetectTime = StateMachine.Time - flowDetectTime0;
float progress = Formulas.TestProgress(flowDetectTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowDetectTime, progress));
if (e.Contains(Event.UiCmdStop)) goto stopTest;
if (e.Contains(Event.RegulValveTimeOut))
@ -210,9 +214,9 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
flowDetectTime = StateMachine.Time - flowDetectTime0;
float progress = Formulas.TestProgress(flowDetectTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowDetectTime, progress));
if (e.Contains(Event.UiCmdStop)) goto stopTest;
}
@ -310,30 +314,29 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
if (rvPulse > 0)
{
Qrise = detectedFlow;
tstRslt.QRise = detectedFlow;
}
else
{
Qfall = detectedFlow;
tstRslt.QFall = detectedFlow;
}
UiBridge.Bridge.OnLog(this, string.Format("detected flow={0}\r\n", detectedFlow.ToString("F2")));
float qfrom_test = detectedFlow + testParams.RelativeQfrom;
float qto_test = detectedFlow + testParams.RelativeQto;
float qfrom_detected = detectedFlow + testParams.RelativeQfrom;
float qto_detected = detectedFlow + testParams.RelativeQto;
/// Update test results with the test flow determined from the detected switching flow
tstRslt.Qfrom = qfrom_test;
tstRslt.Qto = qto_test;
float Qave_lps = (qfrom_test + qto_test) / 7.2f;
tstRslt.TstTime = tstRslt.Volume / Qave_lps;
float Qave_lps = (qfrom_detected + qto_detected) / 7.2f;
float testTimeFromDetectedFlow = test.Volume / Qave_lps; /// Test volume wont be changed
float relativeQave = (testParams.RelativeQfrom + testParams.RelativeQto) / 2.0f;
bool goBackToInitFlow = ((rvPulse > 0) && (relativeQave < 0)) ||
((rvPulse < 0) && (relativeQave > 0));
if (goBackToInitFlow)
int flowSetTime0 = StateMachine.Time;
int flowSetTime = 0;
if (goBackToInitFlow)
{
//--------------------------------
State.Create("CombinedWithDetection : Switching flow detected, going back")
@ -345,9 +348,9 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) goto stopTest;
if (e.Contains(Event.RegulValveTimeOut))
@ -364,16 +367,16 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
//State.Create("set_RV_position",
.AddOperation(checkUiOp)
.AddOperations(measureOperations)
.AddOperation(outPath.RegulValve.SetFlowOp(outPath.FlowMeter, qfrom_test, qto_test, outPath.PidCoef, RefFlow, 600)) /// timeout = 10 sec.
.AddOperation(outPath.RegulValve.SetFlowOp(outPath.FlowMeter, qfrom_detected, qto_detected, outPath.PidCoef, RefFlow, 600)) /// timeout = 10 sec.
//.AddOp(pOut.RegulValve.SetPositionOp(35.0f, 38.0f, uint.MaxValue))
.EnterState();
do
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, testTimeFromDetectedFlow);
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) goto stopTest;
//if (e.Contains(Event.FlowTimeOut)) goto do_detection;
@ -399,8 +402,7 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
}
while (!e.Contains(Event.BalanceDone));
tstRslt.TimeStart = DateTime.Now;
tstRslt.MassStartRaw = startMass.Val;
StartMassRaw = startMass.Val;
Mass.Val = startMass.Val;
//------------------------------------------------
@ -410,7 +412,7 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
.AddOperation(checkUiOp)
.AddOperations(measureOperations)
.AddOperation(cBrd.StartMeasurementOp(outPath, Elde.TestMethods.Diverter | Elde.TestMethods.Synchro,
test.Qfrom, test.Qto, totalPulses, (float)test.TolerRed))
qfrom_detected, qto_detected, totalPulses, (float)test.TolerRed))
.EnterState();
do
{
@ -426,9 +428,8 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
queryEnd1 = cBrd.QueryMeasurementEndOp();
queryEnd2 = cBrd.QueryMeasurementEndOp();
bool firstTime = true; /// Used to reset sums for averaging
ResetAveragedData();
int estimtdEndTime = StateMachine.Time + (int)tstRslt.TstTime;
ClearAllStatistics();
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
/// Measurement loop - begin
while (true)
@ -451,25 +452,8 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
Bridge.OnActivity(this, string.Format("{0} ... {1} s", Strings.Test_in_progress, remainingTime));
}
if (firstTime)
{
firstTime = false; /// Do the following only once
tstRslt.TempInStart = TempIn.Val;
tstRslt.TempOutStart = TempOut.Val;
tstRslt.TempDivStart = TempDiv.Val;
tstRslt.PressInStart = PressureUp.Val;
tstRslt.PressOutStart = PressureDown.Val;
}
tstRslt.TempInEnd = TempIn.Val;
tstRslt.TempOutEnd = TempOut.Val;
tstRslt.TempDivEnd = TempDiv.Val;
tstRslt.PressInEnd = PressureUp.Val;
tstRslt.PressOutEnd = PressureDown.Val;
tstRslt.MassEndRaw = Mass.Val;
AccumulateAveragedData();
UpdateAllStatistics();
CurrentMassRaw = Mass.Val;
string logstr = string.Format("E={0} f={1} q={2}", cBrd.EtPulses(0), cBrd.ReferenceFreq,
cBrd.ReferenceFlow * outPath.FlowMeter.NominalFlow);
@ -481,17 +465,18 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
float progress = Formulas.TestProgress(cBrd.EtPulses(0), totalPulses, estFlowSetTime, test.TstTime);
TestProgressEventArgs data = GetTestProgressData(test, tstRslt, true, cBrd, cBrd.TTime, progress);
for (int i = 0; i < Config.Data.CompoundWMsCount; i++)
{
data.TestResult.CombinedMeters[i].VolumeMeter = data.TestResult.Meters[2 * i].VolumeMeter
+ data.TestResult.Meters[2 * i + 1].VolumeMeter;
if (data.Volume.Valid)
{
data.TestResult.CombinedMeters[i].VolumeErrorPct =
Formulas.ErrorFromVolumes(data.TestResult.CombinedMeters[i].VolumeMeter, data.Volume.Val);
}
}
TestProgressEventArgs data = GetTestProgressData(test, repetitionNr, true, cBrd, cBrd.TTime, progress);
/// TODO: Reimplement
//for (int i = 0; i < Config.Data.CompoundWMsCount; i++)
//{
// data.TestResult.CombinedMeters[i].VolumeMeter = data.TestResult.Meters[2 * i].VolumeMeter
// + data.TestResult.Meters[2 * i + 1].VolumeMeter;
// if (data.Volume.Valid)
// {
// data.TestResult.CombinedMeters[i].VolumeErrorPct =
// Formulas.ErrorFromVolumes(data.TestResult.CombinedMeters[i].VolumeMeter, data.Volume.Val);
// }
//}
Bridge.OnTestProgress(this, data);
}
/// Measurement loop - end
@ -514,8 +499,8 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
}
while (!e.Contains(Event.BalanceDone));
///
tstRslt.MassEndRaw = endMass.Val;
tstRslt.TimeEnd = DateTime.Now;
EndMassRaw = endMass.Val;
TestEndTime = DateTime.Now;
//------------------------------------------------
Bridge.OnActivity(this, Strings.Test_completed);
@ -546,110 +531,127 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
}
while (!e.Contains(Event.PreviousStopped));
/// Make sure the CycleBeginForm is closed so that water meter data (s/n) can be copied into results
/// Make sure the CycleBeginForm is closed so that water meter data (s/n) can be copied into results
if (UIFlowControl.Stop == WaitBeginFormClosed()) goto stopTest;
/// Optionally supress pulses from the large water meter
if (testParams.SupressTrills)
{
for (int i = 0; i < tstRslt.Meters.Count; i += 2)
{
WMPulses[i] = 0;
tstRslt.Meters[i].PulsesMeter = 0;
}
}
///
/// Populate TestResult data entity with data
///
UpdateTestRsltWithAveragedData(tstRslt);
Results.Entities.TestRslt tstRslt = BatchRslts.GetTestRslt(testName, test.Part);
tstRslt.BatchNr = Program.LocalSettings.BatchNr;
tstRslt.MassStart = Formulas.CorrectedValue(tstRslt.MassStartRaw, outPath.Balance.Corrections);
tstRslt.MassEnd = Formulas.CorrectedValue(tstRslt.MassEndRaw, outPath.Balance.Corrections);
tstRslt.MassDiff = tstRslt.MassEnd - tstRslt.MassStart;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
tstRslt.Time = cBrd.TTime; /// [s] measurement time
tstRslt.FlowMass = 3600.0f * tstRslt.MassDiff / tstRslt.Time; /// [kg/h]
tstRslt.FlowVolume = 3600.0f * ltrPerRefPulse * cBrd.EtPulses(0) / tstRslt.Time; /// [l/h]
tstRslt.VolumeCTV = 1.00103f * 1000.0f * tstRslt.MassDiff / tstRslt.DensityOut; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.VolumeMaster = ltrPerRefPulse * cBrd.EtPulses(0); /// [l] volume from the master flow meter
tstRslt.PulsesMaster = cBrd.EtPulses(0); /// Pulses of the master flow meter (test total)
tstRslt.ConstMaster = ltrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster; /// Corrected master pulses per liter
if (tstRslt.VolumeCTV <= float.Epsilon)
{
tstRslt.ErrorMaster = 0.1f;
}
else
{
tstRslt.ErrorMaster = 100 * (tstRslt.VolumeMaster - tstRslt.VolumeCTV) / tstRslt.VolumeCTV;
}
tstRslt.TimeDivStart0 = 0;
tstRslt.TimeDivStart1 = 0;
tstRslt.TimeDivStart2 = 0;
tstRslt.TimeDivStart3 = 0;
tstRslt.TimeDivStart4 = 0;
tstRslt.TimeDivStart5 = 0;
tstRslt.TimeDivEnd0 = 0;
tstRslt.TimeDivEnd1 = 0;
tstRslt.TimeDivEnd2 = 0;
tstRslt.TimeDivEnd3 = 0;
tstRslt.TimeDivEnd4 = 0;
tstRslt.TimeDivEnd5 = 0;
for (int iCmbnd = 0; iCmbnd < Config.Data.CompoundWMsCount; iCmbnd++)
if (tstRslt != null)
{
for (int i = 2 * iCmbnd; i < 2 * iCmbnd + 2; i++)
/// Auxiliary results
tstRslt.AmbientTempAve = AmbientTempStat.Average;
tstRslt.AmbientPressAve = AmbientPressureStat.Average;
tstRslt.AmbientHumiAve = AmbientHumidityStat.Average;
tstRslt.PressUpAvrg = PressureUpStat.Average;
tstRslt.PressUpStart = PressureUpStat.First;
tstRslt.PressUpEnd = PressureUpStat.Last;
tstRslt.PressUpMin = PressureUpStat.Min;
tstRslt.PressUpMax = PressureUpStat.Max;
tstRslt.PressDownAvrg = PressureDownStat.Average;
tstRslt.PressDownStart = PressureDownStat.First;
tstRslt.PressDownEnd = PressureDownStat.Last;
tstRslt.PressDownMin = PressureDownStat.Min;
tstRslt.PressDownMax = PressureDownStat.Max;
tstRslt.TempInAvrg = TempInStat.Average;
tstRslt.TempInStart = TempInStat.First;
tstRslt.TempInEnd = TempInStat.Last;
tstRslt.TempInMin = TempInStat.Min;
tstRslt.TempInMax = TempInStat.Max;
tstRslt.TempOutAvrg = TempOutStat.Average;
tstRslt.TempOutStart = TempOutStat.First;
tstRslt.TempOutEnd = TempOutStat.Last;
tstRslt.TempOutMin = TempOutStat.Min;
tstRslt.TempOutMax = TempOutStat.Max;
tstRslt.TempDivAvrg = TempDivStat.Average;
tstRslt.TempDivStart = TempDivStat.First;
tstRslt.TempDivEnd = TempDivStat.Last;
tstRslt.TempDivMin = TempDivStat.Min;
tstRslt.TempDivMax = TempDivStat.Max;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
/// Main results
tstRslt.StartTime = TestStartTime;
tstRslt.EndTime = TestEndTime;
tstRslt.FlowSetTime = flowSetTime;
tstRslt.TestTime = cBrd.TTime; /// [s] measurement time
tstRslt.PulsesMaster = Convert.ToDouble(cBrd.EtPulses(0)); /// Pulses of the master flow meter (test total)
tstRslt.MassStartRaw = startMass.Val;
tstRslt.MassStart = Formulas.CorrectedValue(tstRslt.MassStartRaw, outPath.Balance.Corrections);
tstRslt.MassEndRaw = endMass.Val;
tstRslt.MassEnd = Formulas.CorrectedValue(tstRslt.MassEndRaw, outPath.Balance.Corrections);
tstRslt.FlowMass = 3600.0 * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.TestTime; /// [kg/h]
tstRslt.FlowVolume = 3.6 * ltrPerRefPulse * cBrd.EtPulses(0) / tstRslt.TestTime; /// [m3/h]
tstRslt.VolumeCTV = 1001.03 * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.DensityOut; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.VolumeMaster = ltrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
tstRslt.ConstMaster = ltrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster; /// Corrected master pulses per liter
tstRslt.ErrorMaster = Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.VolumeCTV);
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{
if (sensPath.RegisterReaders[i] == null || sensPath.RegisterReaders[i].PulsesPerLtr <= float.Epsilon)
{
tstRslt.Meters[i].VolumeMeter = 0;
}
else
{
tstRslt.Meters[i].PulsesPerLiter = (sensPath.RegisterReaders[i] == null ? 1.0f : sensPath.RegisterReaders[i].PulsesPerLtr);
tstRslt.Meters[i].VolumeMeter = Convert.ToSingle(WMPulses[i]) / sensPath.RegisterReaders[i].PulsesPerLtr;
}
Results.Entities.MeterTestRslt mainMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.CompoundMain);
Results.Entities.MeterTestRslt auxMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.CompoundAux);
tstRslt.Meters[i].SerialNr = (WaterMeters.Count > i) ? WaterMeters[i].SerialNr : string.Empty;
tstRslt.Meters[i].VolumeStart = 0; /// liter
tstRslt.Meters[i].VolumeEnd = 0; /// liter
tstRslt.Meters[i].VolumeRef = tstRslt.VolumeCTV; /// liter
if (WMRefPulses[i] != 0)
for (int isAux = 0; isAux <= 1; isAux++) /// 0=main, 1=aux
{
tstRslt.Meters[i].VolumeMeter *= ((float)cBrd.EtPulses(0) / (float)WMRefPulses[i]);
GenericDevices.IRegisterReader regReader = sensPath.RegisterReaders[2 * i + isAux];
Results.Entities.MeterTestRslt meterRslt = (isAux == 0) ? mainMeterRslt : auxMeterRslt;
if (meterRslt != null && regReader != null)
{
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
/// Optionally supress pulses from the large water meter
meterRslt.PulsesMeter = (isAux == 0 && testParams.SupressTrills) ? 0 : Convert.ToDouble(WMPulses[2 * i + isAux]);
meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[2 * i + isAux]);
meterRslt.TestTime = cBrd.TTime;
meterRslt.VolumeStart = 0;
meterRslt.VolumeEnd = 0;
meterRslt.VolumeRef = tstRslt.VolumeCTV;
meterRslt.VolumeMeter = (regReader.PulsesPerLtr <= float.Epsilon)
? 0 : meterRslt.PulsesMeter / meterRslt.PulsesPerLiter;
if (meterRslt.PulsesMaster != 0)
{
meterRslt.VolumeMeter *= (tstRslt.PulsesMaster / meterRslt.PulsesMaster);
}
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, tstRslt.VolumeCTV); /// Main/Aux meter error is not usedfor evaluation
}
}
tstRslt.Meters[i].PulsesMeter = WMPulses[i];
tstRslt.Meters[i].PulsesMaster = WMRefPulses[i];
tstRslt.Meters[i].Time = cBrd.TTime;
Results.Entities.MeterTestRslt compoundMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Compound);
tstRslt.Meters[i].VolumeErrorPct = 0; /// Not used
if (compoundMeterRslt != null && mainMeterRslt != null && auxMeterRslt != null)
{
compoundMeterRslt.VolumeRef = tstRslt.VolumeCTV;
compoundMeterRslt.VolumeMeter = mainMeterRslt.VolumeMeter + auxMeterRslt.VolumeMeter;
compoundMeterRslt.PulsesMaster = tstRslt.PulsesMaster;
compoundMeterRslt.TestTime = tstRslt.TestTime;
compoundMeterRslt.Error = Formulas.ErrorFromVolumes(compoundMeterRslt.VolumeMeter, compoundMeterRslt.VolumeRef);
compoundMeterRslt.Passed = (compoundMeterRslt.Error >= test.ErrLimLo + test.Uncertainty)
&& (compoundMeterRslt.Error <= test.ErrLimHi - test.Uncertainty);
mainMeterRslt.Passed = auxMeterRslt.Passed = compoundMeterRslt.Passed;
mainMeterRslt.TestDone = auxMeterRslt.TestDone = compoundMeterRslt.TestDone = true;
if (Qrise != 0) BatchRslts.WaterMeters[i].QRise = Qrise;
if (Qfall != 0) BatchRslts.WaterMeters[i].QFall = Qfall;
}
}
tstRslt.CombinedMeters[iCmbnd].VolumeRef = tstRslt.VolumeCTV; /// liter
tstRslt.CombinedMeters[iCmbnd].VolumeMeter = tstRslt.Meters[2 * iCmbnd].VolumeMeter + tstRslt.Meters[2 * iCmbnd + 1].VolumeMeter;
tstRslt.CombinedMeters[iCmbnd].PulsesMaster = cBrd.EtPulses(0);
tstRslt.CombinedMeters[iCmbnd].Time = cBrd.TTime;
tstRslt.CombinedMeters[iCmbnd].VolumeErrorPct = Formulas.ErrorFromVolumes(tstRslt.CombinedMeters[iCmbnd].VolumeMeter, tstRslt.CombinedMeters[iCmbnd].VolumeRef);
tstRslt.CombinedMeters[iCmbnd].Passed = (tstRslt.CombinedMeters[iCmbnd].VolumeErrorPct >= tstRslt.ErrLimLo + tstRslt.Uncertainty)
&& (tstRslt.CombinedMeters[iCmbnd].VolumeErrorPct <= tstRslt.ErrLimHi - tstRslt.Uncertainty);
}
/// Add data - end
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(tstRslt));
AddOrOverwriteResult(tstRslt);
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(testName));
/// Append the results to the CSV-file
allResults.Info(TestResult2CsvLine(tstRslt));
allResults.Info(TestResult2CsvLine(testName, test.Part));
if (++repetitionNr <= test.Repeats)
{

View File

@ -62,10 +62,12 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
loop:
/// Start the test, initialize test results
Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, repetitionNr, inPath, benchPath, outPath, sensPath, totalPulses));
Config.Entities.TestResult tstRslt = new Config.Entities.TestResult(test, repetitionNr, Config.Entities.MetersKind.Single);
string testName = Results.Utils.GetTestName(test.Name, test.Repeats, repetitionNr);
TestStartTime = DateTime.Now;
int flowSetTime0 = StateMachine.Time;
int flowSetTime = 0;
float estFlowSetTime = 10.0f;
//------------------------------------------------
@ -81,9 +83,9 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@ -98,9 +100,9 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@ -154,9 +156,9 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@ -171,9 +173,9 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.OpArgumentError)) { retVal = Event.OpArgumentError; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
@ -239,9 +241,6 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
for (int i = 0; i < Config.Data.WMsCount; i++)
{
tstRslt.Meters[i].VolumeStart = dataEntryCmpnt.WMStartState(i); /// Units: 1 liter
///-----
BenchControl.Elde.FixedStartRegisterReader.RegisterReader registerReader =
sensPath.RegisterReaders[i] as BenchControl.Elde.FixedStartRegisterReader.RegisterReader;
@ -275,8 +274,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
}
while (!e.Contains(Event.BalanceDone));
tstRslt.TimeStart = DateTime.Now;
tstRslt.MassStartRaw = startMass.Val;
TestStartTime = DateTime.Now;
StartMassRaw = startMass.Val;
Mass.Val = startMass.Val;
//------------------------------------------------
@ -315,8 +314,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
queryEnd1 = cBrd.QueryMeasurementEndOp();
queryEnd2 = cBrd.QueryMeasurementEndOp();
bool firstTime = true; /// To reset sums for averaging
ResetAveragedData();
ClearAllStatistics();
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
/// Measurement loop - begin
@ -340,30 +338,10 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
Bridge.OnActivity(this, string.Format("{0} ... {1} s", Strings.Test_in_progress, remainingTime));
}
if (firstTime)
{
firstTime = false; /// Do the following only once
tstRslt.TempInStart = TempIn.Val;
tstRslt.TempOutStart = TempOut.Val;
tstRslt.TempDivStart = TempDiv.Val;
tstRslt.PressInStart = PressureUp.Val;
tstRslt.PressOutStart = PressureDown.Val;
}
tstRslt.TempInEnd = TempIn.Val;
tstRslt.TempOutEnd = TempOut.Val;
tstRslt.TempDivEnd = TempDiv.Val;
tstRslt.PressInEnd = PressureUp.Val;
tstRslt.PressOutEnd = PressureDown.Val;
tstRslt.MassEndRaw = Mass.Val;
AccumulateAveragedData();
UpdateAllStatistics();
CurrentMassRaw = Mass.Val;
RefFreq.Val = cBrd.ReferenceFreq;
RefFlow.Val = cBrd.ReferenceFlow;
tstRslt.AmbientTempAve = AmbientTemp.Val;
tstRslt.AmbientPressAve = AmbientPressure.Val;
tstRslt.AmbientHumiAve = AmbientHumidity.Val;
string logstr = string.Format("E={0} f={1} q={2}", cBrd.EtPulses(0), cBrd.ReferenceFreq,
cBrd.ReferenceFlow * outPath.FlowMeter.NominalFlow);
@ -375,7 +353,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
float progress = Formulas.TestProgress(cBrd.EtPulses(0), totalPulses, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, true, cBrd, cBrd.TTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, true, cBrd, cBrd.TTime, progress));
}
while (cBrd.EtPulses(0) < totalPulses);
/// Measurement loop - end
@ -442,8 +420,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
}
while (!e.Contains(Event.BalanceDone));
///
tstRslt.MassEndRaw = endMass.Val;
tstRslt.TimeEnd = DateTime.Now;
EndMassRaw = endMass.Val;
TestEndTime = DateTime.Now;
State.Create("FixedStartAdvanced : Stopping diverter, gate, etc.")
@ -458,11 +436,10 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
while (!e.Contains(Event.PreviousStopped));
tstRslt.MassStart = Formulas.CorrectedValue(tstRslt.MassStartRaw, outPath.Balance.Corrections);
tstRslt.MassEnd = Formulas.CorrectedValue(tstRslt.MassEndRaw, outPath.Balance.Corrections);
tstRslt.MassDiff = tstRslt.MassEnd - tstRslt.MassStart;
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.VolumeCTV = 1.00103f * 1000.0f * tstRslt.MassDiff / tstRslt.DensityOut; /// [l] 1000.0f is because density is in [kg/m3]
double massStart = Formulas.CorrectedValue(startMass.Val, outPath.Balance.Corrections);
double massEnd = Formulas.CorrectedValue(endMass.Val, outPath.Balance.Corrections);
double densityOut = Formulas.WaterDensityFromTemp(TempOutStat.Average);
double volumeCTV = 1.00103f * 1000.0f * (massEnd - massStart) / densityOut;
///
/// Enter watermeter end states here
@ -471,8 +448,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
{
Bridge.OnActivity(this, "Enter the water meter data");
State.Create("FixedStartAdvanced : Enter end-state")
.AddOperation(dataEntryCmpnt.ShowTestEndFormOp(tstRslt.VolumeCTV, tstRslt.ErrLimLo + tstRslt.Uncertainty,
tstRslt.ErrLimHi - tstRslt.Uncertainty))
.AddOperation(dataEntryCmpnt.ShowTestEndFormOp(volumeCTV, test.ErrLimLo + test.Uncertainty,
test.ErrLimHi - test.Uncertainty))
.AddOperation(checkUiOp)
.EnterState();
do
@ -485,9 +462,6 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
for (int i = 0; i < Config.Data.WMsCount; i++)
{
tstRslt.Meters[i].VolumeEnd = dataEntryCmpnt.WMEndState(i);
///-----
BenchControl.Elde.FixedStartRegisterReader.RegisterReader registerReader =
sensPath.RegisterReaders[i] as BenchControl.Elde.FixedStartRegisterReader.RegisterReader;
@ -506,82 +480,90 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
///
/// Populate TestResult data entity with data
///
UpdateTestRsltWithAveragedData(tstRslt);
Results.Entities.TestRslt tstRslt = BatchRslts.GetTestRslt(testName, test.Part);
tstRslt.BatchNr = Program.LocalSettings.BatchNr;
tstRslt.MassStart = Formulas.CorrectedValue(tstRslt.MassStartRaw, outPath.Balance.Corrections);
tstRslt.MassEnd = Formulas.CorrectedValue(tstRslt.MassEndRaw, outPath.Balance.Corrections);
tstRslt.MassDiff = tstRslt.MassEnd - tstRslt.MassStart;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
tstRslt.Time = cBrd.TTime; /// [s] measurement time
tstRslt.FlowMass = 3600.0f * tstRslt.MassDiff / tstRslt.Time; /// [kg/h]
tstRslt.FlowVolume = 3600.0f * ltrPerRefPulse * cBrd.EtPulses(0) / tstRslt.Time; /// [l/h]
tstRslt.VolumeCTV = 1.00103f * 1000.0f * tstRslt.MassDiff / tstRslt.DensityOut; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.VolumeMaster = ltrPerRefPulse * cBrd.EtPulses(0); /// [l] volume from the master flow meter
tstRslt.PulsesMaster = cBrd.EtPulses(0); /// Pulses of the master flow meter (test total)
tstRslt.ConstMaster = ltrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster; /// Corrected master pulses per liter
if (tstRslt != null)
{
/// Auxiliary results
tstRslt.AmbientTempAve = AmbientTempStat.Average;
tstRslt.AmbientPressAve = AmbientPressureStat.Average;
tstRslt.AmbientHumiAve = AmbientHumidityStat.Average;
tstRslt.PressUpAvrg = PressureUpStat.Average;
tstRslt.PressUpStart = PressureUpStat.First;
tstRslt.PressUpEnd = PressureUpStat.Last;
tstRslt.PressUpMin = PressureUpStat.Min;
tstRslt.PressUpMax = PressureUpStat.Max;
tstRslt.PressDownAvrg = PressureDownStat.Average;
tstRslt.PressDownStart = PressureDownStat.First;
tstRslt.PressDownEnd = PressureDownStat.Last;
tstRslt.PressDownMin = PressureDownStat.Min;
tstRslt.PressDownMax = PressureDownStat.Max;
tstRslt.TempInAvrg = TempInStat.Average;
tstRslt.TempInStart = TempInStat.First;
tstRslt.TempInEnd = TempInStat.Last;
tstRslt.TempInMin = TempInStat.Min;
tstRslt.TempInMax = TempInStat.Max;
tstRslt.TempOutAvrg = TempOutStat.Average;
tstRslt.TempOutStart = TempOutStat.First;
tstRslt.TempOutEnd = TempOutStat.Last;
tstRslt.TempOutMin = TempOutStat.Min;
tstRslt.TempOutMax = TempOutStat.Max;
tstRslt.TempDivAvrg = TempDivStat.Average;
tstRslt.TempDivStart = TempDivStat.First;
tstRslt.TempDivEnd = TempDivStat.Last;
tstRslt.TempDivMin = TempDivStat.Min;
tstRslt.TempDivMax = TempDivStat.Max;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
if (tstRslt.VolumeCTV <= float.Epsilon)
{
tstRslt.ErrorMaster = 0.1f;
}
else
{
tstRslt.ErrorMaster = 100 * (tstRslt.VolumeMaster - tstRslt.VolumeCTV) / tstRslt.VolumeCTV;
}
tstRslt.TimeDivStart0 = 0;
tstRslt.TimeDivStart1 = 0;
tstRslt.TimeDivStart2 = 0;
tstRslt.TimeDivStart3 = 0;
tstRslt.TimeDivStart4 = 0;
tstRslt.TimeDivStart5 = 0;
tstRslt.TimeDivEnd0 = 0;
tstRslt.TimeDivEnd1 = 0;
tstRslt.TimeDivEnd2 = 0;
tstRslt.TimeDivEnd3 = 0;
tstRslt.TimeDivEnd4 = 0;
tstRslt.TimeDivEnd5 = 0;
/// Main results
tstRslt.StartTime = TestStartTime;
tstRslt.EndTime = TestEndTime;
tstRslt.FlowSetTime = flowSetTime;
tstRslt.TestTime = cBrd.TTime; /// [s] measurement time
tstRslt.PulsesMaster = Convert.ToDouble(cBrd.EtPulses(0)); /// Pulses of the master flow meter (test total)
tstRslt.MassStartRaw = startMass.Val;
tstRslt.MassStart = massStart; /// [kg] calculated before displaying 'End state' dialog
tstRslt.MassEndRaw = endMass.Val;
tstRslt.MassEnd = massEnd; /// [kg] calculated before displaying 'End state' dialog
tstRslt.FlowMass = 3600.0 * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.TestTime; /// [kg/h]
tstRslt.FlowVolume = 3.6 * ltrPerRefPulse * tstRslt.PulsesMaster / tstRslt.TestTime;
tstRslt.VolumeCTV = volumeCTV; /// [kg] calculated before displaying 'End state' dialog
tstRslt.VolumeMaster = ltrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
tstRslt.ConstMaster = ltrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster; /// Corrected master pulses per liter
tstRslt.ErrorMaster = Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.VolumeCTV);
for (int i = 0; i < Config.Data.WMsCount; i++)
{
if ((i < WaterMeters.Count) && !WaterMeters[i].Disabled)
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{
tstRslt.Meters[i].SerialNr = (i < WaterMeters.Count) ? WaterMeters[i].SerialNr : string.Empty;
tstRslt.Meters[i].VolumeMeter = tstRslt.Meters[i].VolumeEnd - tstRslt.Meters[i].VolumeStart;
tstRslt.Meters[i].VolumeRef = tstRslt.VolumeCTV; /// liter
tstRslt.Meters[i].PulsesMeter = 0;
tstRslt.Meters[i].PulsesMaster = tstRslt.PulsesMaster;
tstRslt.Meters[i].Time = cBrd.TTime;
if (tstRslt.Meters[i].VolumeRef > 0)
{
tstRslt.Meters[i].VolumeErrorPct =
100 * (tstRslt.Meters[i].VolumeMeter - tstRslt.Meters[i].VolumeRef) / tstRslt.Meters[i].VolumeRef;
/// %
}
else
{
tstRslt.Meters[i].VolumeErrorPct = -100;
}
tstRslt.Meters[i].Passed = (tstRslt.Meters[i].VolumeErrorPct >= tstRslt.ErrLimLo + tstRslt.Uncertainty)
&& (tstRslt.Meters[i].VolumeErrorPct <= tstRslt.ErrLimHi - tstRslt.Uncertainty);
Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single);
BenchControl.Elde.FixedStartRegisterReader.RegisterReader regReader =
sensPath.RegisterReaders[i] as BenchControl.Elde.FixedStartRegisterReader.RegisterReader;
tstRslt.Meters[i].Disabled = false;
}
else
{
tstRslt.Meters[i].Disabled = true;
if (meterRslt != null && regReader != null)
{
meterRslt.PulsesPerLiter = 1.0f;
meterRslt.VolumeStart = regReader.BeginWMState;
meterRslt.VolumeEnd = regReader.EndWMState;
meterRslt.VolumeMeter = meterRslt.VolumeEnd - meterRslt.VolumeStart;
meterRslt.VolumeRef = tstRslt.VolumeCTV; /// liter
meterRslt.PulsesMeter = meterRslt.VolumeMeter;
meterRslt.PulsesMaster = tstRslt.PulsesMaster;
meterRslt.TestTime = tstRslt.TestTime;
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
meterRslt.Passed = (meterRslt.Error >= test.ErrLimLo + test.Uncertainty)
&& (meterRslt.Error <= test.ErrLimHi - test.Uncertainty);
meterRslt.TestDone = true;
}
}
}
/// Add data - end
AddOrOverwriteResult(tstRslt);
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(tstRslt));
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(testName));
/// Append the results to the CSV-file
allResults.Info(TestResult2CsvLine(tstRslt));
allResults.Info(TestResult2CsvLine(testName, test.Part));
if (++repetitionNr <= test.Repeats)

View File

@ -62,10 +62,12 @@ namespace TBF.BenchControl.TestMethods.FixedStartCombinedMeters
loop:
/// Start the test, initialize test results
Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, repetitionNr, inPath, benchPath, outPath, sensPath, totalPulses));
Config.Entities.TestResult tstRslt = new Config.Entities.TestResult(test, repetitionNr, Config.Entities.MetersKind.Combined);
string testName = Results.Utils.GetTestName(test.Name, test.Repeats, repetitionNr);
TestStartTime = DateTime.Now;
int flowSetTime0 = StateMachine.Time;
int flowSetTime = 0;
float estFlowSetTime = 10.0f;
//------------------------------------------------
@ -81,9 +83,9 @@ namespace TBF.BenchControl.TestMethods.FixedStartCombinedMeters
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@ -98,9 +100,9 @@ namespace TBF.BenchControl.TestMethods.FixedStartCombinedMeters
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@ -154,9 +156,9 @@ namespace TBF.BenchControl.TestMethods.FixedStartCombinedMeters
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@ -171,9 +173,9 @@ namespace TBF.BenchControl.TestMethods.FixedStartCombinedMeters
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.OpArgumentError)) { retVal = Event.OpArgumentError; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
@ -239,9 +241,6 @@ namespace TBF.BenchControl.TestMethods.FixedStartCombinedMeters
for (int i = 0; i < Config.Data.WMsCount; i++)
{
tstRslt.Meters[i].VolumeStart = dataEntryCmpnt.WMStartState(i); /// Units: 1 liter
///
///-----
BenchControl.Elde.FixedStartRegisterReader.RegisterReader registerReader =
sensPath.RegisterReaders[i] as BenchControl.Elde.FixedStartRegisterReader.RegisterReader;
@ -275,8 +274,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartCombinedMeters
}
while (!e.Contains(Event.BalanceDone));
tstRslt.TimeStart = DateTime.Now;
tstRslt.MassStartRaw = startMass.Val;
StartMassRaw = startMass.Val;
Mass.Val = startMass.Val;
//------------------------------------------------
@ -315,8 +313,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartCombinedMeters
queryEnd1 = cBrd.QueryMeasurementEndOp();
queryEnd2 = cBrd.QueryMeasurementEndOp();
bool firstTime = true; /// To reset sums for averaging
ResetAveragedData();
ClearAllStatistics();
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
/// Measurement loop - begin
@ -340,30 +337,10 @@ namespace TBF.BenchControl.TestMethods.FixedStartCombinedMeters
Bridge.OnActivity(this, string.Format("{0} ... {1} s", Strings.Test_in_progress, remainingTime));
}
if (firstTime)
{
firstTime = false; /// Do the following only once
tstRslt.TempInStart = TempIn.Val;
tstRslt.TempOutStart = TempOut.Val;
tstRslt.TempDivStart = TempDiv.Val;
tstRslt.PressInStart = PressureUp.Val;
tstRslt.PressOutStart = PressureDown.Val;
}
tstRslt.TempInEnd = TempIn.Val;
tstRslt.TempOutEnd = TempOut.Val;
tstRslt.TempDivEnd = TempDiv.Val;
tstRslt.PressInEnd = PressureUp.Val;
tstRslt.PressOutEnd = PressureDown.Val;
tstRslt.MassEndRaw = Mass.Val;
AccumulateAveragedData();
RefFreq.Val = cBrd.ReferenceFreq;
UpdateAllStatistics();
CurrentMassRaw = Mass.Val;
RefFreq.Val = cBrd.ReferenceFreq;
RefFlow.Val = cBrd.ReferenceFlow;
tstRslt.AmbientTempAve = AmbientTemp.Val;
tstRslt.AmbientPressAve = AmbientPressure.Val;
tstRslt.AmbientHumiAve = AmbientHumidity.Val;
string logstr = string.Format("E={0} f={1} q={2}", cBrd.EtPulses(0), cBrd.ReferenceFreq,
cBrd.ReferenceFlow * outPath.FlowMeter.NominalFlow);
@ -375,17 +352,18 @@ namespace TBF.BenchControl.TestMethods.FixedStartCombinedMeters
float progress = Formulas.TestProgress(cBrd.EtPulses(0), totalPulses, estFlowSetTime, test.TstTime);
TestProgressEventArgs data = GetTestProgressData(test, tstRslt, true, cBrd, cBrd.TTime, progress);
for (int i = 0; i < Config.Data.CompoundWMsCount; i++)
{
data.TestResult.CombinedMeters[i].VolumeMeter = data.TestResult.Meters[2 * i].VolumeMeter
+ data.TestResult.Meters[2 * i + 1].VolumeMeter;
if (data.Volume.Valid)
{
data.TestResult.CombinedMeters[i].VolumeErrorPct =
Formulas.ErrorFromVolumes(data.TestResult.CombinedMeters[i].VolumeMeter, data.Volume.Val);
}
}
TestProgressEventArgs data = GetTestProgressData(test, repetitionNr, true, cBrd, cBrd.TTime, progress);
/// TODO: Reimplement
//for (int i = 0; i < Config.Data.CompoundWMsCount; i++)
//{
// data.TestResult.CombinedMeters[i].VolumeMeter = data.TestResult.Meters[2 * i].VolumeMeter
// + data.TestResult.Meters[2 * i + 1].VolumeMeter;
// if (data.Volume.Valid)
// {
// data.TestResult.CombinedMeters[i].VolumeErrorPct =
// Formulas.ErrorFromVolumes(data.TestResult.CombinedMeters[i].VolumeMeter, data.Volume.Val);
// }
//}
Bridge.OnTestProgress(this, data);
}
while (cBrd.EtPulses(0) < totalPulses);
@ -453,8 +431,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartCombinedMeters
}
while (!e.Contains(Event.BalanceDone));
///
tstRslt.MassEndRaw = endMass.Val;
tstRslt.TimeEnd = DateTime.Now;
EndMassRaw = endMass.Val;
TestEndTime = DateTime.Now;
State.Create("FixedStartCombinedMeters : Stopping diverter, gate, etc.")
@ -469,11 +447,10 @@ namespace TBF.BenchControl.TestMethods.FixedStartCombinedMeters
while (!e.Contains(Event.PreviousStopped));
tstRslt.MassStart = Formulas.CorrectedValue(tstRslt.MassStartRaw, outPath.Balance.Corrections);
tstRslt.MassEnd = Formulas.CorrectedValue(tstRslt.MassEndRaw, outPath.Balance.Corrections);
tstRslt.MassDiff = tstRslt.MassEnd - tstRslt.MassStart;
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.VolumeCTV = 1.00103f * 1000.0f * tstRslt.MassDiff / tstRslt.DensityOut; /// [l] 1000.0f is because density is in [kg/m3]
double massStart = Formulas.CorrectedValue(startMass.Val, outPath.Balance.Corrections);
double massEnd = Formulas.CorrectedValue(endMass.Val, outPath.Balance.Corrections);
double densityOut = Formulas.WaterDensityFromTemp(TempOutStat.Average); /// [kg/m3]
double volumeCTV = 1.00103f * 1000.0f * (massEnd - massStart) / densityOut;
///
/// Enter watermeter end states here
@ -482,8 +459,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartCombinedMeters
{
Bridge.OnActivity(this, "Enter the water meter data");
State.Create("FixedStartCombinedMeters : Enter end-state")
.AddOperation(dataEntryCmpnt.ShowTestEndFormOp(tstRslt.VolumeCTV, tstRslt.ErrLimLo + tstRslt.Uncertainty,
tstRslt.ErrLimHi - tstRslt.Uncertainty))
.AddOperation(dataEntryCmpnt.ShowTestEndFormOp(volumeCTV, test.ErrLimLo + test.Uncertainty,
test.ErrLimHi - test.Uncertainty))
.AddOperation(checkUiOp)
.EnterState();
do
@ -496,9 +473,6 @@ namespace TBF.BenchControl.TestMethods.FixedStartCombinedMeters
for (int i = 0; i < Config.Data.CompoundWMsCount * 2; i++)
{
tstRslt.Meters[i].VolumeEnd = dataEntryCmpnt.WMEndState(i);
///-----
BenchControl.Elde.FixedStartRegisterReader.RegisterReader registerReader =
sensPath.RegisterReaders[i] as BenchControl.Elde.FixedStartRegisterReader.RegisterReader;
@ -517,82 +491,108 @@ namespace TBF.BenchControl.TestMethods.FixedStartCombinedMeters
///
/// Populate TestResult data entity with data
///
UpdateTestRsltWithAveragedData(tstRslt);
Results.Entities.TestRslt tstRslt = BatchRslts.GetTestRslt(testName, test.Part);
tstRslt.BatchNr = Program.LocalSettings.BatchNr;
tstRslt.MassStart = Formulas.CorrectedValue(tstRslt.MassStartRaw, outPath.Balance.Corrections);
tstRslt.MassEnd = Formulas.CorrectedValue(tstRslt.MassEndRaw, outPath.Balance.Corrections);
tstRslt.MassDiff = tstRslt.MassEnd - tstRslt.MassStart;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
tstRslt.Time = cBrd.TTime; /// [s] measurement time
tstRslt.FlowMass = 3600.0f * tstRslt.MassDiff / tstRslt.Time; /// [kg/h]
tstRslt.FlowVolume = 3600.0f * ltrPerRefPulse * cBrd.EtPulses(0) / tstRslt.Time; /// [l/h]
tstRslt.VolumeCTV = 1.00103f * 1000.0f * tstRslt.MassDiff / tstRslt.DensityOut; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.VolumeMaster = ltrPerRefPulse * cBrd.EtPulses(0); /// [l] volume from the master flow meter
tstRslt.PulsesMaster = cBrd.EtPulses(0); /// Pulses of the master flow meter (test total)
tstRslt.ConstMaster = ltrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster; /// Corrected master pulses per liter
if (tstRslt.VolumeCTV <= float.Epsilon)
if (tstRslt != null)
{
tstRslt.ErrorMaster = 0.1f;
}
else
{
tstRslt.ErrorMaster = 100 * (tstRslt.VolumeMaster - tstRslt.VolumeCTV) / tstRslt.VolumeCTV;
}
tstRslt.TimeDivStart0 = 0;
tstRslt.TimeDivStart1 = 0;
tstRslt.TimeDivStart2 = 0;
tstRslt.TimeDivStart3 = 0;
tstRslt.TimeDivStart4 = 0;
tstRslt.TimeDivStart5 = 0;
tstRslt.TimeDivEnd0 = 0;
tstRslt.TimeDivEnd1 = 0;
tstRslt.TimeDivEnd2 = 0;
tstRslt.TimeDivEnd3 = 0;
tstRslt.TimeDivEnd4 = 0;
tstRslt.TimeDivEnd5 = 0;
/// Auxiliary results
tstRslt.AmbientTempAve = AmbientTempStat.Average;
tstRslt.AmbientPressAve = AmbientPressureStat.Average;
tstRslt.AmbientHumiAve = AmbientHumidityStat.Average;
tstRslt.PressUpAvrg = PressureUpStat.Average;
tstRslt.PressUpStart = PressureUpStat.First;
tstRslt.PressUpEnd = PressureUpStat.Last;
tstRslt.PressUpMin = PressureUpStat.Min;
tstRslt.PressUpMax = PressureUpStat.Max;
tstRslt.PressDownAvrg = PressureDownStat.Average;
tstRslt.PressDownStart = PressureDownStat.First;
tstRslt.PressDownEnd = PressureDownStat.Last;
tstRslt.PressDownMin = PressureDownStat.Min;
tstRslt.PressDownMax = PressureDownStat.Max;
tstRslt.TempInAvrg = TempInStat.Average;
tstRslt.TempInStart = TempInStat.First;
tstRslt.TempInEnd = TempInStat.Last;
tstRslt.TempInMin = TempInStat.Min;
tstRslt.TempInMax = TempInStat.Max;
tstRslt.TempOutAvrg = TempOutStat.Average;
tstRslt.TempOutStart = TempOutStat.First;
tstRslt.TempOutEnd = TempOutStat.Last;
tstRslt.TempOutMin = TempOutStat.Min;
tstRslt.TempOutMax = TempOutStat.Max;
tstRslt.TempDivAvrg = TempDivStat.Average;
tstRslt.TempDivStart = TempDivStat.First;
tstRslt.TempDivEnd = TempDivStat.Last;
tstRslt.TempDivMin = TempDivStat.Min;
tstRslt.TempDivMax = TempDivStat.Max;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
for (int iCmbnd = 0; iCmbnd < Config.Data.CompoundWMsCount; iCmbnd++)
{
tstRslt.CombinedMeters[iCmbnd].VolumeRef = tstRslt.VolumeCTV; /// [l] must be calculated before main & aux. meter error
tstRslt.CombinedMeters[iCmbnd].PulsesMaster = tstRslt.PulsesMaster;
/// Main results
tstRslt.StartTime = TestStartTime;
tstRslt.EndTime = TestEndTime;
tstRslt.FlowSetTime = flowSetTime;
tstRslt.TestTime = cBrd.TTime; /// [s] measurement time
tstRslt.PulsesMaster = Convert.ToDouble(cBrd.EtPulses(0)); /// Pulses of the master flow meter (test total)
tstRslt.MassStartRaw = startMass.Val;
tstRslt.MassStart = massStart;
tstRslt.MassEndRaw = endMass.Val;
tstRslt.MassEnd = massEnd;
tstRslt.FlowMass = 3600.0 * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.TestTime; /// [kg/h]
tstRslt.FlowVolume = 3.6 * ltrPerRefPulse * tstRslt.PulsesMaster / tstRslt.TestTime; /// [l/h]
tstRslt.VolumeMaster = ltrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
tstRslt.VolumeCTV = volumeCTV; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.ConstMaster = ltrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster; /// Corrected master pulses per liter
tstRslt.ErrorMaster = Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.VolumeCTV);
for (int i = 2 * iCmbnd; i < 2 * iCmbnd + 2; i++)
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{
tstRslt.Meters[i].PulsesPerLiter = 1.0f;
if (sensPath.RegisterReaders[i] != null && sensPath.RegisterReaders[i].PulsesPerLtr > float.Epsilon)
Results.Entities.MeterTestRslt mainMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.CompoundMain);
Results.Entities.MeterTestRslt auxMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.CompoundAux);
for (int isAux = 0; isAux <= 1; isAux++) /// 0=main, 1=aux
{
tstRslt.Meters[i].PulsesPerLiter = sensPath.RegisterReaders[i].PulsesPerLtr;
Results.Entities.MeterTestRslt meterRslt = (isAux == 0) ? mainMeterRslt : auxMeterRslt;
BenchControl.Elde.FixedStartRegisterReader.RegisterReader regReader =
sensPath.RegisterReaders[2 * i + isAux] as BenchControl.Elde.FixedStartRegisterReader.RegisterReader;
if (meterRslt != null && regReader != null)
{
meterRslt.PulsesPerLiter = 1.0f;
meterRslt.VolumeStart = regReader.BeginWMState; /// [l]
meterRslt.VolumeEnd = regReader.EndWMState; /// [l]
meterRslt.VolumeMeter = meterRslt.VolumeEnd - meterRslt.VolumeStart; /// [l]
meterRslt.VolumeRef = tstRslt.VolumeCTV; /// [l]
meterRslt.PulsesMeter = meterRslt.VolumeMeter;
meterRslt.PulsesMaster = tstRslt.PulsesMaster;
meterRslt.TestTime = tstRslt.TestTime;
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef); /// Not used for evaluation
}
}
tstRslt.Meters[i].SerialNr = (i < WaterMeters.Count) ? WaterMeters[i].SerialNr : string.Empty;
tstRslt.Meters[i].VolumeMeter = tstRslt.Meters[i].VolumeEnd - tstRslt.Meters[i].VolumeStart; /// [l]
tstRslt.Meters[i].VolumeRef = tstRslt.VolumeCTV; /// [l]
tstRslt.Meters[i].PulsesMeter = 0;
tstRslt.Meters[i].PulsesMaster = tstRslt.PulsesMaster;
tstRslt.Meters[i].Time = cBrd.TTime;
Results.Entities.MeterTestRslt compoundMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Compound);
tstRslt.Meters[i].VolumeErrorPct = Formulas.ErrorFromVolumes(tstRslt.Meters[i].VolumeMeter, tstRslt.CombinedMeters[iCmbnd].VolumeRef); /// Not used
if (compoundMeterRslt != null && mainMeterRslt != null && auxMeterRslt != null)
{
compoundMeterRslt.VolumeRef = tstRslt.VolumeCTV; /// [l] must be calculated before main & aux. meter error
compoundMeterRslt.VolumeMeter = mainMeterRslt.VolumeMeter + auxMeterRslt.VolumeMeter;
compoundMeterRslt.PulsesMaster = tstRslt.PulsesMaster;
compoundMeterRslt.TestTime = tstRslt.TestTime;
compoundMeterRslt.Error = Formulas.ErrorFromVolumes(compoundMeterRslt.VolumeMeter, compoundMeterRslt.VolumeRef);
compoundMeterRslt.Passed = (compoundMeterRslt.Error >= test.ErrLimLo + test.Uncertainty)
&& (compoundMeterRslt.Error <= test.ErrLimHi - test.Uncertainty);
mainMeterRslt.Passed = auxMeterRslt.Passed = compoundMeterRslt.Passed;
mainMeterRslt.TestDone = auxMeterRslt.TestDone = compoundMeterRslt.TestDone = true;
}
}
tstRslt.CombinedMeters[iCmbnd].VolumeMeter = tstRslt.Meters[2 * iCmbnd].VolumeMeter + tstRslt.Meters[2 * iCmbnd + 1].VolumeMeter;
tstRslt.CombinedMeters[iCmbnd].Time = cBrd.TTime;
tstRslt.CombinedMeters[iCmbnd].VolumeErrorPct = Formulas.ErrorFromVolumes(tstRslt.CombinedMeters[iCmbnd].VolumeMeter, tstRslt.CombinedMeters[iCmbnd].VolumeRef);
tstRslt.CombinedMeters[iCmbnd].Passed = (tstRslt.CombinedMeters[iCmbnd].VolumeErrorPct >= tstRslt.ErrLimLo + tstRslt.Uncertainty)
&& (tstRslt.CombinedMeters[iCmbnd].VolumeErrorPct <= tstRslt.ErrLimHi - tstRslt.Uncertainty);
}
/// Add data - end
AddOrOverwriteResult(tstRslt);
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(tstRslt));
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(testName));
/// Append the results to the CSV-file
allResults.Info(TestResult2CsvLine(tstRslt));
allResults.Info(TestResult2CsvLine(testName, test.Part));
if (++repetitionNr <= test.Repeats)

View File

@ -62,10 +62,12 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
loop:
/// Start the test, initialize test results
Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, repetitionNr, inPath, benchPath, outPath, sensPath, totalPulses));
Config.Entities.TestResult tstRslt = new Config.Entities.TestResult(test, repetitionNr, Config.Entities.MetersKind.Single);
string testName = Results.Utils.GetTestName(test.Name, test.Repeats, repetitionNr);
TestStartTime = DateTime.Now;
int flowSetTime0 = StateMachine.Time;
int flowSetTime = 0;
float estFlowSetTime = 10.0f;
//------------------------------------------------
@ -81,9 +83,9 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@ -98,9 +100,9 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@ -154,9 +156,9 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@ -171,9 +173,9 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.OpArgumentError)) { retVal = Event.OpArgumentError; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
@ -239,9 +241,6 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
for (int i = 0; i < Config.Data.WMsCount; i++)
{
tstRslt.Meters[i].VolumeStart = dataEntryCmpnt.WMStartState(i); /// Units: 1 liter
///-----
BenchControl.Elde.FixedStartRegisterReader.RegisterReader registerReader =
sensPath.RegisterReaders[i] as BenchControl.Elde.FixedStartRegisterReader.RegisterReader;
@ -275,8 +274,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
}
while (!e.Contains(Event.BalanceDone));
tstRslt.TimeStart = DateTime.Now;
tstRslt.MassStartRaw = startMass.Val;
StartMassRaw = startMass.Val;
Mass.Val = startMass.Val;
//------------------------------------------------
@ -315,8 +313,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
queryEnd1 = cBrd.QueryMeasurementEndOp();
queryEnd2 = cBrd.QueryMeasurementEndOp();
bool firstTime = true; /// To reset sums for averaging
ResetAveragedData();
ClearAllStatistics();
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
/// Measurement loop - begin
@ -340,30 +337,10 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
Bridge.OnActivity(this, string.Format("{0} ... {1} s", Strings.Test_in_progress, remainingTime));
}
if (firstTime)
{
firstTime = false; /// Do the following only once
tstRslt.TempInStart = TempIn.Val;
tstRslt.TempOutStart = TempOut.Val;
tstRslt.TempDivStart = TempDiv.Val;
tstRslt.PressInStart = PressureUp.Val;
tstRslt.PressOutStart = PressureDown.Val;
}
tstRslt.TempInEnd = TempIn.Val;
tstRslt.TempOutEnd = TempOut.Val;
tstRslt.TempDivEnd = TempDiv.Val;
tstRslt.PressInEnd = PressureUp.Val;
tstRslt.PressOutEnd = PressureDown.Val;
tstRslt.MassEndRaw = Mass.Val;
AccumulateAveragedData();
UpdateAllStatistics();
CurrentMassRaw = Mass.Val;
RefFreq.Val = cBrd.ReferenceFreq;
RefFlow.Val = cBrd.ReferenceFlow;
tstRslt.AmbientTempAve = AmbientTemp.Val;
tstRslt.AmbientPressAve = AmbientPressure.Val;
tstRslt.AmbientHumiAve = AmbientHumidity.Val;
string logstr = string.Format("E={0} f={1} q={2}", cBrd.EtPulses(0), cBrd.ReferenceFreq,
cBrd.ReferenceFlow * outPath.FlowMeter.NominalFlow);
@ -375,7 +352,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
float progress = Formulas.TestProgress(cBrd.EtPulses(0), totalPulses, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, true, cBrd, cBrd.TTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, true, cBrd, cBrd.TTime, progress));
}
while (cBrd.EtPulses(0) < totalPulses);
/// Measurement loop - end
@ -442,8 +419,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
}
while (!e.Contains(Event.BalanceDone));
///
tstRslt.MassEndRaw = endMass.Val;
tstRslt.TimeEnd = DateTime.Now;
EndMassRaw = endMass.Val;
TestEndTime = DateTime.Now;
State.Create("FixedStartMassCollection : Stopping diverter, gate, etc.")
@ -458,11 +435,10 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
while (!e.Contains(Event.PreviousStopped));
tstRslt.MassStart = Formulas.CorrectedValue(tstRslt.MassStartRaw, outPath.Balance.Corrections);
tstRslt.MassEnd = Formulas.CorrectedValue(tstRslt.MassEndRaw, outPath.Balance.Corrections);
tstRslt.MassDiff = tstRslt.MassEnd - tstRslt.MassStart;
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.VolumeCTV = 1.00103f * 1000.0f * tstRslt.MassDiff / tstRslt.DensityOut; /// [l] 1000.0f is because density is in [kg/m3]
double massStart = Formulas.CorrectedValue(startMass.Val, outPath.Balance.Corrections);
double massEnd = Formulas.CorrectedValue(endMass.Val, outPath.Balance.Corrections);
double densityOut = Formulas.WaterDensityFromTemp(TempOutStat.Average); /// [kg/m3]
double volumeCTV = 1001.03 * (massEnd - massStart) / densityOut;
///
/// Enter watermeter end states here
@ -471,8 +447,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
{
Bridge.OnActivity(this, "Enter the water meter data");
State.Create("FixedStartMassCollection : Enter end-state")
.AddOperation(dataEntryCmpnt.ShowTestEndFormOp(tstRslt.VolumeCTV, tstRslt.ErrLimLo + tstRslt.Uncertainty,
tstRslt.ErrLimHi - tstRslt.Uncertainty))
.AddOperation(dataEntryCmpnt.ShowTestEndFormOp(volumeCTV, test.ErrLimLo + test.Uncertainty,
test.ErrLimHi - test.Uncertainty))
.AddOperation(checkUiOp)
.EnterState();
do
@ -485,9 +461,6 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
for (int i = 0; i < Config.Data.WMsCount; i++)
{
tstRslt.Meters[i].VolumeEnd = dataEntryCmpnt.WMEndState(i);
///-----
BenchControl.Elde.FixedStartRegisterReader.RegisterReader registerReader =
sensPath.RegisterReaders[i] as BenchControl.Elde.FixedStartRegisterReader.RegisterReader;
@ -506,82 +479,90 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
///
/// Populate TestResult data entity with data
///
UpdateTestRsltWithAveragedData(tstRslt);
Results.Entities.TestRslt tstRslt = BatchRslts.GetTestRslt(testName, test.Part);
tstRslt.BatchNr = Program.LocalSettings.BatchNr;
tstRslt.MassStart = Formulas.CorrectedValue(tstRslt.MassStartRaw, outPath.Balance.Corrections);
tstRslt.MassEnd = Formulas.CorrectedValue(tstRslt.MassEndRaw, outPath.Balance.Corrections);
tstRslt.MassDiff = tstRslt.MassEnd - tstRslt.MassStart;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
tstRslt.Time = cBrd.TTime; /// [s] measurement time
tstRslt.FlowMass = 3600.0f * tstRslt.MassDiff / tstRslt.Time; /// [kg/h]
tstRslt.FlowVolume = 3600.0f * ltrPerRefPulse * cBrd.EtPulses(0) / tstRslt.Time; /// [l/h]
tstRslt.VolumeCTV = 1.00103f * 1000.0f * tstRslt.MassDiff / tstRslt.DensityOut; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.VolumeMaster = ltrPerRefPulse * cBrd.EtPulses(0); /// [l] volume from the master flow meter
tstRslt.PulsesMaster = cBrd.EtPulses(0); /// Pulses of the master flow meter (test total)
tstRslt.ConstMaster = ltrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster; /// Corrected master pulses per liter
if (tstRslt != null)
{
/// Auxiliary results
tstRslt.AmbientTempAve = AmbientTempStat.Average;
tstRslt.AmbientPressAve = AmbientPressureStat.Average;
tstRslt.AmbientHumiAve = AmbientHumidityStat.Average;
tstRslt.PressUpAvrg = PressureUpStat.Average;
tstRslt.PressUpStart = PressureUpStat.First;
tstRslt.PressUpEnd = PressureUpStat.Last;
tstRslt.PressUpMin = PressureUpStat.Min;
tstRslt.PressUpMax = PressureUpStat.Max;
tstRslt.PressDownAvrg = PressureDownStat.Average;
tstRslt.PressDownStart = PressureDownStat.First;
tstRslt.PressDownEnd = PressureDownStat.Last;
tstRslt.PressDownMin = PressureDownStat.Min;
tstRslt.PressDownMax = PressureDownStat.Max;
tstRslt.TempInAvrg = TempInStat.Average;
tstRslt.TempInStart = TempInStat.First;
tstRslt.TempInEnd = TempInStat.Last;
tstRslt.TempInMin = TempInStat.Min;
tstRslt.TempInMax = TempInStat.Max;
tstRslt.TempOutAvrg = TempOutStat.Average;
tstRslt.TempOutStart = TempOutStat.First;
tstRslt.TempOutEnd = TempOutStat.Last;
tstRslt.TempOutMin = TempOutStat.Min;
tstRslt.TempOutMax = TempOutStat.Max;
tstRslt.TempDivAvrg = TempDivStat.Average;
tstRslt.TempDivStart = TempDivStat.First;
tstRslt.TempDivEnd = TempDivStat.Last;
tstRslt.TempDivMin = TempDivStat.Min;
tstRslt.TempDivMax = TempDivStat.Max;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
if (tstRslt.VolumeCTV <= float.Epsilon)
{
tstRslt.ErrorMaster = 0.1f;
}
else
{
tstRslt.ErrorMaster = 100 * (tstRslt.VolumeMaster - tstRslt.VolumeCTV) / tstRslt.VolumeCTV;
}
tstRslt.TimeDivStart0 = 0;
tstRslt.TimeDivStart1 = 0;
tstRslt.TimeDivStart2 = 0;
tstRslt.TimeDivStart3 = 0;
tstRslt.TimeDivStart4 = 0;
tstRslt.TimeDivStart5 = 0;
tstRslt.TimeDivEnd0 = 0;
tstRslt.TimeDivEnd1 = 0;
tstRslt.TimeDivEnd2 = 0;
tstRslt.TimeDivEnd3 = 0;
tstRslt.TimeDivEnd4 = 0;
tstRslt.TimeDivEnd5 = 0;
/// Main results
tstRslt.StartTime = TestStartTime;
tstRslt.EndTime = TestEndTime;
tstRslt.FlowSetTime = flowSetTime;
tstRslt.TestTime = cBrd.TTime; /// [s] measurement time
tstRslt.PulsesMaster = Convert.ToDouble(cBrd.EtPulses(0)); /// Pulses of the master flow meter (test total)
tstRslt.MassStartRaw = startMass.Val;
tstRslt.MassStart = massStart;
tstRslt.MassEndRaw = endMass.Val;
tstRslt.MassEnd = massEnd;
tstRslt.FlowMass = 3600.0 * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.TestTime; /// [kg/h]
tstRslt.FlowVolume = 3.6 * ltrPerRefPulse * tstRslt.PulsesMaster / tstRslt.TestTime; /// [l/h]
tstRslt.VolumeMaster = ltrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
tstRslt.VolumeCTV = volumeCTV; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.ConstMaster = ltrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster; /// Corrected master pulses per liter
tstRslt.ErrorMaster = Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.VolumeCTV);
for (int i = 0; i < Config.Data.WMsCount; i++)
{
if ((i < WaterMeters.Count) && !WaterMeters[i].Disabled)
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{
tstRslt.Meters[i].SerialNr = (i < WaterMeters.Count) ? WaterMeters[i].SerialNr : string.Empty;
tstRslt.Meters[i].VolumeMeter = tstRslt.Meters[i].VolumeEnd - tstRslt.Meters[i].VolumeStart;
tstRslt.Meters[i].VolumeRef = tstRslt.VolumeCTV; /// liter
tstRslt.Meters[i].PulsesMeter = 0;
tstRslt.Meters[i].PulsesMaster = tstRslt.PulsesMaster;
tstRslt.Meters[i].Time = cBrd.TTime;
if (tstRslt.Meters[i].VolumeRef > 0)
{
tstRslt.Meters[i].VolumeErrorPct =
100 * (tstRslt.Meters[i].VolumeMeter - tstRslt.Meters[i].VolumeRef) / tstRslt.Meters[i].VolumeRef;
/// %
}
else
{
tstRslt.Meters[i].VolumeErrorPct = -100;
}
tstRslt.Meters[i].Passed = (tstRslt.Meters[i].VolumeErrorPct >= tstRslt.ErrLimLo + tstRslt.Uncertainty)
&& (tstRslt.Meters[i].VolumeErrorPct <= tstRslt.ErrLimHi - tstRslt.Uncertainty);
Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single);
BenchControl.Elde.FixedStartRegisterReader.RegisterReader regReader =
sensPath.RegisterReaders[i] as BenchControl.Elde.FixedStartRegisterReader.RegisterReader;
tstRslt.Meters[i].Disabled = false;
}
else
{
tstRslt.Meters[i].Disabled = true;
if (meterRslt != null && regReader != null)
{
meterRslt.PulsesPerLiter = 1.0f;
meterRslt.VolumeStart = regReader.BeginWMState;
meterRslt.VolumeEnd = regReader.EndWMState;
meterRslt.VolumeMeter = meterRslt.VolumeEnd - meterRslt.VolumeStart;
meterRslt.VolumeRef = tstRslt.VolumeCTV; /// liter
meterRslt.PulsesMeter = meterRslt.VolumeMeter;
meterRslt.PulsesMaster = tstRslt.PulsesMaster;
meterRslt.TestTime = tstRslt.TestTime;
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
meterRslt.Passed = (meterRslt.Error >= test.ErrLimLo + test.Uncertainty)
&& (meterRslt.Error <= test.ErrLimHi - test.Uncertainty);
meterRslt.TestDone = true;
}
}
}
/// Add data - end
AddOrOverwriteResult(tstRslt);
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(tstRslt));
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(testName));
/// Append the results to the CSV-file
allResults.Info(TestResult2CsvLine(tstRslt));
allResults.Info(TestResult2CsvLine(testName, test.Part));
if (++repetitionNr <= test.Repeats)

View File

@ -59,12 +59,14 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
loop:
/// Start the test, initialize test results
Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, repetitionNr, inPath, benchPath, outPath, sensPath, totalPulses));
Config.Entities.TestResult tstRslt = new Config.Entities.TestResult(test, repetitionNr, Config.Entities.MetersKind.Single);
string testName = Results.Utils.GetTestName(test.Name, test.Repeats, repetitionNr);
TestStartTime = DateTime.Now;
//------------------------------------------------
Bridge.OnActivity(this, Strings.Setting_the_flow);
//------------------------------------------------
int flowSetTime0 = StateMachine.Time;
int flowSetTime = 0;
float estFlowSetTime = 10.0f;
if (inPath.Pump is GenericDevices.IPumpFM) (inPath.Pump as GenericDevices.IPumpFM).TurnOn(test.PumpPower);
@ -76,9 +78,9 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@ -93,9 +95,9 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.OpArgumentError)) { retVal = Event.OpArgumentError; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
@ -121,8 +123,6 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
if (cameraRoi != null) measureOperations.Add(cameraRoi.MeasureOp());
}
tstRslt.TimeStart = DateTime.Now;
//------------------------------------------------
Bridge.OnActivity(this, Strings.Test_in_progress);
//------------------------------------------------
@ -152,8 +152,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
queryEnd1 = cBrd.QueryMeasurementEndOp();
queryEnd2 = cBrd.QueryMeasurementEndOp();
bool firstTime = true; /// To reset sums for averaging
ResetAveragedData();
ClearAllStatistics();
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
/// Measurement loop - begin
@ -177,30 +176,10 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
Bridge.OnActivity(this, string.Format("{0} ... {1} s", Strings.Test_in_progress, remainingTime));
}
if (firstTime)
{
firstTime = false; /// Do the following only once
tstRslt.TempInStart = TempIn.Val;
tstRslt.TempOutStart = TempOut.Val;
tstRslt.TempDivStart = TempDiv.Val;
tstRslt.PressInStart = PressureUp.Val;
tstRslt.PressOutStart = PressureDown.Val;
}
tstRslt.TempInEnd = TempIn.Val;
tstRslt.TempOutEnd = TempOut.Val;
tstRslt.TempDivEnd = TempDiv.Val;
tstRslt.PressInEnd = PressureUp.Val;
tstRslt.PressOutEnd = PressureDown.Val;
tstRslt.MassEndRaw = Mass.Val;
AccumulateAveragedData();
UpdateAllStatistics();
CurrentMassRaw = Mass.Val;
RefFreq.Val = cBrd.ReferenceFreq;
RefFlow.Val = cBrd.ReferenceFlow;
tstRslt.AmbientTempAve = AmbientTemp.Val;
tstRslt.AmbientPressAve = AmbientPressure.Val;
tstRslt.AmbientHumiAve = AmbientHumidity.Val;
string logstr = string.Format("E={0} f={1} q={2}", cBrd.EtPulses(0), cBrd.ReferenceFreq,
cBrd.ReferenceFlow * outPath.FlowMeter.NominalFlow);
@ -212,7 +191,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
float progress = Formulas.TestProgress(cBrd.EtPulses(0), totalPulses, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, true, cBrd, cBrd.TTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, true, cBrd, cBrd.TTime, progress));
}
/// Measurement loop - end
@ -222,117 +201,120 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
Bridge.OnActivity(this, Strings.Test_completed);
//------------------------------------------------
TestEndTime = DateTime.Now;
/// Make sure the CycleBeginForm is closed so that water meter data (s/n) can be copied into results
if (UIFlowControl.Stop == WaitBeginFormClosed()) goto stopTest;
///
/// Populate TestResult data entity with data
///
UpdateTestRsltWithAveragedData(tstRslt);
Results.Entities.TestRslt tstRslt = BatchRslts.GetTestRslt(testName, test.Part);
tstRslt.TimeEnd = DateTime.Now;
tstRslt.BatchNr = Program.LocalSettings.BatchNr;
tstRslt.MassStart = 0;
tstRslt.MassEnd = 0;
tstRslt.MassDiff = 0;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
tstRslt.Time = cBrd.TTime; /// [s] measurement time
tstRslt.FlowMass = 0; /// [kg/h]
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)
tstRslt.VolumeMaster = ltrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
tstRslt.ConstMaster = outPath.FlowMeter.LtrPerPulseCorrected(tstRslt.FlowVolume / 1000.0f); /// Convert the flow to [m3/h]
tstRslt.VolumeCTV = tstRslt.ConstMaster * tstRslt.PulsesMaster; /// [l] 1000.0f is because density is in [kg/m3]
/// Corrected master pulses per liter
tstRslt.ErrorMaster = 0.0f; /// Cannot be determined without the collected water mass measurement
tstRslt.TimeDivStart0 = 0;
tstRslt.TimeDivStart1 = 0;
tstRslt.TimeDivStart2 = 0;
tstRslt.TimeDivStart3 = 0;
tstRslt.TimeDivStart4 = 0;
tstRslt.TimeDivStart5 = 0;
tstRslt.TimeDivEnd0 = 0;
tstRslt.TimeDivEnd1 = 0;
tstRslt.TimeDivEnd2 = 0;
tstRslt.TimeDivEnd3 = 0;
tstRslt.TimeDivEnd4 = 0;
tstRslt.TimeDivEnd5 = 0;
for (int i = 0; i < Config.Data.WMsCount; i++)
if (tstRslt != null)
{
/// Reference to iPerl water meter or null:
WaterMeters.iPerl.WaterMeter iPerl = ((sensPath.RegisterReaders != null) && (i < sensPath.RegisterReaders.Length))
? (sensPath.RegisterReaders[i] as WaterMeters.iPerl.WaterMeter)
: null;
/// Auxiliary results
tstRslt.AmbientTempAve = AmbientTempStat.Average;
tstRslt.AmbientPressAve = AmbientPressureStat.Average;
tstRslt.AmbientHumiAve = AmbientHumidityStat.Average;
tstRslt.PressUpAvrg = PressureUpStat.Average;
tstRslt.PressUpStart = PressureUpStat.First;
tstRslt.PressUpEnd = PressureUpStat.Last;
tstRslt.PressUpMin = PressureUpStat.Min;
tstRslt.PressUpMax = PressureUpStat.Max;
tstRslt.PressDownAvrg = PressureDownStat.Average;
tstRslt.PressDownStart = PressureDownStat.First;
tstRslt.PressDownEnd = PressureDownStat.Last;
tstRslt.PressDownMin = PressureDownStat.Min;
tstRslt.PressDownMax = PressureDownStat.Max;
tstRslt.TempInAvrg = TempInStat.Average;
tstRslt.TempInStart = TempInStat.First;
tstRslt.TempInEnd = TempInStat.Last;
tstRslt.TempInMin = TempInStat.Min;
tstRslt.TempInMax = TempInStat.Max;
tstRslt.TempOutAvrg = TempOutStat.Average;
tstRslt.TempOutStart = TempOutStat.First;
tstRslt.TempOutEnd = TempOutStat.Last;
tstRslt.TempOutMin = TempOutStat.Min;
tstRslt.TempOutMax = TempOutStat.Max;
tstRslt.TempDivAvrg = TempDivStat.Average;
tstRslt.TempDivStart = TempDivStat.First;
tstRslt.TempDivEnd = TempDivStat.Last;
tstRslt.TempDivMin = TempDivStat.Min;
tstRslt.TempDivMax = TempDivStat.Max;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
if ((sensPath.RegisterReaders[i] != null) && (WaterMeters.Count > i) && !WaterMeters[i].Disabled)
/// Main results
tstRslt.StartTime = TestStartTime;
tstRslt.EndTime = TestEndTime;
tstRslt.FlowSetTime = flowSetTime;
tstRslt.TestTime = cBrd.TTime; /// [s] measurement time
tstRslt.PulsesMaster = Convert.ToDouble(cBrd.EtPulses(0)); /// Pulses of the master flow meter (test total)
tstRslt.MassStartRaw = 0;
tstRslt.MassStart = 0;
tstRslt.MassEndRaw = 0;
tstRslt.MassEnd = 0;
tstRslt.FlowMass = 0; /// [kg/h]
tstRslt.FlowVolume = 3.6 * ltrPerRefPulse * tstRslt.PulsesMaster / tstRslt.TestTime; /// [m3/h]
tstRslt.VolumeMaster = ltrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
tstRslt.ConstMaster = outPath.FlowMeter.LtrPerPulseCorrected(tstRslt.FlowVolume); /// Corrected master pulses per liter
tstRslt.VolumeCTV = tstRslt.ConstMaster * tstRslt.PulsesMaster; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.ErrorMaster = 0.0; /// Cannot be determined without a mass measurement
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{
tstRslt.Meters[i].SerialNr = (WaterMeters.Count > i) ? WaterMeters[i].SerialNr : string.Empty;
tstRslt.Meters[i].PulsesPerLiter = sensPath.RegisterReaders[i].PulsesPerLtr;
Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single);
GenericDevices.IRegisterReader regReader = (sensPath.RegisterReaders == null) ? null : sensPath.RegisterReaders[i];
WaterMeters.iPerl.WaterMeter iPerl = regReader as WaterMeters.iPerl.WaterMeter;
if (iPerl != null)
if (meterRslt != null && regReader != null)
{
tstRslt.Meters[i].VolumeStart = (float)iPerl.VolumeLtrStart; /// liter
tstRslt.Meters[i].VolumeEnd = (float)iPerl.VolumeLtrEnd; /// liter
tstRslt.Meters[i].VolumeMeter = (float)Math.Abs(iPerl.VolumeLtrEnd - iPerl.VolumeLtrStart);
tstRslt.Meters[i].VolumeRef = tstRslt.VolumeCTV * (float)(iPerl.TimestampSecEnd - iPerl.TimestampSecStart) / tstRslt.Time;
iPerl.VolumeLtrRef = (double)tstRslt.Meters[i].VolumeRef;
tstRslt.Meters[i].Time = (float)(iPerl.TimestampSecEnd - iPerl.TimestampSecStart);
tstRslt.Meters[i].TimeStart = (float)iPerl.TimestampSecStart;
tstRslt.Meters[i].TimeEnd = (float)iPerl.TimestampSecEnd;
tstRslt.Meters[i].CalibFactor = (iPerl.CalibrationStruct != null) ? iPerl.CalibrationStruct.Calibration : 0;
tstRslt.Meters[i].Q2Correction = iPerl.CurrentQ2Correction;
}
else
{
tstRslt.Meters[i].VolumeStart = 0; /// liter
tstRslt.Meters[i].VolumeEnd = 0; /// liter
if (sensPath.RegisterReaders[i].PulsesPerLtr <= float.Epsilon) tstRslt.Meters[i].VolumeMeter = 0;
else tstRslt.Meters[i].VolumeMeter = Convert.ToSingle(WMPulses[i]) / sensPath.RegisterReaders[i].PulsesPerLtr;
tstRslt.Meters[i].VolumeRef = tstRslt.ConstMaster * WMRefPulses[i]; /// liter
tstRslt.Meters[i].Time = cBrd.TTime;
tstRslt.Meters[i].TimeStart = 0;
tstRslt.Meters[i].TimeEnd = 0;
tstRslt.Meters[i].CalibFactor = 0;
tstRslt.Meters[i].Q2Correction = 0;
}
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
meterRslt.PulsesMeter = Convert.ToDouble(WMPulses[i]);
meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[i]);
tstRslt.Meters[i].PulsesMeter = WMPulses[i];
tstRslt.Meters[i].PulsesMaster = WMRefPulses[i];
if (WMPulses[i] > 0 && tstRslt.Meters[i].VolumeRef > 0)
{
tstRslt.Meters[i].VolumeErrorPct =
100 * (tstRslt.Meters[i].VolumeMeter - tstRslt.Meters[i].VolumeRef) / tstRslt.Meters[i].VolumeRef;
/// %
}
else
{
tstRslt.Meters[i].VolumeErrorPct = -100;
}
tstRslt.Meters[i].Passed = (tstRslt.Meters[i].VolumeErrorPct >= tstRslt.ErrLimLo + tstRslt.Uncertainty)
&& (tstRslt.Meters[i].VolumeErrorPct <= tstRslt.ErrLimHi - tstRslt.Uncertainty);
}
else
{
tstRslt.Meters[i].Disabled = true;
}
if (iPerl != null)
{
meterRslt.TimestampStart = iPerl.TimestampSecStart;
meterRslt.TimestampEnd = iPerl.TimestampSecEnd;
meterRslt.TestTime = meterRslt.TimestampEnd - meterRslt.TimestampStart;
meterRslt.VolumeStart = iPerl.VolumeLtrStart; /// liter
meterRslt.VolumeEnd = iPerl.VolumeLtrEnd; /// liter
meterRslt.VolumeMeter = Math.Abs(iPerl.VolumeLtrEnd - iPerl.VolumeLtrStart);
meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime;
iPerl.VolumeLtrRef = meterRslt.VolumeRef;
#if IPERLST
meterRslt.CalibFactor = (iPerl.CalibrationStruct != null) ? iPerl.CalibrationStruct.Calibration : 0;
meterRslt.Q2Correction = iPerl.CurrentQ2Correction;
#endif
iPerl.LastTestResult = meterRslt; /// Save this water meter test result to iPerl WM
iPerl.NominalTestFlow = 500.0 * (test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
}
else
{
meterRslt.TestTime = tstRslt.TestTime;
meterRslt.VolumeStart = 0;
meterRslt.VolumeEnd = 0;
meterRslt.VolumeMeter = (meterRslt.PulsesPerLiter <= float.Epsilon) ? 0 : meterRslt.PulsesMeter / meterRslt.PulsesPerLiter;
meterRslt.VolumeRef = tstRslt.ConstMaster * meterRslt.PulsesMaster; /// liter
}
if (iPerl != null)
{
iPerl.LastTestResult = tstRslt.Meters[i]; /// Save this water meter test result to iPerl WM
iPerl.NominalTestFlow = 500.0 * (double)(test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
meterRslt.Passed = (meterRslt.Error >= test.ErrLimLo + test.Uncertainty)
&& (meterRslt.Error <= test.ErrLimHi - test.Uncertainty);
meterRslt.TestDone = true;
}
}
}
/// Add data - end
AddOrOverwriteResult(tstRslt);
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(tstRslt));
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(testName));
/// Append the results to the CSV-file
allResults.Info(TestResult2CsvLine(tstRslt));
allResults.Info(TestResult2CsvLine(testName, test.Part));
if (++repetitionNr <= test.Repeats)

View File

@ -10,7 +10,7 @@ using TBF.Boxes;
using TBF.Resources;
using TBF.UiBridge;
namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
{
public class FlyingStartCollectionMethodSeq : Sequences.SequenceBase
{
@ -59,12 +59,11 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
loop:
/// Start the test, initialize test results
Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, repetitionNr, inPath, benchPath, outPath, sensPath, totalPulses));
Config.Entities.TestResult tstRslt = new Config.Entities.TestResult(test, repetitionNr, Config.Entities.MetersKind.Single);
tstRslt.DoNotEvaluate = !testParams.Evaluate;
tstRslt.DoNotPublish = !testParams.Publish;
string testName = Results.Utils.GetTestName(test.Name, test.Repeats, repetitionNr);
TestStartTime = DateTime.Now;
int flowSetTime0 = StateMachine.Time;
int flowSetTime = 0;
float estFlowSetTime = 10.0f;
//------------------------------------------------
@ -72,7 +71,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
//------------------------------------------------
if (inPath.Pump is GenericDevices.IPumpFM) (inPath.Pump as GenericDevices.IPumpFM).TurnOn(test.PumpPower);
State.Create("FlyingStartCollectionMethod : Starting the pump")
State.Create("FlyingStartMassCollection : Starting the pump")
.AddOperation(checkUiOp)
.AddOperation(new Operations.TimerOp(5))
.EnterState();
@ -80,16 +79,16 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
while (!e.Contains(Event.TimerExpired));
State.Create("FlyingStartCollectionMethod : Starting the pump")
State.Create("FlyingStartMassCollection : Starting the pump")
.AddOperation(checkUiOp)
.AddOperation(cBrd.SetValvesOp(inPath.Pump, null))
.EnterState();
@ -97,9 +96,9 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@ -111,7 +110,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
///
/// Measure the weight and skip emptying if there is enough room in the tank
///
State.Create("FlyingStartCollectionMethod : Measuring the mass of water in the tank")
State.Create("FlyingStartMassCollection : Measuring the mass of water in the tank")
.AddOperation(checkUiOp)
.AddOperation(outPath.Balance.ReadMassOp(ref Mass))
.EnterState();
@ -144,7 +143,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
//------------------------------------------------
Bridge.OnActivity(this, Strings.Setting_the_flow);
//------------------------------------------------
State.Create("FlyingStartCollectionMethod : Setting the flow")
State.Create("FlyingStartMassCollection : Setting the flow")
.AddOperation(checkUiOp)
.AddOperation(outPath.RegulValve.SetFlowOp(outPath.FlowMeter, test.Qfrom, test.Qto, outPath.PidCoef, RefFlow, 600)) /// timeout = 10 min.
.EnterState();
@ -152,9 +151,9 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.OpArgumentError)) { retVal = Event.OpArgumentError; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
@ -180,7 +179,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
if (cameraRoi != null) measureOperations.Add(cameraRoi.MeasureOp());
}
State.Create("FlyingStartCollectionMethod : Waiting before 1st mass measurement")
State.Create("FlyingStartMassCollection : Waiting before 1st mass measurement")
.AddOperation(checkUiOp)
.AddOperation(benchPath.TempIn.ReadTempOp(ref TempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref TempOut))
@ -208,7 +207,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
//------------------------------------------------
Bridge.OnActivity(this, Strings.Measuring_the_weight);
//------------------------------------------------
State.Create("FlyingStartCollectionMethod : Measuring the start mass")
State.Create("FlyingStartMassCollection : Measuring the start mass")
.AddOperation(checkUiOp)
.AddOperation(benchPath.TempIn.ReadTempOp(ref TempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref TempOut))
@ -232,15 +231,14 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
LogProcessHeader(processDataLogger, "Measurement");
tstRslt.TimeStart = DateTime.Now;
tstRslt.MassStartRaw = startMass.Val;
StartMassRaw = startMass.Val;
log.WarnFormat("Start mass = {0}kg", startMass);
Mass.Val = startMass.Val;
//------------------------------------------------
Bridge.OnActivity(this, Strings.Test_in_progress);
//------------------------------------------------
State.Create("FlyingStartCollectionMethod : Starting the test")
State.Create("FlyingStartMassCollection : Starting the test")
.AddOperation(checkUiOp)
.AddOperation(benchPath.TempIn.ReadTempOp(ref TempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref TempOut))
@ -274,9 +272,8 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMTimes, ref WMRefPulses);
queryEnd1 = cBrd.QueryMeasurementEndOp();
bool firstTime = true; /// To reset sums for averaging
ResetAveragedData();
int estimtdEndTime = StateMachine.Time + (int)tstRslt.TstTime;
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
ClearAllStatistics();
/// Measurement loop - begin
State.Create("Read water meters")
@ -315,30 +312,10 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
}
//------------------------------------------------
if (firstTime)
{
firstTime = false; /// Do the following only once
tstRslt.TempInStart = TempIn.Val;
tstRslt.TempOutStart = TempOut.Val;
tstRslt.TempDivStart = TempDiv.Val;
tstRslt.PressInStart = PressureUp.Val;
tstRslt.PressOutStart = PressureDown.Val;
}
tstRslt.TempInEnd = TempIn.Val;
tstRslt.TempOutEnd = TempOut.Val;
tstRslt.TempDivEnd = TempDiv.Val;
tstRslt.PressInEnd = PressureUp.Val;
tstRslt.PressOutEnd = PressureDown.Val;
tstRslt.MassEndRaw = Mass.Val;
AccumulateAveragedData();
UpdateAllStatistics();
CurrentMassRaw = Mass.Val;
RefFreq.Val = cBrd.ReferenceFreq;
RefFlow.Val = cBrd.ReferenceFlow;
tstRslt.AmbientTempAve = AmbientTemp.Val;
tstRslt.AmbientPressAve = AmbientPressure.Val;
tstRslt.AmbientHumiAve = AmbientHumidity.Val;
string logstr = string.Format("E={0} f={1} q={2}", cBrd.EtPulses(0), cBrd.ReferenceFreq,
cBrd.ReferenceFlow * outPath.FlowMeter.NominalFlow);
@ -350,13 +327,13 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
float progress = Formulas.TestProgress(cBrd.EtPulses(0), totalPulses, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, true, cBrd, cBrd.TTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, true, cBrd, cBrd.TTime, progress));
}
while (true);
/// Measurement loop - end
test_completed:
State.Create("FlyingStartCollectionMethod : Waiting before 2nd mass measurement")
State.Create("FlyingStartMassCollection : Waiting before 2nd mass measurement")
.AddOperation(checkUiOp)
.AddOperation(benchPath.TempIn.ReadTempOp(ref TempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref TempOut))
@ -384,7 +361,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
//------------------------------------------------
Bridge.OnActivity(this, Strings.Measuring_the_weight);
//------------------------------------------------
State.Create("FlyingStartCollectionMethod : Measuring the end mass")
State.Create("FlyingStartMassCollection : Measuring the end mass")
.AddOperation(checkUiOp)
.AddOperation(benchPath.TempIn.ReadTempOp(ref TempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref TempOut))
@ -407,8 +384,8 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
while (!e.Contains(Event.BalanceDone));
///
log.WarnFormat("End mass = {0}kg", endMass);
tstRslt.MassEndRaw = endMass.Val;
tstRslt.TimeEnd = DateTime.Now;
EndMassRaw = endMass.Val;
TestEndTime = DateTime.Now;
//------------------------------------------------
Bridge.OnActivity(this, Strings.Test_completed);
@ -420,116 +397,112 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
///
/// Populate TestResult data entity with data
///
UpdateTestRsltWithAveragedData(tstRslt);
Results.Entities.TestRslt tstRslt = BatchRslts.GetTestRslt(testName, test.Part);
tstRslt.BatchNr = Program.LocalSettings.BatchNr;
tstRslt.MassStart = Formulas.CorrectedValue(tstRslt.MassStartRaw, outPath.Balance.Corrections);
tstRslt.MassEnd = Formulas.CorrectedValue(tstRslt.MassEndRaw, outPath.Balance.Corrections);
tstRslt.MassDiff = tstRslt.MassEnd - tstRslt.MassStart;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
tstRslt.Time = cBrd.TTime; /// [s] measurement time
tstRslt.FlowMass = 3600.0f * tstRslt.MassDiff / tstRslt.Time; /// [kg/h]
tstRslt.FlowVolume = 3600.0f * ltrPerRefPulse * cBrd.EtPulses(0) / tstRslt.Time; /// [l/h]
tstRslt.VolumeCTV = 1.00103f * 1000.0f * tstRslt.MassDiff / tstRslt.DensityOut; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.VolumeMaster = ltrPerRefPulse * cBrd.EtPulses(0); /// [l] volume from the master flow meter
tstRslt.PulsesMaster = cBrd.EtPulses(0); /// Pulses of the master flow meter (test total)
tstRslt.ConstMaster = ltrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster; /// Corrected master pulses per liter
if (tstRslt != null)
{
/// Auxiliary results
tstRslt.AmbientTempAve = AmbientTempStat.Average;
tstRslt.AmbientPressAve = AmbientPressureStat.Average;
tstRslt.AmbientHumiAve = AmbientHumidityStat.Average;
tstRslt.PressUpAvrg = PressureUpStat.Average;
tstRslt.PressUpStart = PressureUpStat.First;
tstRslt.PressUpEnd = PressureUpStat.Last;
tstRslt.PressUpMin = PressureUpStat.Min;
tstRslt.PressUpMax = PressureUpStat.Max;
tstRslt.PressDownAvrg = PressureDownStat.Average;
tstRslt.PressDownStart = PressureDownStat.First;
tstRslt.PressDownEnd = PressureDownStat.Last;
tstRslt.PressDownMin = PressureDownStat.Min;
tstRslt.PressDownMax = PressureDownStat.Max;
tstRslt.TempInAvrg = TempInStat.Average;
tstRslt.TempInStart = TempInStat.First;
tstRslt.TempInEnd = TempInStat.Last;
tstRslt.TempInMin = TempInStat.Min;
tstRslt.TempInMax = TempInStat.Max;
tstRslt.TempOutAvrg = TempOutStat.Average;
tstRslt.TempOutStart = TempOutStat.First;
tstRslt.TempOutEnd = TempOutStat.Last;
tstRslt.TempOutMin = TempOutStat.Min;
tstRslt.TempOutMax = TempOutStat.Max;
tstRslt.TempDivAvrg = TempDivStat.Average;
tstRslt.TempDivStart = TempDivStat.First;
tstRslt.TempDivEnd = TempDivStat.Last;
tstRslt.TempDivMin = TempDivStat.Min;
tstRslt.TempDivMax = TempDivStat.Max;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
if (tstRslt.VolumeCTV <= float.Epsilon)
{
tstRslt.ErrorMaster = 0.0f;
}
else
{
tstRslt.ErrorMaster = 100 * (tstRslt.VolumeMaster - tstRslt.VolumeCTV) / tstRslt.VolumeCTV;
}
tstRslt.TimeDivStart0 = 0;
tstRslt.TimeDivStart1 = 0;
tstRslt.TimeDivStart2 = 0;
tstRslt.TimeDivStart3 = 0;
tstRslt.TimeDivStart4 = 0;
tstRslt.TimeDivStart5 = 0;
tstRslt.TimeDivEnd0 = 0;
tstRslt.TimeDivEnd1 = 0;
tstRslt.TimeDivEnd2 = 0;
tstRslt.TimeDivEnd3 = 0;
tstRslt.TimeDivEnd4 = 0;
tstRslt.TimeDivEnd5 = 0;
for (int i = 0; i < Config.Data.WMsCount; i++)
{
/// Reference to iPerl water meter or null:
WaterMeters.iPerl.WaterMeter iPerl = ((sensPath.RegisterReaders != null) && (i < sensPath.RegisterReaders.Length))
? (sensPath.RegisterReaders[i] as WaterMeters.iPerl.WaterMeter)
: null;
/// Main results
tstRslt.StartTime = TestStartTime;
tstRslt.EndTime = TestEndTime;
tstRslt.FlowSetTime = flowSetTime;
tstRslt.TestTime = cBrd.TTime; /// [s] measurement time
tstRslt.PulsesMaster = Convert.ToDouble(cBrd.EtPulses(0)); /// Pulses of the master flow meter (test total)
tstRslt.MassStartRaw = startMass.Val;
tstRslt.MassStart = Formulas.CorrectedValue(tstRslt.MassStartRaw, outPath.Balance.Corrections);
tstRslt.MassEndRaw = endMass.Val;
tstRslt.MassEnd = Formulas.CorrectedValue(tstRslt.MassEndRaw, outPath.Balance.Corrections);
tstRslt.FlowMass = 3600.0 * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.TestTime; /// [kg/h]
tstRslt.FlowVolume = 3.6 * ltrPerRefPulse * tstRslt.PulsesMaster / tstRslt.TestTime; /// [m3/h]
tstRslt.VolumeCTV = 1001.03 * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.DensityOut; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.VolumeMaster = ltrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
tstRslt.ConstMaster = ltrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster; /// Corrected master pulses per liter
tstRslt.ErrorMaster = Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.VolumeCTV);
if ((sensPath.RegisterReaders[i] != null) && (WaterMeters.Count > i) && !WaterMeters[i].Disabled)
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{
tstRslt.Meters[i].SerialNr = (WaterMeters.Count > i) ? WaterMeters[i].SerialNr : string.Empty;
tstRslt.Meters[i].PulsesPerLiter = sensPath.RegisterReaders[i].PulsesPerLtr;
Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single);
GenericDevices.IRegisterReader regReader = (sensPath.RegisterReaders == null) ? null : sensPath.RegisterReaders[i];
WaterMeters.iPerl.WaterMeter iPerl = regReader as WaterMeters.iPerl.WaterMeter;
if (iPerl != null)
{
tstRslt.Meters[i].VolumeStart = (float)iPerl.VolumeLtrStart; /// liter
tstRslt.Meters[i].VolumeEnd = (float)iPerl.VolumeLtrEnd; /// liter
tstRslt.Meters[i].VolumeMeter = (float)Math.Abs(iPerl.VolumeLtrEnd - iPerl.VolumeLtrStart);
tstRslt.Meters[i].VolumeRef = tstRslt.VolumeCTV * (float)(iPerl.TimestampSecEnd - iPerl.TimestampSecStart) / tstRslt.Time;
iPerl.VolumeLtrRef = (double)tstRslt.Meters[i].VolumeRef;
tstRslt.Meters[i].Time = (float)(iPerl.TimestampSecEnd - iPerl.TimestampSecStart);
tstRslt.Meters[i].TimeStart = (float)iPerl.TimestampSecStart;
tstRslt.Meters[i].TimeEnd = (float)iPerl.TimestampSecEnd;
tstRslt.Meters[i].CalibFactor = (iPerl.CalibrationStruct != null) ? iPerl.CalibrationStruct.Calibration : 0;
tstRslt.Meters[i].Q2Correction = iPerl.CurrentQ2Correction;
}
else
{
tstRslt.Meters[i].VolumeStart = 0; /// liter
tstRslt.Meters[i].VolumeEnd = 0; /// liter
if (sensPath.RegisterReaders[i].PulsesPerLtr <= float.Epsilon) tstRslt.Meters[i].VolumeMeter = 0;
else tstRslt.Meters[i].VolumeMeter = Convert.ToSingle(WMPulses[i]) / sensPath.RegisterReaders[i].PulsesPerLtr;
tstRslt.Meters[i].VolumeRef = tstRslt.ConstMaster * WMRefPulses[i]; /// liter
tstRslt.Meters[i].Time = cBrd.TTime;
tstRslt.Meters[i].TimeStart = 0;
tstRslt.Meters[i].TimeEnd = 0;
tstRslt.Meters[i].CalibFactor = 0;
tstRslt.Meters[i].Q2Correction = 0;
}
tstRslt.Meters[i].PulsesMeter = WMPulses[i];
tstRslt.Meters[i].PulsesMaster = WMRefPulses[i];
if (WMPulses[i] > 0 && tstRslt.Meters[i].VolumeRef > 0)
if (meterRslt != null && regReader != null)
{
tstRslt.Meters[i].VolumeErrorPct =
100 * (tstRslt.Meters[i].VolumeMeter - tstRslt.Meters[i].VolumeRef) / tstRslt.Meters[i].VolumeRef;
/// %
}
else
{
tstRslt.Meters[i].VolumeErrorPct = -100;
}
tstRslt.Meters[i].Passed = (tstRslt.Meters[i].VolumeErrorPct >= tstRslt.ErrLimLo + tstRslt.Uncertainty)
&& (tstRslt.Meters[i].VolumeErrorPct <= tstRslt.ErrLimHi - tstRslt.Uncertainty);
}
else
{
tstRslt.Meters[i].Disabled = true;
}
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
meterRslt.PulsesMeter = Convert.ToDouble(WMPulses[i]);
meterRslt.PulsesMaster = Convert.ToDouble(WMRefPulses[i]);
if (iPerl != null)
{
iPerl.LastTestResult = tstRslt.Meters[i]; /// Save this water meter test result to iPerl WM
iPerl.NominalTestFlow = 500.0 * (double)(test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
if (iPerl != null)
{
meterRslt.TimestampStart = iPerl.TimestampSecStart;
meterRslt.TimestampEnd = iPerl.TimestampSecEnd;
meterRslt.TestTime = meterRslt.TimestampEnd - meterRslt.TimestampStart;
meterRslt.VolumeStart = iPerl.VolumeLtrStart; /// liter
meterRslt.VolumeEnd = iPerl.VolumeLtrEnd; /// liter
meterRslt.VolumeMeter = Math.Abs(iPerl.VolumeLtrEnd - iPerl.VolumeLtrStart);
meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime;
iPerl.VolumeLtrRef = meterRslt.VolumeRef;
#if IPERLST
meterRslt.CalibFactor = (iPerl.CalibrationStruct != null) ? iPerl.CalibrationStruct.Calibration : 0;
meterRslt.Q2Correction = iPerl.CurrentQ2Correction;
#endif
iPerl.LastTestResult = meterRslt; /// Save this water meter test result to iPerl WM
iPerl.NominalTestFlow = 500.0 * (double)(test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
}
else
{
meterRslt.TestTime = tstRslt.TestTime;
meterRslt.VolumeStart = 0; /// liter
meterRslt.VolumeEnd = 0; /// liter
meterRslt.VolumeMeter = (meterRslt.PulsesPerLiter <= float.Epsilon) ? 0 : meterRslt.PulsesMeter / meterRslt.PulsesPerLiter;
meterRslt.VolumeRef = tstRslt.ConstMaster * meterRslt.PulsesMaster; /// liter
}
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
meterRslt.Passed = (meterRslt.Error >= test.ErrLimLo + test.Uncertainty)
&& (meterRslt.Error <= test.ErrLimHi - test.Uncertainty);
meterRslt.TestDone = true;
}
}
}
/// Add data - end
AddOrOverwriteResult(tstRslt);
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(tstRslt));
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(testName));
/// Append the results to the CSV-file
allResults.Info(TestResult2CsvLine(tstRslt));
allResults.Info(TestResult2CsvLine(testName, test.Part));
if (++repetitionNr <= test.Repeats)
@ -543,7 +516,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
/// Quit this sequence ///
///----------------------///
State.Create("FlyingStartCollectionMethod : Stopping diverter, gate, etc.")
State.Create("FlyingStartMassCollection : Stopping diverter, gate, etc.")
.AddOperation(checkUiOp)
.AddOperation(cBrd.StopPreviousOp())
.EnterState();

View File

@ -8,12 +8,12 @@ using log4net;
using Config.Entities;
using TBF.BenchControl;
namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
{
public class TestMethod : ComponentBase, GenericDevices.ITestMethod
{
private static readonly ILog log = LogManager.GetLogger(typeof(TestMethod));
public override string ToString() { return string.Format("TestMethods.FlyingStartCollectionMethod({0})", Cfg.ToString(1)); }
public override string ToString() { return string.Format("TestMethods.FlyingStartMassCollection({0})", Cfg.ToString(1)); }
readonly TestMethodCfg testMethodCfg;

View File

@ -8,7 +8,7 @@ using System.Xml.Serialization;
using Config.Entities;
using TBF.BenchControl.Generic;
namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
{
public class TestMethodCfg : ComponentCfgBase, Generic.IComponentCfg
{

View File

@ -6,7 +6,7 @@ using System.Windows.Forms;
using log4net;
using TBF.BenchControl.Generic;
namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
{
public partial class TestMethodCfgCtrl : UserControl, IComponentCfgCtrl
{

View File

@ -1,7 +1,7 @@
///
/// Copyright (c) 2013-2015 Sensus Metering Systems
///
namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
{
partial class TestMethodCfgCtrl
{

View File

@ -3,7 +3,7 @@
///
using TBF.BenchControl.Generic;
namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
{
public class TestMethodFactory : IComponentFactory
{

View File

@ -9,7 +9,7 @@ using Config.Entities;
using TBF.BenchControl.Generic;
using TBF.Resources;
namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod
namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
{
public class TestParams : TestParamsBase, IParamsProvider, ITestParams
{

View File

@ -47,7 +47,7 @@ namespace TBF.BenchControl.TestMethods.LeakTest
/// Start the test, initialize test results
Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, 1, inPath, benchPath, outPath, sensPath, 0));
TestResult tstRslt = new TestResult(test, 1, StateMachine.Procedure.MetersKind);
string testName = Results.Utils.GetTestName(test.Name, test.Repeats, 1);
//------------------------------------------------
Bridge.OnActivity(this, Strings.Starting_the_pump);
@ -123,6 +123,9 @@ namespace TBF.BenchControl.TestMethods.LeakTest
pressure_set:
ClearAllStatistics();
UpdateAllStatistics();
startTime = StateMachine.Time;
int estimtdEndTime = startTime + testParams.DurationPMax;
@ -141,14 +144,11 @@ namespace TBF.BenchControl.TestMethods.LeakTest
{
e = StateMachine.WaitRunDevsRunOps();
tstRslt.TempInStart = TempIn.Val;
tstRslt.TempOutStart = TempOut.Val;
tstRslt.PressInStart = PressureUp.Val;
tstRslt.PressOutStart = PressureDown.Val;
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
UpdateAllStatistics();
int remainingTime = Math.Max(estimtdEndTime - StateMachine.Time, 0);
if (remainingTime > 60)
{
@ -178,13 +178,10 @@ namespace TBF.BenchControl.TestMethods.LeakTest
{
e = StateMachine.WaitRunDevsRunOps();
tstRslt.TempInStart = TempIn.Val;
tstRslt.TempOutStart = TempOut.Val;
tstRslt.PressInStart = PressureUp.Val;
tstRslt.PressOutStart = PressureDown.Val;
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
UpdateAllStatistics();
}
while (e.Contains(Event.ValvesBusy));
@ -204,23 +201,20 @@ namespace TBF.BenchControl.TestMethods.LeakTest
{
e = StateMachine.WaitRunDevsRunOps();
tstRslt.TempInStart = TempIn.Val;
tstRslt.TempOutStart = TempOut.Val;
tstRslt.PressInStart = PressureUp.Val;
tstRslt.PressOutStart = PressureDown.Val;
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
UpdateAllStatistics();
}
while (e.Contains(Event.ValvesBusy));
pump_is_off:
tstRslt.TimeStart = DateTime.Now;
TestStartTime = DateTime.Now;
startTime = StateMachine.Time;
estimtdEndTime = startTime + testParams.DurationLeak;
ResetAveragedData();
ClearAllStatistics();
//------------------------------------------------
Bridge.OnActivity(this, Strings.Test_in_progress);
@ -236,9 +230,12 @@ namespace TBF.BenchControl.TestMethods.LeakTest
do
{
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
UpdateAllStatistics();
int remainingTime = Math.Max(estimtdEndTime - StateMachine.Time, 0);
if (remainingTime > 60)
{
@ -248,14 +245,6 @@ namespace TBF.BenchControl.TestMethods.LeakTest
{
Bridge.OnActivity(this, string.Format("{0} ... {1} s", Strings.Test_in_progress, remainingTime));
}
tstRslt.TempInEnd = TempIn.Val;
tstRslt.TempOutEnd = TempOut.Val;
tstRslt.PressInEnd = PressureUp.Val;
tstRslt.PressOutEnd = PressureDown.Val;
tstRslt.MassEndRaw = Mass.Val;
AccumulateAveragedData();
}
while (e.Contains(Event.TimerBusy));
@ -267,108 +256,118 @@ namespace TBF.BenchControl.TestMethods.LeakTest
Bridge.OnActivity(this, Strings.Test_completed);
//------------------------------------------------
TestEndTime = DateTime.Now;
/// Make sure the CycleBeginForm is closed so that water meter data (s/n) can be copied into results
if (UIFlowControl.Stop == WaitBeginFormClosed()) goto stopTest;
///
/// Populate TestResult data entity with data
///
UpdateTestRsltWithAveragedData(tstRslt);
Results.Entities.TestRslt tstRslt = BatchRslts.GetTestRslt(testName, test.Part);
tstRslt.TimeEnd = DateTime.Now;
tstRslt.BatchNr = Program.LocalSettings.BatchNr;
tstRslt.MassStart = 0;
tstRslt.MassEnd = 0;
tstRslt.MassDiff = 0;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg);/// [kg/m3]
tstRslt.DensityDiv = 0; /// [kg/m3]
tstRslt.Time = testParams.DurationPMax; /// [s] measurement time
tstRslt.FlowMass = 0; /// [kg/h]
tstRslt.FlowVolume = 0; /// [l/h]
tstRslt.PulsesMaster = 0; /// Pulses of the master flow meter (test total)
tstRslt.VolumeMaster = 0; /// [l] volume from the master flow meter
tstRslt.ConstMaster = 0; /// Convert the flow to [m3/h]
tstRslt.VolumeCTV = 0; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.ErrorMaster = 0;
tstRslt.TimeDivStart0 = 0;
tstRslt.TimeDivStart1 = 0;
tstRslt.TimeDivStart2 = 0;
tstRslt.TimeDivStart3 = 0;
tstRslt.TimeDivStart4 = 0;
tstRslt.TimeDivStart5 = 0;
tstRslt.TimeDivEnd0 = 0;
tstRslt.TimeDivEnd1 = 0;
tstRslt.TimeDivEnd2 = 0;
tstRslt.TimeDivEnd3 = 0;
tstRslt.TimeDivEnd4 = 0;
tstRslt.TimeDivEnd5 = 0;
if (StateMachine.Procedure.MetersKind == MetersKind.Single)
{
for (int i = 0; i < Config.Data.WMsCount; i++)
if (tstRslt != null)
{
if (sensPath.RegisterReaders[i] != null)
/// Auxiliary results
tstRslt.AmbientTempAve = AmbientTempStat.Average;
tstRslt.AmbientPressAve = AmbientPressureStat.Average;
tstRslt.AmbientHumiAve = AmbientHumidityStat.Average;
tstRslt.PressUpAvrg = PressureUpStat.Average;
tstRslt.PressUpStart = PressureUpStat.First;
tstRslt.PressUpEnd = PressureUpStat.Last;
tstRslt.PressUpMin = PressureUpStat.Min;
tstRslt.PressUpMax = PressureUpStat.Max;
tstRslt.PressDownAvrg = PressureDownStat.Average;
tstRslt.PressDownStart = PressureDownStat.First;
tstRslt.PressDownEnd = PressureDownStat.Last;
tstRslt.PressDownMin = PressureDownStat.Min;
tstRslt.PressDownMax = PressureDownStat.Max;
tstRslt.TempInAvrg = TempInStat.Average;
tstRslt.TempInStart = TempInStat.First;
tstRslt.TempInEnd = TempInStat.Last;
tstRslt.TempInMin = TempInStat.Min;
tstRslt.TempInMax = TempInStat.Max;
tstRslt.TempOutAvrg = TempOutStat.Average;
tstRslt.TempOutStart = TempOutStat.First;
tstRslt.TempOutEnd = TempOutStat.Last;
tstRslt.TempOutMin = TempOutStat.Min;
tstRslt.TempOutMax = TempOutStat.Max;
tstRslt.TempDivAvrg = TempDivStat.Average;
tstRslt.TempDivStart = TempDivStat.First;
tstRslt.TempDivEnd = TempDivStat.Last;
tstRslt.TempDivMin = TempDivStat.Min;
tstRslt.TempDivMax = TempDivStat.Max;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = 0;
/// Main results
tstRslt.StartTime = TestStartTime;
tstRslt.EndTime = TestEndTime;
tstRslt.FlowSetTime = 0;
tstRslt.TestTime = Convert.ToDouble(testParams.DurationPMax); /// [s] measurement time
tstRslt.PulsesMaster = 0; /// Pulses of the master flow meter (test total)
tstRslt.MassStartRaw = 0;
tstRslt.MassStart = 0;
tstRslt.MassEndRaw = 0;
tstRslt.MassEnd = 0;
tstRslt.FlowMass = 0; /// [kg/h]
tstRslt.FlowVolume = 0; /// [m3/h]
tstRslt.VolumeMaster = 0; /// [l] volume from the master flow meter
tstRslt.VolumeCTV = 0; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.ConstMaster = 0; /// Convert the flow to [m3/h]
tstRslt.ErrorMaster = 0;
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{
tstRslt.Meters[i].SerialNr = (WaterMeters.Count > i) ? WaterMeters[i].SerialNr : string.Empty;
tstRslt.Meters[i].VolumeStart = 0;
tstRslt.Meters[i].VolumeEnd = 0;
tstRslt.Meters[i].VolumeMeter = 0;
tstRslt.Meters[i].VolumeRef = 0;
tstRslt.Meters[i].PulsesMeter = 0;
tstRslt.Meters[i].PulsesMaster = 0;
tstRslt.Meters[i].Time = testParams.DurationPMax;
tstRslt.Meters[i].VolumeErrorPct = 0;
tstRslt.Meters[i].Passed = true;
if (StateMachine.Procedure.MetersKind == MetersKind.Single)
{
Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single);
if (meterRslt != null)
{
meterRslt.TestTime = tstRslt.TestTime;
meterRslt.Error = 0;
meterRslt.Passed = true;
meterRslt.TestDone = true;
}
}
else
{
Results.Entities.MeterTestRslt mainMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.CompoundMain);
Results.Entities.MeterTestRslt auxMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.CompoundAux);
for (int isAux = 0; isAux <= 1; isAux++) /// 0=main, 1=aux
{
Results.Entities.MeterTestRslt meterRslt = (isAux == 0) ? mainMeterRslt : auxMeterRslt;
if (meterRslt != null)
{
meterRslt.TestTime = tstRslt.TestTime;
meterRslt.Error = 0;
meterRslt.Passed = true;
}
}
Results.Entities.MeterTestRslt compoundMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Compound);
if (compoundMeterRslt != null)
{
compoundMeterRslt.TestTime = tstRslt.TestTime;
compoundMeterRslt.Error = 0;
compoundMeterRslt.Passed = true;
mainMeterRslt.TestDone = auxMeterRslt.TestDone = compoundMeterRslt.TestDone = true;
}
}
}
}
}
else
{
for (int iCmbnd = 0; iCmbnd < Config.Data.CompoundWMsCount; iCmbnd++)
{
tstRslt.CombinedMeters[iCmbnd].VolumeRef = 0;
for (int i = 2 * iCmbnd; i < 2 * iCmbnd + 2; i++)
{
if (sensPath.RegisterReaders[i] == null || sensPath.RegisterReaders[i].PulsesPerLtr <= float.Epsilon)
{
tstRslt.Meters[i].PulsesPerLiter = 1.0f;
}
else
{
tstRslt.Meters[i].PulsesPerLiter = sensPath.RegisterReaders[i].PulsesPerLtr;
}
tstRslt.Meters[i].SerialNr = (WaterMeters.Count > i) ? WaterMeters[i].SerialNr : string.Empty;
tstRslt.Meters[i].VolumeStart = 0;
tstRslt.Meters[i].VolumeEnd = 0;
tstRslt.Meters[i].VolumeRef = 0;
tstRslt.Meters[i].VolumeMeter = 0;
tstRslt.Meters[i].Time = test.TstTime;
tstRslt.Meters[i].TimeStart = 0;
tstRslt.Meters[i].TimeEnd = testParams.DurationPMax;
tstRslt.Meters[i].PulsesMeter = 0;
tstRslt.Meters[i].PulsesMaster = 0;
tstRslt.Meters[i].VolumeErrorPct = 0;
tstRslt.Meters[i].Passed = true;
}
tstRslt.CombinedMeters[iCmbnd].VolumeMeter = 0;
tstRslt.CombinedMeters[iCmbnd].PulsesMaster = 0;
tstRslt.CombinedMeters[iCmbnd].Time = testParams.DurationPMax;
tstRslt.CombinedMeters[iCmbnd].VolumeErrorPct = 0;
tstRslt.CombinedMeters[iCmbnd].Passed = true;
}
}
/// Add data - end
AddOrOverwriteResult(tstRslt);
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(tstRslt));
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(testName));
/// Append the results to the CSV-file
allResults.Info(TestResult2CsvLine(tstRslt));
allResults.Info(TestResult2CsvLine(testName, test.Part));
stopTest:

View File

@ -47,7 +47,8 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
/// Start the test, initialize test results
Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, 1, inPath, benchPath, outPath, sensPath, 0));
TestResult tstRslt = new TestResult(test, 1, StateMachine.Procedure.MetersKind);
string testName = Results.Utils.GetTestName(test.Name, test.Repeats, 1);
TestStartTime = DateTime.Now;
//------------------------------------------------
Bridge.OnActivity(this, Strings.Starting_the_pump);
@ -103,11 +104,6 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
PressureUp.Val.ToString("F1"),
PressureUp.Val.ToString("F1")));
tstRslt.TempInStart = TempIn.Val;
tstRslt.TempOutStart = TempOut.Val;
tstRslt.PressInStart = PressureUp.Val;
tstRslt.PressOutStart = PressureDown.Val;
float step = (pumpPower < 40.0f) ? 5.0f : ((pumpPower < 60.0f) ? 3.0f : ((pumpPower < 80.0f) ? 2.0f : 1.0f));
if (PressureDown.Val < testParams.PressureLo)
@ -128,10 +124,11 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
pressure_set:
tstRslt.TimeStart = DateTime.Now;
ClearAllStatistics();
UpdateAllStatistics();
startTime = StateMachine.Time;
int endTime = startTime + testParams.DurationPMax;
ResetAveragedData();
//------------------------------------------------
Bridge.OnActivity(this, Strings.Test_in_progress);
@ -148,17 +145,13 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
{
e = StateMachine.WaitRunDevsRunOps();
tstRslt.TempInEnd = TempIn.Val;
tstRslt.TempOutEnd = TempOut.Val;
tstRslt.PressInEnd = PressureUp.Val;
tstRslt.PressOutEnd = PressureDown.Val;
tstRslt.MassEndRaw = Mass.Val;
AccumulateAveragedData();
CurrentMassRaw = Mass.Val;
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
UpdateAllStatistics();
int remainingTime = Math.Max(endTime - StateMachine.Time, 0);
if (remainingTime > 60)
{
@ -173,7 +166,9 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
/// Measurement loop - end
test_completed:
test_completed:
TestEndTime = DateTime.Now;
//------------------------------------------------
Bridge.OnActivity(this, Strings.Test_completed);
@ -185,102 +180,110 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
///
/// Populate TestResult data entity with data
///
UpdateTestRsltWithAveragedData(tstRslt);
Results.Entities.TestRslt tstRslt = BatchRslts.GetTestRslt(testName, test.Part);
tstRslt.TimeEnd = DateTime.Now;
tstRslt.BatchNr = Program.LocalSettings.BatchNr;
tstRslt.MassStart = 0;
tstRslt.MassEnd = 0;
tstRslt.MassDiff = 0;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = 0; /// [kg/m3]
tstRslt.Time = testParams.DurationPMax; /// [s] measurement time
tstRslt.FlowMass = 0; /// [kg/h]
tstRslt.FlowVolume = 0; /// [l/h]
tstRslt.PulsesMaster = 0; /// Pulses of the master flow meter (test total)
tstRslt.VolumeMaster = 0; /// [l] volume from the master flow meter
tstRslt.ConstMaster = 0; /// Convert the flow to [m3/h]
tstRslt.VolumeCTV = 0; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.ErrorMaster = 0;
tstRslt.TimeDivStart0 = 0;
tstRslt.TimeDivStart1 = 0;
tstRslt.TimeDivStart2 = 0;
tstRslt.TimeDivStart3 = 0;
tstRslt.TimeDivStart4 = 0;
tstRslt.TimeDivStart5 = 0;
tstRslt.TimeDivEnd0 = 0;
tstRslt.TimeDivEnd1 = 0;
tstRslt.TimeDivEnd2 = 0;
tstRslt.TimeDivEnd3 = 0;
tstRslt.TimeDivEnd4 = 0;
tstRslt.TimeDivEnd5 = 0;
if (StateMachine.Procedure.MetersKind == Config.Entities.MetersKind.Single)
{
for (int i = 0; i < Config.Data.WMsCount; i++)
{
if (sensPath.RegisterReaders[i] != null)
{
tstRslt.Meters[i].SerialNr = (WaterMeters.Count > i) ? WaterMeters[i].SerialNr : string.Empty;
tstRslt.Meters[i].VolumeStart = 0;
tstRslt.Meters[i].VolumeEnd = 0;
tstRslt.Meters[i].VolumeMeter = 0;
tstRslt.Meters[i].VolumeRef = 0;
tstRslt.Meters[i].PulsesMeter = 0;
tstRslt.Meters[i].PulsesMaster = 0;
tstRslt.Meters[i].Time = testParams.DurationPMax;
tstRslt.Meters[i].VolumeErrorPct = 0;
tstRslt.Meters[i].Passed = true;
}
}
}
else
if (tstRslt != null)
{
for (int iCmbnd = 0; iCmbnd < Config.Data.CompoundWMsCount; iCmbnd++)
/// Auxiliary results
tstRslt.AmbientTempAve = AmbientTempStat.Average;
tstRslt.AmbientPressAve = AmbientPressureStat.Average;
tstRslt.AmbientHumiAve = AmbientHumidityStat.Average;
tstRslt.PressUpAvrg = PressureUpStat.Average;
tstRslt.PressUpStart = PressureUpStat.First;
tstRslt.PressUpEnd = PressureUpStat.Last;
tstRslt.PressUpMin = PressureUpStat.Min;
tstRslt.PressUpMax = PressureUpStat.Max;
tstRslt.PressDownAvrg = PressureDownStat.Average;
tstRslt.PressDownStart = PressureDownStat.First;
tstRslt.PressDownEnd = PressureDownStat.Last;
tstRslt.PressDownMin = PressureDownStat.Min;
tstRslt.PressDownMax = PressureDownStat.Max;
tstRslt.TempInAvrg = TempInStat.Average;
tstRslt.TempInStart = TempInStat.First;
tstRslt.TempInEnd = TempInStat.Last;
tstRslt.TempInMin = TempInStat.Min;
tstRslt.TempInMax = TempInStat.Max;
tstRslt.TempOutAvrg = TempOutStat.Average;
tstRslt.TempOutStart = TempOutStat.First;
tstRslt.TempOutEnd = TempOutStat.Last;
tstRslt.TempOutMin = TempOutStat.Min;
tstRslt.TempOutMax = TempOutStat.Max;
tstRslt.TempDivAvrg = TempDivStat.Average;
tstRslt.TempDivStart = TempDivStat.First;
tstRslt.TempDivEnd = TempDivStat.Last;
tstRslt.TempDivMin = TempDivStat.Min;
tstRslt.TempDivMax = TempDivStat.Max;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = 0;
/// Main results
tstRslt.StartTime = TestStartTime;
tstRslt.EndTime = TestEndTime;
tstRslt.FlowSetTime = 0;
tstRslt.TestTime = Convert.ToDouble(testParams.DurationPMax); /// [s] measurement time
tstRslt.PulsesMaster = 0; /// Pulses of the master flow meter (test total)
tstRslt.MassStartRaw = 0;
tstRslt.MassStart = 0;
tstRslt.MassEndRaw = 0;
tstRslt.MassEnd = 0;
tstRslt.FlowMass = 0; /// [kg/h]
tstRslt.FlowVolume = 0; /// [m3/h]
tstRslt.VolumeMaster = 0; /// [l] volume from the master flow meter
tstRslt.VolumeCTV = 0; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.ConstMaster = 0; /// Convert the flow to [m3/h]
tstRslt.ErrorMaster = 0;
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
{
tstRslt.CombinedMeters[iCmbnd].VolumeRef = 0;
for (int i = 2 * iCmbnd; i < 2 * iCmbnd + 2; i++)
if (StateMachine.Procedure.MetersKind == MetersKind.Single)
{
if (sensPath.RegisterReaders[i] == null || sensPath.RegisterReaders[i].PulsesPerLtr <= float.Epsilon)
{
tstRslt.Meters[i].PulsesPerLiter = 1.0f;
}
else
{
tstRslt.Meters[i].PulsesPerLiter = sensPath.RegisterReaders[i].PulsesPerLtr;
}
Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single);
tstRslt.Meters[i].SerialNr = (WaterMeters.Count > i) ? WaterMeters[i].SerialNr : string.Empty;
tstRslt.Meters[i].VolumeStart = 0;
tstRslt.Meters[i].VolumeEnd = 0;
tstRslt.Meters[i].VolumeRef = 0;
tstRslt.Meters[i].VolumeMeter = 0;
tstRslt.Meters[i].Time = test.TstTime;
tstRslt.Meters[i].TimeStart = 0;
tstRslt.Meters[i].TimeEnd = testParams.DurationPMax;
tstRslt.Meters[i].PulsesMeter = 0;
tstRslt.Meters[i].PulsesMaster = 0;
tstRslt.Meters[i].VolumeErrorPct = 0;
tstRslt.Meters[i].Passed = true;
if (meterRslt != null)
{
meterRslt.TestTime = tstRslt.TestTime;
meterRslt.Error = 0;
meterRslt.Passed = true;
meterRslt.TestDone = true;
}
}
else
{
Results.Entities.MeterTestRslt mainMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.CompoundMain);
Results.Entities.MeterTestRslt auxMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.CompoundAux);
tstRslt.CombinedMeters[iCmbnd].VolumeMeter = 0;
tstRslt.CombinedMeters[iCmbnd].PulsesMaster = 0;
tstRslt.CombinedMeters[iCmbnd].Time = testParams.DurationPMax;
tstRslt.CombinedMeters[iCmbnd].VolumeErrorPct = 0;
tstRslt.CombinedMeters[iCmbnd].Passed = true;
for (int isAux = 0; isAux <= 1; isAux++) /// 0=main, 1=aux
{
Results.Entities.MeterTestRslt meterRslt = (isAux == 0) ? mainMeterRslt : auxMeterRslt;
if (meterRslt != null)
{
meterRslt.TestTime = tstRslt.TestTime;
meterRslt.Error = 0;
meterRslt.Passed = true;
}
}
Results.Entities.MeterTestRslt compoundMeterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Compound);
if (compoundMeterRslt != null)
{
compoundMeterRslt.TestTime = tstRslt.TestTime;
compoundMeterRslt.Error = 0;
compoundMeterRslt.Passed = true;
mainMeterRslt.TestDone = auxMeterRslt.TestDone = compoundMeterRslt.TestDone = true;
}
}
}
}
/// Add data - end
AddOrOverwriteResult(tstRslt);
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(tstRslt));
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(testName));
/// Append the results to the CSV-file
allResults.Info(TestResult2CsvLine(tstRslt));
allResults.Info(TestResult2CsvLine(testName, test.Part));
stopTest:

View File

@ -30,39 +30,41 @@ namespace TBF.BenchControl.TestMethods.ReferenceFlowmeterCalibration
{
Elde.ControlBoardDev cBrd = StateMachine.ControlBoard;
IList<Event> e = new List<Event>(); /// Events from currently running operations
Event retVal = Event.Done;
checkUiOp = new Operations.CheckUIOp(true); /// Runs in more then one state
IList<Event> e = new List<Event>(); /// Events from currently running operations
Event retVal = Event.Done;
checkUiOp = new Operations.CheckUIOp(true); /// Runs in more then one state
ltrPerRefPulse = outPath.FlowMeter.LtrPerPulse; /// [ltr/pulse], 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 + 0.5f);
/// 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 + 0.5f);
processDataLoggingOp = new TBF.BenchControl.Operations.ProcessDataLoggingOp(processDataLogger, this);
int repetitionNr = 1; /// First test: repetitionNr=1
processDataLoggingOp = new TBF.BenchControl.Operations.ProcessDataLoggingOp(processDataLogger, this);
int repetitionNr = 1; /// First test: repetitionNr=1
//====================================
// Transition or SetRoute - Start
//====================================
switch (Transition(transitionBefore, TransitionContext.BeforeTest))
{
case Event.Error: { retVal = Event.Error; goto stopTest; }
case Event.UiCmdStop: { retVal = Event.UiCmdStop; goto stopTest; }
case Event.Error: { retVal = Event.Error; goto stopTest; }
case Event.UiCmdStop: { retVal = Event.UiCmdStop; goto stopTest; }
}
//====================================
loop:
loop:
/// Start the test, initialize test results
Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, repetitionNr, inPath, benchPath, outPath, sensPath, totalPulses));
Config.Entities.TestResult tstRslt = new Config.Entities.TestResult(test, repetitionNr, Config.Entities.MetersKind.Single);
string testName = Results.Utils.GetTestName(test.Name, test.Repeats, repetitionNr);
TestStartTime = DateTime.Now;
int flowSetTime0 = StateMachine.Time;
int flowSetTime = 0;
float estFlowSetTime = 10.0f;
//------------------------------------------------
@ -78,9 +80,9 @@ namespace TBF.BenchControl.TestMethods.ReferenceFlowmeterCalibration
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
@ -95,51 +97,51 @@ namespace TBF.BenchControl.TestMethods.ReferenceFlowmeterCalibration
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
while (!e.Contains(Event.ValvesSet));
if (!test.Emptying) /// If condition met => skip measuring and force emptying
{
if (!test.Emptying) /// If condition met => skip measuring and force emptying
{
///
/// Measure the weight and skip emptying if there is enough room in the tank
/// Measure the weight and skip emptying if there is enough room in the tank
///
State.Create("ReferenceFlowmeterCalibration : Measuring the mass of water in the tank")
.AddOperation(checkUiOp)
.AddOperation(outPath.Balance.ReadMassOp(ref Mass))
.EnterState();
do
{
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
while (!e.Contains(Event.BalanceDone));
.AddOperation(checkUiOp)
.AddOperation(outPath.Balance.ReadMassOp(ref Mass))
.EnterState();
do
{
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
while (!e.Contains(Event.BalanceDone));
float estimatedEndMass = Mass.Val + test.Volume;
if (estimatedEndMass < outPath.Balance.Capacity * Constants.TankFullFactor)
{
goto set_flow; /// Enough room in the tank -> skip emptying
}
}
float estimatedEndMass = Mass.Val + test.Volume;
if (estimatedEndMass < outPath.Balance.Capacity * Constants.TankFullFactor)
{
goto set_flow; /// Enough room in the tank -> skip emptying
}
}
///
/// Empty the water tank
///
switch (EmptyTheTank(outPath.EmptyTankValve, outPath.Balance))
{
case Event.Error: { retVal = Event.Error; goto stopTest; }
case Event.UiCmdStop: { retVal = Event.UiCmdStop; goto stopTest; }
case Event.Error: { retVal = Event.Error; goto stopTest; }
case Event.UiCmdStop: { retVal = Event.UiCmdStop; goto stopTest; }
}
set_flow:
set_flow:
//--------------------------------
//--------------------------------
State.Create("ReferenceFlowmeterCalibration : Setting the flow")
.AddOperation(checkUiOp)
.AddOperation(outPath.RegulValve.SetFlowOp(outPath.FlowMeter, test.Qfrom, test.Qto, outPath.PidCoef, RefFlow, 600)) /// timeout = 10 min.
@ -148,12 +150,12 @@ namespace TBF.BenchControl.TestMethods.ReferenceFlowmeterCalibration
{
e = StateMachine.WaitRunDevsRunOps();
int flowSetTime = StateMachine.Time - flowSetTime0;
flowSetTime = StateMachine.Time - flowSetTime0;
float progress = Formulas.TestProgress(flowSetTime, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, false, cBrd, flowSetTime, progress));
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, false, cBrd, flowSetTime, progress));
if (e.Contains(Event.OpArgumentError)) { retVal = Event.OpArgumentError; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
if (e.Contains(Event.OpArgumentError)) { retVal = Event.OpArgumentError; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
if (e.Contains(Event.RegulValveTimeOut))
{
Bridge.OnError(this, Strings.Timeout);
@ -164,97 +166,75 @@ namespace TBF.BenchControl.TestMethods.ReferenceFlowmeterCalibration
}
while (!e.Contains(Event.FlowReached));
flow_set:
int time = StateMachine.Time;
float currentFlow = RefFlow.Val;
flow_set:
int time = StateMachine.Time;
float currentFlow = RefFlow.Val;
//------------------------------------------------
Bridge.OnActivity(this, Strings.Measuring_the_weight);
//------------------------------------------------
//------------------------------------------------
Bridge.OnActivity(this, Strings.Measuring_the_weight);
//------------------------------------------------
State.Create("ReferenceFlowmeterCalibration : Measuring the start mass")
.AddOperation(checkUiOp)
.AddOperation(benchPath.TempIn.ReadTempOp(ref TempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref TempOut))
.AddOperation(outPath.TempDiv.ReadTempOp(ref TempDiv))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref PressureUp))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref PressureDown))
.AddOperation((StateMachine.Ambient != null)
? StateMachine.Ambient.ReadAmbientOp(AmbientTemp, AmbientPressure, AmbientHumidity) : null)
.AddOperation(outPath.Balance.ReadStableMassOp(ref startMass, 5))
.AddOperation(cBrd.UpdateTankWeightOp())
.AddOperation(processDataLoggingOp)
.EnterState();
.AddOperation(benchPath.TempIn.ReadTempOp(ref TempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref TempOut))
.AddOperation(outPath.TempDiv.ReadTempOp(ref TempDiv))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref PressureUp))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref PressureDown))
.AddOperation((StateMachine.Ambient != null)
? StateMachine.Ambient.ReadAmbientOp(AmbientTemp, AmbientPressure, AmbientHumidity) : null)
.AddOperation(outPath.Balance.ReadStableMassOp(ref startMass, 5))
.AddOperation(cBrd.UpdateTankWeightOp())
.AddOperation(processDataLoggingOp)
.EnterState();
do
{
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
while (!e.Contains(Event.BalanceDone));
tstRslt.TimeStart = DateTime.Now;
tstRslt.MassStartRaw = startMass.Val;
Mass.Val = startMass.Val;
StartMassRaw = startMass.Val;
Mass.Val = startMass.Val;
//------------------------------------------------
Bridge.OnActivity(this, Strings.Test_in_progress);
//------------------------------------------------
//------------------------------------------------
Bridge.OnActivity(this, Strings.Test_in_progress);
//------------------------------------------------
State.Create("ReferenceFlowmeterCalibration : Starting the test")
.AddOperation(checkUiOp)
.AddOperation(cBrd.StartMeasurementOp(outPath, Elde.TestMethods.Diverter | Elde.TestMethods.Synchro,
.AddOperation(cBrd.StartMeasurementOp(outPath, Elde.TestMethods.Diverter | Elde.TestMethods.Synchro,
test.Qfrom, test.Qto, totalPulses, (float)test.TolerRed))
.EnterState();
do
{
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
while (!e.Contains(Event.MeasurementStarted));
/// Measurement loop - preparation
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMRefPulses);
queryEnd1 = cBrd.QueryMeasurementEndOp();
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMRefPulses);
queryEnd1 = cBrd.QueryMeasurementEndOp();
queryEnd2 = cBrd.QueryMeasurementEndOp();
bool firstTime = true; /// To reset sums for averaging
ResetAveragedData();
ClearAllStatistics();
/// Measurement loop - begin
/// Measurement loop - begin
while (true)
{
//--------------------------------
switch (ReadRegistersTempPressAmbient(null, true))
//--------------------------------
switch (ReadRegistersTempPressAmbient(null, true))
{
case Event.Error: { retVal = Event.Error; goto stopTest; }
case Event.UiCmdStop: { retVal = Event.UiCmdStop; goto stopTest; }
case Event.Error: { retVal = Event.Error; goto stopTest; }
case Event.UiCmdStop: { retVal = Event.UiCmdStop; goto stopTest; }
case Event.MeasurementCompleted: goto test_completed;
}
if (firstTime)
{
firstTime = false; /// Do the following only once
tstRslt.TempInStart = TempIn.Val;
tstRslt.TempOutStart = TempOut.Val;
tstRslt.TempDivStart = TempDiv.Val;
tstRslt.PressInStart = PressureUp.Val;
tstRslt.PressOutStart = PressureDown.Val;
}
tstRslt.TempInEnd = TempIn.Val;
tstRslt.TempOutEnd = TempOut.Val;
tstRslt.TempDivEnd = TempDiv.Val;
tstRslt.PressInEnd = PressureUp.Val;
tstRslt.PressOutEnd = PressureDown.Val;
tstRslt.MassEndRaw = Mass.Val;
AccumulateAveragedData();
RefFreq.Val = cBrd.ReferenceFreq;
RefFlow.Val = cBrd.ReferenceFlow;
tstRslt.AmbientTempAve = AmbientTemp.Val;
tstRslt.AmbientPressAve = AmbientPressure.Val;
tstRslt.AmbientHumiAve = AmbientHumidity.Val;
UpdateAllStatistics();
CurrentMassRaw = Mass.Val;
RefFreq.Val = cBrd.ReferenceFreq;
RefFlow.Val = cBrd.ReferenceFlow;
string logstr = string.Format("E={0} f={1} q={2}", cBrd.EtPulses(0), cBrd.ReferenceFreq,
cBrd.ReferenceFlow * outPath.FlowMeter.NominalFlow);
@ -265,151 +245,140 @@ namespace TBF.BenchControl.TestMethods.ReferenceFlowmeterCalibration
log.Debug(logstr);
float progress = Formulas.TestProgress(cBrd.EtPulses(0), totalPulses, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, tstRslt, true, cBrd, cBrd.TTime, progress));
float progress = Formulas.TestProgress(cBrd.EtPulses(0), totalPulses, estFlowSetTime, test.TstTime);
Bridge.OnTestProgress(this, GetTestProgressData(test, repetitionNr, true, cBrd, cBrd.TTime, progress));
}
/// Measurement loop - end
/// Measurement loop - end
test_completed:
State.Create("FlyingStartCollectionMethod : Waiting before mass measurement")
.AddOperation(checkUiOp)
.AddOperation(benchPath.TempIn.ReadTempOp(ref TempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref TempOut))
.AddOperation(outPath.TempDiv.ReadTempOp(ref TempDiv))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref PressureUp))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref PressureDown))
.AddOperation(readRegistersOp)
.AddOperation((StateMachine.Ambient != null)
? StateMachine.Ambient.ReadAmbientOp(AmbientTemp, AmbientPressure, AmbientHumidity) : null)
.AddOperation(outPath.Balance.ReadMassOp(ref Mass))
.AddOperation(cBrd.UpdateTankWeightOp())
.AddOperation(processDataLoggingOp)
.AddOperation(new Operations.TimerOp(test.TimeStop2Mass))
.EnterState();
do
{
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
while (!e.Contains(Event.TimerExpired));
//------------------------------------------------
Bridge.OnActivity(this, Strings.Measuring_the_weight);
//------------------------------------------------
State.Create("ReferenceFlowmeterCalibration : Measuring the end mass")
test_completed:
State.Create("ReferenceFlowmeterCalibration : Waiting before mass measurement")
.AddOperation(checkUiOp)
.AddOperation(benchPath.TempIn.ReadTempOp(ref TempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref TempOut))
.AddOperation(outPath.TempDiv.ReadTempOp(ref TempDiv))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref PressureUp))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref PressureDown))
.AddOperation((StateMachine.Ambient != null)
? StateMachine.Ambient.ReadAmbientOp(AmbientTemp, AmbientPressure, AmbientHumidity) : null)
.AddOperation(outPath.Balance.ReadStableMassOp(ref endMass, 5))
.AddOperation(cBrd.UpdateTankWeightOp())
.AddOperation(processDataLoggingOp)
.EnterState();
.AddOperation(benchPath.TempIn.ReadTempOp(ref TempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref TempOut))
.AddOperation(outPath.TempDiv.ReadTempOp(ref TempDiv))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref PressureUp))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref PressureDown))
.AddOperation(readRegistersOp)
.AddOperation((StateMachine.Ambient != null)
? StateMachine.Ambient.ReadAmbientOp(AmbientTemp, AmbientPressure, AmbientHumidity) : null)
.AddOperation(outPath.Balance.ReadMassOp(ref Mass))
.AddOperation(cBrd.UpdateTankWeightOp())
.AddOperation(processDataLoggingOp)
.AddOperation(new Operations.TimerOp(test.TimeStop2Mass))
.EnterState();
do
{
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
while (!e.Contains(Event.TimerExpired));
//------------------------------------------------
Bridge.OnActivity(this, Strings.Measuring_the_weight);
//------------------------------------------------
State.Create("ReferenceFlowmeterCalibration : Measuring the end mass")
.AddOperation(checkUiOp)
.AddOperation(benchPath.TempIn.ReadTempOp(ref TempIn))
.AddOperation(benchPath.TempOut.ReadTempOp(ref TempOut))
.AddOperation(outPath.TempDiv.ReadTempOp(ref TempDiv))
.AddOperation(benchPath.PressIn.ReadPressureOp(ref PressureUp))
.AddOperation(benchPath.PressOut.ReadPressureOp(ref PressureDown))
.AddOperation((StateMachine.Ambient != null)
? StateMachine.Ambient.ReadAmbientOp(AmbientTemp, AmbientPressure, AmbientHumidity) : null)
.AddOperation(outPath.Balance.ReadStableMassOp(ref endMass, 5))
.AddOperation(cBrd.UpdateTankWeightOp())
.AddOperation(processDataLoggingOp)
.EnterState();
do
{
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.Error)) { retVal = Event.Error; goto stopTest; }
if (e.Contains(Event.UiCmdStop)) { retVal = Event.UiCmdStop; goto stopTest; }
}
while (!e.Contains(Event.BalanceDone));
///
tstRslt.MassEndRaw = endMass.Val;
tstRslt.TimeEnd = DateTime.Now;
///
EndMassRaw = endMass.Val;
TestEndTime = DateTime.Now;
//------------------------------------------------
Bridge.OnActivity(this, Strings.Test_completed);
//------------------------------------------------
/// Make sure the CycleBeginForm is closed so that water meter data (s/n) can be copied into results
/// Make sure the CycleBeginForm is closed so that water meter data (s/n) can be copied into results
if (UIFlowControl.Stop == WaitBeginFormClosed()) goto stopTest;
///
/// Populate TestResult data entity with data
///
UpdateTestRsltWithAveragedData(tstRslt);
Results.Entities.TestRslt tstRslt = BatchRslts.GetTestRslt(testName, test.Part);
tstRslt.BatchNr = Program.LocalSettings.BatchNr;
tstRslt.MassStart = Formulas.CorrectedValue(tstRslt.MassStartRaw, outPath.Balance.Corrections);
tstRslt.MassEnd = Formulas.CorrectedValue(tstRslt.MassEndRaw, outPath.Balance.Corrections);
tstRslt.MassDiff = tstRslt.MassEnd - tstRslt.MassStart;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
tstRslt.Time = cBrd.TTime; /// [s] measurement time
tstRslt.FlowMass = 3600.0f * tstRslt.MassDiff / tstRslt.Time; /// [kg/h]
tstRslt.FlowVolume = 3600.0f * ltrPerRefPulse * cBrd.EtPulses(0) / tstRslt.Time; /// [l/h]
tstRslt.VolumeCTV = 1.00103f * 1000.0f * tstRslt.MassDiff / tstRslt.DensityOut; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.VolumeMaster = ltrPerRefPulse * cBrd.EtPulses(0); /// [l] volume from the master flow meter
tstRslt.PulsesMaster = cBrd.EtPulses(0); /// Pulses of the master flow meter (test total)
tstRslt.ConstMaster = ltrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster; /// Corrected master pulses per liter
if (tstRslt.VolumeCTV <= float.Epsilon)
if (tstRslt != null)
{
tstRslt.ErrorMaster = 0.1f;
}
else
{
tstRslt.ErrorMaster = 100 * (tstRslt.VolumeMaster - tstRslt.VolumeCTV) / tstRslt.VolumeCTV;
/// Auxiliary results
tstRslt.AmbientTempAve = AmbientTempStat.Average;
tstRslt.AmbientPressAve = AmbientPressureStat.Average;
tstRslt.AmbientHumiAve = AmbientHumidityStat.Average;
tstRslt.PressUpAvrg = PressureUpStat.Average;
tstRslt.PressUpStart = PressureUpStat.First;
tstRslt.PressUpEnd = PressureUpStat.Last;
tstRslt.PressUpMin = PressureUpStat.Min;
tstRslt.PressUpMax = PressureUpStat.Max;
tstRslt.PressDownAvrg = PressureDownStat.Average;
tstRslt.PressDownStart = PressureDownStat.First;
tstRslt.PressDownEnd = PressureDownStat.Last;
tstRslt.PressDownMin = PressureDownStat.Min;
tstRslt.PressDownMax = PressureDownStat.Max;
tstRslt.TempInAvrg = TempInStat.Average;
tstRslt.TempInStart = TempInStat.First;
tstRslt.TempInEnd = TempInStat.Last;
tstRslt.TempInMin = TempInStat.Min;
tstRslt.TempInMax = TempInStat.Max;
tstRslt.TempOutAvrg = TempOutStat.Average;
tstRslt.TempOutStart = TempOutStat.First;
tstRslt.TempOutEnd = TempOutStat.Last;
tstRslt.TempOutMin = TempOutStat.Min;
tstRslt.TempOutMax = TempOutStat.Max;
tstRslt.TempDivAvrg = TempDivStat.Average;
tstRslt.TempDivStart = TempDivStat.First;
tstRslt.TempDivEnd = TempDivStat.Last;
tstRslt.TempDivMin = TempDivStat.Min;
tstRslt.TempDivMax = TempDivStat.Max;
tstRslt.DensityIn = Formulas.WaterDensityFromTemp(tstRslt.TempInAvrg); /// [kg/m3]
tstRslt.DensityOut = Formulas.WaterDensityFromTemp(tstRslt.TempOutAvrg); /// [kg/m3]
tstRslt.DensityDiv = Formulas.WaterDensityFromTemp(tstRslt.TempDivAvrg); /// [kg/m3]
/// Update flowmeter constant with the measured one
if (outPath.FlowMeter.Idx1 > 0 && outPath.FlowMeter.Idx1 <= ReferenceFlowmetersCount)
{
LtrPerRefPulse[outPath.FlowMeter.Idx1 - 1] = tstRslt.ConstMaster;
log.InfoFormat("Updating LtrPerRefPulse[{0}] = {1}", outPath.FlowMeter.Idx1 - 1, tstRslt.ConstMaster);
}
/// Main results
tstRslt.StartTime = TestStartTime;
tstRslt.EndTime = TestEndTime;
tstRslt.FlowSetTime = flowSetTime;
tstRslt.TestTime = cBrd.TTime; /// [s] measurement time
tstRslt.PulsesMaster = Convert.ToDouble(cBrd.EtPulses(0)); /// Pulses of the master flow meter (test total)
tstRslt.MassStartRaw = startMass.Val;
tstRslt.MassStart = Formulas.CorrectedValue(tstRslt.MassStartRaw, outPath.Balance.Corrections);
tstRslt.MassEndRaw = endMass.Val;
tstRslt.MassEnd = Formulas.CorrectedValue(tstRslt.MassEndRaw, outPath.Balance.Corrections);
tstRslt.FlowMass = 3600.0 * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.TestTime; /// [kg/h]
tstRslt.FlowVolume = 3.6 * ltrPerRefPulse * tstRslt.PulsesMaster / tstRslt.TestTime; /// [m3/h]
tstRslt.VolumeCTV = 1001.03 * (tstRslt.MassEnd - tstRslt.MassStart) / tstRslt.DensityOut; /// [l] 1000.0f is because density is in [kg/m3]
tstRslt.VolumeMaster = ltrPerRefPulse * tstRslt.PulsesMaster; /// [l] volume from the master flow meter
tstRslt.ConstMaster = ltrPerRefPulse * tstRslt.VolumeCTV / tstRslt.VolumeMaster; /// Corrected master pulses per liter
tstRslt.ErrorMaster = Formulas.ErrorFromVolumes(tstRslt.VolumeMaster, tstRslt.VolumeCTV);
/// Update flowmeter constant with the measured one
if (outPath.FlowMeter.Idx1 > 0 && outPath.FlowMeter.Idx1 <= ReferenceFlowmetersCount)
{
LtrPerRefPulse[outPath.FlowMeter.Idx1 - 1] = Convert.ToSingle(tstRslt.ConstMaster);
log.InfoFormat("Updating LtrPerRefPulse[{0}] = {1}", outPath.FlowMeter.Idx1 - 1, tstRslt.ConstMaster);
}
}
tstRslt.TimeDivStart0 = 0;
tstRslt.TimeDivStart1 = 0;
tstRslt.TimeDivStart2 = 0;
tstRslt.TimeDivStart3 = 0;
tstRslt.TimeDivStart4 = 0;
tstRslt.TimeDivStart5 = 0;
tstRslt.TimeDivEnd0 = 0;
tstRslt.TimeDivEnd1 = 0;
tstRslt.TimeDivEnd2 = 0;
tstRslt.TimeDivEnd3 = 0;
tstRslt.TimeDivEnd4 = 0;
tstRslt.TimeDivEnd5 = 0;
//for (int i = 0; i < Config.Data.WMsCount; i++)
//{
// if (sensPath.RegisterReaders[i] != null)
// {
// tstRslt.Meters[i].SerialNr = "wm" + (i + 1).ToString();
// tstRslt.Meters[i].VolumeStart = 0; /// liter
// tstRslt.Meters[i].VolumeEnd = 0; /// liter
// if (sensPath.RegisterReaders[i].PulsesPerLtr <= float.Epsilon) tstRslt.Meters[i].VolumeMeter = 0;
// else tstRslt.Meters[i].VolumeMeter = Convert.ToSingle(WMPulses[i]) / sensPath.RegisterReaders[i].PulsesPerLtr;
// tstRslt.Meters[i].VolumeRef = tstRslt.ConstMaster * WMRefPulses[i]; /// liter
// tstRslt.Meters[i].PulsesMeter = WMPulses[i];
// tstRslt.Meters[i].PulsesMaster = WMRefPulses[i];
// tstRslt.Meters[i].Time = cBrd.TTime;
// if (WMPulses[i] > 0 && tstRslt.Meters[i].VolumeRef > 0)
// {
// tstRslt.Meters[i].VolumeErrorPct =
// 100 * (tstRslt.Meters[i].VolumeMeter - tstRslt.Meters[i].VolumeRef) / tstRslt.Meters[i].VolumeRef;
// /// %
// }
// else
// {
// tstRslt.Meters[i].VolumeErrorPct = -100;
// }
// tstRslt.Meters[i].Passed = (tstRslt.Meters[i].VolumeErrorPct >= tstRslt.ErrLimLo + tstRslt.Uncertainty)
// && (tstRslt.Meters[i].VolumeErrorPct <= tstRslt.ErrLimHi - tstRslt.Uncertainty);
// }
//}
/// Add data - end
AddOrOverwriteResult(tstRslt);
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(tstRslt));
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(testName));
/// Append the results to the CSV-file
allResults.Info(TestResult2CsvLine(tstRslt));
allResults.Info(TestResult2CsvLine(testName, test.Part));
if (++repetitionNr <= test.Repeats)
@ -439,7 +408,7 @@ namespace TBF.BenchControl.TestMethods.ReferenceFlowmeterCalibration
/// Prevent overwriting 'retVal' in case it was set to non-default value earlier
switch (Transition(transitionAfter, TransitionContext.AfterTest))
{
case Event.Error: { if (retVal == Event.Done) retVal = Event.Error; break; }
case Event.Error: { if (retVal == Event.Done) retVal = Event.Error; break; }
case Event.UiCmdStop: { if (retVal == Event.Done) retVal = Event.UiCmdStop; break; }
}

View File

@ -11,6 +11,7 @@ using System.Windows.Forms;
using log4net;
using Config.Entities;
using TBF.Resources;
using TBF.BenchControl.Sequences;
using TBF.BenchControl.WaterMeters.iPerl;
namespace TBF.BenchControl.TestMethods.iPerlCommunication
@ -262,6 +263,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
/// RFID multiplexer PCB / RFID serial port and worker thread related variables
///
static TestMethodCfg cfg;
static IList<string> testNames;
static IList<iPerlCommunicationParams> multiTestParams;
@ -413,10 +415,12 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
/// Constructor for one iPerlCommunication 'test'
/// </summary>
/// <param name="waterMetersCount">Number of text boxes for serial numbers</param>
public iPerlCommunicationForm(IList<GenericDevices.IWaterMeter> waterMeters,
TestMethodCfg cfg, iPerlCommunicationParams testParams)
public iPerlCommunicationForm(IList<GenericDevices.IWaterMeter> waterMeters, TestMethodCfg cfg,
string testName, iPerlCommunicationParams testParams)
: this(waterMeters, cfg)
{
iPerlCommunicationForm.testNames = new List<string>();
iPerlCommunicationForm.testNames.Add(testName);
iPerlCommunicationForm.multiTestParams = new List<iPerlCommunicationParams>();
iPerlCommunicationForm.multiTestParams.Add(testParams);
@ -429,9 +433,10 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
/// </summary>
/// <param name="waterMetersCount">Number of text boxes for serial numbers</param>
public iPerlCommunicationForm(IList<GenericDevices.IWaterMeter> waterMeters, TestMethodCfg cfg,
IList<iPerlCommunicationParams> multiTestParams)
IList<string> testNames, IList<iPerlCommunicationParams> multiTestParams)
: this(waterMeters, cfg)
{
iPerlCommunicationForm.testNames = testNames;
iPerlCommunicationForm.multiTestParams = multiTestParams;
if (multiTestParams.Count > 0) activityLabel.Text = multiTestParams[0].Activity;
@ -534,9 +539,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
CommCompletedHandler = null;
AllCompletedHandler = null;
TestResult result = CommResult(StateMachine.Tests[0]); /// TODO: Pass the test info in a correct way
BenchControl.Sequences.SequenceBase.AddOrOverwriteResult(result); /// TODO: Pass the result in a correct way
TBF.UiBridge.Bridge.OnTestCompleted(this, new TBF.UiBridge.TestCompletedEventArgs(result));
UpdateRfidCommResult(StateMachine.Tests[0].Name); /// TODO: Pass the test info in a correct way
TBF.UiBridge.Bridge.OnTestCompleted(this, new TBF.UiBridge.TestCompletedEventArgs(StateMachine.Tests[0].Name));
formCompleted = true;
Program.LocalSettings.iPerlCommunicationsFormLeft = Location.X;
@ -1158,82 +1163,25 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
}
/// <summary>
/// Create virtual test result with representing communication success/failure
/// Update test result representing RFID communication success/failure
/// </summary>
/// <param name="test"></param>
/// <returns></returns>
TestResult CommResult(Test test)
void UpdateRfidCommResult(string testName)
{
TestResult tstRslt = new TestResult(test, 1, MetersKind.Single);
Results.Entities.TestRslt tstRslt = ProcessData.BatchRslts.GetTestRslt(testName, 0);
tstRslt.DoNotEvaluate = false;
tstRslt.DoNotPublish = false;
for (int i = 0; i < Math.Min(ProcessData.BatchRslts.WMPositionsCount, waterMeters.Count); i++)
{
Results.Entities.MeterTestRslt meterRslt =
ProcessData.BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single);
WaterMeters.iPerl.WaterMeter iPerl = waterMeters[i] as WaterMeters.iPerl.WaterMeter;
tstRslt.TimeStart = DateTime.Now;
tstRslt.TimeEnd = DateTime.Now;
tstRslt.AmbientTempAve = 20.0f;
tstRslt.AmbientPressAve = 1000.0f;
tstRslt.AmbientHumiAve = 50.0f;
tstRslt.PressInStart = 1000.0f;
tstRslt.PressOutStart = 1000.0f;
tstRslt.TempInStart = 20.0f;
tstRslt.TempOutStart = 20.0f;
tstRslt.TempDivStart = 20.0f;
tstRslt.PressInEnd = 1000.0f;
tstRslt.PressOutEnd = 1000.0f;
tstRslt.TempInEnd = 20.0f;
tstRslt.TempOutEnd = 20.0f;
tstRslt.TempDivEnd = 20.0f;
tstRslt.PressInAvrg = 1000.0f;
tstRslt.PressOutAvrg = 1000.0f;
tstRslt.TempInAvrg = 20.0f;
tstRslt.TempOutAvrg = 20.0f;
tstRslt.TempDivAvrg = 20.0f;
tstRslt.BatchNr = Program.LocalSettings.BatchNr;
tstRslt.MassStartRaw = 0;
tstRslt.MassStart = 0;
tstRslt.MassEndRaw = 0;
tstRslt.MassEnd = 0;
tstRslt.MassDiff = 0;
tstRslt.DensityIn = Program.LocalSettings.RealDensity;
tstRslt.DensityOut = Program.LocalSettings.RealDensity;
tstRslt.DensityDiv = Program.LocalSettings.RealDensity;
tstRslt.Time = 0;
tstRslt.FlowMass = 0;
tstRslt.FlowVolume = 0;
tstRslt.VolumeCTV = 0;
tstRslt.VolumeMaster = 0;
tstRslt.PulsesMaster = 0;
tstRslt.ConstMaster = 0;
tstRslt.ErrorMaster = 0;
for (int i = 0; i < Config.Data.WMsCount; i++)
{
/// Reference to iPerl water meter or null:
WaterMeters.iPerl.WaterMeter iPerl = (i < iPerlCommunicationForm.waterMeters.Count) ? iPerlCommunicationForm.waterMeters[i] : null;
tstRslt.Meters[i].SerialNr = iPerl.SerialNr;
tstRslt.Meters[i].PulsesPerLiter = 0;
tstRslt.Meters[i].VolumeRef = 0;
tstRslt.Meters[i].Time = 0;
tstRslt.Meters[i].TimeStart = 0;
tstRslt.Meters[i].TimeEnd = 0;
tstRslt.Meters[i].PulsesMaster = 0;
tstRslt.Meters[i].VolumeStart = 0;
tstRslt.Meters[i].VolumeEnd = 0;
tstRslt.Meters[i].VolumeMeter = 0;
tstRslt.Meters[i].VolumeErrorPct = 0;
tstRslt.Meters[i].Passed = (!iPerl.CommFailed && !iPerl.Disabled);
tstRslt.Meters[i].PulsesMeter = 0;
tstRslt.Meters[i].Disabled = iPerl.Disabled;
}
return tstRslt;
if (meterRslt != null && iPerl != null)
{
meterRslt.Passed = (!iPerl.CommFailed && !iPerl.Disabled);
meterRslt.TestDone = true;
}
}
}
}
}

View File

@ -7,6 +7,7 @@ using System.Text;
using log4net;
using Config.Entities;
using TBF.BenchControl;
using TBF.BenchControl.Sequences;
using TBF.Boxes;
using TBF.Resources;
using TBF.UiBridge;
@ -20,9 +21,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
System.Windows.Forms.Form modelessDlg;
///
delegate void iPerlCommFormDlgt(iPerlCommunicationSeq myRef, TestMethodCfg cfg, iPerlCommunicationParams testParams);
delegate void iPerlCommFormDlgt(iPerlCommunicationSeq myRef, TestMethodCfg cfg, string testName, iPerlCommunicationParams testParams);
///
void OpenIPerlCommForm(iPerlCommunicationSeq myRef, TestMethodCfg cfg, iPerlCommunicationParams testParams)
void OpenIPerlCommForm(iPerlCommunicationSeq myRef, TestMethodCfg cfg, string testName, iPerlCommunicationParams testParams)
{
StringBuilder sb = new StringBuilder();
IList<GenericDevices.IWaterMeter> wMtrs = new List<GenericDevices.IWaterMeter>();
@ -36,7 +37,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
}
}
log.ErrorFormat("OpenIPerlCommForm(wms:{0})", sb);
myRef.modelessDlg = new iPerlCommunicationForm(WaterMeters, cfg, testParams);
myRef.modelessDlg = new iPerlCommunicationForm(WaterMeters, cfg, testName, testParams);
myRef.modelessDlg.Show();
}
@ -73,17 +74,10 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
{
string fromTestName = testParams.Activity.Substring(Q2correctedFromCmd.Length);
TestResult oriTestResult = null;
foreach (var tr in results)
{
if ((tr.TestName == fromTestName)) { oriTestResult = tr; break; }
}
MakeCorrectedFrom(test.Name, fromTestName);
TestResult tstRslt = MakeCorrectedFrom(test, oriTestResult);
AddOrOverwriteResult(tstRslt);
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(tstRslt));
allResults.Info(TestResult2CsvLine(tstRslt)); /// Append the results to the CSV-file
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(test.Name));
allResults.Info(TestResult2CsvLine(test.Name, 0)); /// Append the results to the CSV-file
IList<Event> rList = new List<Event>(1);
rList.Add(Event.Done);
@ -91,20 +85,16 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
}
else if (testParams.Activity.ToLower().Contains("simulate "))
{
TestResult tstRslt;
if (testParams.Activity.ToLower().Contains("q3")) MakeSimulated(test.Name, 1, 1, 0, -0.5f);
else if (testParams.Activity.ToLower().Contains("q2")) MakeSimulated(test.Name, 1, 1, 0, 0.5f);
else if (testParams.Activity.ToLower().Contains("q1")) MakeSimulated(test.Name, 1, 1, 0, -5.1f);
else if (testParams.Activity.ToLower().Contains("compound ok")) MakeSimulatedCompound(test.Name, 1, 1, 0, 0.7f, 1.0f);
else if (testParams.Activity.ToLower().Contains("compound nok")) MakeSimulatedCompound(test.Name, 1, 1, 0, 4.7f, 0.9f);
else if (testParams.Activity.ToLower().Contains("compound rise")) MakeSimulatedCompound(test.Name, 1, 1, 0, 0.7f, 0.0f);
else if (testParams.Activity.ToLower().Contains("compound fall")) MakeSimulatedCompound(test.Name, 1, 1, 0, 0.7f, 0.9f);
if (testParams.Activity.ToLower().Contains("q3")) tstRslt = MakeSimulated(test, 1, -0.5f);
else if (testParams.Activity.ToLower().Contains("q2")) tstRslt = MakeSimulated(test, 1, 0.5f);
else if (testParams.Activity.ToLower().Contains("q1")) tstRslt = MakeSimulated(test, 1, -5.1f);
else if (testParams.Activity.ToLower().Contains("compound ok")) tstRslt = MakeSimulatedCompound(test, CompoundTestType.Regular, 1, 0.7f);
else if (testParams.Activity.ToLower().Contains("compound nok")) tstRslt = MakeSimulatedCompound(test, CompoundTestType.Regular, 1, 4.7f);
else if (testParams.Activity.ToLower().Contains("compound rise")) tstRslt = MakeSimulatedCompound(test, CompoundTestType.DetectionRise, 1, 0.7f);
else if (testParams.Activity.ToLower().Contains("compound fall")) tstRslt = MakeSimulatedCompound(test, CompoundTestType.DetectionFall, 1, 0.7f);
else tstRslt = null;
AddOrOverwriteResult(tstRslt);
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(tstRslt));
allResults.Info(TestResult2CsvLine(tstRslt)); /// Append the results to the CSV-file
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(test.Name));
allResults.Info(TestResult2CsvLine(test.Name, 0)); /// Append the results to the CSV-file
for (int i = 0; i < Config.Data.WMsCount; i++)
{
@ -113,7 +103,8 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
: null;
if (iPerl != null)
{
iPerl.LastTestResult = tstRslt.Meters[i]; /// Save this water meter test result to iPerl WM
/// TODO: Reimplement
//iPerl.LastTestResult = meterRslt; /// Save this water meter test result to iPerl WM
iPerl.NominalTestFlow = 500.0 * (double)(test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
}
}
@ -177,36 +168,26 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
/// </summary>
/// <param name="oriTestRslt">Q2Adj test result</param>
/// <returns>Virtual Q2 test result</returns>
TestResult MakeCorrectedFrom(Test test, TestResult oriTestRslt)
/// <remarks>Assuming this test does not have multiple parts (part = 0)</remarks>
void MakeCorrectedFrom(string testName, string oriTestName)
{
TestResult tstRslt = new TestResult(test, 1, MetersKind.Single);
Results.Entities.TestRslt oriTestRslt = ProcessData.BatchRslts.GetTestRslt(oriTestName, 0);
Results.Entities.TestRslt tstRslt = ProcessData.BatchRslts.GetTestRslt(testName, 0);
tstRslt.BatchNr = Program.LocalSettings.BatchNr;
tstRslt.TimeStart = oriTestRslt.TimeStart;
tstRslt.TimeEnd = oriTestRslt.TimeEnd;
tstRslt.AmbientTempAve = oriTestRslt.AmbientTempAve;
tstRslt.AmbientPressAve = oriTestRslt.AmbientPressAve;
tstRslt.AmbientHumiAve = oriTestRslt.AmbientHumiAve;
tstRslt.PressInAvrg = oriTestRslt.PressInAvrg;
tstRslt.PressInStart = oriTestRslt.PressInStart;
tstRslt.PressInEnd = oriTestRslt.PressInEnd;
tstRslt.PressOutAvrg = oriTestRslt.PressOutAvrg;
tstRslt.PressOutStart = oriTestRslt.PressOutStart;
tstRslt.PressOutEnd = oriTestRslt.PressOutEnd;
tstRslt.TempInAvrg = oriTestRslt.TempInAvrg;
tstRslt.TempInStart = oriTestRslt.TempInStart;
tstRslt.TempInEnd = oriTestRslt.TempInEnd;
tstRslt.TempOutAvrg = oriTestRslt.TempOutAvrg;
tstRslt.TempOutStart = oriTestRslt.TempOutStart;
tstRslt.TempOutEnd = oriTestRslt.TempOutEnd;
tstRslt.TempDivAvrg = oriTestRslt.TempDivAvrg;
tstRslt.TempDivStart = oriTestRslt.TempDivStart;
tstRslt.TempDivEnd = oriTestRslt.TempDivEnd;
tstRslt.MassStartRaw = oriTestRslt.MassStartRaw;
if (oriTestRslt == null || tstRslt == null) return;
tstRslt.Components = oriTestRslt.Components;
tstRslt.StartTime = oriTestRslt.StartTime;
tstRslt.EndTime = oriTestRslt.EndTime;
tstRslt.FlowSetTime = oriTestRslt.FlowSetTime;
tstRslt.TestTime = oriTestRslt.TestTime;
tstRslt.PulsesMaster = oriTestRslt.PulsesMaster;
tstRslt.ConstMaster = oriTestRslt.ConstMaster;
tstRslt.MassStartRaw = oriTestRslt.MassStartRaw;
tstRslt.MassStart = oriTestRslt.MassStart;
tstRslt.MassEndRaw = oriTestRslt.MassEndRaw;
tstRslt.MassEnd = oriTestRslt.MassEnd;
tstRslt.MassDiff = oriTestRslt.MassEnd;
tstRslt.DensityIn = oriTestRslt.DensityIn;
tstRslt.DensityOut = oriTestRslt.DensityOut;
tstRslt.DensityDiv = oriTestRslt.DensityDiv;
@ -215,64 +196,91 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
tstRslt.FlowVolume = oriTestRslt.FlowVolume;
tstRslt.VolumeCTV = oriTestRslt.VolumeCTV;
tstRslt.VolumeMaster = oriTestRslt.VolumeMaster;
tstRslt.Time = oriTestRslt.Time;
tstRslt.ErrorMaster = oriTestRslt.ErrorMaster;
tstRslt.PulsesMaster = oriTestRslt.PulsesMaster;
tstRslt.ConstMaster = oriTestRslt.ConstMaster;
tstRslt.TimeDivStart0 = oriTestRslt.TimeDivStart0;
tstRslt.TimeDivStart1 = oriTestRslt.TimeDivStart1;
tstRslt.TimeDivStart2 = oriTestRslt.TimeDivStart2;
tstRslt.TimeDivStart3 = oriTestRslt.TimeDivStart3;
tstRslt.TimeDivStart4 = oriTestRslt.TimeDivStart4;
tstRslt.TimeDivStart5 = oriTestRslt.TimeDivStart5;
tstRslt.TimeDivEnd0 = oriTestRslt.TimeDivEnd0;
tstRslt.TimeDivEnd1 = oriTestRslt.TimeDivEnd1;
tstRslt.TimeDivEnd2 = oriTestRslt.TimeDivEnd2;
tstRslt.TimeDivEnd3 = oriTestRslt.TimeDivEnd3;
tstRslt.TimeDivEnd4 = oriTestRslt.TimeDivEnd4;
tstRslt.TimeDivEnd5 = oriTestRslt.TimeDivEnd5;
for (int i = 0; i < Math.Min(tstRslt.Meters.Count, oriTestRslt.Meters.Count); i++)
tstRslt.AmbientTempAve = oriTestRslt.AmbientTempAve;
tstRslt.AmbientPressAve = oriTestRslt.AmbientPressAve;
tstRslt.AmbientHumiAve = oriTestRslt.AmbientHumiAve;
tstRslt.PressUpAvrg = oriTestRslt.PressUpAvrg;
tstRslt.PressUpStart = oriTestRslt.PressUpStart;
tstRslt.PressUpEnd = oriTestRslt.PressUpEnd;
tstRslt.PressUpMin = oriTestRslt.PressUpMin;
tstRslt.PressUpMax = oriTestRslt.PressUpMax;
tstRslt.PressDownAvrg = oriTestRslt.PressDownAvrg;
tstRslt.PressDownStart = oriTestRslt.PressDownStart;
tstRslt.PressDownEnd = oriTestRslt.PressDownEnd;
tstRslt.PressDownMin = oriTestRslt.PressDownMin;
tstRslt.PressDownMax = oriTestRslt.PressDownMax;
tstRslt.TempInAvrg = oriTestRslt.TempInAvrg;
tstRslt.TempInStart = oriTestRslt.TempInStart;
tstRslt.TempInEnd = oriTestRslt.TempInEnd;
tstRslt.TempInMin = oriTestRslt.TempInMin;
tstRslt.TempInMax = oriTestRslt.TempInMax;
tstRslt.TempOutAvrg = oriTestRslt.TempOutAvrg;
tstRslt.TempOutStart = oriTestRslt.TempOutStart;
tstRslt.TempOutEnd = oriTestRslt.TempOutEnd;
tstRslt.TempOutMin = oriTestRslt.TempOutMin;
tstRslt.TempOutMax = oriTestRslt.TempOutMax;
tstRslt.TempDivAvrg = oriTestRslt.TempDivAvrg;
tstRslt.TempDivStart = oriTestRslt.TempDivStart;
tstRslt.TempDivEnd = oriTestRslt.TempDivEnd;
tstRslt.TempDivMin = oriTestRslt.TempDivMin;
tstRslt.TempDivMax = oriTestRslt.TempDivMax;
tstRslt.FlowMin = oriTestRslt.FlowMin;
tstRslt.FlowMax = oriTestRslt.FlowMax;
tstRslt.Custom1 = oriTestRslt.Custom1;
tstRslt.Custom2 = oriTestRslt.Custom2;
tstRslt.Custom3 = oriTestRslt.Custom3;
tstRslt.Custom4 = oriTestRslt.Custom4;
tstRslt.Custom5 = oriTestRslt.Custom5;
tstRslt.Custom6 = oriTestRslt.Custom6;
tstRslt.Custom7 = oriTestRslt.Custom7;
tstRslt.Custom8 = oriTestRslt.Custom8;
for (int i = 0; i < ProcessData.BatchRslts.WMPositionsCount; i++)
{
Results.Entities.MeterTestRslt oriMeterRslt = ProcessData.BatchRslts.GetMeterTestRslt(oriTestName, i, CompoundMeterId.Single);
Results.Entities.MeterTestRslt meterRslt = ProcessData.BatchRslts.GetMeterTestRslt(testName, i, CompoundMeterId.Single);
/// Reference to iPerl water meter or null:
WaterMeters.iPerl.WaterMeter iPerl = ((sensPath.RegisterReaders != null) && (i < sensPath.RegisterReaders.Length))
? (sensPath.RegisterReaders[i] as WaterMeters.iPerl.WaterMeter)
: null;
tstRslt.Meters[i].SerialNr = oriTestRslt.Meters[i].SerialNr;
tstRslt.Meters[i].PulsesPerLiter = oriTestRslt.Meters[i].PulsesPerLiter;
tstRslt.Meters[i].VolumeRef = oriTestRslt.Meters[i].VolumeRef;
tstRslt.Meters[i].Time = oriTestRslt.Meters[i].Time;
tstRslt.Meters[i].TimeStart = oriTestRslt.Meters[i].TimeStart;
tstRslt.Meters[i].TimeEnd = oriTestRslt.Meters[i].TimeEnd;
tstRslt.Meters[i].PulsesMeter = oriTestRslt.Meters[i].PulsesMeter;
tstRslt.Meters[i].PulsesMaster = oriTestRslt.Meters[i].PulsesMaster;
tstRslt.Meters[i].Disabled = oriTestRslt.Meters[i].Disabled;
if (meterRslt != null && oriMeterRslt != null)
{
meterRslt.PulsesMeter = oriMeterRslt.PulsesMeter;
meterRslt.PulsesMaster = oriMeterRslt.PulsesMaster;
meterRslt.PulsesPerLiter = oriMeterRslt.PulsesPerLiter;
meterRslt.VolumeRef = oriMeterRslt.VolumeRef;
meterRslt.TestTime = oriMeterRslt.TestTime;
if (iPerl == null ||
Math.Abs(oriTestRslt.Meters[i].VolumeErrorPct) <= 0.5f ||
oriTestRslt.Meters[i].VolumeErrorPct < oriTestRslt.ErrLimLo + oriTestRslt.Uncertainty ||
oriTestRslt.Meters[i].VolumeErrorPct > oriTestRslt.ErrLimHi - oriTestRslt.Uncertainty)
{
/// Normal meter or iPerl without correction
tstRslt.Meters[i].VolumeStart = oriTestRslt.Meters[i].VolumeStart;
tstRslt.Meters[i].VolumeEnd = oriTestRslt.Meters[i].VolumeEnd;
tstRslt.Meters[i].VolumeMeter = oriTestRslt.Meters[i].VolumeMeter;
tstRslt.Meters[i].VolumeErrorPct = oriTestRslt.Meters[i].VolumeErrorPct;
tstRslt.Meters[i].Passed = oriTestRslt.Meters[i].Passed;
}
else
{
/// corrected iPerl
tstRslt.Meters[i].VolumeStart = 0;
tstRslt.Meters[i].VolumeEnd = 0;
tstRslt.Meters[i].VolumeMeter = oriTestRslt.Meters[i].VolumeRef;
tstRslt.Meters[i].VolumeErrorPct = 0;
tstRslt.Meters[i].Passed = true;
if (iPerl == null ||
Math.Abs(oriMeterRslt.Error) <= 0.5f ||
oriMeterRslt.Error < oriTestRslt.ErrLimLo() + oriTestRslt.Uncertainty() ||
oriMeterRslt.Error > oriTestRslt.ErrLimHi() - oriTestRslt.Uncertainty())
{
/// Normal meter or iPerl without correction
meterRslt.VolumeStart = oriMeterRslt.VolumeStart;
meterRslt.VolumeEnd = oriMeterRslt.VolumeEnd;
meterRslt.VolumeMeter = oriMeterRslt.VolumeMeter;
meterRslt.Error = oriMeterRslt.Error;
meterRslt.Passed = oriMeterRslt.Passed;
meterRslt.TestDone = true;
}
else
{
/// corrected iPerl
meterRslt.VolumeStart = 0;
meterRslt.VolumeEnd = 0;
meterRslt.VolumeMeter = oriMeterRslt.VolumeRef;
meterRslt.Error = 0;
meterRslt.Passed = true;
meterRslt.TestDone = true;
}
}
}
return tstRslt;
}
}
}

View File

@ -114,7 +114,7 @@ namespace TBF.BenchControl.WaterMeters.iPerl
/// <summary> Result of the last test used to calculate Q2 correction factors, etc </summary>
public MeterTestResult LastTestResult;
public Results.Entities.MeterTestRslt LastTestResult;
public double NominalTestFlow; /// liter per hour
@ -161,9 +161,9 @@ namespace TBF.BenchControl.WaterMeters.iPerl
/// <returns>Q2 correction factor</returns>
public double Q2CorrectionFactor()
{
Q2ErrorWOCorrection = LastTestResult.VolumeErrorPct;
Q2ErrorWOCorrection = LastTestResult.Error;
if (Math.Abs(LastTestResult.VolumeErrorPct) <= 0.5f)
if (Math.Abs(LastTestResult.Error) <= 0.5)
{
Q2CorrectionDone = false;
return 0; /// No Q2 correction if error < +/-0.5 %
@ -176,26 +176,26 @@ namespace TBF.BenchControl.WaterMeters.iPerl
double F = D / (NominalTestFlow * 10.0); /// Error corrected with 8 Raw Units per minute [%]
double G = F / B; /// Error corrected with 1 Raw Unit per minute [%]
float errLimitLo = LastTestResult.TestResult.ErrLimLo + LastTestResult.TestResult.Uncertainty;
float errLimitHi = LastTestResult.TestResult.ErrLimHi - LastTestResult.TestResult.Uncertainty;
double errLimitLo = LastTestResult.ErrLimLo() + LastTestResult.Uncertainty();
double errLimitHi = LastTestResult.ErrLimHi() - LastTestResult.Uncertainty();
if (LastTestResult.VolumeErrorPct < errLimitLo) return 0; /// No Q2 correction if error too large -> WM failed
if (LastTestResult.VolumeErrorPct > errLimitHi) return 0; /// No Q2 correction if error too large -> WM failed
if (LastTestResult.Error < errLimitLo) return 0; /// No Q2 correction if error too large -> WM failed
if (LastTestResult.Error > errLimitHi) return 0; /// No Q2 correction if error too large -> WM failed
float volumeMeterErrLimLo = LastTestResult.VolumeRef * (100.0f + errLimitLo) / 100.0f;
float volumeMeterErrLimHi = LastTestResult.VolumeRef * (100.0f + errLimitHi) / 100.0f;
double volumeMeterErrLimLo = LastTestResult.VolumeRef * (100.0 + errLimitLo) / 100.0;
double volumeMeterErrLimHi = LastTestResult.VolumeRef * (100.0 + errLimitHi) / 100.0;
double corrFactorHi = (-1) * (errLimitLo / G) * (LastTestResult.VolumeRef / volumeMeterErrLimLo); /// > 0
double corrFactorLo = (-1) * (errLimitHi / G) * (LastTestResult.VolumeRef / volumeMeterErrLimHi); /// < 0
double corrFactor = (-1) * (LastTestResult.VolumeErrorPct / G) * (LastTestResult.VolumeRef / LastTestResult.VolumeMeter);
double corrFactor = (-1) * (LastTestResult.Error / G) * (LastTestResult.VolumeRef / LastTestResult.VolumeMeter);
double origCalulatedCorrFactor = corrFactor;
log.WarnFormat("Q2 correction: {0}, corrFactor={4}, error={3}% [Lo={1}%, Hi={2}%]",
Name,
errLimitLo.ToString("F1"),
errLimitHi.ToString("F1"),
LastTestResult.VolumeErrorPct.ToString("F2"),
LastTestResult.Error.ToString("F2"),
corrFactor.ToString("F1"));
Q2CorrectionDone = true;

View File

@ -149,15 +149,16 @@ namespace TBF.Screens
public void OnTestProgress(object sender, TestProgressEventArgs data)
{
if (data.TestResult != null)
{
int count = Math.Min(Config.Data.WMsCount, data.TestResult.Meters.Count);
for (int i = 0; i < count; i++)
{
measurementTbl1Col2.SetData(i, data.TestResult.Meters[i].VolumeMeter.ToString("F1"));
measurementTbl1Col3.SetData(i, data.TestResult.Meters[i].VolumeErrorPct.ToString("F1"));
}
}
/// TODO: Reimplement
//if (data.TestResult != null)
//{
// int count = Math.Min(Config.Data.WMsCount, data.TestResult.Meters.Count);
// for (int i = 0; i < count; i++)
// {
// measurementTbl1Col2.SetData(i, data.TestResult.Meters[i].VolumeMeter.ToString("F1"));
// measurementTbl1Col3.SetData(i, data.TestResult.Meters[i].VolumeErrorPct.ToString("F1"));
// }
//}
measurementTbl2Col2.SetData(0, data.RefPulses);
measurementTbl2Col2.SetData(1, data.Time.ToString("F1"));

View File

@ -401,23 +401,26 @@ namespace TBF.Screens
{
for (int i = 0; i < textBoxesCount; i++)
{
pulses[i].Text = args.TestResult.Meters[i].PulsesMeter.ToString();
refPulses[i].Text = args.TestResult.Meters[i].PulsesMaster.ToString();
volume[i].Text = args.TestResult.Meters[i].VolumeMeter.ToString();
error[i].Text = args.TestResult.Meters[i].VolumeErrorPct.ToString("F2");
/// TODO: Reimplement
//pulses[i].Text = args.TestResult.Meters[i].PulsesMeter.ToString();
//refPulses[i].Text = args.TestResult.Meters[i].PulsesMaster.ToString();
//volume[i].Text = args.TestResult.Meters[i].VolumeMeter.ToString();
//error[i].Text = args.TestResult.Meters[i].VolumeErrorPct.ToString("F2");
}
}
else if (currentMetersKind == MetersKind.Combined)
{
for (int i = 0; i < 2; i++)
{
pulses[i].Text = args.TestResult.Meters[i].PulsesMeter.ToString();
refPulses[i].Text = args.TestResult.Meters[i].PulsesMaster.ToString();
volume[i].Text = args.TestResult.Meters[i].VolumeMeter.ToString();
error[i].Text = args.TestResult.Meters[i].VolumeErrorPct.ToString("F2");
/// TODO: Reimplement
//pulses[i].Text = args.TestResult.Meters[i].PulsesMeter.ToString();
//refPulses[i].Text = args.TestResult.Meters[i].PulsesMaster.ToString();
//volume[i].Text = args.TestResult.Meters[i].VolumeMeter.ToString();
//error[i].Text = args.TestResult.Meters[i].VolumeErrorPct.ToString("F2");
}
volume1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeMeter.ToString();
error1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeErrorPct.ToString("F2");
/// TODO: Reimplement
//volume1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeMeter.ToString();
//error1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeErrorPct.ToString("F2");
}
tInLabel.Text = args.Tin.ToString();
@ -447,57 +450,58 @@ namespace TBF.Screens
void OnTestCompleted(object sender, TestCompletedEventArgs args)
{
TestResult tRes = args.TestResult;
/// TODO: Reimplement
//TestResult tRes = args.TestResult;
tInLabel.Text = tRes.TempInAvrg.ToString("F2");
tOutLabel.Text = tRes.TempOutAvrg.ToString("F2");
tDivLabel.Text = tRes.TempDivAvrg.ToString("F2");
prInLabel.Text = tRes.PressInAvrg.ToString("F1");
prOutLabel.Text = tRes.PressOutAvrg.ToString("F1");
airTempLabel.Text = tRes.AmbientTempAve.ToString("F1");
airPressLabel.Text = tRes.AmbientPressAve.ToString("F1");
airHumiLabel.Text = tRes.AmbientHumiAve.ToString("F1");
//tInLabel.Text = tRes.TempInAvrg.ToString("F2");
//tOutLabel.Text = tRes.TempOutAvrg.ToString("F2");
//tDivLabel.Text = tRes.TempDivAvrg.ToString("F2");
//prInLabel.Text = tRes.PressInAvrg.ToString("F1");
//prOutLabel.Text = tRes.PressOutAvrg.ToString("F1");
//airTempLabel.Text = tRes.AmbientTempAve.ToString("F1");
//airPressLabel.Text = tRes.AmbientPressAve.ToString("F1");
//airHumiLabel.Text = tRes.AmbientHumiAve.ToString("F1");
refPulsesLabel.Text = tRes.PulsesMaster.ToString("F0");
//refFreqLabel.Text = tstRslt.
refFlowLabel.Text = Utils.FloatToStr(tRes.FlowMass / 1000.0f, 4);
//refPulsesLabel.Text = tRes.PulsesMaster.ToString("F0");
////refFreqLabel.Text = tstRslt.
//refFlowLabel.Text = Utils.FloatToStr(tRes.FlowMass / 1000.0f, 4);
refVolumeLabel.Text = tRes.VolumeCTV.ToString("F2");
//regValvePosLabel.Text = tstRslt.
//massLabel.Text = tstRslt.
//refVolumeLabel.Text = tRes.VolumeCTV.ToString("F2");
////regValvePosLabel.Text = tstRslt.
////massLabel.Text = tstRslt.
volumeCtvLabel.Text = args.TestResult.VolumeCTV.ToString("F1");
refErrorLabel.Text = (tRes.ErrorMaster == 0) ? "---" : tRes.ErrorMaster.ToString("F3");
//volumeCtvLabel.Text = args.TestResult.VolumeCTV.ToString("F1");
//refErrorLabel.Text = (tRes.ErrorMaster == 0) ? "---" : tRes.ErrorMaster.ToString("F3");
if (tRes.MetersKind == MetersKind.Single)
{
for (int i = 0; i < textBoxesCount; i++)
{
pulses[i].Text = tRes.Meters[i].PulsesMeter.ToString("F0");
refPulses[i].Text = tRes.Meters[i].PulsesMaster.ToString("F0");
volume[i].Text = tRes.Meters[i].VolumeMeter.ToString("F2");
error[i].Text = tRes.Meters[i].VolumeErrorPct.ToString("F2");
passed[i].Text = tRes.Meters[i].Passed ? Strings.Passed : Strings.Failed;
}
}
else if (tRes.MetersKind == MetersKind.Combined)
{
pulses1Label.Text = tRes.Meters[0].PulsesMeter.ToString("F0");
pulses2Label.Text = tRes.Meters[1].PulsesMeter.ToString("F0");
//pulses1zLabel.Text = tRes.CombinedMeters[0].PulsesMeter.ToString("F0");
refPulses1Label.Text = tRes.Meters[0].PulsesMaster.ToString("F0");
refPulses2Label.Text = tRes.Meters[1].PulsesMaster.ToString("F0");
//refPulses1zLabel.Text = tRes.CombinedMeters[0].PulsesMaster.ToString("F0");
volume1Label.Text = tRes.Meters[0].VolumeMeter.ToString("F2");
volume2Label.Text = tRes.Meters[1].VolumeMeter.ToString("F2");
volume1zLabel.Text = tRes.CombinedMeters[0].VolumeMeter.ToString("F2");
error1Label.Text = tRes.Meters[0].VolumeErrorPct.ToString("F2");
error2Label.Text = tRes.Meters[1].VolumeErrorPct.ToString("F2");
error1zLabel.Text = tRes.CombinedMeters[0].VolumeErrorPct.ToString("F2");
passed1Label.Text = tRes.Meters[0].Passed ? Strings.Passed : Strings.Failed;
passed2Label.Text = tRes.Meters[1].Passed ? Strings.Passed : Strings.Failed;
passed1zLabel.Text = tRes.CombinedMeters[0].Passed ? Strings.Passed : Strings.Failed;
}
//if (tRes.MetersKind == MetersKind.Single)
//{
// for (int i = 0; i < textBoxesCount; i++)
// {
// pulses[i].Text = tRes.Meters[i].PulsesMeter.ToString("F0");
// refPulses[i].Text = tRes.Meters[i].PulsesMaster.ToString("F0");
// volume[i].Text = tRes.Meters[i].VolumeMeter.ToString("F2");
// error[i].Text = tRes.Meters[i].VolumeErrorPct.ToString("F2");
// passed[i].Text = tRes.Meters[i].Passed ? Strings.Passed : Strings.Failed;
// }
//}
//else if (tRes.MetersKind == MetersKind.Combined)
//{
// pulses1Label.Text = tRes.Meters[0].PulsesMeter.ToString("F0");
// pulses2Label.Text = tRes.Meters[1].PulsesMeter.ToString("F0");
// //pulses1zLabel.Text = tRes.CombinedMeters[0].PulsesMeter.ToString("F0");
// refPulses1Label.Text = tRes.Meters[0].PulsesMaster.ToString("F0");
// refPulses2Label.Text = tRes.Meters[1].PulsesMaster.ToString("F0");
// //refPulses1zLabel.Text = tRes.CombinedMeters[0].PulsesMaster.ToString("F0");
// volume1Label.Text = tRes.Meters[0].VolumeMeter.ToString("F2");
// volume2Label.Text = tRes.Meters[1].VolumeMeter.ToString("F2");
// volume1zLabel.Text = tRes.CombinedMeters[0].VolumeMeter.ToString("F2");
// error1Label.Text = tRes.Meters[0].VolumeErrorPct.ToString("F2");
// error2Label.Text = tRes.Meters[1].VolumeErrorPct.ToString("F2");
// error1zLabel.Text = tRes.CombinedMeters[0].VolumeErrorPct.ToString("F2");
// passed1Label.Text = tRes.Meters[0].Passed ? Strings.Passed : Strings.Failed;
// passed2Label.Text = tRes.Meters[1].Passed ? Strings.Passed : Strings.Failed;
// passed1zLabel.Text = tRes.CombinedMeters[0].Passed ? Strings.Passed : Strings.Failed;
//}
}
void OnProcedureCompleted(object sender, ProcedureCompletedEventArgs args)

View File

@ -430,23 +430,26 @@ namespace TBF.Screens
{
for (int i = 0; i < textBoxesCount; i++)
{
pulses[i].Text = args.TestResult.Meters[i].PulsesMeter.ToString();
refPulses[i].Text = args.TestResult.Meters[i].PulsesMaster.ToString();
volume[i].Text = args.TestResult.Meters[i].VolumeMeter.ToString();
error[i].Text = args.TestResult.Meters[i].VolumeErrorPct.ToString("F2");
/// TODO: Reimplement
//pulses[i].Text = args.TestResult.Meters[i].PulsesMeter.ToString();
//refPulses[i].Text = args.TestResult.Meters[i].PulsesMaster.ToString();
//volume[i].Text = args.TestResult.Meters[i].VolumeMeter.ToString();
//error[i].Text = args.TestResult.Meters[i].VolumeErrorPct.ToString("F2");
}
}
else if (currentMetersKind == MetersKind.Combined)
{
for (int i = 0; i < 2; i++)
{
pulses[i].Text = args.TestResult.Meters[i].PulsesMeter.ToString();
refPulses[i].Text = args.TestResult.Meters[i].PulsesMaster.ToString();
volume[i].Text = args.TestResult.Meters[i].VolumeMeter.ToString();
error[i].Text = args.TestResult.Meters[i].VolumeErrorPct.ToString("F2");
/// TODO: Reimplement
//pulses[i].Text = args.TestResult.Meters[i].PulsesMeter.ToString();
//refPulses[i].Text = args.TestResult.Meters[i].PulsesMaster.ToString();
//volume[i].Text = args.TestResult.Meters[i].VolumeMeter.ToString();
//error[i].Text = args.TestResult.Meters[i].VolumeErrorPct.ToString("F2");
}
volume1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeMeter.ToString();
error1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeErrorPct.ToString("F2");
/// TODO: Reimplement
//volume1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeMeter.ToString();
//error1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeErrorPct.ToString("F2");
}
tInLabel.Text = args.Tin.ToString();
@ -476,57 +479,58 @@ namespace TBF.Screens
void OnTestCompleted(object sender, TestCompletedEventArgs args)
{
TestResult tRes = args.TestResult;
/// TODO: Reimplement
//TestResult tRes = args.TestResult;
tInLabel.Text = tRes.TempInAvrg.ToString("F2");
tOutLabel.Text = tRes.TempOutAvrg.ToString("F2");
tDivLabel.Text = tRes.TempDivAvrg.ToString("F2");
prInLabel.Text = tRes.PressInAvrg.ToString("F1");
prOutLabel.Text = tRes.PressOutAvrg.ToString("F1");
airTempLabel.Text = tRes.AmbientTempAve.ToString("F1");
airPressLabel.Text = tRes.AmbientPressAve.ToString("F1");
airHumiLabel.Text = tRes.AmbientHumiAve.ToString("F1");
//tInLabel.Text = tRes.TempInAvrg.ToString("F2");
//tOutLabel.Text = tRes.TempOutAvrg.ToString("F2");
//tDivLabel.Text = tRes.TempDivAvrg.ToString("F2");
//prInLabel.Text = tRes.PressInAvrg.ToString("F1");
//prOutLabel.Text = tRes.PressOutAvrg.ToString("F1");
//airTempLabel.Text = tRes.AmbientTempAve.ToString("F1");
//airPressLabel.Text = tRes.AmbientPressAve.ToString("F1");
//airHumiLabel.Text = tRes.AmbientHumiAve.ToString("F1");
refPulsesLabel.Text = tRes.PulsesMaster.ToString("F0");
//refFreqLabel.Text = tstRslt.
refFlowLabel.Text = Utils.FloatToStr(tRes.FlowMass / 1000.0f, 4);
//refPulsesLabel.Text = tRes.PulsesMaster.ToString("F0");
////refFreqLabel.Text = tstRslt.
//refFlowLabel.Text = Utils.FloatToStr(tRes.FlowMass / 1000.0f, 4);
refVolumeLabel.Text = tRes.VolumeCTV.ToString("F2");
//regValvePosLabel.Text = tstRslt.
//massLabel.Text = tstRslt.
//refVolumeLabel.Text = tRes.VolumeCTV.ToString("F2");
////regValvePosLabel.Text = tstRslt.
////massLabel.Text = tstRslt.
volumeCtvLabel.Text = args.TestResult.VolumeCTV.ToString("F1");
refErrorLabel.Text = (tRes.ErrorMaster == 0) ? "---" : tRes.ErrorMaster.ToString("F3");
//volumeCtvLabel.Text = args.TestResult.VolumeCTV.ToString("F1");
//refErrorLabel.Text = (tRes.ErrorMaster == 0) ? "---" : tRes.ErrorMaster.ToString("F3");
if (tRes.MetersKind == MetersKind.Single)
{
for (int i = 0; i < textBoxesCount; i++)
{
pulses[i].Text = tRes.Meters[i].PulsesMeter.ToString("F0");
refPulses[i].Text = tRes.Meters[i].PulsesMaster.ToString("F0");
volume[i].Text = tRes.Meters[i].VolumeMeter.ToString("F2");
error[i].Text = tRes.Meters[i].VolumeErrorPct.ToString("F2");
passed[i].Text = tRes.Meters[i].Passed ? Strings.Passed : Strings.Failed;
}
}
else if (tRes.MetersKind == MetersKind.Combined)
{
pulses1Label.Text = tRes.Meters[0].PulsesMeter.ToString("F0");
pulses2Label.Text = tRes.Meters[1].PulsesMeter.ToString("F0");
//pulses1zLabel.Text = tRes.CombinedMeters[0].PulsesMeter.ToString("F0");
refPulses1Label.Text = tRes.Meters[0].PulsesMaster.ToString("F0");
refPulses2Label.Text = tRes.Meters[1].PulsesMaster.ToString("F0");
//refPulses1zLabel.Text = tRes.CombinedMeters[0].PulsesMaster.ToString("F0");
volume1Label.Text = tRes.Meters[0].VolumeMeter.ToString("F2");
volume2Label.Text = tRes.Meters[1].VolumeMeter.ToString("F2");
volume1zLabel.Text = tRes.CombinedMeters[0].VolumeMeter.ToString("F2");
error1Label.Text = tRes.Meters[0].VolumeErrorPct.ToString("F2");
error2Label.Text = tRes.Meters[1].VolumeErrorPct.ToString("F2");
error1zLabel.Text = tRes.CombinedMeters[0].VolumeErrorPct.ToString("F2");
passed1Label.Text = tRes.Meters[0].Passed ? Strings.Passed : Strings.Failed;
passed2Label.Text = tRes.Meters[1].Passed ? Strings.Passed : Strings.Failed;
passed1zLabel.Text = tRes.CombinedMeters[0].Passed ? Strings.Passed : Strings.Failed;
}
//if (tRes.MetersKind == MetersKind.Single)
//{
// for (int i = 0; i < textBoxesCount; i++)
// {
// pulses[i].Text = tRes.Meters[i].PulsesMeter.ToString("F0");
// refPulses[i].Text = tRes.Meters[i].PulsesMaster.ToString("F0");
// volume[i].Text = tRes.Meters[i].VolumeMeter.ToString("F2");
// error[i].Text = tRes.Meters[i].VolumeErrorPct.ToString("F2");
// passed[i].Text = tRes.Meters[i].Passed ? Strings.Passed : Strings.Failed;
// }
//}
//else if (tRes.MetersKind == MetersKind.Combined)
//{
// pulses1Label.Text = tRes.Meters[0].PulsesMeter.ToString("F0");
// pulses2Label.Text = tRes.Meters[1].PulsesMeter.ToString("F0");
// //pulses1zLabel.Text = tRes.CombinedMeters[0].PulsesMeter.ToString("F0");
// refPulses1Label.Text = tRes.Meters[0].PulsesMaster.ToString("F0");
// refPulses2Label.Text = tRes.Meters[1].PulsesMaster.ToString("F0");
// //refPulses1zLabel.Text = tRes.CombinedMeters[0].PulsesMaster.ToString("F0");
// volume1Label.Text = tRes.Meters[0].VolumeMeter.ToString("F2");
// volume2Label.Text = tRes.Meters[1].VolumeMeter.ToString("F2");
// volume1zLabel.Text = tRes.CombinedMeters[0].VolumeMeter.ToString("F2");
// error1Label.Text = tRes.Meters[0].VolumeErrorPct.ToString("F2");
// error2Label.Text = tRes.Meters[1].VolumeErrorPct.ToString("F2");
// error1zLabel.Text = tRes.CombinedMeters[0].VolumeErrorPct.ToString("F2");
// passed1Label.Text = tRes.Meters[0].Passed ? Strings.Passed : Strings.Failed;
// passed2Label.Text = tRes.Meters[1].Passed ? Strings.Passed : Strings.Failed;
// passed1zLabel.Text = tRes.CombinedMeters[0].Passed ? Strings.Passed : Strings.Failed;
//}
}
void OnProcedureCompleted(object sender, ProcedureCompletedEventArgs args)

View File

@ -368,64 +368,73 @@ namespace TBF.Screens
tDivLabel.Text = args.Tdiv.ToString();
/// Bottom part
pulses1Label.Text = args.TestResult.Meters[0].PulsesMeter.ToString();
refPulses1Label.Text = args.TestResult.Meters[0].PulsesMaster.ToString();
volume1Label.Text = args.TestResult.Meters[0].VolumeMeter.ToString();
error1Label.Text = args.TestResult.Meters[0].VolumeErrorPct.ToString("F2");
/// TODO: Reimplement
//pulses1Label.Text = args.TestResult.Meters[0].PulsesMeter.ToString();
//refPulses1Label.Text = args.TestResult.Meters[0].PulsesMaster.ToString();
//volume1Label.Text = args.TestResult.Meters[0].VolumeMeter.ToString();
//error1Label.Text = args.TestResult.Meters[0].VolumeErrorPct.ToString("F2");
if (Config.Data.WMsCount >= 2)
{
pulses2Label.Text = args.TestResult.Meters[1].PulsesMeter.ToString();
refPulses2Label.Text = args.TestResult.Meters[1].PulsesMaster.ToString();
volume2Label.Text = args.TestResult.Meters[1].VolumeMeter.ToString();
error2Label.Text = args.TestResult.Meters[1].VolumeErrorPct.ToString("F2");
/// TODO: Reimplement
//pulses2Label.Text = args.TestResult.Meters[1].PulsesMeter.ToString();
//refPulses2Label.Text = args.TestResult.Meters[1].PulsesMaster.ToString();
//volume2Label.Text = args.TestResult.Meters[1].VolumeMeter.ToString();
//error2Label.Text = args.TestResult.Meters[1].VolumeErrorPct.ToString("F2");
}
if (currentMetersKind == MetersKind.Combined && Config.Data.WMsCount >= 2)
{
volume1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeMeter.ToString();
error1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeErrorPct.ToString("F2");
/// TODO: Reimplement
//volume1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeMeter.ToString();
//error1zLabel.Text = args.TestResult.CombinedMeters[0].VolumeErrorPct.ToString("F2");
}
if ((currentMetersKind == MetersKind.Single && Config.Data.WMsCount >= 3) ||
(currentMetersKind == MetersKind.Combined && Config.Data.WMsCount >= 4))
{
pulses3Label.Text = args.TestResult.Meters[2].PulsesMeter.ToString();
refPulses3Label.Text = args.TestResult.Meters[2].PulsesMaster.ToString();
volume3Label.Text = args.TestResult.Meters[2].VolumeMeter.ToString();
error3Label.Text = args.TestResult.Meters[2].VolumeErrorPct.ToString("F2");
/// TODO: Reimplement
//pulses3Label.Text = args.TestResult.Meters[2].PulsesMeter.ToString();
//refPulses3Label.Text = args.TestResult.Meters[2].PulsesMaster.ToString();
//volume3Label.Text = args.TestResult.Meters[2].VolumeMeter.ToString();
//error3Label.Text = args.TestResult.Meters[2].VolumeErrorPct.ToString("F2");
}
if (Config.Data.WMsCount >= 4)
{
pulses4Label.Text = args.TestResult.Meters[3].PulsesMeter.ToString();
refPulses4Label.Text = args.TestResult.Meters[3].PulsesMaster.ToString();
volume4Label.Text = args.TestResult.Meters[3].VolumeMeter.ToString();
error4Label.Text = args.TestResult.Meters[3].VolumeErrorPct.ToString("F2");
/// TODO: Reimplement
//pulses4Label.Text = args.TestResult.Meters[3].PulsesMeter.ToString();
//refPulses4Label.Text = args.TestResult.Meters[3].PulsesMaster.ToString();
//volume4Label.Text = args.TestResult.Meters[3].VolumeMeter.ToString();
//error4Label.Text = args.TestResult.Meters[3].VolumeErrorPct.ToString("F2");
}
if (currentMetersKind == MetersKind.Combined && Config.Data.WMsCount >= 4)
{
volume2zLabel.Text = args.TestResult.CombinedMeters[1].VolumeMeter.ToString();
error2zLabel.Text = args.TestResult.CombinedMeters[1].VolumeErrorPct.ToString("F2");
/// TODO: Reimplement
//volume2zLabel.Text = args.TestResult.CombinedMeters[1].VolumeMeter.ToString();
//error2zLabel.Text = args.TestResult.CombinedMeters[1].VolumeErrorPct.ToString("F2");
}
if ((currentMetersKind == MetersKind.Single && Config.Data.WMsCount >= 5) ||
(currentMetersKind == MetersKind.Combined && Config.Data.WMsCount >= 6))
{
pulses5Label.Text = args.TestResult.Meters[4].PulsesMeter.ToString();
refPulses5Label.Text = args.TestResult.Meters[4].PulsesMaster.ToString();
volume5Label.Text = args.TestResult.Meters[4].VolumeMeter.ToString();
error5Label.Text = args.TestResult.Meters[4].VolumeErrorPct.ToString("F2");
/// TODO: Reimplement
//pulses5Label.Text = args.TestResult.Meters[4].PulsesMeter.ToString();
//refPulses5Label.Text = args.TestResult.Meters[4].PulsesMaster.ToString();
//volume5Label.Text = args.TestResult.Meters[4].VolumeMeter.ToString();
//error5Label.Text = args.TestResult.Meters[4].VolumeErrorPct.ToString("F2");
}
if (Config.Data.WMsCount >= 6)
{
pulses6Label.Text = args.TestResult.Meters[5].PulsesMeter.ToString();
refPulses6Label.Text = args.TestResult.Meters[5].PulsesMaster.ToString();
volume6Label.Text = args.TestResult.Meters[5].VolumeMeter.ToString();
error6Label.Text = args.TestResult.Meters[5].VolumeErrorPct.ToString("F2");
/// TODO: Reimplement
//pulses6Label.Text = args.TestResult.Meters[5].PulsesMeter.ToString();
//refPulses6Label.Text = args.TestResult.Meters[5].PulsesMaster.ToString();
//volume6Label.Text = args.TestResult.Meters[5].VolumeMeter.ToString();
//error6Label.Text = args.TestResult.Meters[5].VolumeErrorPct.ToString("F2");
}
if (currentMetersKind == MetersKind.Combined && Config.Data.WMsCount >= 6)
{
volume3zLabel.Text = args.TestResult.CombinedMeters[2].VolumeMeter.ToString();
error3zLabel.Text = args.TestResult.CombinedMeters[2].VolumeErrorPct.ToString("F2");
/// TODO: Reimplement
//volume3zLabel.Text = args.TestResult.CombinedMeters[2].VolumeMeter.ToString();
//error3zLabel.Text = args.TestResult.CombinedMeters[2].VolumeErrorPct.ToString("F2");
}
tInLabel.Text = args.Tin.ToString();
@ -455,138 +464,139 @@ namespace TBF.Screens
void OnTestCompleted(object sender, TestCompletedEventArgs args)
{
TestResult tRes = args.TestResult;
/// TODO: Reimplement
//TestResult tRes = args.TestResult;
tInLabel.Text = tRes.TempInAvrg.ToString("F2");
tOutLabel.Text = tRes.TempOutAvrg.ToString("F2");
tDivLabel.Text = tRes.TempDivAvrg.ToString("F2");
prInLabel.Text = tRes.PressInAvrg.ToString("F1");
prOutLabel.Text = tRes.PressOutAvrg.ToString("F1");
airTempLabel.Text = tRes.AmbientTempAve.ToString("F1");
airPressLabel.Text = tRes.AmbientPressAve.ToString("F1");
airHumiLabel.Text = tRes.AmbientHumiAve.ToString("F1");
//tInLabel.Text = tRes.TempInAvrg.ToString("F2");
//tOutLabel.Text = tRes.TempOutAvrg.ToString("F2");
//tDivLabel.Text = tRes.TempDivAvrg.ToString("F2");
//prInLabel.Text = tRes.PressInAvrg.ToString("F1");
//prOutLabel.Text = tRes.PressOutAvrg.ToString("F1");
//airTempLabel.Text = tRes.AmbientTempAve.ToString("F1");
//airPressLabel.Text = tRes.AmbientPressAve.ToString("F1");
//airHumiLabel.Text = tRes.AmbientHumiAve.ToString("F1");
refPulsesLabel.Text = tRes.PulsesMaster.ToString("F0");
//refFreqLabel.Text = tstRslt.
refFlowLabel.Text = Utils.FloatToStr(tRes.FlowMass / 1000.0f, 4);
//refPulsesLabel.Text = tRes.PulsesMaster.ToString("F0");
////refFreqLabel.Text = tstRslt.
//refFlowLabel.Text = Utils.FloatToStr(tRes.FlowMass / 1000.0f, 4);
refVolumeLabel.Text = tRes.VolumeCTV.ToString("F2");
//regValvePosLabel.Text = tstRslt.
//massLabel.Text = tstRslt.
//refVolumeLabel.Text = tRes.VolumeCTV.ToString("F2");
////regValvePosLabel.Text = tstRslt.
////massLabel.Text = tstRslt.
volumeCtvLabel.Text = args.TestResult.VolumeCTV.ToString("F1");
refErrorLabel.Text = (tRes.ErrorMaster == 0) ? "---" : tRes.ErrorMaster.ToString("F3");
//volumeCtvLabel.Text = args.TestResult.VolumeCTV.ToString("F1");
//refErrorLabel.Text = (tRes.ErrorMaster == 0) ? "---" : tRes.ErrorMaster.ToString("F3");
if (tRes.MetersKind == MetersKind.Single)
{
pulses1Label.Text = tRes.Meters[0].PulsesMeter.ToString("F0");
refPulses1Label.Text = tRes.Meters[0].PulsesMaster.ToString("F0");
volume1Label.Text = tRes.Meters[0].VolumeMeter.ToString("F2");
error1Label.Text = tRes.Meters[0].VolumeErrorPct.ToString("F2");
passed1Label.Text = tRes.Meters[0].Passed ? Strings.Passed : Strings.Failed;
//if (tRes.MetersKind == MetersKind.Single)
//{
// pulses1Label.Text = tRes.Meters[0].PulsesMeter.ToString("F0");
// refPulses1Label.Text = tRes.Meters[0].PulsesMaster.ToString("F0");
// volume1Label.Text = tRes.Meters[0].VolumeMeter.ToString("F2");
// error1Label.Text = tRes.Meters[0].VolumeErrorPct.ToString("F2");
// passed1Label.Text = tRes.Meters[0].Passed ? Strings.Passed : Strings.Failed;
if (Config.Data.WMsCount >= 2)
{
pulses2Label.Text = tRes.Meters[1].PulsesMeter.ToString("F0");
refPulses2Label.Text = tRes.Meters[1].PulsesMaster.ToString("F0");
volume2Label.Text = tRes.Meters[1].VolumeMeter.ToString("F2");
error2Label.Text = tRes.Meters[1].VolumeErrorPct.ToString("F2");
passed2Label.Text = tRes.Meters[1].Passed ? Strings.Passed : Strings.Failed;
}
// if (Config.Data.WMsCount >= 2)
// {
// pulses2Label.Text = tRes.Meters[1].PulsesMeter.ToString("F0");
// refPulses2Label.Text = tRes.Meters[1].PulsesMaster.ToString("F0");
// volume2Label.Text = tRes.Meters[1].VolumeMeter.ToString("F2");
// error2Label.Text = tRes.Meters[1].VolumeErrorPct.ToString("F2");
// passed2Label.Text = tRes.Meters[1].Passed ? Strings.Passed : Strings.Failed;
// }
if (Config.Data.WMsCount >= 3)
{
pulses3Label.Text = tRes.Meters[2].PulsesMeter.ToString("F0");
refPulses3Label.Text = tRes.Meters[2].PulsesMaster.ToString("F0");
volume3Label.Text = tRes.Meters[2].VolumeMeter.ToString("F2");
error3Label.Text = tRes.Meters[2].VolumeErrorPct.ToString("F2");
passed3Label.Text = tRes.Meters[2].Passed ? Strings.Passed : Strings.Failed;
}
// if (Config.Data.WMsCount >= 3)
// {
// pulses3Label.Text = tRes.Meters[2].PulsesMeter.ToString("F0");
// refPulses3Label.Text = tRes.Meters[2].PulsesMaster.ToString("F0");
// volume3Label.Text = tRes.Meters[2].VolumeMeter.ToString("F2");
// error3Label.Text = tRes.Meters[2].VolumeErrorPct.ToString("F2");
// passed3Label.Text = tRes.Meters[2].Passed ? Strings.Passed : Strings.Failed;
// }
if (Config.Data.WMsCount >= 4)
{
pulses4Label.Text = tRes.Meters[3].PulsesMeter.ToString("F0");
refPulses4Label.Text = tRes.Meters[3].PulsesMaster.ToString("F0");
volume4Label.Text = tRes.Meters[3].VolumeMeter.ToString("F2");
error4Label.Text = tRes.Meters[3].VolumeErrorPct.ToString("F2");
passed4Label.Text = tRes.Meters[3].Passed ? Strings.Passed : Strings.Failed;
}
// if (Config.Data.WMsCount >= 4)
// {
// pulses4Label.Text = tRes.Meters[3].PulsesMeter.ToString("F0");
// refPulses4Label.Text = tRes.Meters[3].PulsesMaster.ToString("F0");
// volume4Label.Text = tRes.Meters[3].VolumeMeter.ToString("F2");
// error4Label.Text = tRes.Meters[3].VolumeErrorPct.ToString("F2");
// passed4Label.Text = tRes.Meters[3].Passed ? Strings.Passed : Strings.Failed;
// }
if (Config.Data.WMsCount >= 5)
{
pulses5Label.Text = tRes.Meters[4].PulsesMeter.ToString("F0");
refPulses5Label.Text = tRes.Meters[4].PulsesMaster.ToString("F0");
volume5Label.Text = tRes.Meters[4].VolumeMeter.ToString("F2");
error5Label.Text = tRes.Meters[4].VolumeErrorPct.ToString("F2");
passed5Label.Text = tRes.Meters[4].Passed ? Strings.Passed : Strings.Failed;
}
// if (Config.Data.WMsCount >= 5)
// {
// pulses5Label.Text = tRes.Meters[4].PulsesMeter.ToString("F0");
// refPulses5Label.Text = tRes.Meters[4].PulsesMaster.ToString("F0");
// volume5Label.Text = tRes.Meters[4].VolumeMeter.ToString("F2");
// error5Label.Text = tRes.Meters[4].VolumeErrorPct.ToString("F2");
// passed5Label.Text = tRes.Meters[4].Passed ? Strings.Passed : Strings.Failed;
// }
if (Config.Data.WMsCount >= 6)
{
pulses6Label.Text = tRes.Meters[5].PulsesMeter.ToString("F0");
refPulses6Label.Text = tRes.Meters[5].PulsesMaster.ToString("F0");
volume6Label.Text = tRes.Meters[5].VolumeMeter.ToString("F2");
error6Label.Text = tRes.Meters[5].VolumeErrorPct.ToString("F2");
passed6Label.Text = tRes.Meters[5].Passed ? Strings.Passed : Strings.Failed;
}
}
else if (tRes.MetersKind == MetersKind.Combined)
{
if (Config.Data.WMsCount >= 2)
{
pulses1Label.Text = tRes.Meters[0].PulsesMeter.ToString("F0");
pulses2Label.Text = tRes.Meters[1].PulsesMeter.ToString("F0");
//pulses1zLabel.Text = tRes.CombinedMeters[0].PulsesMeter.ToString("F0");
refPulses1Label.Text = tRes.Meters[0].PulsesMaster.ToString("F0");
refPulses2Label.Text = tRes.Meters[1].PulsesMaster.ToString("F0");
//refPulses1zLabel.Text = tRes.CombinedMeters[0].PulsesMaster.ToString("F0");
volume1Label.Text = tRes.Meters[0].VolumeMeter.ToString("F2");
volume2Label.Text = tRes.Meters[1].VolumeMeter.ToString("F2");
volume1zLabel.Text = tRes.CombinedMeters[0].VolumeMeter.ToString("F2");
error1Label.Text = tRes.Meters[0].VolumeErrorPct.ToString("F2");
error2Label.Text = tRes.Meters[1].VolumeErrorPct.ToString("F2");
error1zLabel.Text = tRes.CombinedMeters[0].VolumeErrorPct.ToString("F2");
passed1Label.Text = tRes.Meters[0].Passed ? Strings.Passed : Strings.Failed;
passed2Label.Text = tRes.Meters[1].Passed ? Strings.Passed : Strings.Failed;
passed1zLabel.Text = tRes.CombinedMeters[0].Passed ? Strings.Passed : Strings.Failed;
}
if (Config.Data.WMsCount >= 4)
{
pulses3Label.Text = tRes.Meters[2].PulsesMeter.ToString("F0");
pulses4Label.Text = tRes.Meters[3].PulsesMeter.ToString("F0");
//pulses2zLabel.Text = tRes.CombinedMeters[1].PulsesMeter.ToString("F0");
refPulses3Label.Text = tRes.Meters[2].PulsesMaster.ToString("F0");
refPulses4Label.Text = tRes.Meters[3].PulsesMaster.ToString("F0");
//refPulses2zLabel.Text = tRes.CombinedMeters[1].PulsesMaster.ToString("F0");
volume3Label.Text = tRes.Meters[2].VolumeMeter.ToString("F2");
volume4Label.Text = tRes.Meters[3].VolumeMeter.ToString("F2");
volume2zLabel.Text = tRes.CombinedMeters[1].VolumeMeter.ToString("F2");
error3Label.Text = tRes.Meters[2].VolumeErrorPct.ToString("F2");
error4Label.Text = tRes.Meters[3].VolumeErrorPct.ToString("F2");
error2zLabel.Text = tRes.CombinedMeters[1].VolumeErrorPct.ToString("F2");
passed3Label.Text = tRes.Meters[2].Passed ? Strings.Passed : Strings.Failed;
passed4Label.Text = tRes.Meters[3].Passed ? Strings.Passed : Strings.Failed;
passed2zLabel.Text = tRes.CombinedMeters[1].Passed ? Strings.Passed : Strings.Failed;
}
if (Config.Data.WMsCount >= 6)
{
pulses5Label.Text = tRes.Meters[4].PulsesMeter.ToString("F0");
pulses6Label.Text = tRes.Meters[5].PulsesMeter.ToString("F0");
//pulses3zLabel.Text = tRes.CombinedMeters[2].PulsesMeter.ToString("F0");
refPulses5Label.Text = tRes.Meters[4].PulsesMaster.ToString("F0");
refPulses6Label.Text = tRes.Meters[5].PulsesMaster.ToString("F0");
//refPulses3zLabel.Text = tRes.CombinedMeters[2].PulsesMaster.ToString("F0");
volume5Label.Text = tRes.Meters[4].VolumeMeter.ToString("F2");
volume6Label.Text = tRes.Meters[5].VolumeMeter.ToString("F2");
volume3zLabel.Text = tRes.CombinedMeters[2].VolumeMeter.ToString("F2");
error5Label.Text = tRes.Meters[4].VolumeErrorPct.ToString("F2");
error6Label.Text = tRes.Meters[5].VolumeErrorPct.ToString("F2");
error3zLabel.Text = tRes.CombinedMeters[2].VolumeErrorPct.ToString("F2");
passed5Label.Text = tRes.Meters[4].Passed ? Strings.Passed : Strings.Failed;
passed6Label.Text = tRes.Meters[5].Passed ? Strings.Passed : Strings.Failed;
passed3zLabel.Text = tRes.CombinedMeters[2].Passed ? Strings.Passed : Strings.Failed;
}
}
// if (Config.Data.WMsCount >= 6)
// {
// pulses6Label.Text = tRes.Meters[5].PulsesMeter.ToString("F0");
// refPulses6Label.Text = tRes.Meters[5].PulsesMaster.ToString("F0");
// volume6Label.Text = tRes.Meters[5].VolumeMeter.ToString("F2");
// error6Label.Text = tRes.Meters[5].VolumeErrorPct.ToString("F2");
// passed6Label.Text = tRes.Meters[5].Passed ? Strings.Passed : Strings.Failed;
// }
//}
//else if (tRes.MetersKind == MetersKind.Combined)
//{
// if (Config.Data.WMsCount >= 2)
// {
// pulses1Label.Text = tRes.Meters[0].PulsesMeter.ToString("F0");
// pulses2Label.Text = tRes.Meters[1].PulsesMeter.ToString("F0");
// //pulses1zLabel.Text = tRes.CombinedMeters[0].PulsesMeter.ToString("F0");
// refPulses1Label.Text = tRes.Meters[0].PulsesMaster.ToString("F0");
// refPulses2Label.Text = tRes.Meters[1].PulsesMaster.ToString("F0");
// //refPulses1zLabel.Text = tRes.CombinedMeters[0].PulsesMaster.ToString("F0");
// volume1Label.Text = tRes.Meters[0].VolumeMeter.ToString("F2");
// volume2Label.Text = tRes.Meters[1].VolumeMeter.ToString("F2");
// volume1zLabel.Text = tRes.CombinedMeters[0].VolumeMeter.ToString("F2");
// error1Label.Text = tRes.Meters[0].VolumeErrorPct.ToString("F2");
// error2Label.Text = tRes.Meters[1].VolumeErrorPct.ToString("F2");
// error1zLabel.Text = tRes.CombinedMeters[0].VolumeErrorPct.ToString("F2");
// passed1Label.Text = tRes.Meters[0].Passed ? Strings.Passed : Strings.Failed;
// passed2Label.Text = tRes.Meters[1].Passed ? Strings.Passed : Strings.Failed;
// passed1zLabel.Text = tRes.CombinedMeters[0].Passed ? Strings.Passed : Strings.Failed;
// }
// if (Config.Data.WMsCount >= 4)
// {
// pulses3Label.Text = tRes.Meters[2].PulsesMeter.ToString("F0");
// pulses4Label.Text = tRes.Meters[3].PulsesMeter.ToString("F0");
// //pulses2zLabel.Text = tRes.CombinedMeters[1].PulsesMeter.ToString("F0");
// refPulses3Label.Text = tRes.Meters[2].PulsesMaster.ToString("F0");
// refPulses4Label.Text = tRes.Meters[3].PulsesMaster.ToString("F0");
// //refPulses2zLabel.Text = tRes.CombinedMeters[1].PulsesMaster.ToString("F0");
// volume3Label.Text = tRes.Meters[2].VolumeMeter.ToString("F2");
// volume4Label.Text = tRes.Meters[3].VolumeMeter.ToString("F2");
// volume2zLabel.Text = tRes.CombinedMeters[1].VolumeMeter.ToString("F2");
// error3Label.Text = tRes.Meters[2].VolumeErrorPct.ToString("F2");
// error4Label.Text = tRes.Meters[3].VolumeErrorPct.ToString("F2");
// error2zLabel.Text = tRes.CombinedMeters[1].VolumeErrorPct.ToString("F2");
// passed3Label.Text = tRes.Meters[2].Passed ? Strings.Passed : Strings.Failed;
// passed4Label.Text = tRes.Meters[3].Passed ? Strings.Passed : Strings.Failed;
// passed2zLabel.Text = tRes.CombinedMeters[1].Passed ? Strings.Passed : Strings.Failed;
// }
// if (Config.Data.WMsCount >= 6)
// {
// pulses5Label.Text = tRes.Meters[4].PulsesMeter.ToString("F0");
// pulses6Label.Text = tRes.Meters[5].PulsesMeter.ToString("F0");
// //pulses3zLabel.Text = tRes.CombinedMeters[2].PulsesMeter.ToString("F0");
// refPulses5Label.Text = tRes.Meters[4].PulsesMaster.ToString("F0");
// refPulses6Label.Text = tRes.Meters[5].PulsesMaster.ToString("F0");
// //refPulses3zLabel.Text = tRes.CombinedMeters[2].PulsesMaster.ToString("F0");
// volume5Label.Text = tRes.Meters[4].VolumeMeter.ToString("F2");
// volume6Label.Text = tRes.Meters[5].VolumeMeter.ToString("F2");
// volume3zLabel.Text = tRes.CombinedMeters[2].VolumeMeter.ToString("F2");
// error5Label.Text = tRes.Meters[4].VolumeErrorPct.ToString("F2");
// error6Label.Text = tRes.Meters[5].VolumeErrorPct.ToString("F2");
// error3zLabel.Text = tRes.CombinedMeters[2].VolumeErrorPct.ToString("F2");
// passed5Label.Text = tRes.Meters[4].Passed ? Strings.Passed : Strings.Failed;
// passed6Label.Text = tRes.Meters[5].Passed ? Strings.Passed : Strings.Failed;
// passed3zLabel.Text = tRes.CombinedMeters[2].Passed ? Strings.Passed : Strings.Failed;
// }
//}
}
void OnProcedureCompleted(object sender, ProcedureCompletedEventArgs args)

View File

@ -473,21 +473,7 @@ namespace TBF.Screens
void OnTestCompleted(object sender, TestCompletedEventArgs args)
{
if (args.TestResult != null)
{
/// Delete an existing testResults with the same test name and repetition number
try
{
TestResult tr = testResults
.First<TestResult>(x => (x.TestId == args.TestResult.TestId) && (x.RepetitionNr == args.TestResult.RepetitionNr));
testResults.Remove(tr);
}
catch { };
/// Add the new test results
testResults.Add(args.TestResult);
RedrawAll();
}
RedrawAll();
}
private void columnWidthsButton_Click(object sender, EventArgs e)

View File

@ -413,6 +413,7 @@
<DependentUpon>PrinterCfgCtrl.cs</DependentUpon>
</Compile>
<Compile Include="BenchControl\ResultsPrinters\Zapiska\PrinterFactory.cs" />
<Compile Include="BenchControl\Sequences\FloatStatistics.cs" />
<Compile Include="BenchControl\Sequences\ProcessData.cs" />
<Compile Include="BenchControl\TestMethods\Adjustment\WMErrorsForm12.cs">
<SubType>Form</SubType>
@ -446,7 +447,7 @@
<DependentUpon>TestMethodCfgCtrl.cs</DependentUpon>
</Compile>
<Compile Include="BenchControl\TestMethods\FixedStartCombinedMeters\TestMethodFactory.cs" />
<Compile Include="BenchControl\TestMethods\FlyingStartCollectionMethod\TestParams.cs" />
<Compile Include="BenchControl\TestMethods\FlyingStartMassCollection\TestParams.cs" />
<Compile Include="BenchControl\TestMethods\iPerlCommunication\AllCompletedEventArgs.cs" />
<Compile Include="BenchControl\TestMethods\iPerlCommunication\CommCompletedEventArgs.cs" />
<Compile Include="BenchControl\TestMethods\iPerlCommunication\iPerlCommunicationParams.cs" />
@ -911,16 +912,16 @@
<DependentUpon>TestMethodCfgCtrl.cs</DependentUpon>
</Compile>
<Compile Include="BenchControl\TestMethods\FixedStartMassCollection\TestMethodFactory.cs" />
<Compile Include="BenchControl\TestMethods\FlyingStartCollectionMethod\FlyingStartCollectionMethodSeq.cs" />
<Compile Include="BenchControl\TestMethods\FlyingStartCollectionMethod\TestMethod.cs" />
<Compile Include="BenchControl\TestMethods\FlyingStartCollectionMethod\TestMethodCfg.cs" />
<Compile Include="BenchControl\TestMethods\FlyingStartCollectionMethod\TestMethodCfgCtrl.cs">
<Compile Include="BenchControl\TestMethods\FlyingStartMassCollection\FlyingStartMassCollectionSeq.cs" />
<Compile Include="BenchControl\TestMethods\FlyingStartMassCollection\TestMethod.cs" />
<Compile Include="BenchControl\TestMethods\FlyingStartMassCollection\TestMethodCfg.cs" />
<Compile Include="BenchControl\TestMethods\FlyingStartMassCollection\TestMethodCfgCtrl.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="BenchControl\TestMethods\FlyingStartCollectionMethod\TestMethodCfgCtrl.designer.cs">
<Compile Include="BenchControl\TestMethods\FlyingStartMassCollection\TestMethodCfgCtrl.designer.cs">
<DependentUpon>TestMethodCfgCtrl.cs</DependentUpon>
</Compile>
<Compile Include="BenchControl\TestMethods\FlyingStartCollectionMethod\TestMethodFactory.cs" />
<Compile Include="BenchControl\TestMethods\FlyingStartMassCollection\TestMethodFactory.cs" />
<Compile Include="BenchControl\TestMethods\CameraRoiDetection\RoiDetectionCfgCtrl.designer.cs" />
<Compile Include="BenchControl\TestMethods\FlyingStart\FlyingStartSeq.cs" />
<Compile Include="BenchControl\TestMethods\FlyingStart\TestMethod.cs" />
@ -1616,7 +1617,7 @@
<EmbeddedResource Include="BenchControl\TestMethods\FixedStartMassCollection\TestMethodCfgCtrl.resx">
<DependentUpon>TestMethodCfgCtrl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="BenchControl\TestMethods\FlyingStartCollectionMethod\TestMethodCfgCtrl.resx">
<EmbeddedResource Include="BenchControl\TestMethods\FlyingStartMassCollection\TestMethodCfgCtrl.resx">
<DependentUpon>TestMethodCfgCtrl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="BenchControl\TestMethods\FlyingStart\TestMethodCfgCtrl.resx">

View File

@ -112,14 +112,16 @@ namespace TBF
if (currentProgress != null)
{
// Test is 'failed' if any meter failed
foreach (var meterTestResult in args.TestResult.Meters)
{
if (!meterTestResult.Passed)
{
currentProgress.TestResult = UiControls.TestProgressCtrl.Result.Failed;
return;
}
}
/// TODO: Reimplement
//foreach (var meterTestResult in args.TestResult.Meters)
//{
// if (!meterTestResult.Passed)
// {
// currentProgress.TestResult = UiControls.TestProgressCtrl.Result.Failed;
// return;
// }
//}
currentProgress.TestResult = UiControls.TestProgressCtrl.Result.Failed;
}
}

View File

@ -8,11 +8,11 @@ namespace TBF.UiBridge
{
public class TestCompletedEventArgs : EventArgs
{
public TestResult TestResult;
public string TestName;
public TestCompletedEventArgs(TestResult testResult)
public TestCompletedEventArgs(string testName)
{
this.TestResult = testResult;
this.TestName = testName;
}
}
}

View File

@ -9,6 +9,7 @@ namespace TBF.UiBridge
{
public class TestProgressEventArgs : EventArgs
{
public int RepetitionNr;
public float Progress;
public float OveralProgress;
@ -31,7 +32,5 @@ namespace TBF.UiBridge
public FloatBox AmbientTemp;
public FloatBox AmbientPressure;
public FloatBox AmbientHumidity;
public TestResult TestResult;
}
}

View File

@ -230,7 +230,7 @@ namespace TBF.UiControls
CultureInfo.InvariantCulture,
out measured))
{
float corrected = BenchControl.Formulas.CorrectedValue(measured, meterEntity.Corrections);
double corrected = BenchControl.Formulas.CorrectedValue(measured, meterEntity.Corrections);
correctedTextBox.Text = corrected.ToString();
}
}

View File

@ -229,7 +229,7 @@ namespace TBF.UiControls
CultureInfo.InvariantCulture,
out measured))
{
float corrected = BenchControl.Formulas.CorrectedValue(measured, meterEntity.Corrections);
double corrected = BenchControl.Formulas.CorrectedValue(measured, meterEntity.Corrections);
correctedTextBox.Text = corrected.ToString();
}
}

View File

@ -229,7 +229,7 @@ namespace TBF.UiControls
CultureInfo.InvariantCulture,
out measured))
{
float corrected = BenchControl.Formulas.CorrectedValue(measured, meterEntity.Corrections);
double corrected = BenchControl.Formulas.CorrectedValue(measured, meterEntity.Corrections);
correctedTextBox.Text = corrected.ToString();
}
}

View File

@ -298,11 +298,11 @@ namespace TBF
}
/// <summary>
/// Converts float number to a string with the specified number of valid digits
/// Converts a float number to a string with the specified number of valid digits
/// </summary>
/// <param name="value">Float value to be converted to a string</param>
/// <param name="validDigits">Number of valid digits: 4, 3, or 2 (otherwise a full precision number is printed)</param>
/// <returns>String representation of the float number</returns>
/// <returns>String representation of a float number</returns>
public static string FloatToStr(float value, int validDigits)
{
if (validDigits == 4)
@ -337,6 +337,46 @@ namespace TBF
else return value.ToString();
}
/// <summary>
/// Converts a double number to a string with the specified number of valid digits
/// </summary>
/// <param name="value">Double value to be converted to a string</param>
/// <param name="validDigits">Number of valid digits: 4, 3, or 2 (otherwise a full precision number is printed)</param>
/// <returns>String representation of a double number</returns>
public static string DoubleToStr(double value, int validDigits)
{
if (validDigits == 4)
{
if (value >= 999.5 || value < -999.5) return value.ToString("F0");
else if (value >= 99.95 || value < -99.95) return value.ToString("F1");
else if (value >= 9.995 || value < -9.995) return value.ToString("F2");
else if (value >= 0.9995 || value < -0.9995) return value.ToString("F3");
else if (value >= 0.09995 || value < -0.09995) return value.ToString("F4");
else if (value >= 0.009995 || value < -0.009995) return value.ToString("F5");
else return value.ToString("F6");
}
else if (validDigits == 3)
{
if (value >= 99.5 || value < -99.5) return value.ToString("F0");
else if (value >= 9.95 || value < -9.95) return value.ToString("F1");
else if (value >= 0.995 || value < -0.995) return value.ToString("F2");
else if (value >= 0.0995 || value < -0.0995) return value.ToString("F3");
else if (value >= 0.00995 || value < -0.00995) return value.ToString("F4");
else if (value >= 0.000995 || value < -0.000995) return value.ToString("F5");
else return value.ToString("F6");
}
else if (validDigits == 2)
{
if (value >= 9.5 || value < -9.5) return value.ToString("F0");
else if (value >= 0.95 || value < -0.95) return value.ToString("F1");
else if (value >= 0.095 || value < -0.095) return value.ToString("F2");
else if (value >= 0.0095 || value < -0.0095) return value.ToString("F3");
else if (value >= 0.00095 || value < -0.00095) return value.ToString("F4");
else return value.ToString("F5");
}
else return value.ToString();
}
public static string ShowRoute(ulong route)
{
string str = string.Empty;