iPerl : (1) results DB change, (2) reading from Oracle on cycle start, (3) reading Q2 corr. factors from iPerl, (4) new result items, (5) MainSeq cleanup, ver. 2.18.1125

This commit is contained in:
Milan Hanajik
2019-01-29 16:05:29 +01:00
parent 88496cf003
commit f8ac27ba3c
13 changed files with 658 additions and 235 deletions
@@ -45,6 +45,11 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
///
GenericDevices.IRegisterReader[] iperlHeads;
/// <summary>
/// Start info is read into WaterMeter objects referenced by this array
/// </summary>
Results.Entities.WaterMeter[] waterMeters;
/// <summary>
/// Results to print
/// </summary>
@@ -52,11 +57,13 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
OracleConnection connection; /// Oracle database connection
///
/// The following 3 variables are always update together
///
int id_WZTyp;
int rev_WZTyp;
IList<SensusTestInfo> oraDbTestInfos = new List<SensusTestInfo>(); /// Contains only flowId-s ad qBezeichnung-s
SensusTestInfo[] completeTestInfos; /// Contains also a range (90-100/100-110), a TBF test name and a string form of the flowId
SensusTestInfo[] completeTestInfos; /// Contains (1) range (90-100/100-110), (2) TBF test name, (3) string form of the flowId ...
/// ... in addition to incomplete test info from Oracle
public Database() {}
@@ -71,6 +78,10 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
log.Debug(this.ToString());
}
///
/// IDevice interface implementation
///
public void Initialize()
{
switch (dbCfg.DBUsed)
@@ -107,24 +118,89 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
connection.Close();
}
}
///
public void RunDeviceBefore() {}
public void RunDeviceAfter() {}
///
public void StopDevice()
{
if (connection != null) connection.Dispose();
}
public void StopDevice2() { }
/// <summary>
/// Get a complete information about tests given water meter type Id and revision
/// </summary>
/// <param name="conn">An open Oracle DB connection</param>
/// <param name="wmTypeId">Water meter type Id</param>
/// <param name="wmTypeRevision">Water meter type revision</param>
/// <returns>SensusTestInfos array</returns>
SensusTestInfo[] GetMatchingTestInfo(OracleConnection conn, int wmTypeId, int wmTypeRevision)
{
///
/// Read 'incomplete' TestInfo from Oracle database containing only flowId-s ad qBezeichnung-s
///
IList<SensusTestInfo> oraDbTinfos = new List<SensusTestInfo>();
OracleCommand cmd = new OracleCommand("SELECT PruefungsNr, PosFehlerKalt, QBezeichnung FROM VT_PRUEFPUNKT_SOLL_SD WHERE ANBID=4 AND ID_WZTyp=:1 AND Rev_WZTyp=:2", conn);
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = wmTypeId }); ///:1
cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Int32, Value = wmTypeRevision }); ///:2
///
OracleDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
int pruefungsNr = dr.GetInt32(0);
double errLimHi = dr.GetDouble(1);
string qBezeichnung = dr.GetString(2);
oraDbTinfos.Add(new SensusTestInfo(pruefungsNr, string.Empty, qBezeichnung, Range.R100_110, errLimHi.ToString()));
}
dr.Close();
if (oraDbTinfos.Count == 0) return null; /// No 'incomplete' TestInfo in Oracle DN for this 'wmTypeId' and 'wmTypeRevision'
///
/// Find a matching complete test info
///
SensusTestInfo[] cmpltTinfos = null;
oraDbTinfos = oraDbTinfos.OrderBy(x => x.PruefungsNr).ToList<SensusTestInfo>();
for (LogType lt = 0; lt < LogType.Count; lt++)
{
SensusTestInfo[] myTinfos = SensusTestInfo.GetTestInfos(lt);
if (SensusTestInfo.AreCompatible(oraDbTinfos, myTinfos))
{
cmpltTinfos = myTinfos;
break;
}
}
foreach (var ti in oraDbTinfos)
{
log.WarnFormat("VT_PRUEFPUNKT_SOLL_SD info : ID_WZTyp={0} Rev_WZTyp={1} PruefungsNr={2} PosFehlerKalt={3} QBezeichnung={4}",
wmTypeId, wmTypeRevision, ti.PruefungsNr, ti.TestName, ti.QBezeichnung);
}
if (cmpltTinfos != null)
{
foreach (var ti in cmpltTinfos)
{
log.WarnFormat("Selected test info : ID_WZTyp={0} Rev_WZTyp={1} PruefungsNr={2} Str={3} QBezeichnung={4} Range={5} Test={6}",
wmTypeId, wmTypeRevision, ti.PruefungsNr, ti.PruefungsNrStr, ti.QBezeichnung, ti.Range, ti.TestName);
}
}
return cmpltTinfos;
}
/// <summary>
/// Reads information on start of a cycle, Events: Event.InfoRead
/// </summary>
/// <param name="batch">Batch results</param>
/// <param name="waterMeters">Results of water meters</param>
/// <returns>Reference to the operation</returns>
public IOperation ReadStartInfoOp(Results.Entities.Batch batch)
public IOperation ReadStartInfoOp(Results.Entities.WaterMeter[] waterMeters)
{
if (!dbCfg.ReadStartInfo)
{
@@ -137,7 +213,7 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
else
{
currentOp = CurrentOp.ReadStartInfo;
this.batch = batch;
this.waterMeters = waterMeters;
return this;
}
}
@@ -165,7 +241,6 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
}
}
public IOperation CheckBarcodeScanningOp(GenericDevices.IRegisterReader[] iperlHeads)
{
if (currentOp != CurrentOp.None)
@@ -178,6 +253,7 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
return this;
}
/// <summary>Start this operation</summary>
public void Start()
{
@@ -193,11 +269,11 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
{
if (!opCompleted)
{
if (batch.WaterMeters.Count == 0) return Event.ResultsWritten;
if ( waterMeters.Length == 0) return Event.ResultsWritten;
#if ORACLE_DB
if (dbCfg.DebugLevel != DebugMode.Simulate && connection != null)
if ((dbCfg.DebugLevel == DebugMode.Normal) && (connection != null))
{
if (ReadStartInfoFromDB(connection, batch) == Retv.Error) anyError = true;
if (ReadStartInfoFromDB(connection) == Retv.Error) anyError = true;
}
#endif
opCompleted = true;
@@ -211,7 +287,7 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
{
if (batch.WaterMeters.Count == 0) return Event.ResultsWritten;
#if ORACLE_DB
if (dbCfg.DebugLevel != DebugMode.Simulate && connection != null)
if ((dbCfg.DebugLevel == DebugMode.Normal) && (connection != null))
{
if (WriteResultsToDB(connection, batch, false) == Retv.Error) anyError = true;
}
@@ -226,7 +302,7 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
if (!opCompleted)
{
#if ORACLE_DB
if (dbCfg.DebugLevel != DebugMode.Simulate && connection != null)
if ((dbCfg.DebugLevel == DebugMode.Normal) && (connection != null))
{
if (CheckBarcodeScanning(connection, iperlHeads) == Retv.Error) anyError = true; ;
}
@@ -291,15 +367,16 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
}
public Retv ReadStartInfoFromDB(OracleConnection conn, Results.Entities.Batch batch)
public Retv ReadStartInfoFromDB(OracleConnection conn)
{
bool anyError = false;
try
{
conn.Open(); /// Open the Oracle database
foreach (var wMtr in batch.WaterMeters)
foreach (var wMtr in waterMeters)
{
ReadSingleWMfromDB(conn, wMtr);
if ((wMtr != null) && (ReadSingleWMfromDB(conn, wMtr) != Retv.OK)) anyError = true;
}
}
catch (Exception exc)
@@ -311,21 +388,213 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
}
conn.Close();
return Retv.OK;
return anyError ? Retv.Error : Retv.OK;
}
/// <summary>
/// Read start info of one water meter from the database
/// </summary>
/// </summary>
/// <param name="wmNr">0-based water meter number</param>
/// <param name="results">Sorted list of results to update</param>
void ReadSingleWMfromDB(OracleConnection conn, Results.Entities.WaterMeter wm)
Retv ReadSingleWMfromDB(OracleConnection conn, Results.Entities.WaterMeter wm)
{
if (string.IsNullOrEmpty(wm.SerialNr)) return; /// No database activity possible w/o PCB number
if (string.IsNullOrEmpty(wm.SerialNr)) return Retv.Error; /// No database activity possible w/o PCB number
wm.Pruefindex = ReadMaxPruefindex(conn, wm);
try
{
if (completeTestInfos == null || (id_WZTyp != wm.WaterMeterData.WMTypeId) || (rev_WZTyp != wm.WaterMeterData.WMTypeRev))
{
SensusTestInfo[] ti = GetMatchingTestInfo(conn, wm.WaterMeterData.WMTypeId, wm.WaterMeterData.WMTypeRev);
// select (Q_Fehler) from VT_PRUEFREIHE_IST_PD where VT_fernum=(1) AND PruefungsNr=(2) AND ANBID=4
if (ti != null)
{
completeTestInfos = ti;
id_WZTyp = wm.WaterMeterData.WMTypeId;
rev_WZTyp = wm.WaterMeterData.WMTypeRev;
}
else
{
return Retv.Error;
}
}
OracleCommand cmd;
OracleDataReader dr;
// SELECT * FROM VT_ZAEHLER_PD WHERE VT_Fernum = :1 AND ANBID = 4
int maxPruefindex = 0;
string purchaseOrder = string.Empty;
int assignedSerialNr = 0;
int paletteNr = 0;
int umkartonNr = 0;
string completeSerialNr = string.Empty;
string radioAddress = string.Empty;
int testBenchID = 0;
int pruefreiheID = 0;
int wmPosition = 0;
bool passed = false;
int resultCode = 0;
int userId = 0;
int q2CorrectionRL = 0;
int q2CorrectionLR = 0;
double q2ErrorBeforeCorrection = 0;
///
/// Read data from VT_ZAEHLER_PD
///
cmd = new OracleCommand("select MAX_PRUEFINDEX, AUFTRAGSNUMMER, ZAEHLERNUMMER, PALETTE_NR, UMKARTON_NR, Z_NR_KOMPLETT, VT_MODUL_SNR from VT_ZAEHLER_PD where VT_FERNUM = :1 AND ANBID = 4", conn);
/// 100*benchId+MPix, purchase_order, assigned_s/n, palette_nr, box_nr., complete_s/n, radio_address
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Varchar2, Value = wm.SerialNr });
dr = cmd.ExecuteReader();
if (dr.Read())
{
int i = 0;
int benchId_x_100_plus_MaxPruefindex = dr.GetInt32(i++);
maxPruefindex = benchId_x_100_plus_MaxPruefindex % 100;
testBenchID = benchId_x_100_plus_MaxPruefindex / 100;
try { purchaseOrder = dr.GetString(i++); } catch { purchaseOrder = string.Empty; }
try { assignedSerialNr = dr.GetInt32(i++); } catch { assignedSerialNr = 0; }
try { paletteNr = dr.GetInt32(i++); } catch { paletteNr = 0; }
try { umkartonNr = dr.GetInt32(i++); } catch { umkartonNr = 0; }
try { completeSerialNr = dr.GetString(i++); } catch { completeSerialNr = string.Empty; }
try { radioAddress = dr.GetString(i++); } catch { radioAddress = string.Empty; }
}
else
{
///
/// Water meter with given PCB number was not found in ORACLE
///
log.ErrorFormat("Water meter {0} was not found in ORACLE database.", wm.SerialNr);
dr.Close();
return Retv.Error;
}
dr.Close();
///
/// Read data from VT_ZAEHLER_PINDEX_PD
///
cmd = new OracleCommand("select PRUEFINDEX, ID_WZPRUEFREIHE, WT_PLATZ_NR, WZGUT, ID_BENUTZER from VT_ZAEHLER_PINDEX_PD where VT_FERNUM = :1 AND ANBID = 4", conn);
/// test_bench_ID, line_ID, WM_position, result, user_ID
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Varchar2, Value = wm.SerialNr });
dr = cmd.ExecuteReader();
while (dr.Read())
{
int i = 0;
int prfix = (dr.GetInt32(i++) % 100);
if (prfix == maxPruefindex)
{
pruefreiheID = dr.GetInt32(i++);
wmPosition = dr.GetInt32(i++);
passed = (dr.GetInt32(i++) != 0);
userId = dr.GetInt32(i++);
}
}
dr.Close();
///
/// Read data from VT_IP_ZAEHLER_PINDEX_PD
///
cmd = new OracleCommand("select PRUEFINDEX, Q2CORRECTIONLEFT, Q2CORRECTIONRIGHT, ERRQ2 from VT_IP_ZAEHLER_PINDEX_PD where VT_FERNUM = :1 AND ANBID = 4", conn);
/// pruefindex, Q2_correction_RL, Q2_correction_LR, Q2_error_before_correction
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Varchar2, Value = wm.SerialNr });
dr = cmd.ExecuteReader();
while (dr.Read())
{
int i = 0;
int prfix = (dr.GetInt32(i++) % 100);
if (prfix == maxPruefindex)
{
q2CorrectionRL = dr.GetInt32(i++);
q2CorrectionLR = dr.GetInt32(i++);
q2ErrorBeforeCorrection = dr.GetDouble(i++);
}
}
dr.Close();
///
/// Read data from VT_PRUEFREIHE_IST_PD
///
/// testID, flow, rel.err., passed
cmd = new OracleCommand("select PRUEFUNGSNR, Q_WZ, Q_FEHLER, Q_BEST from VT_PRUEFREIHE_IST_PD where VT_FERNUM = :1 AND PRUEFINDEX = :2 AND ANBID = 4", conn);
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Varchar2, Value = wm.SerialNr });
cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Int32, Value = 100 * testBenchID + maxPruefindex });
dr = cmd.ExecuteReader();
while (dr.Read())
{
int i = 0;
int testId = dr.GetInt32(i++);
double flow = dr.GetDouble(i++);
double error = dr.GetDouble(i++);
bool testPassed = (dr.GetInt32(i++) != 0);
string testName = null;
foreach (var ti in completeTestInfos)
{
if (ti.PruefungsNr == testId)
{
testName = ti.TestName;
break;
}
}
if (!string.IsNullOrEmpty(testName))
{
foreach (var mtr in wm.MeterTestRslts)
{
string mtrTestName = mtr.TestRslt.Name();
int ix = mtrTestName.LastIndexOf(" (");
string mtrBaseTestName = (ix < 0) ? mtrTestName : mtrTestName.Substring(0, ix);
if (mtrBaseTestName == testName)
{
mtr.LastError = error;
}
}
}
}
dr.Close();
///
/// Copy acquired data to WaterMeter object
///
wm.Pruefindex = maxPruefindex;
wm.AssignedSerialNr = assignedSerialNr;
wm.CompleteSerialNr = completeSerialNr;
wm.RadioAddress = radioAddress;
wm.PaletteNr = paletteNr;
wm.UmkartonNr = umkartonNr;
wm.ProdTestBench = Results.Utils.BenchNameFromOracleBenchID(testBenchID);
wm.ProdWMPosition = wmPosition;
wm.ProdUserName = userId.ToString();
wm.ProdPurchaseOrder = purchaseOrder;
wm.ProdPassed = passed;
wm.ProdResultCode = resultCode;
wm.ProdQ2CorrRL = q2CorrectionRL;
wm.ProdQ2CorrLR = q2CorrectionLR;
log.InfoFormat("Data of water meter {0} successfully read from ORACLE database.", wm.SerialNr);
log.DebugFormat(" MaxPruefindex = {0}", wm.Pruefindex);
log.DebugFormat(" AssignedSerialNr = {0}", wm.AssignedSerialNr);
log.DebugFormat(" CompleteSerialNr = {0}", wm.CompleteSerialNr);
log.DebugFormat(" RadioAddress = {0}", wm.RadioAddress);
log.DebugFormat(" PaletteNr = {0}", wm.PaletteNr);
log.DebugFormat(" UmkartonNr = {0}", wm.UmkartonNr);
log.DebugFormat(" ProdTestBench = {0}", wm.ProdTestBench);
log.DebugFormat(" ProdWMPosition = {0}", wm.ProdWMPosition);
log.DebugFormat(" ProdUserName = {0}", wm.ProdUserName);
log.DebugFormat(" ProdPurchaseOrder = {0}", wm.ProdPurchaseOrder);
log.DebugFormat(" ProdPassed = {0}", wm.ProdPassed);
log.DebugFormat(" ProdResultCode = {0}", wm.ProdResultCode);
log.DebugFormat(" ProdQ2CorrRL = {0}", wm.ProdQ2CorrRL);
log.DebugFormat(" ProdQ2CorrLR = {0}", wm.ProdQ2CorrLR);
return Retv.OK;
}
catch (Exception exc)
{
log.ErrorFormat("Error reading data of water meter {0} from ORACLE database: {1}", wm.SerialNr, exc.Message);
return Retv.Error;
}
}
@@ -336,6 +605,7 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
try
{
conn.Open(); /// Open the Oracle database
transaction = conn.BeginTransaction();
SaveBatchData(conn, batch);
@@ -450,65 +720,22 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
return maxPrfIndex;
}
/// <summary>
/// Save common batch data
/// </summary>
/// <param name="b">Batch</param>
void SaveBatchData(OracleConnection conn, Results.Entities.Batch b)
{
OracleParameter parm;
if ((id_WZTyp != b.WaterMeters[0].WaterMeterData.WMTypeId) || (rev_WZTyp != b.WaterMeters[0].WaterMeterData.WMTypeRev) || oraDbTestInfos.Count == 0 || completeTestInfos == null)
if ((completeTestInfos == null) || (id_WZTyp != b.WaterMeters[0].WaterMeterData.WMTypeId) || (rev_WZTyp != b.WaterMeters[0].WaterMeterData.WMTypeRev))
{
id_WZTyp = b.WaterMeters[0].WaterMeterData.WMTypeId;
rev_WZTyp = b.WaterMeters[0].WaterMeterData.WMTypeRev;
SensusTestInfo[] ti = GetMatchingTestInfo(conn, b.WaterMeters[0].WaterMeterData.WMTypeId, b.WaterMeters[0].WaterMeterData.WMTypeRev);
///
/// Read 'incomplete' TestInfo from the database
///
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
oraDbTestInfos.Clear();
OracleDataReader dr = cmd1.ExecuteReader();
while (dr.Read())
if (ti != null)
{
int pruefungsNr = dr.GetInt32(0);
double errLimHi = dr.GetDouble(1);
string qBezeichnung = dr.GetString(2);
oraDbTestInfos.Add(new SensusTestInfo(pruefungsNr, string.Empty, qBezeichnung, Range.R100_110, errLimHi.ToString()));
}
dr.Close();
///
/// Find a matching complete test info
///
oraDbTestInfos = oraDbTestInfos.OrderBy(x => x.PruefungsNr).ToList<SensusTestInfo>();
completeTestInfos = null;
for (LogType lt = 0; lt < LogType.Count; lt++)
{
SensusTestInfo[] myTinfos = SensusTestInfo.GetTestInfos(lt);
if (SensusTestInfo.AreCompatible(oraDbTestInfos, myTinfos))
{
completeTestInfos = myTinfos;
break;
}
}
foreach (var ti in oraDbTestInfos)
{
log.WarnFormat("VT_PRUEFPUNKT_SOLL_SD info : ID_WZTyp={0} Rev_WZTyp={1} PruefungsNr={2} PosFehlerKalt={3} QBezeichnung={4}",
id_WZTyp, rev_WZTyp, ti.PruefungsNr, ti.TestName, ti.QBezeichnung);
}
if (completeTestInfos != null)
{
foreach (var ti in completeTestInfos)
{
log.WarnFormat("Selected test info : ID_WZTyp={0} Rev_WZTyp={1} PruefungsNr={2} Str={3} QBezeichnung={4} Range={5} Test={6}",
id_WZTyp, rev_WZTyp, ti.PruefungsNr, ti.PruefungsNrStr, ti.QBezeichnung, ti.Range, ti.TestName);
}
completeTestInfos = ti;
id_WZTyp = b.WaterMeters[0].WaterMeterData.WMTypeId;
rev_WZTyp = b.WaterMeters[0].WaterMeterData.WMTypeRev;
}
else
{
@@ -516,43 +743,38 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
}
}
OracleCommand cmd = new OracleCommand("INSERT INTO VT_PRUEFREIHE_PD(" +
"ANBID, ID_Pruefstand, ID_WzPruefreihe, ID_WZTyp, Rev_WZTyp, Rev_Pruefstand_WZTyp, " +
"StartDatumZeit, EndDatumZeit, Betriebsart, QVzKontakt, " +
"FuellenBegDruck, DruckEvakVorne, DruckEvakHinten, DruckBeiAbpressen, " +
OracleCommand cmd = new OracleCommand("INSERT INTO VT_PRUEFREIHE_PD(ANBID, ID_Pruefstand, ID_WzPruefreihe, ID_WZTyp, " +
"Rev_WZTyp, Rev_Pruefstand_WZTyp, StartDatumZeit, EndDatumZeit, Betriebsart, " +
"QVzKontakt, FuellenBegDruck, DruckEvakVorne, DruckEvakHinten, DruckBeiAbpressen, " +
"Druckentwaessern, SpuelDurchflussIst, ProgrammVersion)" +
" VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17)", conn);
parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_StaraTura; cmd.Parameters.Add(parm); ///:1
parm = new OracleParameter("ID_Pruefstand", OracleDbType.Int32); parm.Value = 18000 + b.TestBenchId; cmd.Parameters.Add(parm); ///:2
parm = new OracleParameter("ID_WzPruefreihe", OracleDbType.Int32); parm.Value = b.BatchNr; cmd.Parameters.Add(parm); ///:3
parm = new OracleParameter("ID_WZTyp", OracleDbType.Int32); parm.Value = b.WaterMeters[0].WaterMeterData.WMTypeId; cmd.Parameters.Add(parm); ///:4
parm = new OracleParameter("Rev_WZTyp", OracleDbType.Int32); parm.Value = b.WaterMeters[0].WaterMeterData.WMTypeRev; cmd.Parameters.Add(parm); ///:5
parm = new OracleParameter("Rev_Pruefstand_WZTyp", OracleDbType.Int32); parm.Value = 1; cmd.Parameters.Add(parm); ///:6
parm = new OracleParameter("StartDatumZeit", OracleDbType.TimeStamp); parm.Value = b.StartTime; cmd.Parameters.Add(parm); ///:7
parm = new OracleParameter("EndDatumZeit", OracleDbType.TimeStamp); parm.Value = b.EndTime; cmd.Parameters.Add(parm); ///:8
parm = new OracleParameter("Betriebsart", OracleDbType.Varchar2); parm.Value = ""; cmd.Parameters.Add(parm); ///:9
parm = new OracleParameter("QVzKontakt", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:10
parm = new OracleParameter("FuellenBegDruck", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:11
parm = new OracleParameter("DruckEvakVorne", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:12
parm = new OracleParameter("DruckEvakHinten", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:13
parm = new OracleParameter("DruckBeiAbpressen", OracleDbType.Double); parm.Value = 0; /*TODO*/ cmd.Parameters.Add(parm); ///:14
parm = new OracleParameter("Druckentwaessern", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:15
parm = new OracleParameter("SpuelDurchflussIst", OracleDbType.Double); parm.Value = 0; /*TODO*/ cmd.Parameters.Add(parm); ///:16
parm = new OracleParameter("ProgrammVersion", OracleDbType.Varchar2); parm.Value = "TBF v." + b.ProgramVersion; cmd.Parameters.Add(parm); ///:17
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = Anbid_StaraTura });
cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Int32, Value = 18000 + b.TestBenchId });
cmd.Parameters.Add(new OracleParameter { ParameterName = "3", OracleDbType = OracleDbType.Int32, Value = b.BatchNr });
cmd.Parameters.Add(new OracleParameter { ParameterName = "4", OracleDbType = OracleDbType.Int32, Value = b.WaterMeters[0].WaterMeterData.WMTypeId });
cmd.Parameters.Add(new OracleParameter { ParameterName = "5", OracleDbType = OracleDbType.Int32, Value = b.WaterMeters[0].WaterMeterData.WMTypeRev });
cmd.Parameters.Add(new OracleParameter { ParameterName = "6", OracleDbType = OracleDbType.Int32, Value = 1 });
cmd.Parameters.Add(new OracleParameter { ParameterName = "7", OracleDbType = OracleDbType.TimeStamp, Value = b.StartTime });
cmd.Parameters.Add(new OracleParameter { ParameterName = "8", OracleDbType = OracleDbType.TimeStamp, Value = b.EndTime });
cmd.Parameters.Add(new OracleParameter { ParameterName = "9", OracleDbType = OracleDbType.Varchar2, Value = string.Empty });
cmd.Parameters.Add(new OracleParameter { ParameterName = "10", OracleDbType = OracleDbType.Double, Value = 0 });
cmd.Parameters.Add(new OracleParameter { ParameterName = "11", OracleDbType = OracleDbType.Double, Value = 0 });
cmd.Parameters.Add(new OracleParameter { ParameterName = "12", OracleDbType = OracleDbType.Double, Value = 0 });
cmd.Parameters.Add(new OracleParameter { ParameterName = "13", OracleDbType = OracleDbType.Double, Value = 0 });
cmd.Parameters.Add(new OracleParameter { ParameterName = "14", OracleDbType = OracleDbType.Double, Value = 0 }); /// TODO: DruckBeiAbpressen
cmd.Parameters.Add(new OracleParameter { ParameterName = "15", OracleDbType = OracleDbType.Double, Value = 0 });
cmd.Parameters.Add(new OracleParameter { ParameterName = "16", OracleDbType = OracleDbType.Double, Value = 0 }); /// TODO: SpuelDurchflussIst
cmd.Parameters.Add(new OracleParameter { ParameterName = "17", OracleDbType = OracleDbType.Varchar2, Value = string.Format("TBF v.{0}", b.ProgramVersion) });
cmd.ExecuteNonQuery(); /// Returns nr. of updated rows
foreach (var testInfo in completeTestInfos)
{
Results.Entities.TestRslt tr = b.GetTestRslt(testInfo.TestName, 0);
if (tr == null) tr = b.GetTestRslt(testInfo.TestName, 1); /// TODO: Remove this workaround for large watermeters with multiple parts at Q3
if (tr == null) continue;
double Q_ist = (tr.VolumeMaster != 0) ? (tr.FlowVolume * tr.VolumeCTV / tr.VolumeMaster) : (double)tr.FlowVolume;
OracleCommand cmd2 = new OracleCommand("INSERT INTO VT_PRUEFDURCHFLUSS_PD(" +
"ANBID, ID_Pruefstand, ID_WzPruefreihe, PruefungsNr, " +
@@ -562,36 +784,29 @@ namespace TBF.BenchControl.Output.DB.SensusOracle
"TVWZ, IVWZ, Verwendeter_VZ, BeginnGewicht, EndGewicht)" +
" VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, " +
":16, :17, :18, :19, :20, :21, :22, :23)", conn);
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 = 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
parm = new OracleParameter("MinDurchfluss", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.lph, tr.FlowMin); cmd2.Parameters.Add(parm); ///:7
parm = new OracleParameter("MaxDurchfluss", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.lph, tr.FlowMax); cmd2.Parameters.Add(parm); ///:8
double Q_ist = (tr.VolumeMaster != 0) ? (tr.FlowVolume * tr.VolumeCTV / tr.VolumeMaster) : (double)tr.FlowVolume;
parm = new OracleParameter("Q_ist", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.lph, Q_ist); cmd2.Parameters.Add(parm); ///:9
parm = new OracleParameter("KFaktor", OracleDbType.Double); parm.Value = tr.ConstMaster; cmd2.Parameters.Add(parm); ///:10
parm = new OracleParameter("Q_VZ", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.lph, tr.FlowVolume); cmd2.Parameters.Add(parm); ///:11
parm = new OracleParameter("F_VZ", OracleDbType.Double); parm.Value = tr.ErrorMaster; cmd2.Parameters.Add(parm); ///:12
parm = new OracleParameter("RegelEinstellZeit", OracleDbType.Double); parm.Value = (double)tr.FlowSetTime; cmd2.Parameters.Add(parm); ///:13
parm = new OracleParameter("Drehzahl", OracleDbType.Int32); parm.Value = 0; /* TODO */ cmd2.Parameters.Add(parm); ///:14
///
parm = new OracleParameter("BeginnDruck_Vorne", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.bar, tr.PressUpStart); cmd2.Parameters.Add(parm); ///:15
parm = new OracleParameter("BeginnDruck_Hinten", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.bar, tr.PressDownStart); cmd2.Parameters.Add(parm); ///:16
parm = new OracleParameter("EndDruck_Vorne", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.bar, tr.PressUpEnd); cmd2.Parameters.Add(parm); ///:17
parm = new OracleParameter("EndDruck_Hinten", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.bar, tr.PressDownEnd); cmd2.Parameters.Add(parm); ///:18
///
parm = new OracleParameter("TVWZ", OracleDbType.Double); parm.Value = tr.TestTime; cmd2.Parameters.Add(parm); ///:19
parm = new OracleParameter("IVWZ", OracleDbType.Int32); parm.Value = tr.PulsesMaster; cmd2.Parameters.Add(parm); ///:20
parm = new OracleParameter("Verwendeter_VZ", OracleDbType.Int32); parm.Value = 0; /* TODO */ cmd2.Parameters.Add(parm); ///:21
parm = new OracleParameter("BeginnGewicht", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.kg, tr.MassStart); cmd2.Parameters.Add(parm); ///:22
parm = new OracleParameter("EndGewicht", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.kg, tr.MassEnd); cmd2.Parameters.Add(parm); ///:23
cmd.Parameters.Add(new OracleParameter { ParameterName = "1", OracleDbType = OracleDbType.Int32, Value = Anbid_StaraTura });
cmd.Parameters.Add(new OracleParameter { ParameterName = "2", OracleDbType = OracleDbType.Int32, Value = 18000 + b.TestBenchId });
cmd.Parameters.Add(new OracleParameter { ParameterName = "3", OracleDbType = OracleDbType.Int32, Value = b.BatchNr });
cmd.Parameters.Add(new OracleParameter { ParameterName = "4", OracleDbType = OracleDbType.Int32, Value = testInfo.PruefungsNr });
cmd.Parameters.Add(new OracleParameter { ParameterName = "5", OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.l, tr.VolumeCTV) });
cmd.Parameters.Add(new OracleParameter { ParameterName = "6", OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.kg, tr.MassEnd-tr.MassStart) });
cmd.Parameters.Add(new OracleParameter { ParameterName = "7", OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, tr.FlowMin) });
cmd.Parameters.Add(new OracleParameter { ParameterName = "8", OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, tr.FlowMax) });
cmd.Parameters.Add(new OracleParameter { ParameterName = "9", OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, Q_ist) });
cmd.Parameters.Add(new OracleParameter { ParameterName = "10", OracleDbType = OracleDbType.Double, Value = tr.ConstMaster });
cmd.Parameters.Add(new OracleParameter { ParameterName = "11", OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, tr.FlowVolume) });
cmd.Parameters.Add(new OracleParameter { ParameterName = "12", OracleDbType = OracleDbType.Double, Value = tr.ErrorMaster });
cmd.Parameters.Add(new OracleParameter { ParameterName = "13", OracleDbType = OracleDbType.Double, Value = (double)tr.FlowSetTime });
cmd.Parameters.Add(new OracleParameter { ParameterName = "14", OracleDbType = OracleDbType.Int32, Value = 0 }); /// TODO
cmd.Parameters.Add(new OracleParameter { ParameterName = "15", OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.bar, tr.PressUpStart) });
cmd.Parameters.Add(new OracleParameter { ParameterName = "16", OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.bar, tr.PressDownStart) });
cmd.Parameters.Add(new OracleParameter { ParameterName = "17", OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.bar, tr.PressUpEnd) });
cmd.Parameters.Add(new OracleParameter { ParameterName = "18", OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.bar, tr.PressDownEnd) });
cmd.Parameters.Add(new OracleParameter { ParameterName = "19", OracleDbType = OracleDbType.Double, Value = tr.TestTime });
cmd.Parameters.Add(new OracleParameter { ParameterName = "20", OracleDbType = OracleDbType.Int32, Value = tr.PulsesMaster });
cmd.Parameters.Add(new OracleParameter { ParameterName = "21", OracleDbType = OracleDbType.Int32, Value = 0 }); /// TODO
cmd.Parameters.Add(new OracleParameter { ParameterName = "22", OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.kg, tr.MassStart) });
cmd.Parameters.Add(new OracleParameter { ParameterName = "23", OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.kg, tr.MassEnd) });
cmd2.ExecuteNonQuery(); /// Returns nr. of updated rows
}