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:
@@ -11,6 +11,6 @@ namespace TBF.BenchControl.GenericDevices
|
||||
/// Reads information on start of a cycle, Events: Event.InfoRead
|
||||
/// </summary>
|
||||
/// <returns>Reference to the operation</returns>
|
||||
IOperation ReadStartInfoOp(Results.Entities.Batch batchResults);
|
||||
IOperation ReadStartInfoOp(Results.Entities.WaterMeter[] waterMeters);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@ namespace TBF.BenchControl.Output
|
||||
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
|
||||
}
|
||||
|
||||
@@ -141,6 +143,39 @@ namespace TBF.BenchControl.Output
|
||||
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"),
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,7 +91,136 @@ namespace TBF.BenchControl.Sequences
|
||||
simultWithEvacuationCfg = null;
|
||||
simultWithEvacuationTests = new List<Config.Entities.Test>();
|
||||
simultWithEvacuationParams = new List<Generic.ITestParams>();
|
||||
}
|
||||
|
||||
checkUiOp = new CheckUIOp(true); /// Running in almost all states
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Unconditionally wait for OK button
|
||||
/// </summary>
|
||||
void WaitForOkButton()
|
||||
{
|
||||
State.Create("MainSeq : Press OK to start the system")
|
||||
.AddOperation(new BenchControl.Operations.MessageBoxOp(Strings.Start_the_test_bench, System.Drawing.Color.OliveDrab))
|
||||
.EnterState();
|
||||
|
||||
while (!StateMachine.WaitRunDevsRunOps().Contains(Event.OK)) { }
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Unconditionally set valves to default position
|
||||
/// </summary>
|
||||
void SetValvesToDefaultState()
|
||||
{
|
||||
State.Create("MainSeq : Setting valves to default positions")
|
||||
.AddOperation(StateMachine.ControlBoard.SetValvesOp(StateMachine.DefaultValvesOpen, StateMachine.DefaultValvesClose))
|
||||
.EnterState();
|
||||
|
||||
while (StateMachine.WaitRunDevsRunOps().Contains(Event.ValvesBusy)) { }
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Test communication with all scales that support S/N read operation
|
||||
/// </summary>
|
||||
/// <param name="scaleName">Name of a scale that failed</param>
|
||||
/// <param name="message">Message in case of a failure</param>
|
||||
/// <returns>true = Test passed, all scales communicate OK</returns>
|
||||
bool TestCommunicationWithScales(out string scaleName, out string message)
|
||||
{
|
||||
///
|
||||
/// Read S/N-s from scales (cannot be stopped, but is limitted to Scales count x 3s (=timeout)
|
||||
///
|
||||
IScaleOrTank[] tanks = new IScaleOrTank[] { StateMachine.Tank1, StateMachine.Tank2, StateMachine.Tank3 };
|
||||
|
||||
foreach (var tank in tanks)
|
||||
{
|
||||
if (tank is IScale)
|
||||
{
|
||||
IScale scale = tank as IScale;
|
||||
string sn = string.Empty;
|
||||
IOperation getSNOp = scale.GetSerNumOp(ref sn);
|
||||
|
||||
if (getSNOp != null)
|
||||
{
|
||||
const int nrRetries = 3;
|
||||
|
||||
for (int i = 1; i <= nrRetries; i++)
|
||||
{
|
||||
IList<Event> e;
|
||||
bool error = false;
|
||||
bool timeout = false;
|
||||
|
||||
State.Create(string.Format("MainSeq : Reading S/N of scale {0} trial {1}", scale.Name, i))
|
||||
.AddOperation(getSNOp)
|
||||
.AddOperation(new Operations.TimerOp(2))
|
||||
.EnterState();
|
||||
do
|
||||
{
|
||||
e = StateMachine.WaitRunDevsRunOps();
|
||||
if (e.Contains(Event.Error))
|
||||
{
|
||||
if (i == nrRetries)
|
||||
{
|
||||
///
|
||||
/// All retries completed => the scale failed
|
||||
///
|
||||
scaleName = scale.Name;
|
||||
message = Strings.Scale_communication_error;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
/// The scale failed => try one more time
|
||||
error = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (e.Contains(Event.Busy) && e.Contains(Event.TimerExpired))
|
||||
{
|
||||
if (i == nrRetries)
|
||||
{
|
||||
///
|
||||
/// All retries completed, the scale failed
|
||||
///
|
||||
scaleName = scale.Name;
|
||||
message = Strings.Scale_communication_timeout;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
/// The scale failed => try one more time
|
||||
timeout = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
while (e.Contains(Event.Busy));
|
||||
|
||||
if (!error && !timeout)
|
||||
{
|
||||
/// This scale communicates OK, break "for (int i = ... " loop
|
||||
if (!string.IsNullOrEmpty(sn)) log.WarnFormat("Scale {0} : s/n = {1}", scale.Name, sn);
|
||||
break; ///
|
||||
}
|
||||
|
||||
/// Wait one state machine tick (1 second), kreep retrying, stay inside "for (int i = ... " loop
|
||||
State.Create(string.Format("MainSeq : Reading S/N of scale {0}", scale.Name)).EnterState();
|
||||
StateMachine.WaitRunDevsRunOps();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
///
|
||||
/// All scales communicate OK, test passed
|
||||
///
|
||||
scaleName = string.Empty;
|
||||
message = string.Empty;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
@@ -101,100 +230,21 @@ namespace TBF.BenchControl.Sequences
|
||||
/// <returns></returns>
|
||||
public IList<Event> Execute(Test dummyArg)
|
||||
{
|
||||
/// Operations running in more then one state
|
||||
checkUiOp = new CheckUIOp(true);
|
||||
|
||||
IList<Event> e;
|
||||
Selection selection;
|
||||
string selectedTestName;
|
||||
|
||||
ISession sessn = Config.FluentCommon.CreateSession(Users.Entities.DBKind.Config);
|
||||
StateMachine.LoadPathsAndTransitions(sessn); // TODO: Implement as an operation so that the worker thread is not blocked
|
||||
string selectedTestName;
|
||||
|
||||
Bridge.OnActivity(this, Strings.Starting_system);
|
||||
State.Create("MainSeq : Press OK to start the system")
|
||||
.AddOperation(new BenchControl.Operations.MessageBoxOp(Strings.Start_the_test_bench, System.Drawing.Color.OliveDrab))
|
||||
.EnterState();
|
||||
while (!StateMachine.WaitRunDevsRunOps().Contains(Event.OK));
|
||||
|
||||
State.Create("MainSeq : Setting valves to default positions")
|
||||
.AddOperation(StateMachine.ControlBoard.SetValvesOp(StateMachine.DefaultValvesOpen, StateMachine.DefaultValvesClose))
|
||||
.EnterState();
|
||||
while (StateMachine.WaitRunDevsRunOps().Contains(Event.ValvesBusy));
|
||||
|
||||
|
||||
///
|
||||
/// Read S/N-s from scales (cannot be stopped, but is limitted to Scales count x 3s (=timeout)
|
||||
///
|
||||
IScaleOrTank[] tanks = new IScaleOrTank[] { StateMachine.Tank1, StateMachine.Tank2, StateMachine.Tank3 };
|
||||
|
||||
foreach (var tank in tanks)
|
||||
{
|
||||
if (tank is IScale)
|
||||
{
|
||||
IScale scale = tank as IScale;
|
||||
string sn = string.Empty;
|
||||
IOperation getSNOp = scale.GetSerNumOp(ref sn);
|
||||
|
||||
if (getSNOp != null)
|
||||
{
|
||||
const int nrRetries = 3;
|
||||
|
||||
for (int i = 1; i <= nrRetries; i++)
|
||||
{
|
||||
bool error = false;
|
||||
bool timeout = false;
|
||||
|
||||
State.Create(string.Format("MainSeq : Reading S/N of scale {0} trial {1}", scale.Name, i))
|
||||
.AddOperation(getSNOp)
|
||||
.AddOperation(new Operations.TimerOp(2))
|
||||
.EnterState();
|
||||
do
|
||||
{
|
||||
e = StateMachine.WaitRunDevsRunOps();
|
||||
if (e.Contains(Event.Error))
|
||||
{
|
||||
if (i == nrRetries)
|
||||
{
|
||||
Bridge.OnError(this, string.Format("{0} : {1}", scale.Name, Strings.Scale_communication_error));
|
||||
goto error;
|
||||
}
|
||||
else
|
||||
{
|
||||
error = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (e.Contains(Event.Busy) && e.Contains(Event.TimerExpired))
|
||||
{
|
||||
if (i == nrRetries)
|
||||
{
|
||||
Bridge.OnError(this, string.Format("{0} : {1}", scale.Name, Strings.Scale_communication_timeout));
|
||||
goto error;
|
||||
}
|
||||
else
|
||||
{
|
||||
timeout = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
while (e.Contains(Event.Busy));
|
||||
|
||||
if (!error && !timeout)
|
||||
{
|
||||
/// Successful
|
||||
if (!string.IsNullOrEmpty(sn)) log.WarnFormat("Scale {0} : s/n = {1}", scale.Name, sn);
|
||||
break;
|
||||
}
|
||||
|
||||
State.Create(string.Format("MainSeq : Reading S/N of scale {0}", scale.Name)).EnterState();
|
||||
StateMachine.WaitRunDevsRunOps();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
WaitForOkButton();
|
||||
SetValvesToDefaultState();
|
||||
|
||||
string scaleName;
|
||||
string message;
|
||||
if (TestCommunicationWithScales(out scaleName, out message) == false)
|
||||
{
|
||||
Bridge.OnError(this, string.Format("{0} : {1}", scaleName, message));
|
||||
goto error;
|
||||
}
|
||||
|
||||
///
|
||||
/// Enable stop draining buttons
|
||||
@@ -315,6 +365,7 @@ namespace TBF.BenchControl.Sequences
|
||||
}
|
||||
while (e.Contains(Event.Busy));
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------
|
||||
Bridge.OnActivity(this, Strings.Measuring_the_weight);
|
||||
State.Create("MainSeq : Mesuring the weight for the 1st time")
|
||||
@@ -541,7 +592,7 @@ namespace TBF.BenchControl.Sequences
|
||||
{
|
||||
try
|
||||
{
|
||||
IOperation op = infoReader.ReadStartInfoOp(ProcessData.BatchRslts.Batch);
|
||||
IOperation op = infoReader.ReadStartInfoOp(ProcessData.BatchRslts.WaterMeters);
|
||||
if (op != null) readingStartInfo.AddOperation(op);
|
||||
}
|
||||
catch (Exception exc)
|
||||
|
||||
@@ -260,6 +260,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
|
||||
public const string WriteCalibrationV4FactorsStr = "Write calibration_V4";
|
||||
public const string NormalizeCalibrationFactorStr = "Normalize calibration factor";
|
||||
public const string NormalizeCalibrationV4FactorsStr = "Normalize calibration_V4";
|
||||
public const string ReadQ2CorrectionStr = "Read Q2 corrections";
|
||||
public const string ResetQ2CorrectionStr = "Reset Q2 correction";
|
||||
public const string WriteQ2CorrectionStr = "Write Q2 correction";
|
||||
public const string WriteQ2CorrectionAltStr = "Write Q2 correction Alt";
|
||||
@@ -770,6 +771,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
|
||||
else if (activity.ToLower().Contains(WriteQ2CorrectionGreeceStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, ref resultStr, Q2CorrType.Greece, activity.Substring(WriteQ2CorrectionGreeceStr.Length).Trim(), true);
|
||||
else if (activity.ToLower().Contains(WriteQ2CorrectionRLStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, ref resultStr, Q2CorrType.RL, activity.Substring(WriteQ2CorrectionRLStr.Length).Trim(), true);
|
||||
else if (activity.ToLower().Contains(WriteQ2CorrectionLRStr.ToLower())) error = WriteQ2Correction(threadID, ihead, wm, ref resultStr, Q2CorrType.LR, activity.Substring(WriteQ2CorrectionLRStr.Length).Trim(), true);
|
||||
else if (activity.ToLower().Equals(ReadQ2CorrectionStr.ToLower())) error = ReadQ2Correction(threadID, ihead, wm, ref resultStr);
|
||||
else if (activity.ToLower().Equals(Reset2HzCorrectionStr.ToLower())) error = Reset2HzCorrection(threadID, ihead, wm, ref resultStr);
|
||||
else if (activity.ToLower().Equals(Write2HzCorrectionStr.ToLower())) error = Write2HzCorrection(threadID, ihead, wm, ref resultStr);
|
||||
else
|
||||
@@ -1628,6 +1630,46 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Reset both Q2 correction factors in the memory to 0.
|
||||
/// Read them back to verify factors were written correctly.
|
||||
/// </summary>
|
||||
/// <param name="ihead">Water meter object</param>
|
||||
/// <param name="resultStr">String passed to caller</param>
|
||||
/// <returns>true on success</returns>
|
||||
static CommErr ReadQ2Correction(int threadId, IperlHead ihead, Results.Entities.WaterMeter wm, ref string resultStr)
|
||||
{
|
||||
if (ihead.CommFailed) return CommErr.CommFailed;
|
||||
|
||||
if (OpenPort(threadId, ihead) != 0) return CommErr.OpenPort; /// Open RFID port
|
||||
|
||||
CommErr error = CommErr.Read;
|
||||
|
||||
/// Write zero Q2 correction
|
||||
byte[] rdData = null;
|
||||
///
|
||||
for (int j = 0; j < cfg.MaxCommRetries; j++)
|
||||
{
|
||||
if (0 == ReadRequestPort(threadId, ihead, MessageID.MetrologyMemory, Q2CorrFactorsAddr, 2, out rdData, cfg.CommTimeout))
|
||||
{
|
||||
error = CommErr.None;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ((error == CommErr.None) && (rdData != null) && (rdData.Length == 2))
|
||||
{
|
||||
resultStr = "Q2 corrections successfully read";
|
||||
ihead.Q2CorrLR = rdData[0];
|
||||
ihead.Q2CorrRL = rdData[1];
|
||||
}
|
||||
|
||||
ClosePort(threadId, ihead); /// Close RFID port
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Reset both Q2 correction factors in the memory to 0.
|
||||
/// Read them back to verify factors were written correctly.
|
||||
|
||||
@@ -51,6 +51,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
|
||||
retVal.Add(iPerlCommunicationForm.ReadCalibrationV4Str);
|
||||
retVal.Add(iPerlCommunicationForm.NormalizeCalibrationFactorStr);
|
||||
retVal.Add(iPerlCommunicationForm.NormalizeCalibrationV4FactorsStr);
|
||||
retVal.Add(iPerlCommunicationForm.ReadQ2CorrectionStr);
|
||||
retVal.Add(iPerlCommunicationForm.ResetQ2CorrectionStr);
|
||||
retVal.Add(iPerlCommunicationForm.WriteCalibrationFactorStr);
|
||||
retVal.Add(iPerlCommunicationForm.WriteCalibrationV4FactorsStr);
|
||||
|
||||
Reference in New Issue
Block a user