tbf/TBF/BenchControl/Output/SensusTestInfo.cs

194 lines
9.0 KiB
C#

///
/// Copyright (c) 2018 Sensus Metering Systems
///
using System;
using System.Collections.Generic;
namespace TBF.BenchControl.Output
{
public enum LogType
{
Auto,
Just_Q1Q2Q3,
Just_Q1Q2Q2adjQ3, /// Greece
Just_Q1Q2__Q3,
DEWA, /// Q1, Q2adj, Q2, Q3, Q4
Suez, /// two directions
Suez_Repeatability, /// Q3(1/3), Q3(2/3), Q3(3/3), Q2(1/3), Q2(2/3), Q2(3/3), Q1(1/3), Q1(2/3), Q1(3/3)
Suez_EMP, /// Q4 ... Q1 (12 flow rates)
Count
}
public enum Range
{
R90_100,
R100_110,
}
///
/// Information extracted from VT_PRUEFPUNKT_SOLL_SD for a given watermeter by query:
/// SELECT * FROM VT_PRUEFPUNKT_SOLL_SD WHERE ANBID=4 AND ID_WZTyp=x AND Rev_WZTyp=y
///
public class SensusTestInfo
{
public int PruefungsNr; /// Identification of a flow
public string PruefungsNrStr; /// Identification of a flow - string form for log files
public string QBezeichnung; /// Flow name in Oracle database
public Range Range; /// Range.R90_100 or Range.R100_110 (flow range in % of a target flow)
public string TestName; /// Test name in TBF procedures
public SensusTestInfo(int prNr, string prNrStr, string qBz, Range range, string testName)
{
PruefungsNr = prNr;
PruefungsNrStr = prNrStr;
QBezeichnung = qBz;
Range = range;
TestName = testName;
}
/// <summary>
/// Determines whether two test infos are compatible (equal except of 'Just'=='Just1' alternatives).
/// Assumes 'oraDbTInfo' is sorted as follows:
/// oraDbTInfo = oraDbTInfo.OrderBy(x => x.PruefungsNr).ToList<SensusTestInfo>();
/// Complete test infos are typically returned by TBF.BenchControl.Output.SensusCommon.GetTestInfos().
/// </summary>
/// <param name="oraDbTInfo">SensusTestInfo-s form the Oracle DB</param>
/// <param name="myCompleteTInfo">Complete SensusTestInfo-s (incl. TBF test names)</param>
/// <returns>true when two test info-s are compatible</returns>
public static bool AreCompatible(IList<SensusTestInfo> oraDbTInfo, SensusTestInfo[] myCompleteTInfo)
{
if ((oraDbTInfo == null) || (myCompleteTInfo == null) || (oraDbTInfo.Count > myCompleteTInfo.Length)) return false;
for (int i = 0; i < oraDbTInfo.Count; i++)
{
if (oraDbTInfo[i].PruefungsNr != myCompleteTInfo[i].PruefungsNr)
{
return false;
}
if ((myCompleteTInfo[i].QBezeichnung == "Just") && !oraDbTInfo[i].QBezeichnung.Contains("Just"))
{
return false;
}
if ((myCompleteTInfo[i].QBezeichnung != "Just") && (oraDbTInfo[i].QBezeichnung != myCompleteTInfo[i].QBezeichnung))
{
return false;
}
}
return true;
}
public static SensusTestInfo[] GetTestInfos(LogType logType)
{
switch (logType)
{
case LogType.Just_Q1Q2Q3:
return new SensusTestInfo[]
{
new SensusTestInfo( -1, "-1", "Just", Range.R90_100, "Adjustment"),
new SensusTestInfo( 1, "01", "Q1", Range.R100_110, "Q1"),
new SensusTestInfo( 2, "", "Q2", Range.R100_110, "Q2"),
new SensusTestInfo( 3, "03", "Q3", Range.R90_100, "Q3"),
new SensusTestInfo( 99, "02", "Q2", Range.R100_110, "Q2adj"), /// <-- This is to generate opto-data
};
case LogType.Just_Q1Q2Q2adjQ3:
return new SensusTestInfo[]
{
new SensusTestInfo(-1, "-1", "Just", Range.R90_100, "Adjustment"),
new SensusTestInfo( 1, "01", "Q1", Range.R100_110, "Q1"),
new SensusTestInfo( 2, "02", "Q2", Range.R100_110, "Q2"),
new SensusTestInfo( 3, "03", "Q2adj", Range.R100_110, "Q2adj"),
new SensusTestInfo( 4, "04", "Q3", Range.R90_100, "Q3"),
};
case LogType.Just_Q1Q2__Q3:
return new SensusTestInfo[]
{
new SensusTestInfo( -1, "-1", "Just", Range.R90_100, "Adjustment"),
new SensusTestInfo( 1, "01", "Q1", Range.R100_110, "Q1"),
new SensusTestInfo( 2, "", "Q2", Range.R100_110, "Q2"),
new SensusTestInfo( 5, "05", "Q3", Range.R90_100, "Q3"),
new SensusTestInfo( 99, "02", "Q2", Range.R100_110, "Q2adj"), /// <-- This is to generate opto-data
};
case LogType.DEWA:
return new SensusTestInfo[]
{
new SensusTestInfo(-1, "-1", "Just", Range.R90_100, "Adjustment"),
new SensusTestInfo( 1, "01", "Q1", Range.R100_110, "Q1"),
new SensusTestInfo( 2, "02", "Q2", Range.R100_110, "Q2"),
new SensusTestInfo( 3, "03", "Q2", Range.R100_110, "Q2adj"),
new SensusTestInfo( 4, "04", "Q3", Range.R100_110, "Q3"),
new SensusTestInfo( 5, "05", "Q4", Range.R90_100, "Q4"),
};
case LogType.Suez:
return new SensusTestInfo[]
{
new SensusTestInfo(-2, "-2", "Just", Range.R90_100, "Qjust_A4"),
new SensusTestInfo(-1, "-1", "Just", Range.R90_100, "Qjust_A0"),
new SensusTestInfo( 1, "01", "Q1", Range.R100_110, "Q1_lr"),
new SensusTestInfo( 2, "02", "Q2ac", Range.R100_110, "Q2ac_lr"),
new SensusTestInfo( 3, "03", "Q2", Range.R100_110, "Q2_lr"),
new SensusTestInfo( 5, "05", "Q3", Range.R90_100, "Q3_lr"),
new SensusTestInfo( 6, "06", "Q1", Range.R100_110, "Q1_rl"),
new SensusTestInfo( 7, "07", "Q2ac", Range.R100_110, "Q2ac_rl"),
new SensusTestInfo( 8, "08", "Q2", Range.R100_110, "Q2_rl"),
new SensusTestInfo(10, "10", "Q3", Range.R90_100, "Q3_rl"),
};
case LogType.Suez_Repeatability:
return new SensusTestInfo[]
{
new SensusTestInfo( 1, "01", "Q1 (3/3)", Range.R100_110, "Q1 (3/3)"),
new SensusTestInfo( 2, "02", "Q1 (2/3)", Range.R100_110, "Q1 (2/3)"),
new SensusTestInfo( 3, "03", "Q1 (1/3)", Range.R100_110, "Q1 (1/3)"),
new SensusTestInfo( 4, "04", "Q2 (3/3)", Range.R100_110, "Q2 (3/3)"),
new SensusTestInfo( 5, "05", "Q2 (2/3)", Range.R100_110, "Q2 (2/3)"),
new SensusTestInfo( 6, "06", "Q2 (1/3)", Range.R100_110, "Q2 (1/3)"),
new SensusTestInfo( 7, "07", "Q2 (3/3)", Range.R90_100, "Q2 (3/3)"),
new SensusTestInfo( 8, "08", "Q3 (2/3)", Range.R90_100, "Q3 (2/3)"),
new SensusTestInfo( 9, "09", "Q3 (1/3)", Range.R90_100, "Q3 (1/3)"),
};
case LogType.Suez_EMP:
return new SensusTestInfo[]
{
new SensusTestInfo( 1, "01", "Q1", Range.R100_110, "Q1"),
new SensusTestInfo( 2, "02", "Q2", Range.R100_110, "Q2"),
new SensusTestInfo( 3, "03", "Q0,09", Range.R100_110, "Q0,09"),
new SensusTestInfo( 4, "04", "Q0,16", Range.R100_110, "Q0,16"),
new SensusTestInfo( 5, "05", "Q0,35", Range.R100_110, "Q0,35"),
new SensusTestInfo( 6, "06", "Q0,65", Range.R100_110, "Q0,65"),
new SensusTestInfo( 7, "07", "Q1,35", Range.R100_110, "Q1,35"),
new SensusTestInfo( 8, "08", "Q2,5", Range.R100_110, "Q2,5"),
new SensusTestInfo( 9, "09", "Q5", Range.R100_110, "Q5"),
new SensusTestInfo(10, "10", "Q8", Range.R100_110, "Q8"),
new SensusTestInfo(11, "11", "Q3", Range.R90_100, "Q3"),
new SensusTestInfo(12, "12", "Q4", Range.R90_100, "Q4"),
};
default:
return null;
}
}
public override string ToString()
{
return string.Format("{0}-'{1}'-'{2}'-'{3}'-{4}", PruefungsNr, PruefungsNrStr, QBezeichnung, TestName, Range);
}
}
}