IPERL : Results.Entities.MeterTestRslt.X1..X9 added, X1 = flow st. dev., etc., ver. 2.26.1691
This commit is contained in:
parent
300dabc800
commit
c6f3751746
@ -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();
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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")]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user