From d0ebb62ab3959a66f3cae13751bb26ebec0d829b Mon Sep 17 00:00:00 2001 From: Milan Hanajik Date: Tue, 9 Sep 2014 16:18:23 +0200 Subject: [PATCH] - Component update (temp.) - Process data logging, first trial --- .../BenchControl/Sequences/SequenceBase.cs | 41 ++++++++++++++++++ .../CombinedMeters/CombinedMetersSeq.cs | 7 ++- .../CombinedWithDetectionSeq.cs | 7 ++- .../FixedStartMassCollectionSeq.cs | 7 ++- .../TestMethods/FlyingStart/FlyingStartSeq.cs | 7 ++- .../FlyingStartCollectionMethodSeq.cs | 12 ++++- .../ReferenceFlowmeterCalibrationSeq.cs | 7 ++- TestBenchFramework/TBF.csproj | 1 + .../Fuzhou300/ControlComponent3U.dll | Bin 377856 -> 377856 bytes 9 files changed, 78 insertions(+), 11 deletions(-) diff --git a/TestBenchFramework/BenchControl/Sequences/SequenceBase.cs b/TestBenchFramework/BenchControl/Sequences/SequenceBase.cs index cae9f52cc..8bc97593a 100644 --- a/TestBenchFramework/BenchControl/Sequences/SequenceBase.cs +++ b/TestBenchFramework/BenchControl/Sequences/SequenceBase.cs @@ -17,6 +17,7 @@ namespace TBF.BenchControl.Sequences public class SequenceBase { private static readonly ILog log = LogManager.GetLogger(typeof(SequenceBase)); + protected static readonly ILog processDataLogger = LogManager.GetLogger("ProcessData"); ///------------------------------------------------------------ /// Global static variables set only once. @@ -193,6 +194,7 @@ namespace TBF.BenchControl.Sequences #endregion + protected float ltrPerRefPulse; protected IOperation readRegisters1; protected IOperation readRegisters2; @@ -200,6 +202,7 @@ namespace TBF.BenchControl.Sequences protected IOperation queryEnd2; protected IOperation checkUiOp; + protected IOperation processDataLoggingOp; protected bool ticTac = false; protected int[] WMPulses = new int[Program.WMsCount]; @@ -239,6 +242,43 @@ namespace TBF.BenchControl.Sequences endMass.Clear(); } + + /// + /// Process data logging + /// + public void LogProcessHeader(ILog logger) + { + LogProcessHeader(logger, null); + } + + public void LogProcessHeader(ILog logger, string sectionName) + { + logger.Info(Environment.NewLine); + if (sectionName != null) logger.Info(sectionName); + logger.Info("Time Flow Test time Et.vol T.in Tou Tdi Pin Pou Mass VolMM Tam Ham. Pam Rv"); + logger.Info(Environment.NewLine); + } + + public void LogProcessData(ILog logger) + { + logger.InfoFormat("{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14}", + DateTime.Now.ToShortTimeString(), + refFlow, + "Test time", + Formulas.VolumeFromPulses(refCount.Val, 1.0f / ltrPerRefPulse), + tempIn, + tempOut, + pressIn, + pressOut, + mass, + "VolMM", + airTemperature, + airHumidity, + airPressure, + "Rv"); + } + + /// /// Empties the tank: opens the emptying valve and measures the weight. /// @@ -522,6 +562,7 @@ namespace TBF.BenchControl.Sequences ticTac = !ticTac; State.Create("Read water meters") .AddOperation(checkUiOp) + .AddOperation(realTest ? processDataLoggingOp : null) .AddOperations(measureOperations) .AddOperation(ticTac ? readRegisters1 : readRegisters2) .AddOperation(benchPath.TempIn.ReadTempOp(ref tempIn, Event.TempInDone)) diff --git a/TestBenchFramework/BenchControl/TestMethods/CombinedMeters/CombinedMetersSeq.cs b/TestBenchFramework/BenchControl/TestMethods/CombinedMeters/CombinedMetersSeq.cs index fd6f49c6b..f94fe7565 100644 --- a/TestBenchFramework/BenchControl/TestMethods/CombinedMeters/CombinedMetersSeq.cs +++ b/TestBenchFramework/BenchControl/TestMethods/CombinedMeters/CombinedMetersSeq.cs @@ -14,6 +14,7 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters private static readonly ILog log = LogManager.GetLogger(typeof(CombinedMetersSeq)); private static readonly ILog allResults = LogManager.GetLogger("AllResults"); private static readonly ILog summaryResults = LogManager.GetLogger("SummaryResults"); + private static readonly ILog processDataLog = LogManager.GetLogger("ProcessData"); /// /// Flying start mass collection method sequence for combined meter @@ -41,9 +42,11 @@ namespace TBF.BenchControl.TestMethods.CombinedMeters /// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow)); int totalPulses = (int)(7200.0f * test.Volume / outPath.FlowMeter.NominalFlow); /// Nominal flow in [m3/h] - float ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse] + ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse] /// - 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 diff --git a/TestBenchFramework/BenchControl/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs b/TestBenchFramework/BenchControl/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs index 87109ae1b..a9bb6f1bd 100644 --- a/TestBenchFramework/BenchControl/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs +++ b/TestBenchFramework/BenchControl/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs @@ -13,6 +13,7 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection private static readonly ILog log = LogManager.GetLogger(typeof(CombinedWithDetectionSeq)); private static readonly ILog allResults = LogManager.GetLogger("AllResults"); private static readonly ILog summaryResults = LogManager.GetLogger("SummaryResults"); + private static readonly ILog processDataLog = LogManager.GetLogger("ProcessData"); const int DetectionBufferSize = 9; const int DetectionKernelSize = 5; @@ -45,9 +46,11 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection /// uint refPulses = (uint)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow)); int totalPulses = (int)(7200.0f * test.Volume / outPath.FlowMeter.NominalFlow); /// Nominal flow in [m3/h] - float ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse] + ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse] /// - /// Meters path is required for the following: + processDataLoggingOp = new TBF.BenchControl.Operations.ProcessDataLoggingOp(processDataLogger, this); + + /// Meters path is required for the following: readRegisters1 = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMRefPulses); readRegisters2 = new Operations.ReadMoreRegistersOp(sensPath.RegisterReaders, ref WMPulses, ref WMRefPulses); diff --git a/TestBenchFramework/BenchControl/TestMethods/FixedStartMassCollection/FixedStartMassCollectionSeq.cs b/TestBenchFramework/BenchControl/TestMethods/FixedStartMassCollection/FixedStartMassCollectionSeq.cs index b38d41149..11e7391ff 100644 --- a/TestBenchFramework/BenchControl/TestMethods/FixedStartMassCollection/FixedStartMassCollectionSeq.cs +++ b/TestBenchFramework/BenchControl/TestMethods/FixedStartMassCollection/FixedStartMassCollectionSeq.cs @@ -14,6 +14,7 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection private static readonly ILog log = LogManager.GetLogger(typeof(FixedStartMassCollectionSeq)); private static readonly ILog allResults = LogManager.GetLogger("AllResults"); private static readonly ILog summaryResults = LogManager.GetLogger("SummaryResults"); + private static readonly ILog processDataLog = LogManager.GetLogger("ProcessData"); /// /// Flying start mass collection method sequence @@ -41,9 +42,11 @@ namespace TBF.BenchControl.TestMethods.FixedStartMassCollection /// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow)); int totalPulses = (int)(7200.0f * test.Volume / outPath.FlowMeter.NominalFlow); /// Nominal flow in [m3/h] - float ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse] + ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse] - 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 diff --git a/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs b/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs index 2e4f96622..0e83f9ed5 100644 --- a/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs +++ b/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs @@ -14,6 +14,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStart private static readonly ILog log = LogManager.GetLogger(typeof(FlyingStartSeq)); private static readonly ILog allResults = LogManager.GetLogger("AllResults"); private static readonly ILog summaryResults = LogManager.GetLogger("SummaryResults"); + private static readonly ILog processDataLog = LogManager.GetLogger("ProcessData"); /// /// Flying start mass collection method sequence @@ -41,9 +42,11 @@ namespace TBF.BenchControl.TestMethods.FlyingStart /// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow)); int totalPulses = (int)(7200.0f * test.Volume / outPath.FlowMeter.NominalFlow); /// Nominal flow in [m3/h] - float ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse] + ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse] - 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 diff --git a/TestBenchFramework/BenchControl/TestMethods/FlyingStartCollectionMethod/FlyingStartCollectionMethodSeq.cs b/TestBenchFramework/BenchControl/TestMethods/FlyingStartCollectionMethod/FlyingStartCollectionMethodSeq.cs index 24af0bb8d..59d716b19 100644 --- a/TestBenchFramework/BenchControl/TestMethods/FlyingStartCollectionMethod/FlyingStartCollectionMethodSeq.cs +++ b/TestBenchFramework/BenchControl/TestMethods/FlyingStartCollectionMethod/FlyingStartCollectionMethodSeq.cs @@ -41,7 +41,9 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod /// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow)); int totalPulses = (int)(7200.0f * test.Volume / outPath.FlowMeter.NominalFlow); /// Nominal flow in [m3/h] - float ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse] + ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse] + /// + processDataLoggingOp = new TBF.BenchControl.Operations.ProcessDataLoggingOp(processDataLogger, this); int repetitionNr = 1; /// First test: repetitionNr=1 @@ -151,11 +153,14 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod if (cameraRoi != null) measureOperations.Add(cameraRoi.MeasureOp()); } + LogProcessHeader(processDataLogger, "Start mass"); + //------------------------------------------------ Bridge.OnActivity(this, Strings.Measuring_the_weight); //------------------------------------------------ State.Create("FlyingStartCollectionMethod : Measuring the start mass") .AddOperation(checkUiOp) + .AddOperation(processDataLoggingOp) .AddOperations(measureOperations) .AddOperation(outPath.Balance.ReadStableMassOp(ref startMass, 5)) .EnterState(); @@ -167,6 +172,8 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod } while (!e.Contains(Event.BalanceDone)); + LogProcessHeader(processDataLogger, "Measurement"); + tstRslt.TimeStart = DateTime.Now; tstRslt.MassStartRaw = startMass.Val; mass.Val = startMass.Val; @@ -248,11 +255,14 @@ namespace TBF.BenchControl.TestMethods.FlyingStartCollectionMethod test_completed: + LogProcessHeader(processDataLogger, "End mass"); + //------------------------------------------------ Bridge.OnActivity(this, Strings.Measuring_the_weight); //------------------------------------------------ State.Create("FlyingStartCollectionMethod : Measuring the end mass") .AddOperation(checkUiOp) + .AddOperation(processDataLoggingOp) .AddOperation(outPath.Balance.ReadStableMassOp(ref endMass, 5)) .AddOperation(cBrd.UpdateTankWeightOp()) .EnterState(); diff --git a/TestBenchFramework/BenchControl/TestMethods/ReferenceFlowmeterCalibration/ReferenceFlowmeterCalibrationSeq.cs b/TestBenchFramework/BenchControl/TestMethods/ReferenceFlowmeterCalibration/ReferenceFlowmeterCalibrationSeq.cs index e794fcc07..14d7fd626 100644 --- a/TestBenchFramework/BenchControl/TestMethods/ReferenceFlowmeterCalibration/ReferenceFlowmeterCalibrationSeq.cs +++ b/TestBenchFramework/BenchControl/TestMethods/ReferenceFlowmeterCalibration/ReferenceFlowmeterCalibrationSeq.cs @@ -14,6 +14,7 @@ namespace TBF.BenchControl.TestMethods.ReferenceFlowmeterCalibration private static readonly ILog log = LogManager.GetLogger(typeof(ReferenceFlowmeterCalibrationSeq)); private static readonly ILog allResults = LogManager.GetLogger("AllResults"); private static readonly ILog summaryResults = LogManager.GetLogger("SummaryResults"); + private static readonly ILog processDataLog = LogManager.GetLogger("ProcessData"); /// /// Flying start mass collection method sequence @@ -41,9 +42,11 @@ namespace TBF.BenchControl.TestMethods.ReferenceFlowmeterCalibration /// int refPulses = (int)(timeSec * (2000.0f * targetFlow / pOut.FlowMeter.NominalFlow)); int totalPulses = (int)(7200.0f * test.Volume / outPath.FlowMeter.NominalFlow); /// Nominal flow in [m3/h] - float ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse] + ltrPerRefPulse = outPath.FlowMeter.NominalFlow / 7200.0f; /// [ltr/pulse] - 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 diff --git a/TestBenchFramework/TBF.csproj b/TestBenchFramework/TBF.csproj index 9e0ef21fa..7cb7b91b7 100644 --- a/TestBenchFramework/TBF.csproj +++ b/TestBenchFramework/TBF.csproj @@ -328,6 +328,7 @@ MessageBoxForm.cs + diff --git a/packages/ControlBoard/Fuzhou300/ControlComponent3U.dll b/packages/ControlBoard/Fuzhou300/ControlComponent3U.dll index 073a497e9c5a0595dba9a26ecda0f74a73a06666..674ac1743d19472a571237388930350d032c3e51 100644 GIT binary patch delta 16086 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 delta 16205 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 H;j#Y%c5f7m