Camera time read with each sample, calculation : VolumeStart, VolumeEnd, TimestampStart, TimestampEnd used, ver. 2.12.530
This commit is contained in:
parent
fc26b95bdb
commit
d372a38e7d
@ -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.
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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));
|
||||
|
||||
|
||||
@ -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")]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user