Camera time read with each sample, calculation : VolumeStart, VolumeEnd, TimestampStart, TimestampEnd used, ver. 2.12.530

This commit is contained in:
Milan Hanajik 2017-04-07 11:29:35 +02:00
parent fc26b95bdb
commit d372a38e7d
8 changed files with 92 additions and 35 deletions

View File

@ -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
/// <summary>
/// Display live image.

View File

@ -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
/// <summary>
/// Watermeter wheel/arrow detection process.
/// </summary>

View File

@ -91,6 +91,7 @@ namespace TBF.BenchControl.Network.Camera.CLP1611
/// ROI related parameters
///
IList<string> 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);
}
}
}
}

View File

@ -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;
}
/// <summary>Run this operation</summary>
@ -195,6 +217,8 @@ namespace TBF.BenchControl.Network.Camera.Roi
public Event Run()
{
UdatePulses();
volumeEnd = WMVolume;
timestampEnd = WMTestTime;
return Event.ReadRegisterDone;
}

View File

@ -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

View File

@ -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

View File

@ -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));

View File

@ -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")]