Saving to Oracle DB uses a list of tests extracted from VT_PRUEFPUNKT_SOLL_SD, required for DEWA water meters, ver. 2.12.505
This commit is contained in:
@@ -47,6 +47,23 @@ namespace TBF.BenchControl.DB.SensusOracle
|
|||||||
StreamWriter logger; /// Logs specified by LU
|
StreamWriter logger; /// Logs specified by LU
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// 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
|
||||||
|
///
|
||||||
|
class TestInfo
|
||||||
|
{
|
||||||
|
public int PruefungsNr;
|
||||||
|
public string QBezeichnung;
|
||||||
|
public TestInfo(int p, string q) { PruefungsNr = p; QBezeichnung = q; }
|
||||||
|
public override string ToString() { return string.Format("({0},{1})", PruefungsNr, QBezeichnung); }
|
||||||
|
}
|
||||||
|
///
|
||||||
|
static int id_WZTyp;
|
||||||
|
static int rev_WZTyp;
|
||||||
|
static IList<TestInfo> testInfos = new List<TestInfo>();
|
||||||
|
|
||||||
|
|
||||||
public Database() {}
|
public Database() {}
|
||||||
|
|
||||||
public Database(Generic.IComponentCfg cfg)
|
public Database(Generic.IComponentCfg cfg)
|
||||||
@@ -902,12 +919,34 @@ namespace TBF.BenchControl.DB.SensusOracle
|
|||||||
|
|
||||||
cmd.ExecuteNonQuery(); /// Returns nr. of updated rows
|
cmd.ExecuteNonQuery(); /// Returns nr. of updated rows
|
||||||
|
|
||||||
|
if ((id_WZTyp != b.WaterMeters[0].WaterMeterData.WMTypeId) || (rev_WZTyp != b.WaterMeters[0].WaterMeterData.WMTypeRev) || testInfos.Count == 0)
|
||||||
for (int q = 1; q <= 3; q++)
|
|
||||||
{
|
{
|
||||||
Results.Entities.TestRslt tr = b.GetTestRslt(string.Format("Q{0}", q), 0);
|
testInfos.Clear();
|
||||||
|
id_WZTyp = b.WaterMeters[0].WaterMeterData.WMTypeId;
|
||||||
|
rev_WZTyp = b.WaterMeters[0].WaterMeterData.WMTypeRev;
|
||||||
|
|
||||||
if (tr == null) tr = b.GetTestRslt(string.Format("Q{0}", q), 1); /// TODO: Remove this workaround for large large watermeters with multiple parts at Q3
|
OracleCommand cmd1 = new OracleCommand("SELECT PruefungsNr, PosFehlerKalt, QBezeichnung FROM VT_PRUEFPUNKT_SOLL_SD WHERE ANBID=4 AND ID_WZTyp=:1 AND Rev_WZTyp=:2", conn);
|
||||||
|
parm = new OracleParameter("ID_WZTyp", OracleDbType.Int32); parm.Value = id_WZTyp; cmd1.Parameters.Add(parm); ///:1
|
||||||
|
parm = new OracleParameter("Rev_WZTyp", OracleDbType.Int32); parm.Value = rev_WZTyp; cmd1.Parameters.Add(parm); ///:2
|
||||||
|
|
||||||
|
OracleDataReader dr = cmd1.ExecuteReader();
|
||||||
|
while (dr.Read())
|
||||||
|
{
|
||||||
|
int pruefungsNr = dr.GetInt32(0);
|
||||||
|
double errLimHi = dr.GetDouble(1);
|
||||||
|
string qBezeichnung = dr.GetString(2);
|
||||||
|
if (qBezeichnung == "Q2" && errLimHi > 2.0) qBezeichnung = "Q2adj";
|
||||||
|
if (qBezeichnung == "Just") qBezeichnung = "Adjustment";
|
||||||
|
testInfos.Add(new TestInfo(pruefungsNr, qBezeichnung));
|
||||||
|
}
|
||||||
|
dr.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var testInfo in testInfos)
|
||||||
|
{
|
||||||
|
Results.Entities.TestRslt tr = b.GetTestRslt(testInfo.QBezeichnung, 0);
|
||||||
|
|
||||||
|
if (tr == null) tr = b.GetTestRslt(testInfo.QBezeichnung, 1); /// TODO: Remove this workaround for large watermeters with multiple parts at Q3
|
||||||
|
|
||||||
if (tr == null) continue;
|
if (tr == null) continue;
|
||||||
|
|
||||||
@@ -923,7 +962,7 @@ namespace TBF.BenchControl.DB.SensusOracle
|
|||||||
parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_StaraTura; cmd2.Parameters.Add(parm); ///:1
|
parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_StaraTura; cmd2.Parameters.Add(parm); ///:1
|
||||||
parm = new OracleParameter("ID_Pruefstand", OracleDbType.Int32); parm.Value = 18000 + b.TestBenchId; cmd2.Parameters.Add(parm); ///:2
|
parm = new OracleParameter("ID_Pruefstand", OracleDbType.Int32); parm.Value = 18000 + b.TestBenchId; cmd2.Parameters.Add(parm); ///:2
|
||||||
parm = new OracleParameter("ID_WzPruefreihe", OracleDbType.Int32); parm.Value = b.BatchNr; cmd2.Parameters.Add(parm); ///:3
|
parm = new OracleParameter("ID_WzPruefreihe", OracleDbType.Int32); parm.Value = b.BatchNr; cmd2.Parameters.Add(parm); ///:3
|
||||||
parm = new OracleParameter("PruefungsNr", OracleDbType.Int32); parm.Value = ((q==0) ? -1 : q); cmd2.Parameters.Add(parm); ///:4
|
parm = new OracleParameter("PruefungsNr", OracleDbType.Int32); parm.Value = testInfo.PruefungsNr; cmd2.Parameters.Add(parm); ///:4
|
||||||
///
|
///
|
||||||
parm = new OracleParameter("PVOL", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.l, tr.VolumeCTV); cmd2.Parameters.Add(parm); ///:5
|
parm = new OracleParameter("PVOL", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.l, tr.VolumeCTV); cmd2.Parameters.Add(parm); ///:5
|
||||||
parm = new OracleParameter("PMasse", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.kg, tr.MassEnd-tr.MassStart); cmd2.Parameters.Add(parm); ///:6
|
parm = new OracleParameter("PMasse", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.kg, tr.MassEnd-tr.MassStart); cmd2.Parameters.Add(parm); ///:6
|
||||||
@@ -1027,10 +1066,17 @@ namespace TBF.BenchControl.DB.SensusOracle
|
|||||||
log.InfoFormat("VT_ZAEHLER_PINDEX_PD inserted, PcbNr={0}, pos={1}, pruefix={2}", wm.SerialNr, wm.WMPosition, max_Pruefindex % 100);
|
log.InfoFormat("VT_ZAEHLER_PINDEX_PD inserted, PcbNr={0}, pos={1}, pruefix={2}", wm.SerialNr, wm.WMPosition, max_Pruefindex % 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int q = 1; q <= 3; q++)
|
|
||||||
{
|
|
||||||
Results.Entities.MeterTestRslt mtr = wm.GetMeterTestRslt(string.Format("Q{0}", q));
|
foreach (var testInfo in testInfos)
|
||||||
SaveMeterTestResult(conn, mtr, q, max_Pruefindex);
|
{
|
||||||
|
Results.Entities.MeterTestRslt mtr = wm.GetMeterTestRslt(testInfo.QBezeichnung);
|
||||||
|
if (mtr == null)
|
||||||
|
{
|
||||||
|
throw new Exception(string.Format("'{0}' test results missing, watermeter {1}", testInfo.QBezeichnung, wm.WMPosition));
|
||||||
|
}
|
||||||
|
|
||||||
|
SaveMeterTestResult(conn, mtr, testInfo.PruefungsNr, max_Pruefindex);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -1064,11 +1110,10 @@ namespace TBF.BenchControl.DB.SensusOracle
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="q">q = 0, 1, 2 or 3 (Adj., Q1, Q2, Q3)</param>
|
/// <param name="q">q = 0, 1, 2 or 3 (Adj., Q1, Q2, Q3)</param>
|
||||||
/// <returns>Nr. of rows updated</returns>
|
/// <returns>Nr. of rows updated</returns>
|
||||||
static int SaveMeterTestResult(OracleConnection conn, Results.Entities.MeterTestRslt mtr, int q, int max_Pruefindex) ///
|
static int SaveMeterTestResult(OracleConnection conn, Results.Entities.MeterTestRslt mtr, int qq, int max_Pruefindex) ///
|
||||||
{
|
{
|
||||||
double Q_wm = 3600.0 * mtr.VolumeMeter / mtr.TestTime; /// in [l/hour]
|
double Q_wm = 3600.0 * mtr.VolumeMeter / mtr.TestTime; /// in [l/hour]
|
||||||
double Q_wm_with_upper_bound = Math.Min(2 * 1000 * mtr.TestRslt.FlowVolume, Math.Max(0.0, Q_wm));
|
double Q_wm_with_upper_bound = Math.Min(2 * 1000 * mtr.TestRslt.FlowVolume, Math.Max(0.0, Q_wm));
|
||||||
int qq = (q == 0) ? -1 : q;
|
|
||||||
|
|
||||||
OracleCommand cmd = new OracleCommand("INSERT INTO VT_PRUEFREIHE_IST_PD(" +
|
OracleCommand cmd = new OracleCommand("INSERT INTO VT_PRUEFREIHE_IST_PD(" +
|
||||||
"VT_Fernum, Pruefindex, PruefungsNr, ANBID, ID_WZTyp, Rev_WZTyp, Rev_WZPruefpunkt, " +
|
"VT_Fernum, Pruefindex, PruefungsNr, ANBID, ID_WZTyp, Rev_WZTyp, Rev_WZPruefpunkt, " +
|
||||||
|
|||||||
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
|
|||||||
// Build Number
|
// Build Number
|
||||||
// Revision
|
// Revision
|
||||||
//
|
//
|
||||||
[assembly: AssemblyVersion("2.12.503.1")]
|
[assembly: AssemblyVersion("2.12.505.1")]
|
||||||
[assembly: AssemblyFileVersion("2.12.503.1")]
|
[assembly: AssemblyFileVersion("2.12.505.1")]
|
||||||
|
|||||||
Reference in New Issue
Block a user