diff --git a/TestBenchFramework/BenchControl/GenericDevices/ICamera.cs b/TestBenchFramework/BenchControl/GenericDevices/ICamera.cs index 2234d8efd..6fd2ad9d8 100644 --- a/TestBenchFramework/BenchControl/GenericDevices/ICamera.cs +++ b/TestBenchFramework/BenchControl/GenericDevices/ICamera.cs @@ -11,7 +11,7 @@ namespace TBF.BenchControl.GenericDevices int RegisterRoi(string roiParams); /// returns 0=NOK or handle (=index) - int GetResult(int roiHandle); /// returns result for a registered ROI + int GetResult(int roiHandle, out long timeMs); /// returns result for a registered ROI and camera time in ms /// /// Display live image. diff --git a/TestBenchFramework/BenchControl/GenericDevices/IRoi.cs b/TestBenchFramework/BenchControl/GenericDevices/IRoi.cs index 00cf19931..542285444 100644 --- a/TestBenchFramework/BenchControl/GenericDevices/IRoi.cs +++ b/TestBenchFramework/BenchControl/GenericDevices/IRoi.cs @@ -15,6 +15,11 @@ namespace TBF.BenchControl.GenericDevices void RegisterRoiToCamera(); + double VolumeStart { get; } /// in l + double VolumeEnd { get; } /// in l + double TimestampStart { get; } /// in s + double TimestampEnd { get; } /// in s + /// /// Watermeter wheel/arrow detection process. /// diff --git a/TestBenchFramework/BenchControl/Network/Camera/CLP1611/Camera.cs b/TestBenchFramework/BenchControl/Network/Camera/CLP1611/Camera.cs index b51f2ccac..2124d9a52 100644 --- a/TestBenchFramework/BenchControl/Network/Camera/CLP1611/Camera.cs +++ b/TestBenchFramework/BenchControl/Network/Camera/CLP1611/Camera.cs @@ -91,6 +91,7 @@ namespace TBF.BenchControl.Network.Camera.CLP1611 /// ROI related parameters /// IList roiParams; + long cameraTimeMs; int[] result; /// public void ClearRoiParams() { roiParams.Clear(); } @@ -102,8 +103,10 @@ namespace TBF.BenchControl.Network.Camera.CLP1611 return newHandle; } /// - public int GetResult(int roiHandle) + public int GetResult(int roiHandle, out long timeMs) { + timeMs = cameraTimeMs; + if (roiHandle > 0 && roiHandle <= roiParams.Count) { return result[roiHandle - 1]; @@ -478,12 +481,18 @@ namespace TBF.BenchControl.Network.Camera.CLP1611 { string[] pulsesArr = msrmtData.MeasuredData.Split(new char[] { ';' }); - if (result != null && result.Length + 1 == pulsesArr.Length) + uint uiVal; + if (result != null && result.Length + 1 == pulsesArr.Length && uint.TryParse(pulsesArr[0], out uiVal)) { + cameraTimeMs = (long)uiVal; + for (int i = 0; i < result.Length; i++) { int val; - if (int.TryParse(pulsesArr[i + 1], out val)) result[i] = Math.Abs(val); + if (int.TryParse(pulsesArr[i + 1], out val)) + { + result[i] = Math.Abs(val); + } } } } diff --git a/TestBenchFramework/BenchControl/Network/Camera/Roi/Roi.cs b/TestBenchFramework/BenchControl/Network/Camera/Roi/Roi.cs index e77a6d01a..c81c432b0 100644 --- a/TestBenchFramework/BenchControl/Network/Camera/Roi/Roi.cs +++ b/TestBenchFramework/BenchControl/Network/Camera/Roi/Roi.cs @@ -35,17 +35,35 @@ namespace TBF.BenchControl.Network.Camera.Roi public double PulsesPerLtr { get { return (double)RoiCfg.ProcParams.PulsesPerLtr; } } public double LtrsPerPulse { get { return (PulsesPerLtr <= float.Epsilon) ? 1.0 : (1 / PulsesPerLtr); ; } } - int wmPulses; - public int WMPulses { get { return wmPulses; } } + int cameraPulses; + int pulsesDelta; /// = (WMPulses - cameraPulses) ... WMPulses = cameraPulses + pulsesDelta, Clear() calculates pulsesDelta + public int WMPulses { get { return cameraPulses + pulsesDelta; } } + + long cameraTime; + long timeDelta; /// = (WMTestTime - cameraTime) ... WMTestTime = cameraTime + timeDelta, Clear() calculates timeDelta + public double WMTestTime { get { return (cameraTime + timeDelta) / 1000.0; } } + int wmRefPulses; public int WMRefPulses { get { return wmRefPulses; } } - public double WMVolume { get { return LtrsPerPulse * (double)wmPulses; } } + public double WMVolume { get { return LtrsPerPulse * (double)WMPulses; } } - public double BeginWMState { get { return 0; } } /// Always 0 - public double EndWMState { get { return WMVolume; } } /// Derived from WMVolume + public double BeginWMState { get { return 0; } } /// Always 0 + public double EndWMState { get { return WMVolume; } } /// Derived from WMVolume + double volumeStart; + public double VolumeStart { get { return volumeStart; } } /// in l + + double volumeEnd; + public double VolumeEnd { get { return volumeEnd; } } /// in l + + double timestampStart; + public double TimestampStart { get { return timestampStart; } } /// in s + + double timestampEnd; + public double TimestampEnd { get { return timestampEnd; } } /// in s + /// /// Roi specific /// @@ -143,7 +161,8 @@ namespace TBF.BenchControl.Network.Camera.Roi public void Clear() { - wmPulses = 0; + pulsesDelta = -cameraPulses; + timeDelta = -cameraTime; wmRefPulses = 0; } @@ -172,7 +191,7 @@ namespace TBF.BenchControl.Network.Camera.Roi { if (detected && roiHandle != 0) { - wmPulses = NetCamera.GetResult(roiHandle); + cameraPulses = NetCamera.GetResult(roiHandle, out cameraTime); } } @@ -188,6 +207,9 @@ namespace TBF.BenchControl.Network.Camera.Roi public void Start() { UdatePulses(); + Clear(); + volumeStart = WMVolume; + timestampStart = WMTestTime; } /// Run this operation @@ -195,6 +217,8 @@ namespace TBF.BenchControl.Network.Camera.Roi public Event Run() { UdatePulses(); + volumeEnd = WMVolume; + timestampEnd = WMTestTime; return Event.ReadRegisterDone; } diff --git a/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs b/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs index 89f36f718..42a60670b 100644 --- a/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs +++ b/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs @@ -570,6 +570,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStart Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single); GenericDevices.IRegisterReader regReader = sensPath.RegisterReaders[i]; WaterMeters.iPerl.WaterMeter iPerl = regReader as WaterMeters.iPerl.WaterMeter; + GenericDevices.IRoi cameraRoi = regReader as GenericDevices.IRoi; if (meterRslt != null && regReader != null) { @@ -597,6 +598,18 @@ namespace TBF.BenchControl.TestMethods.FlyingStart iPerl.LastTestResult = meterRslt; /// Save this test result iPerl.NominalTestFlow = 500.0 * (test.Qfrom + test.Qto); /// Ave. + convert to liter/hour } + else if (cameraRoi != null) + { + meterRslt.TimestampStart = cameraRoi.TimestampStart; /// second + meterRslt.TimestampEnd = cameraRoi.TimestampEnd; /// second + meterRslt.TestTime = cameraRoi.TimestampEnd - cameraRoi.TimestampStart; /// second + + meterRslt.VolumeStart = cameraRoi.VolumeStart; /// liter + meterRslt.VolumeEnd = cameraRoi.VolumeEnd; /// liter + meterRslt.VolumeMeter = cameraRoi.VolumeEnd - cameraRoi.VolumeStart; /// liter + + meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime; + } else { meterRslt.TestTime = tstRslt.TestTime; /// TODO: Malo by sa citat z dosky diff --git a/TestBenchFramework/BenchControl/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs b/TestBenchFramework/BenchControl/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs index 252c51ca1..6ead41b68 100644 --- a/TestBenchFramework/BenchControl/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs +++ b/TestBenchFramework/BenchControl/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs @@ -915,6 +915,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single); GenericDevices.IRegisterReader regReader = sensPath.RegisterReaders[i]; WaterMeters.iPerl.WaterMeter iPerl = regReader as WaterMeters.iPerl.WaterMeter; + GenericDevices.IRoi cameraRoi = regReader as GenericDevices.IRoi; if (meterRslt != null && regReader != null) { @@ -942,9 +943,21 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection iPerl.LastTestResult = meterRslt; /// Save this test result iPerl.NominalTestFlow = 500.0 * (test.Qfrom + test.Qto); /// Ave. + convert to liter/hour } + else if (cameraRoi != null) + { + meterRslt.TimestampStart = cameraRoi.TimestampStart; /// second + meterRslt.TimestampEnd = cameraRoi.TimestampEnd; /// second + meterRslt.TestTime = cameraRoi.TimestampEnd - cameraRoi.TimestampStart; /// second + + meterRslt.VolumeStart = cameraRoi.VolumeStart; /// liter + meterRslt.VolumeEnd = cameraRoi.VolumeEnd; /// liter + meterRslt.VolumeMeter = cameraRoi.VolumeEnd - cameraRoi.VolumeStart; /// liter + + meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime; + } else { - meterRslt.TestTime = tstRslt.TestTime; /// TODO: Malo by sa citat z dosky + meterRslt.TestTime = tstRslt.TestTime; /// TODO: Malo by sa citat z dosky meterRslt.VolumeStart = 0; /// liter meterRslt.VolumeEnd = 0; /// liter meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// liter diff --git a/TestBenchFramework/BenchControl/TestMethods/RoiDetection/RoiDetectionSeq.cs b/TestBenchFramework/BenchControl/TestMethods/RoiDetection/RoiDetectionSeq.cs index f832437c6..8ad739f5c 100644 --- a/TestBenchFramework/BenchControl/TestMethods/RoiDetection/RoiDetectionSeq.cs +++ b/TestBenchFramework/BenchControl/TestMethods/RoiDetection/RoiDetectionSeq.cs @@ -59,9 +59,9 @@ namespace TBF.BenchControl.TestMethods.RoiDetection TestProgressEventArgs.SetEstimatedTimes(new int[] { 1, 1, 1, 30, Convert.ToInt32(test.TstTime) + 15, 0, 0 }); Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Config.Entities.Progress.JustStarted)); - //------------------------------------------------ + //------------------------------------------------- Bridge.OnActivity(this, Strings.Starting_the_pump); - //------------------------------------------------ + //------------------------------------------------- /// if (inPath.Pump is GenericDevices.IPumpFM) (inPath.Pump as GenericDevices.IPumpFM).TurnOn(test.PumpPower); State.Create("RoiDetection : Starting the pump") @@ -123,11 +123,12 @@ namespace TBF.BenchControl.TestMethods.RoiDetection } } - //---------------------------------------------------------- - Bridge.OnActivity(this, Strings.ROI_Detection_in_Progress); - //---------------------------------------------------------- detection_loop: + //--------------------------------------------------------- + Bridge.OnActivity(this, Strings.ROI_Detection_in_Progress); + //--------------------------------------------------------- + State detection = State.Create("RoiDetection : Detection of ROI-s") .AddOperation(checkUiOp); for (int i = 0; i < sensPath.RegisterReaders.Length; i++) @@ -159,21 +160,13 @@ namespace TBF.BenchControl.TestMethods.RoiDetection } while (e.Contains(Event.CameraBusy)); + //----------------------------------------------------------------------------------------------------- + if (e.Contains(Event.RoiDetectionPreviousFailed)) Bridge.OnActivity(this, Strings.Camera_error); + else if (e.Contains(Event.RoiDetectionFailed)) Bridge.OnActivity(this, Strings.Detection_failed); + else Bridge.OnActivity(this, Strings.Detection_completed); + //----------------------------------------------------------------------------------------------------- + string title = Strings.Do_you_want_to_retry_RoI_detection; - /// - if (e.Contains(Event.RoiDetectionPreviousFailed)) - { - Bridge.OnActivity(this, Strings.Camera_error); - } - else if (e.Contains(Event.RoiDetectionFailed)) - { - Bridge.OnActivity(this, Strings.Detection_failed); - } - else - { - Bridge.OnActivity(this, Strings.Detection_completed); - } - /// State.Create("RoiDetection : Do you want to retry RoI detection?") .AddOperation(checkUiOp) .AddOperation((display == null) ? null : display.ShowStaticImageOp(imageNames, title)) @@ -209,9 +202,9 @@ namespace TBF.BenchControl.TestMethods.RoiDetection goto stopTest; } - //------------------------------------------------ + //--------------------------------------------------- Bridge.OnActivity(this, Strings.Detection_completed); - //------------------------------------------------ + //--------------------------------------------------- Bridge.OnTestProgress(this, new TestProgressEventArgs(test, repetitionNr, Config.Entities.Progress.TransitionAfter)); diff --git a/TestBenchFramework/Properties/AssemblyInfo.cs b/TestBenchFramework/Properties/AssemblyInfo.cs index 8effa3279..52c6ada36 100644 --- a/TestBenchFramework/Properties/AssemblyInfo.cs +++ b/TestBenchFramework/Properties/AssemblyInfo.cs @@ -29,5 +29,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("2.12.529.1")] -[assembly: AssemblyFileVersion("2.12.529.1")] +[assembly: AssemblyVersion("2.12.530.1")] +[assembly: AssemblyFileVersion("2.12.530.1")]