(1) IPlotter interface used in Statistics, (2) Plotter class, (3) Start/Stop statistics in all test methods, (4) Flow simulation in FlyingStartMassCollection (DebugMode.Inherit).
This commit is contained in:
parent
e0fb7927ed
commit
5f17dabb0b
16
TBF/BenchControl/GenericDevices/IPlotter.cs
Normal file
16
TBF/BenchControl/GenericDevices/IPlotter.cs
Normal file
@ -0,0 +1,16 @@
|
||||
///
|
||||
/// Copyright (c) 2018 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
|
||||
namespace TBF.BenchControl.GenericDevices
|
||||
{
|
||||
public interface IPlotter
|
||||
{
|
||||
int StartGraph(int batchNr, string testName, int repetition);
|
||||
|
||||
void UpdateGraph(int graphId, float x, float y);
|
||||
|
||||
void StopGraph(int graphId);
|
||||
}
|
||||
}
|
||||
77
TBF/BenchControl/Sequences/Plotter.cs
Normal file
77
TBF/BenchControl/Sequences/Plotter.cs
Normal file
@ -0,0 +1,77 @@
|
||||
///
|
||||
/// Copyright (c) 2018 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
using log4net;
|
||||
|
||||
namespace TBF.BenchControl.Sequences
|
||||
{
|
||||
public class Plotter : BenchControl.GenericDevices.IPlotter
|
||||
{
|
||||
static readonly ILog log = LogManager.GetLogger(typeof(Plotter));
|
||||
|
||||
static readonly Dictionary<int, BinaryWriter> writers = new Dictionary<int, BinaryWriter>();
|
||||
static int nextGraphId = 1;
|
||||
|
||||
|
||||
|
||||
readonly string caption;
|
||||
///
|
||||
public Plotter(string caption)
|
||||
{
|
||||
this.caption = caption;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int StartGraph(int batchNr, string testName, int repetition)
|
||||
{
|
||||
try
|
||||
{
|
||||
int graphId = nextGraphId++;
|
||||
string directory = Path.Combine(TBF.Program.GraphsDir, batchNr.ToString(), testName, repetition.ToString());
|
||||
Directory.CreateDirectory(directory);
|
||||
writers.Add(graphId, new BinaryWriter(File.Open(Path.Combine(directory, caption), FileMode.Create)));
|
||||
log.InfoFormat("Graph file #{0} successfully created (batch={1} test={2} repet={3} caption={4})",
|
||||
graphId, batchNr, testName, repetition, caption);
|
||||
return graphId;
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
log.ErrorFormat("Failed to create a graph file (batch={0} test={1} repet={2} caption={3}): {4}",
|
||||
batchNr, testName, repetition, caption, exc.Message);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateGraph(int graphId, float x, float y)
|
||||
{
|
||||
try
|
||||
{
|
||||
BinaryWriter writer = writers[graphId];
|
||||
writer.Write(x);
|
||||
writer.Write(y);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
log.ErrorFormat("Failed to update graph file #{0}: {1}", graphId, exc.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public void StopGraph(int graphId)
|
||||
{
|
||||
try
|
||||
{
|
||||
BinaryWriter writer = writers[graphId];
|
||||
writer.Close();
|
||||
writers.Remove(graphId);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
log.ErrorFormat("Failed to close graph file #{0}: {1}", graphId, exc.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -77,49 +77,49 @@ namespace TBF.BenchControl.Sequences
|
||||
///
|
||||
/// Statistics of 'continuous' variables (temperature, pressure, flow, etc.)
|
||||
///
|
||||
public static Statistics AmbTempStat = new Statistics();
|
||||
public static Statistics AmbPressStat = new Statistics();
|
||||
public static Statistics AmbHumiStat = new Statistics();
|
||||
public static Statistics AmbTempStat = new Statistics(new Plotter("Ambient temperature"));
|
||||
public static Statistics AmbPressStat = new Statistics(new Plotter("Ambient pressure"));
|
||||
public static Statistics AmbHumiStat = new Statistics(new Plotter("Ambient humidity"));
|
||||
|
||||
public static Statistics TempUpStat = new Statistics(0, 5, true);
|
||||
public static Statistics TempDownStat = new Statistics(0, 5, true);
|
||||
public static Statistics TempDiffStat = new Statistics(0, 5, true);
|
||||
public static Statistics TempDivStat = new Statistics(0, 5, true);
|
||||
public static Statistics PressUpStat = new Statistics(5, 5, true);
|
||||
public static Statistics PressDownStat = new Statistics(5, 5, true);
|
||||
public static Statistics PressDeltaStat = new Statistics(5, 5, true);
|
||||
public static Statistics RefFlowStat = new Statistics(5, 5, true);
|
||||
public static Statistics TempUpStat = new Statistics(0, 5, true, new Plotter("Temperature up"));
|
||||
public static Statistics TempDownStat = new Statistics(0, 5, true, new Plotter("Temperature down"));
|
||||
public static Statistics TempDiffStat = new Statistics(0, 5, true);
|
||||
public static Statistics TempDivStat = new Statistics(0, 5, true, new Plotter("Temperature div"));
|
||||
public static Statistics PressUpStat = new Statistics(5, 5, true, new Plotter("Pressure up"));
|
||||
public static Statistics PressDownStat = new Statistics(5, 5, true, new Plotter("Pressure down"));
|
||||
public static Statistics PressDeltaStat = new Statistics(5, 5, true);
|
||||
public static Statistics RefFlowStat = new Statistics(5, 5, true, new Plotter("Flow"));
|
||||
|
||||
public static Statistics TempRefHiStat = new Statistics();
|
||||
public static Statistics TempRefLoStat = new Statistics();
|
||||
public static Statistics Energy = new Statistics();
|
||||
public static Statistics TempRefHiStat = new Statistics();
|
||||
public static Statistics TempRefLoStat = new Statistics();
|
||||
public static Statistics Energy = new Statistics();
|
||||
public static Statistics VolumeForEnergy = new Statistics();
|
||||
public static int lastEnergyUpdateTime;
|
||||
|
||||
public static int machineTimeStart;
|
||||
public static int lastMachineTime;
|
||||
|
||||
protected static void ClearAllStatistics(int machineTime)
|
||||
protected static void StartNewStatistics(int machineTime, int batchNr, string testName, int repetition)
|
||||
{
|
||||
lastMachineTime = machineTimeStart = machineTime;
|
||||
|
||||
AmbTempStat.Clear();
|
||||
AmbPressStat.Clear();
|
||||
AmbHumiStat.Clear();
|
||||
AmbTempStat.Start(batchNr, testName, repetition);
|
||||
AmbPressStat.Start(batchNr, testName, repetition);
|
||||
AmbHumiStat.Start(batchNr, testName, repetition);
|
||||
|
||||
TempUpStat.Clear();
|
||||
TempDownStat.Clear();
|
||||
TempDiffStat.Clear();
|
||||
TempDivStat.Clear();
|
||||
PressUpStat.Clear();
|
||||
PressDownStat.Clear();
|
||||
PressDeltaStat.Clear();
|
||||
RefFlowStat.Clear();
|
||||
TempUpStat.Start(batchNr, testName, repetition);
|
||||
TempDownStat.Start(batchNr, testName, repetition);
|
||||
TempDiffStat.Start(batchNr, testName, repetition);
|
||||
TempDivStat.Start(batchNr, testName, repetition);
|
||||
PressUpStat.Start(batchNr, testName, repetition);
|
||||
PressDownStat.Start(batchNr, testName, repetition);
|
||||
PressDeltaStat.Start(batchNr, testName, repetition);
|
||||
RefFlowStat.Start(batchNr, testName, repetition);
|
||||
|
||||
TempRefHiStat.Clear();
|
||||
TempRefLoStat.Clear();
|
||||
Energy.Clear();
|
||||
VolumeForEnergy.Clear();
|
||||
TempRefHiStat.Start(batchNr, testName, repetition);
|
||||
TempRefLoStat.Start(batchNr, testName, repetition);
|
||||
Energy.Start(batchNr, testName, repetition);
|
||||
VolumeForEnergy.Start(batchNr, testName, repetition);
|
||||
lastEnergyUpdateTime = 0;
|
||||
}
|
||||
|
||||
@ -148,5 +148,26 @@ namespace TBF.BenchControl.Sequences
|
||||
|
||||
lastMachineTime = machineTime;
|
||||
}
|
||||
|
||||
protected static void StopRecordingStatistics()
|
||||
{
|
||||
AmbTempStat.Stop();
|
||||
AmbPressStat.Stop();
|
||||
AmbHumiStat.Stop();
|
||||
|
||||
TempUpStat.Stop();
|
||||
TempDownStat.Stop();
|
||||
TempDiffStat.Stop();
|
||||
TempDivStat.Stop();
|
||||
PressUpStat.Stop();
|
||||
PressDownStat.Stop();
|
||||
PressDeltaStat.Stop();
|
||||
RefFlowStat.Stop();
|
||||
|
||||
TempRefHiStat.Stop();
|
||||
TempRefLoStat.Stop();
|
||||
Energy.Stop();
|
||||
VolumeForEnergy.Stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1130,8 +1130,11 @@ namespace TBF.BenchControl.Sequences
|
||||
tstRslt.TempDownMax = 20.0f;
|
||||
tstRslt.TempDivMax = 20.0f;
|
||||
|
||||
tstRslt.FlowMean = 0; /// TODO
|
||||
tstRslt.FlowMax = 0; /// TODO
|
||||
tstRslt.FlowMean = (float)RefFlowStat.Average;
|
||||
tstRslt.FlowStart = (float)RefFlowStat.First;
|
||||
tstRslt.FlowEnd = (float)RefFlowStat.Last;
|
||||
tstRslt.FlowMin = (float)RefFlowStat.Min;
|
||||
tstRslt.FlowMax = (float)RefFlowStat.Max;
|
||||
|
||||
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
|
||||
{
|
||||
@ -1235,9 +1238,11 @@ namespace TBF.BenchControl.Sequences
|
||||
tstRslt.TempDownMax = 20.0f;
|
||||
tstRslt.TempDivMax = 20.0f;
|
||||
|
||||
tstRslt.FlowMean = 0; /// TODO
|
||||
tstRslt.FlowMax = 0; /// TODO
|
||||
|
||||
tstRslt.FlowMean = (float)RefFlowStat.Average;
|
||||
tstRslt.FlowStart = (float)RefFlowStat.First;
|
||||
tstRslt.FlowEnd = (float)RefFlowStat.Last;
|
||||
tstRslt.FlowMin = (float)RefFlowStat.Min;
|
||||
tstRslt.FlowMax = (float)RefFlowStat.Max;
|
||||
|
||||
for (int i = 0; i < BatchRslts.WMPositionsCount; i++)
|
||||
{
|
||||
|
||||
@ -1,14 +1,16 @@
|
||||
using System;
|
||||
using TBF.BenchControl.GenericDevices;
|
||||
|
||||
namespace TBF.BenchControl.Sequences
|
||||
{
|
||||
public class Statistics
|
||||
{
|
||||
public readonly int SkippedSamplesCount; /// 0 = do not skip any samples
|
||||
public readonly int FilterSize; /// 0 = no filter
|
||||
public readonly bool MedianFilter; /// true - median filter instead of average
|
||||
|
||||
public readonly int SkippedSamplesCount; /// 0 = do not skip any samples
|
||||
public readonly int FilterSize; /// 0 = no filter
|
||||
public readonly bool MedianFilter; /// true - median filter instead of average
|
||||
public readonly IPlotter plotter;
|
||||
|
||||
bool recordingInProgress;
|
||||
double[] fifo;
|
||||
double[] sorted;
|
||||
double first;
|
||||
@ -16,42 +18,58 @@ namespace TBF.BenchControl.Sequences
|
||||
double min;
|
||||
double max;
|
||||
double sum;
|
||||
UInt32 totalCount; /// Number of samples passed to Update()
|
||||
UInt32 count; /// Number of processed and filtered samples
|
||||
UInt32 fifoCount; /// Number of samples inserted into FIFO
|
||||
int totalCount; /// Number of samples passed to Update()
|
||||
int count; /// Number of processed and filtered samples
|
||||
int fifoCount; /// Number of samples inserted into FIFO
|
||||
int graphId;
|
||||
|
||||
public bool RecordingIProgress { get { return recordingInProgress; } }
|
||||
public double First { get { return first; } }
|
||||
public double Last { get { return last; } }
|
||||
public double Min { get { return (count > 0) ? min : 0; } } /// 0 when there were no samples
|
||||
public double Max { get { return (count > 0) ? max : 0; } } /// 0 when there were no samples
|
||||
public double Average { get { return (count > 0) ? (sum / (double)count) : 0; } }
|
||||
public UInt32 Count { get { return count; } }
|
||||
public int Count { get { return count; } }
|
||||
|
||||
public double Sum { get { return sum; } }
|
||||
|
||||
|
||||
public Statistics(int skippedSamplesCount, int filterSize, bool medianFilter)
|
||||
public Statistics(int skippedSamplesCount, int filterSize, bool medianFilter, IPlotter plotter)
|
||||
{
|
||||
this.SkippedSamplesCount = skippedSamplesCount;
|
||||
this.FilterSize = filterSize;
|
||||
this.MedianFilter = medianFilter;
|
||||
this.plotter = plotter;
|
||||
|
||||
Clear();
|
||||
if (FilterSize > 0)
|
||||
if (filterSize > 0)
|
||||
{
|
||||
fifo = new double[FilterSize];
|
||||
sorted = new double[FilterSize];
|
||||
}
|
||||
|
||||
recordingInProgress = false;
|
||||
}
|
||||
|
||||
public Statistics() : this(0, 0, false)
|
||||
public Statistics(int skippedSamplesCount, int filterSize, bool medianFilter)
|
||||
: this(skippedSamplesCount, filterSize, medianFilter, new DummyPlotter())
|
||||
{
|
||||
}
|
||||
|
||||
public Statistics(IPlotter plotter)
|
||||
: this(0, 0, false, plotter)
|
||||
{
|
||||
}
|
||||
|
||||
public Statistics()
|
||||
: this(0, 0, false, new DummyPlotter())
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Resets statistics
|
||||
/// Resets statistics and start collecting
|
||||
/// </summary>
|
||||
public void Clear()
|
||||
public void Start(int batchNr, string testName, int repetition)
|
||||
{
|
||||
sum = 0;
|
||||
min = double.MaxValue;
|
||||
@ -61,6 +79,22 @@ namespace TBF.BenchControl.Sequences
|
||||
totalCount = 0;
|
||||
count = 0;
|
||||
fifoCount = 0;
|
||||
|
||||
recordingInProgress = true;
|
||||
|
||||
graphId = plotter.StartGraph(batchNr, testName, repetition);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resets statistics
|
||||
/// </summary>
|
||||
public void Stop()
|
||||
{
|
||||
if (recordingInProgress)
|
||||
{
|
||||
recordingInProgress = false;
|
||||
plotter.StopGraph(graphId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -88,11 +122,14 @@ namespace TBF.BenchControl.Sequences
|
||||
/// <param name="value">New value</param>
|
||||
public void Update(double value)
|
||||
{
|
||||
if (totalCount >= SkippedSamplesCount)
|
||||
if (recordingInProgress)
|
||||
{
|
||||
Process(value);
|
||||
if (totalCount >= SkippedSamplesCount)
|
||||
{
|
||||
Process(value);
|
||||
}
|
||||
totalCount++;
|
||||
}
|
||||
totalCount++;
|
||||
}
|
||||
|
||||
|
||||
@ -112,6 +149,8 @@ namespace TBF.BenchControl.Sequences
|
||||
if (value < min) min = filteredValue;
|
||||
if (value > max) max = filteredValue;
|
||||
|
||||
plotter.UpdateGraph(graphId, (float)(count + SkippedSamplesCount + FilterSize / 2), (float)value);
|
||||
|
||||
count++;
|
||||
}
|
||||
}
|
||||
@ -162,4 +201,13 @@ namespace TBF.BenchControl.Sequences
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DummyPlotter : IPlotter
|
||||
{
|
||||
public DummyPlotter() { }
|
||||
|
||||
public int StartGraph(int batchNr, string testName, int repetition) { return 1; }
|
||||
public void UpdateGraph(int graphId, float x, float y) { }
|
||||
public void StopGraph(int graphId) { }
|
||||
}
|
||||
}
|
||||
|
||||
@ -326,7 +326,7 @@ namespace TBF.BenchControl.TestMethods.Adjustment
|
||||
queryEnd1 = cBrd.QueryMeasurementEndOp();
|
||||
queryEnd2 = cBrd.QueryMeasurementEndOp();
|
||||
|
||||
ClearAllStatistics(StateMachine.Time);
|
||||
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr);
|
||||
|
||||
/// Measurement loop - begin
|
||||
while (true)
|
||||
|
||||
@ -491,7 +491,7 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
|
||||
queryEnd1 = cBrd.QueryMeasurementEndOp();
|
||||
queryEnd2 = cBrd.QueryMeasurementEndOp();
|
||||
|
||||
ClearAllStatistics(StateMachine.Time);
|
||||
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr);
|
||||
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
|
||||
|
||||
/// Read the diverter switch time
|
||||
|
||||
@ -267,7 +267,7 @@ namespace TBF.BenchControl.TestMethods.Endurance
|
||||
queryEnd1 = cBrd.QueryMeasurementEndOp();
|
||||
|
||||
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
|
||||
ClearAllStatistics(StateMachine.Time);
|
||||
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr);
|
||||
|
||||
/// Measurement loop - begin
|
||||
State.Create(string.Format("{0}({1}) : Reading watermeters", test.Method, test.Name))
|
||||
@ -323,6 +323,8 @@ namespace TBF.BenchControl.TestMethods.Endurance
|
||||
|
||||
test_completed:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
//------------------------------------------------
|
||||
Bridge.OnActivity(this, Strings.Test_completed);
|
||||
//------------------------------------------------
|
||||
@ -492,7 +494,7 @@ namespace TBF.BenchControl.TestMethods.Endurance
|
||||
while (!e.Contains(Event.PreviousStopped));
|
||||
|
||||
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
|
||||
ClearAllStatistics(StateMachine.Time);
|
||||
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr);
|
||||
|
||||
|
||||
///
|
||||
@ -642,6 +644,8 @@ namespace TBF.BenchControl.TestMethods.Endurance
|
||||
|
||||
stopTest:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
///
|
||||
/// Quit this sequence
|
||||
///
|
||||
|
||||
@ -325,7 +325,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
|
||||
queryEnd1 = cBrd.QueryMeasurementEndOp();
|
||||
queryEnd2 = cBrd.QueryMeasurementEndOp();
|
||||
|
||||
ClearAllStatistics(StateMachine.Time);
|
||||
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr);
|
||||
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
|
||||
|
||||
/// Measurement loop - begin
|
||||
@ -368,6 +368,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
|
||||
|
||||
test_completed:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
State.Create("FixedStartAdvanced : Closing the start/stop valve at the end of the fixed start test")
|
||||
.AddOperation(checkUiOp)
|
||||
.AddOperation(StateMachine.ControlBoard.SetValvesOp(null, outPath.StartValve))
|
||||
@ -587,6 +589,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartAdvanced
|
||||
|
||||
stopTest:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
///
|
||||
/// Quit this sequence
|
||||
///
|
||||
|
||||
@ -614,8 +614,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartDeferredEvaluation
|
||||
queryEnd1 = cBrd.QueryMeasurementEndOp();
|
||||
queryEnd2 = cBrd.QueryMeasurementEndOp();
|
||||
|
||||
ClearAllStatistics(StateMachine.Time);
|
||||
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
|
||||
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr);
|
||||
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
|
||||
|
||||
/// Measurement loop - begin
|
||||
do
|
||||
@ -692,6 +692,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartDeferredEvaluation
|
||||
|
||||
test_completed:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
EndTime = (double)StateMachine.Time;
|
||||
|
||||
State.Create(string.Format("{0}({1}) : Closing the start/stop valve at the end of the fixed start test", test.Method, test.Name))
|
||||
@ -944,6 +946,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartDeferredEvaluation
|
||||
|
||||
stopTest:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
///
|
||||
/// Quit this sequence
|
||||
///
|
||||
|
||||
@ -611,8 +611,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
|
||||
queryEnd1 = cBrd.QueryMeasurementEndOp();
|
||||
queryEnd2 = cBrd.QueryMeasurementEndOp();
|
||||
|
||||
ClearAllStatistics(StateMachine.Time);
|
||||
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
|
||||
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr);
|
||||
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
|
||||
|
||||
/// Measurement loop - begin
|
||||
do
|
||||
@ -689,6 +689,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
|
||||
|
||||
test_completed:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
EndTime = (double)StateMachine.Time;
|
||||
|
||||
State.Create(string.Format("{0}({1}) : Closing the start/stop valve at the end of the fixed start test", test.Method, test.Name))
|
||||
@ -1148,6 +1150,8 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection
|
||||
|
||||
stopTest:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
///
|
||||
/// Quit this sequence
|
||||
///
|
||||
|
||||
@ -416,7 +416,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
|
||||
queryEnd1 = cBrd.QueryMeasurementEndOp();
|
||||
|
||||
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
|
||||
ClearAllStatistics(StateMachine.Time);
|
||||
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr);
|
||||
|
||||
/// Measurement loop - begin
|
||||
State.Create("Read water meters")
|
||||
@ -490,6 +490,8 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
|
||||
|
||||
test_completed:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
//------------------------------------------------
|
||||
Bridge.OnActivity(this, Strings.Test_completed);
|
||||
//------------------------------------------------
|
||||
@ -754,6 +756,8 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
|
||||
|
||||
stopTest:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
///
|
||||
/// Quit this sequence
|
||||
///
|
||||
|
||||
@ -582,7 +582,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartFirstRepetWithMassColl
|
||||
queryEnd1 = cBrd.QueryMeasurementEndOp(); /// ???
|
||||
|
||||
int estimtdEndTime = StateMachine.Time + (int)((repetitionNr == 1) ? test.TstTime : (test.TstTime * nextTestVolume / test.Volume));
|
||||
ClearAllStatistics(StateMachine.Time);
|
||||
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr);
|
||||
|
||||
if (repetitionNr == 1)
|
||||
{
|
||||
@ -667,6 +667,8 @@ namespace TBF.BenchControl.TestMethods.FlyingStartFirstRepetWithMassColl
|
||||
|
||||
test_completed:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
if (repetitionNr == 1)
|
||||
{
|
||||
///
|
||||
@ -1093,6 +1095,8 @@ namespace TBF.BenchControl.TestMethods.FlyingStartFirstRepetWithMassColl
|
||||
|
||||
stopTest:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
///
|
||||
/// Quit this sequence
|
||||
///
|
||||
|
||||
@ -585,7 +585,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollProlonged
|
||||
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
|
||||
|
||||
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
|
||||
ClearAllStatistics(StateMachine.Time);
|
||||
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr);
|
||||
|
||||
/// Read the diverter switch time
|
||||
switchTimeStart = 0.001f * (float)cBrd.DivTime(0);
|
||||
@ -667,6 +667,8 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollProlonged
|
||||
|
||||
test_completed:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
///
|
||||
/// (Berlin:) Water is stopped immediately after the test and before the 2nd mass measurement in case:
|
||||
/// - no 'transition sequence after test' is used
|
||||
@ -1061,6 +1063,8 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollProlonged
|
||||
|
||||
stopTest:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
///
|
||||
/// Quit this sequence
|
||||
///
|
||||
|
||||
@ -90,8 +90,8 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
|
||||
//-------------------------------------------------------------------
|
||||
|
||||
State.Create(string.Format("{0}({1}) : Simulation", test.Method, test.Name))
|
||||
.AddOperation(checkUiOp)
|
||||
.EnterState();
|
||||
.AddOperation(checkUiOp)
|
||||
.EnterState();
|
||||
e = StateMachine.WaitRunDevsRunOps();
|
||||
|
||||
if (TestAndLogUiCmdStop(test, e)) retVal = Event.UiCmdStop;
|
||||
@ -101,6 +101,67 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
|
||||
retListSim.Add(retVal);
|
||||
return retListSim;
|
||||
}
|
||||
else if (debugLevel == Config.Entities.DebugMode.Inherit)
|
||||
{
|
||||
///
|
||||
/// Test method with flow chart simulation
|
||||
///
|
||||
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Config.Entities.Progress.FlowSetting));
|
||||
|
||||
|
||||
/// Simulate flow
|
||||
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr);
|
||||
|
||||
IntBox remainingTime = new IntBox((int)test.TstTime);
|
||||
State.Create(string.Format("{0}({1}) : Simulation", test.Method, test.Name))
|
||||
.AddOperation(checkUiOp)
|
||||
.AddOperation(new Operations.TimerOp((int)test.TstTime, remainingTime))
|
||||
.EnterState();
|
||||
do
|
||||
{
|
||||
e = StateMachine.WaitRunDevsRunOps();
|
||||
if (TestAndLogUiCmdStop(test, e)) { retVal = Event.UiCmdStop; break; }
|
||||
|
||||
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Config.Entities.Progress.Test));
|
||||
|
||||
if (remainingTime.Val > 60)
|
||||
{
|
||||
Bridge.OnActivity(this, string.Format("{0} ... {1} {2} {3} {4}", Strings.Test_in_progress, remainingTime.Val / 60, "min", remainingTime.Val % 60, Strings.sec));
|
||||
}
|
||||
else
|
||||
{
|
||||
Bridge.OnActivity(this, string.Format("{0} ... {1} s", Strings.Test_in_progress, remainingTime.Val));
|
||||
}
|
||||
//------------------------------------------------
|
||||
|
||||
RefFlow.Val = (1.0 + 0.2 * Math.Sin(2 * Math.PI * (float)remainingTime.Val / test.TstTime)) * (test.Qfrom + test.Qto) / 2.0;
|
||||
|
||||
UpdateAllStatistics(StateMachine.Time);
|
||||
}
|
||||
while (!e.Contains(Event.TimerExpired));
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
if (retVal != Event.UiCmdStop)
|
||||
{
|
||||
float errorPctBase = -1.0f;
|
||||
|
||||
if (test.Name.ToLower().Contains("q3")) errorPctBase = -0.5f;
|
||||
else if (test.Name.ToLower().Contains("q2")) errorPctBase = 0.5f;
|
||||
else if (test.Name.ToLower().Contains("q1")) errorPctBase = -5.1f;
|
||||
|
||||
MakeSimulated(test.Name, test.Repeats, repetitionNr, 0, errorPctBase + repetitionNr * 0.1f);
|
||||
|
||||
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Config.Entities.Progress.Completed));
|
||||
Bridge.OnTestCompleted(this, new TestCompletedEventArgs(test.Name, BatchRslts.GetTestRslt(Results.Utils.GetTestName(test.Name, 1, 1), 0)));
|
||||
allResults.Info(TestResult2CsvLine(test.Name, 0)); /// Append the results to the CSV-file
|
||||
}
|
||||
|
||||
/// Create a list with one item 'retVal' (default is Event.Done) and return it
|
||||
IList<Event> retListSim = new List<Event>(1);
|
||||
retListSim.Add(retVal);
|
||||
return retListSim;
|
||||
}
|
||||
|
||||
|
||||
Elde.ControlBoardDev cBrd = StateMachine.ControlBoard;
|
||||
@ -573,7 +634,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
|
||||
readRegistersOp = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders);
|
||||
|
||||
int estimtdEndTime = StateMachine.Time + (int)test.TstTime;
|
||||
ClearAllStatistics(StateMachine.Time);
|
||||
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr);
|
||||
|
||||
/// Read the diverter switch time
|
||||
switchTimeStart = 0.001f * (float)cBrd.DivTime(0);
|
||||
@ -655,6 +716,8 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
|
||||
|
||||
test_completed:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
///
|
||||
/// (Berlin:) Water is stopped immediately after the test and before the 2nd mass measurement in case:
|
||||
/// - no 'transition sequence after test' is used
|
||||
@ -1071,6 +1134,8 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
|
||||
|
||||
stopTest:
|
||||
|
||||
StopRecordingStatistics(); /// Make sure graph files are closed
|
||||
|
||||
///
|
||||
/// Quit this sequence
|
||||
///
|
||||
|
||||
@ -121,7 +121,7 @@ namespace TBF.BenchControl.TestMethods.LeakTest
|
||||
|
||||
pressure_set:
|
||||
|
||||
ClearAllStatistics(StateMachine.Time);
|
||||
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr);
|
||||
UpdateAllStatistics(StateMachine.Time);
|
||||
|
||||
startTime = StateMachine.Time;
|
||||
@ -216,7 +216,7 @@ namespace TBF.BenchControl.TestMethods.LeakTest
|
||||
TestStartTime = DateTime.Now;
|
||||
startTime = StateMachine.Time;
|
||||
estimtdEndTime = startTime + testParams.DurationLeak;
|
||||
ClearAllStatistics(StateMachine.Time);
|
||||
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr);
|
||||
|
||||
//------------------------------------------------
|
||||
Bridge.OnActivity(this, Strings.Test_in_progress);
|
||||
@ -255,6 +255,8 @@ namespace TBF.BenchControl.TestMethods.LeakTest
|
||||
|
||||
test_completed:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
//------------------------------------------------
|
||||
Bridge.OnActivity(this, Strings.Test_completed);
|
||||
//------------------------------------------------
|
||||
@ -364,6 +366,8 @@ namespace TBF.BenchControl.TestMethods.LeakTest
|
||||
|
||||
stopTest:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Config.Entities.Progress.TransitionAfter));
|
||||
|
||||
///
|
||||
|
||||
@ -122,7 +122,7 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
|
||||
|
||||
pressure_set:
|
||||
|
||||
ClearAllStatistics(StateMachine.Time);
|
||||
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr);
|
||||
UpdateAllStatistics(StateMachine.Time);
|
||||
|
||||
startTime = StateMachine.Time;
|
||||
@ -166,6 +166,8 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
|
||||
|
||||
test_completed:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
TestEndTime = DateTime.Now;
|
||||
|
||||
//------------------------------------------------
|
||||
@ -275,6 +277,8 @@ namespace TBF.BenchControl.TestMethods.PMaxTest
|
||||
|
||||
stopTest:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Config.Entities.Progress.TransitionAfter));
|
||||
|
||||
///
|
||||
|
||||
@ -206,7 +206,7 @@ namespace TBF.BenchControl.TestMethods.ReferenceFlowmeterCalibration
|
||||
queryEnd1 = cBrd.QueryMeasurementEndOp();
|
||||
queryEnd2 = cBrd.QueryMeasurementEndOp();
|
||||
|
||||
ClearAllStatistics(StateMachine.Time);
|
||||
StartNewStatistics(StateMachine.Time, BatchRslts.Batch.BatchNr, test.Name, repetitionNr);
|
||||
|
||||
/// Read the diverter switch time
|
||||
switchTimeStart = 0.001f * (float)cBrd.DivTime(0);
|
||||
@ -233,6 +233,9 @@ namespace TBF.BenchControl.TestMethods.ReferenceFlowmeterCalibration
|
||||
/// Measurement loop - end
|
||||
|
||||
test_completed:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
State.Create("ReferenceFlowmeterCalibration : Waiting before mass measurement")
|
||||
.AddOperation(checkUiOp)
|
||||
.AddOperation(benchPath.TempMtrUp.ReadTempOp(ref TempUp))
|
||||
@ -378,6 +381,8 @@ namespace TBF.BenchControl.TestMethods.ReferenceFlowmeterCalibration
|
||||
|
||||
stopTest:
|
||||
|
||||
StopRecordingStatistics();
|
||||
|
||||
///
|
||||
/// Quit this sequence
|
||||
///
|
||||
|
||||
@ -54,10 +54,10 @@ namespace TBF.Boxes
|
||||
/// string.Format(FormatEx, val.ToString(Format))
|
||||
/// If the value is invalid, the conversion result is 'FormatInvalid'.
|
||||
///
|
||||
public string Format = null; /// Used as an argument of ToString.) function
|
||||
public string FormatEx = "{0}"; /// Used as the first argument of string.Format(...), can be modified to contain units, etc.
|
||||
public string Format = null; /// Used as an argument of ToString.) function
|
||||
public string FormatEx = "{0}"; /// Used as the first argument of string.Format(...), can be modified to contain units, etc.
|
||||
public string FormatInvalid = "---";
|
||||
public float Factor = 1.0f;
|
||||
public float Factor = 1.0f; /// Factor is used when converting to/from string by ToString(), UpdateParam() and ValidateParam()
|
||||
public float LimitLo = float.MinValue;
|
||||
public float LimitHi = float.MaxValue;
|
||||
|
||||
|
||||
@ -16,7 +16,8 @@ namespace TBF
|
||||
public class Program
|
||||
{
|
||||
public const string HomeDir = "C:\\Tbf\\"; /// Contains subdirectories Results, Logs, Images, ...
|
||||
public const string ImagesDir = "C:\\Tbf\\Images\\";
|
||||
public const string GraphsDir = "C:\\Tbf\\Graphs\\";
|
||||
public const string ImagesDir = "C:\\Tbf\\Images\\";
|
||||
public const string TempImagesDir = "C:\\Tbf\\Images\\Temp\\";
|
||||
|
||||
/// log4net
|
||||
|
||||
15
TBF/Screens/Graph.cs
Normal file
15
TBF/Screens/Graph.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace TBF.Screens
|
||||
{
|
||||
public class Graph
|
||||
{
|
||||
public Graph(string fileName)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -523,6 +523,7 @@
|
||||
<Compile Include="BenchControl\GenericDevices\ICameraDisplay.cs" />
|
||||
<Compile Include="BenchControl\GenericDevices\IDataEntryForCamera.cs" />
|
||||
<Compile Include="BenchControl\GenericDevices\IErrorFlags.cs" />
|
||||
<Compile Include="BenchControl\GenericDevices\IPlotter.cs" />
|
||||
<Compile Include="BenchControl\GenericDevices\IRoiForFixedStart.cs" />
|
||||
<Compile Include="BenchControl\GenericDevices\IScaleCfg.cs" />
|
||||
<Compile Include="BenchControl\GenericDevices\ICalibInfoCfg.cs" />
|
||||
@ -865,6 +866,7 @@
|
||||
<DependentUpon>WriterCfgCtrl.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="BenchControl\Sequences\DeferredTestEvaluationData.cs" />
|
||||
<Compile Include="BenchControl\Sequences\Plotter.cs" />
|
||||
<Compile Include="BenchControl\Sequences\Statistics.cs" />
|
||||
<Compile Include="BenchControl\Sequences\ProcessData.cs" />
|
||||
<Compile Include="BenchControl\TestMethods\Adjustment\WMErrorsForm12.cs">
|
||||
@ -1573,6 +1575,7 @@
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Strings.zh-CN.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Screens\Graph.cs" />
|
||||
<Compile Include="Screens\GraphsTabPageCtrl.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user