IPERL : Results.Entities.MeterTestRslt.X1..X9 added, X1 = flow st. dev., etc., ver. 2.26.1691

This commit is contained in:
Milan Hanajik 2021-07-01 09:32:58 +02:00
parent 300dabc800
commit c6f3751746
7 changed files with 168 additions and 18 deletions

View File

@ -32,6 +32,15 @@ namespace Results.Entities
public virtual bool Passed { get; set; } /// true = test passed, water meter is OK
#if IPERL
public virtual string ExtraDataPath { get; set; } /// Relative path to a file with opto-data/raw-data
public virtual float X1 { get; set; }
public virtual float X2 { get; set; }
public virtual float X3 { get; set; }
public virtual float X4 { get; set; }
public virtual float X5 { get; set; }
public virtual float X6 { get; set; }
public virtual float X7 { get; set; }
public virtual float X8 { get; set; }
public virtual float X9 { get; set; }
#endif
#if ORACLE_DB
public virtual double LastError { get; set; } /// [%] Previous test error at this Q in case Pruefindex > 1
@ -145,6 +154,15 @@ namespace Results.Entities
Passed = oriMTR.Passed;
#if IPERL
ExtraDataPath = oriMTR.ExtraDataPath;
X1 = oriMTR.X1;
X2 = oriMTR.X2;
X3 = oriMTR.X3;
X4 = oriMTR.X4;
X5 = oriMTR.X5;
X6 = oriMTR.X6;
X7 = oriMTR.X7;
X8 = oriMTR.X8;
X9 = oriMTR.X9;
#endif
#if ORACLE_DB
LastError = oriMTR.LastError;
@ -175,6 +193,15 @@ namespace Results.Entities
Passed = src.Passed;
#if IPERL
ExtraDataPath = src.ExtraDataPath;
X1 = src.X1;
X2 = src.X2;
X3 = src.X3;
X4 = src.X4;
X5 = src.X5;
X6 = src.X6;
X7 = src.X7;
X8 = src.X8;
X9 = src.X9;
#endif
#if ORACLE_DB
LastError = src.LastError;
@ -209,6 +236,15 @@ namespace Results.Entities
writer.Write(Passed);
#if IPERL
writer.Write((ExtraDataPath != null) ? ExtraDataPath : string.Empty);
writer.Write(X1);
writer.Write(X2);
writer.Write(X3);
writer.Write(X4);
writer.Write(X5);
writer.Write(X6);
writer.Write(X7);
writer.Write(X8);
writer.Write(X9);
#endif
#if ORACLE_DB
writer.Write(LastError);
@ -240,6 +276,15 @@ namespace Results.Entities
Passed = reader.ReadBoolean();
#if IPERL
ExtraDataPath = reader.ReadString();
X1 = reader.ReadSingle();
X2 = reader.ReadSingle();
X3 = reader.ReadSingle();
X4 = reader.ReadSingle();
X5 = reader.ReadSingle();
X6 = reader.ReadSingle();
X7 = reader.ReadSingle();
X8 = reader.ReadSingle();
X9 = reader.ReadSingle();
#endif
#if ORACLE_DB
LastError = reader.ReadDouble();

View File

@ -28,6 +28,15 @@ namespace Results.Mappings
Map(x => x.Passed);
#if IPERL
Map(x => x.ExtraDataPath);
Map(x => x.X1);
Map(x => x.X2);
Map(x => x.X3);
Map(x => x.X4);
Map(x => x.X5);
Map(x => x.X6);
Map(x => x.X7);
Map(x => x.X8);
Map(x => x.X9);
#endif
#if ORACLE_DB
Map(x => x.LastError);

View File

@ -1,5 +1,5 @@
///
/// Copyright (c) 2013-2018 Sensus Slovensko a.s.
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@ -620,6 +620,15 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
#if IPERL
meterRslt.WaterMeter.CalibFactor = iPerl.CalibFactor;
meterRslt.ExtraDataPath = iPerl.ExtraDataPath;
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 1) meterRslt.X1 = iPerl.X[0];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 2) meterRslt.X2 = iPerl.X[1];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 3) meterRslt.X3 = iPerl.X[2];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 4) meterRslt.X4 = iPerl.X[3];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 5) meterRslt.X5 = iPerl.X[4];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 6) meterRslt.X6 = iPerl.X[5];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 7) meterRslt.X7 = iPerl.X[6];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 8) meterRslt.X8 = iPerl.X[7];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 9) meterRslt.X9 = iPerl.X[8];
#endif
iPerl.LastTestResult2 = iPerl.LastTestResult; /// Save shift previous test result
iPerl.LastTestResult = meterRslt; /// Save this test result
@ -737,9 +746,12 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
///
/// Quit this sequence
///
if (isLastRepetition || retVal == Event.UiCmdStop || retVal == Event.OpArgumentError
|| retVal == Event.RecoverableError || retVal == Event.ErrorFlagsStop
|| retVal == Event.Error || retVal == Event.ConfigurationError)
if (isLastRepetition || retVal == Event.UiCmdStop
|| retVal == Event.OpArgumentError
|| retVal == Event.RecoverableError
|| retVal == Event.ErrorFlagsStop
|| retVal == Event.Error
|| retVal == Event.ConfigurationError)
{
State.Create(string.Format("{0}({1}) : Stopping diverter, gate, etc.", test.Method, test.Name))
.AddOperation(checkUiOp)

View File

@ -1,5 +1,5 @@
///
/// Copyright (c) 2018-2020 Sensus Slovensko a.s.
/// Copyright (c) 2018-2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@ -1029,6 +1029,15 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollProlonged
#if IPERL
meterRslt.WaterMeter.CalibFactor = iPerl.CalibFactor;
meterRslt.ExtraDataPath = iPerl.ExtraDataPath;
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 1) meterRslt.X1 = iPerl.X[0];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 2) meterRslt.X2 = iPerl.X[1];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 3) meterRslt.X3 = iPerl.X[2];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 4) meterRslt.X4 = iPerl.X[3];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 5) meterRslt.X5 = iPerl.X[4];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 6) meterRslt.X6 = iPerl.X[5];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 7) meterRslt.X7 = iPerl.X[6];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 8) meterRslt.X8 = iPerl.X[7];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 9) meterRslt.X9 = iPerl.X[8];
#endif
iPerl.LastTestResult2 = iPerl.LastTestResult; /// Save shift previous test result
iPerl.LastTestResult = meterRslt; /// Save this test result
@ -1139,9 +1148,12 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollProlonged
///
/// Quit this sequence
///
if (isLastRepetition || retVal == Event.UiCmdStop || retVal == Event.OpArgumentError
|| retVal == Event.RecoverableError || retVal == Event.ErrorFlagsStop
|| retVal == Event.Error || retVal == Event.ConfigurationError)
if (isLastRepetition || retVal == Event.UiCmdStop
|| retVal == Event.OpArgumentError
|| retVal == Event.RecoverableError
|| retVal == Event.ErrorFlagsStop
|| retVal == Event.Error
|| retVal == Event.ConfigurationError)
{
State.Create(string.Format("{0}({1}) : Stopping diverter, gate, etc.", test.Method, test.Name))
.AddOperation(checkUiOp)

View File

@ -1,5 +1,5 @@
///
/// Copyright (c) 2013-2018 Sensus Slovensko a.s.
/// Copyright (c) 2013-2021 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
@ -955,6 +955,15 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
#if IPERL
meterRslt.WaterMeter.CalibFactor = iPerl.CalibFactor;
meterRslt.ExtraDataPath = iPerl.ExtraDataPath;
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 1) meterRslt.X1 = iPerl.X[0];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 2) meterRslt.X2 = iPerl.X[1];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 3) meterRslt.X3 = iPerl.X[2];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 4) meterRslt.X4 = iPerl.X[3];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 5) meterRslt.X5 = iPerl.X[4];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 6) meterRslt.X6 = iPerl.X[5];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 7) meterRslt.X7 = iPerl.X[6];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 8) meterRslt.X8 = iPerl.X[7];
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 9) meterRslt.X9 = iPerl.X[8];
#endif
iPerl.LastTestResult2 = iPerl.LastTestResult; /// Save shift previous test result
iPerl.LastTestResult = meterRslt; /// Save this test result
@ -1086,9 +1095,12 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
///
/// Quit this sequence
///
if (isLastRepetition || retVal == Event.UiCmdStop || retVal == Event.OpArgumentError
|| retVal == Event.RecoverableError || retVal == Event.ErrorFlagsStop
|| retVal == Event.Error || retVal == Event.ConfigurationError)
if (isLastRepetition || retVal == Event.UiCmdStop
|| retVal == Event.OpArgumentError
|| retVal == Event.RecoverableError
|| retVal == Event.ErrorFlagsStop
|| retVal == Event.Error
|| retVal == Event.ConfigurationError)
{
State.Create(string.Format("{0}({1}) : Stopping diverter, gate, etc.", test.Method, test.Name))
.AddOperation(checkUiOp)

View File

@ -29,6 +29,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
public const int StartOptoDataCount = MaxOptoDataCount / 2;
public const int EndOptoDataCount = MaxOptoDataCount - StartOptoDataCount;
public const int StartEndFilterSamplesCount2 = 20; /// StartEndFilterSamplesCount = 2 * StartEndFilterSamplesCount2 + 1
public const int FeatureVectorSize = 9;
readonly IperlHeadCfg iperlHeadCfg;
@ -79,6 +80,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
string extraDataPath;
public string ExtraDataPath { get { return extraDataPath; } }
float[] x;
public float[] X { get { return x; } }
/// <summary>
/// Passed to OptoTelegramRaw.UpdateFromString(...)
@ -353,6 +357,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
: base(cfg)
{
iperlHeadCfg = cfg as IperlHeadCfg;
x = new float[FeatureVectorSize];
}
public override void Initialize()
@ -413,6 +418,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
Q2CorrRL = 0;
Q2CorrLR = 0;
/// Clear the data buffer
optoDataCount = 0;
currentFlowDir = InitFlowDir;
@ -513,6 +519,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
timestampSec = 0;
timestampSec0 = 0;
/// Clear the feature vector
for (int i = 0; i < FeatureVectorSize; i++) x[i] = 0;
ReadPulses();
}
@ -624,6 +633,8 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
optoData[endIx].Flags = OptoTelegramFlags.OK_TestEnd;
}
log.DebugFormat("Flow filtering start: {0:HH:mm:ss.fff}", DateTime.Now);
StopParsingOptoSerialPort();
if (optoDataCount <= MaxOptoDataCount)
{
@ -635,8 +646,16 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
OptoTelegramRaw.FIRFilterFlow(optoData, (optoDataCount - EndOptoDataCount), optoDataCount - 1);
}
log.DebugFormat("Flow filtering end, feature vector calculation start: {0:HH:mm:ss.fff}", DateTime.Now);
CalculateFeatureVector(optoData, optoDataCount, startIx, endIx, ref x);
log.DebugFormat("Feature vector calculation end, save opto-file start: {0:HH:mm:ss.fff}", DateTime.Now);
extraDataPath = SaveOptoData();
log.DebugFormat("Save opto-file end: {0:HH:mm:ss.fff}", DateTime.Now);
if (TestStartTelegramIx == 0 || optoDataCount < 100)
{
ResultCode |= (int)Results.Entities.ResultCode.MissingOptoData;
@ -647,6 +666,47 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
}
}
void CalculateFeatureVector(OptoTelegramRaw[] optoData, int optoDataCount, int startIx, int endIx, ref float[] x)
{
if (startIx < 0 || endIx >= optoDataCount || startIx >= endIx) return;
int n = 0;
Int64 sumFlow = 0;
Int64 sumFlow2 = 0;
Int64 sumEmf = 0;
Int64 sumEmf2 = 0;
Int64 sumMagF = 0;
Int64 sumMagF2 = 0;
Int64 sumImp = 0;
Int64 sumImp2 = 0;
for (int ix = startIx; ix <= endIx; ix++)
{
if (optoData[ix].Flags == OptoTelegramFlags.OK ||
optoData[ix].Flags == OptoTelegramFlags.OK_TestStart ||
optoData[ix].Flags == OptoTelegramFlags.OK_TestEnd)
{
n++;
sumFlow += optoData[ix].FlowRaw;
sumFlow2 += ((int)optoData[ix].FlowRaw * (int)optoData[ix].FlowRaw);
sumEmf += (int)optoData[ix].EmfRaw;
sumEmf2 += ((Int64)optoData[ix].EmfRaw * (Int64)optoData[ix].EmfRaw);
sumMagF += optoData[ix].MagneticFieldRaw;
sumMagF2 += ((int)optoData[ix].MagneticFieldRaw * (int)optoData[ix].MagneticFieldRaw);
sumImp += optoData[ix].Impedance;
sumImp2 += ((int)optoData[ix].Impedance * (int)optoData[ix].Impedance);
}
}
if (n >= 2)
{
if (x.Length > 0) x[0] = ((float)sumFlow2 - (float)sumFlow * (float)sumFlow / n) / (n - 1);
if (x.Length > 1) x[1] = ((float)sumEmf2 - (float)sumEmf * (float)sumEmf / n) / (n - 1);
if (x.Length > 2) x[2] = ((float)sumMagF2 - (float)sumMagF * (float)sumMagF / n) / (n - 1);
if (x.Length > 3) x[3] = ((float)sumImp2 - (float)sumImp * (float)sumImp / n) / (n - 1);
}
}
/// <summary>
/// Save opto data to a file.
/// </summary>

View File

@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("2.26.1688.0")]
[assembly: AssemblyFileVersion("2.26.1688.0")]
[assembly: AssemblyVersion("2.26.1691.0")]
[assembly: AssemblyFileVersion("2.26.1691.0")]