diff --git a/TestBenchFramework/BenchControl/DB/SensusOracle/Database.cs b/TestBenchFramework/BenchControl/DB/SensusOracle/Database.cs index 56146cacd..8de012844 100644 --- a/TestBenchFramework/BenchControl/DB/SensusOracle/Database.cs +++ b/TestBenchFramework/BenchControl/DB/SensusOracle/Database.cs @@ -47,6 +47,23 @@ namespace TBF.BenchControl.DB.SensusOracle 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 testInfos = new List(); + + public Database() {} public Database(Generic.IComponentCfg cfg) @@ -236,7 +253,7 @@ namespace TBF.BenchControl.DB.SensusOracle } #endif - WriteLogsToDisk(logger, batch); + WriteLogsToDisk(logger, batch); if (anyError) { @@ -902,12 +919,34 @@ namespace TBF.BenchControl.DB.SensusOracle cmd.ExecuteNonQuery(); /// Returns nr. of updated rows - - for (int q = 1; q <= 3; q++) + if ((id_WZTyp != b.WaterMeters[0].WaterMeterData.WMTypeId) || (rev_WZTyp != b.WaterMeters[0].WaterMeterData.WMTypeRev) || testInfos.Count == 0) { - 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; @@ -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("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("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("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); } - for (int q = 1; q <= 3; q++) - { - Results.Entities.MeterTestRslt mtr = wm.GetMeterTestRslt(string.Format("Q{0}", q)); - SaveMeterTestResult(conn, mtr, q, max_Pruefindex); + + + foreach (var testInfo in testInfos) + { + 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 /// /// q = 0, 1, 2 or 3 (Adj., Q1, Q2, Q3) /// Nr. of rows updated - 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_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(" + "VT_Fernum, Pruefindex, PruefungsNr, ANBID, ID_WZTyp, Rev_WZTyp, Rev_WZPruefpunkt, " + diff --git a/TestBenchFramework/Properties/AssemblyInfo.cs b/TestBenchFramework/Properties/AssemblyInfo.cs index 23a5f20dd..3e1551c67 100644 --- a/TestBenchFramework/Properties/AssemblyInfo.cs +++ b/TestBenchFramework/Properties/AssemblyInfo.cs @@ -29,5 +29,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("2.12.503.1")] -[assembly: AssemblyFileVersion("2.12.503.1")] +[assembly: AssemblyVersion("2.12.505.1")] +[assembly: AssemblyFileVersion("2.12.505.1")]