From 607dbaacb13723a064bb6cccdaa8d556744ce6cc Mon Sep 17 00:00:00 2001 From: Milan Hanajik Date: Fri, 10 Nov 2017 10:32:43 +0100 Subject: [PATCH] Oracle DB changes from iPerl-12 branch, WMType_ID/Rev dropped from WaterMeter, CheckBarcodeScanning operation commented out. --- .../BenchControl/DB/SensusOracle/Database.cs | 156 +++++++++++++++--- TestBenchFramework/BenchControl/Events.cs | 10 +- .../BenchControl/Sequences/MainSeq.cs | 9 - .../iPerlCommunicationForm.cs | 4 +- .../WaterMeters/WaterMeter/WaterMeter.cs | 5 - 5 files changed, 142 insertions(+), 42 deletions(-) diff --git a/TestBenchFramework/BenchControl/DB/SensusOracle/Database.cs b/TestBenchFramework/BenchControl/DB/SensusOracle/Database.cs index 8e8a7e211..2d5aa4793 100644 --- a/TestBenchFramework/BenchControl/DB/SensusOracle/Database.cs +++ b/TestBenchFramework/BenchControl/DB/SensusOracle/Database.cs @@ -27,10 +27,23 @@ namespace TBF.BenchControl.DB.SensusOracle private static readonly ILog log = LogManager.GetLogger(typeof(Database)); public override string ToString() { return string.Format("Sensus-Oracle-Database({0})", Cfg.ToString(1)); } - const int Anbid_StaraTura = 4; + + enum CurrentOp + { + None, + CheckBarcodeScanning, + WriteResults, + } + CurrentOp currentOp; + bool opCompleted; + bool anyError; + + + /// + /// iPerls to verify + /// + GenericDevices.IRegisterReader[] iperlHeads; - public static DatabaseCfg DBCfg; - string separatorStr; /// /// Result items to print @@ -47,6 +60,12 @@ namespace TBF.BenchControl.DB.SensusOracle StreamWriter logger; /// Logs specified by LU + const int Anbid_StaraTura = 4; + + public static DatabaseCfg DBCfg; + string separatorStr; + + /// /// 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 @@ -73,6 +92,8 @@ namespace TBF.BenchControl.DB.SensusOracle { DBCfg = cfg as DatabaseCfg; + currentOp = CurrentOp.None; + switch (DBCfg.Separator) { default: @@ -211,6 +232,7 @@ namespace TBF.BenchControl.DB.SensusOracle return string.Format("{0}{1}_{2}.log", directory, time.Hour.ToString("D2"), time.Minute.ToString("D2")); } + /// /// Writes the test cycle results into a file, Events: Event.ResultsWritten /// @@ -219,7 +241,12 @@ namespace TBF.BenchControl.DB.SensusOracle /// Reference to the operation public IOperation WriteResultsOp(Results.Entities.Batch batch) { - this.batch = batch; + if (currentOp != CurrentOp.None) + throw new Exception("Sequence error"); + else + currentOp = CurrentOp.WriteResults; + + this.batch = batch; string fname = GetLogFileName(batch.StartTime); @@ -233,43 +260,81 @@ namespace TBF.BenchControl.DB.SensusOracle log.ErrorFormat("Was not able to open LU log file {0}", fname); } - return this; + return this; } + public IOperation CheckBarcodeScanningOp(GenericDevices.IRegisterReader[] iperlHeads) + { + if (currentOp != CurrentOp.None) + throw new Exception("Sequence error"); + else + currentOp = CurrentOp.CheckBarcodeScanning; + + this.iperlHeads = iperlHeads; + + return this; + } + /// Start this operation public void Start() { - } + opCompleted = false; + anyError = false; + } /// Run this operation /// Event.ResultsWritten or Event.Error public Event Run() { - if (batch.WaterMeters.Count == 0) return Event.ResultsWritten; - - bool anyError = false; + if (currentOp == CurrentOp.WriteResults) + { + if (!opCompleted) + { + if (batch.WaterMeters.Count == 0) return Event.ResultsWritten; #if ORACLE_DB - if (DBCfg.DebugLevel != DebugMode.Simulate && connection != null) - { - if (WriteResultsToDatabase(connection, batch, false) == Retv.Error) anyError = true; - } + if (DBCfg.DebugLevel != DebugMode.Simulate && connection != null) + { + if (WriteResultsToDatabase(connection, batch, false) == Retv.Error) anyError = true; + } #endif + WriteLogsToDisk(logger, batch); - WriteLogsToDisk(logger, batch); - - if (anyError) - { - return Event.ResultsNotWritten; - } - else - { - return Event.ResultsWritten; - } + opCompleted = true; + } + + if (anyError) + return Event.ResultsNotWritten; + else + return Event.ResultsWritten; + } + else if (currentOp == CurrentOp.CheckBarcodeScanning) + { + if (!opCompleted) + { +#if ORACLE_DB + if (DBCfg.DebugLevel != DebugMode.Simulate && connection != null) + { + if (CheckBarcodeScanning(connection, iperlHeads) == Retv.Error) anyError = true; ; + } +#endif + opCompleted = true; + } + + if (anyError) + return Event.CheckNotDone; + else + return Event.CheckDone; + } + else + { + return Event.None; + } } /// Stop this operation public void Stop() { + currentOp = CurrentOp.None; } @@ -665,9 +730,50 @@ namespace TBF.BenchControl.DB.SensusOracle } - #if ORACLE_DB - public static Retv WriteResultsToDatabase(OracleConnection conn, Results.Entities.Batch batch, bool safeMode) + public static Retv CheckBarcodeScanning(OracleConnection conn, GenericDevices.IRegisterReader[] iPerlHeads) + { + try + { + conn.Open(); /// Open the Oracle database + + foreach (var rr in iPerlHeads) + { + //WaterMeters.iPerl.WaterMeter iPerlHead = rr as WaterMeters.iPerl.WaterMeter; + + //if (iPerlHead != null) + //{ + // OracleCommand cmd = new OracleCommand("select * from IP_ENDTEST_PD where PCBNUMBER = :1 and TESTSTATIONNAME = :2", conn); + // OracleParameter param; + // param = new OracleParameter("PCBNUMBER", OracleDbType.Varchar2); param.Value = iPerlHead.SerialNr; cmd.Parameters.Add(param); + // param = new OracleParameter("TESTSTATIONNAME", OracleDbType.Varchar2); param.Value = "STAWL001"; cmd.Parameters.Add(param); + + // bool exists = false; /// true = RF_Power record exists + // OracleDataReader dr1 = cmd.ExecuteReader(); + // if (dr1.Read()) { exists = true; } + // dr1.Close(); + + // if (!exists) + // { + // iPerlHead.CommFailed = true; + // } + //} + } + } + catch (Exception exc) + { + log.ErrorFormat("Barcode scanning records were not checked: {1}", exc.Message); + + conn.Close(); + return Retv.Error; + } + + conn.Close(); + return Retv.OK; + } + + + public static Retv WriteResultsToDatabase(OracleConnection conn, Results.Entities.Batch batch, bool safeMode) { OracleTransaction transaction = null; diff --git a/TestBenchFramework/BenchControl/Events.cs b/TestBenchFramework/BenchControl/Events.cs index 26700e6c7..aca0e7168 100644 --- a/TestBenchFramework/BenchControl/Events.cs +++ b/TestBenchFramework/BenchControl/Events.cs @@ -1,5 +1,5 @@ /// -/// Copyright (c) 2013-2015 Sensus Metering Systems +/// Copyright (c) 2013-2017 Sensus Metering Systems /// namespace TBF.BenchControl { @@ -159,7 +159,7 @@ namespace TBF.BenchControl /// Timer events TimerExpired, - /// IDC camera events + /// Process camera events CameraBusy, GrabPassed, GrabFailed, @@ -188,6 +188,12 @@ namespace TBF.BenchControl OuterLoopStart, OuterLoopNext, OuterLoopEnd, + + /// Production monitoring + CheckDone, + CheckNotDone, + + /// Error evaluation ErrorConditionsDone, } } diff --git a/TestBenchFramework/BenchControl/Sequences/MainSeq.cs b/TestBenchFramework/BenchControl/Sequences/MainSeq.cs index 17b413b9f..c3dc6bd9a 100644 --- a/TestBenchFramework/BenchControl/Sequences/MainSeq.cs +++ b/TestBenchFramework/BenchControl/Sequences/MainSeq.cs @@ -1336,15 +1336,6 @@ namespace TBF.BenchControl.Sequences waterMeterData[wmNr].MetrologicalClassAux = WaterMeters[auxIx].MetrologicalClass; waterMeterData[wmNr].ApprovalInfoAux = WaterMeters[auxIx].ApprovalInfo; } - -#if ORACLE_DB - BenchControl.WaterMeters.WaterMeter.WaterMeter iPerl = WaterMeters[wmNr] as BenchControl.WaterMeters.WaterMeter.WaterMeter; - if (iPerl != null) - { - waterMeterData[wmNr].WMTypeId = iPerl.WMType_ID; - waterMeterData[wmNr].WMTypeRev = iPerl.WMType_Rev; - } -#endif } /// Prepare empty results diff --git a/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs index e101e99a0..246850adc 100644 --- a/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs +++ b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs @@ -1840,7 +1840,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication if (meterRslt != null && iperlHeads[i] != null) { meterRslt.WaterMeter.SerialNr = iperlHeads[i].SerialNr; - meterRslt.Passed = (!iperlHeads[i].CommFailed && !iperlHeads[i].Disabled); + meterRslt.WaterMeter.WaterMeterData.WMTypeId = iperlHeads[i].WMType_ID; + meterRslt.WaterMeter.WaterMeterData.WMTypeRev = iperlHeads[i].WMType_Rev; + meterRslt.Passed = (!iperlHeads[i].CommFailed && !iperlHeads[i].Disabled); meterRslt.TestDone = true; } } diff --git a/TestBenchFramework/BenchControl/WaterMeters/WaterMeter/WaterMeter.cs b/TestBenchFramework/BenchControl/WaterMeters/WaterMeter/WaterMeter.cs index a28ac14c4..c40a493d9 100644 --- a/TestBenchFramework/BenchControl/WaterMeters/WaterMeter/WaterMeter.cs +++ b/TestBenchFramework/BenchControl/WaterMeters/WaterMeter/WaterMeter.cs @@ -70,11 +70,6 @@ namespace TBF.BenchControl.WaterMeters.WaterMeter public string FWVersion; #endif -#if ORACLE_DB - public int WMType_ID; /// Required by Oracle DB - public int WMType_Rev; /// Required by Oracle DB -#endif - /// Properties set by the Begin and the End form or the iPerl head public string SerialNr {