diff --git a/TestBenchFramework/BenchControl/DataEntry/iPerl/EntryForm.cs b/TestBenchFramework/BenchControl/DataEntry/iPerl/EntryForm.cs
index 47e490b00..a3e111c8e 100644
--- a/TestBenchFramework/BenchControl/DataEntry/iPerl/EntryForm.cs
+++ b/TestBenchFramework/BenchControl/DataEntry/iPerl/EntryForm.cs
@@ -226,45 +226,7 @@ namespace TBF.BenchControl.DataEntry.iPerl
{
foreach (var wm in batchResults.WaterMeters)
{
- if (wm != null && !wm.Disabled)
- {
- wm.PurchaseOrder = PurchaseOrder;
-
- if (Sequences.SequenceBase.WaterMeters != null &&
- wm.WMPosition > 0 &&
- wm.WMPosition <= Sequences.SequenceBase.WaterMeters.Count)
- {
- WaterMeters.iPerl.WaterMeter iPerl = Sequences.SequenceBase.WaterMeters[wm.WMPosition - 1] as WaterMeters.iPerl.WaterMeter;
- if (iPerl != null)
- {
-#if IPERL
- wm.OrigCalibFactor = iPerl.OriginalCalibFactor;
- wm.CalibFactor = iPerl.CalibrationFactor;
- wm.Q2ErrWOCorrection = iPerl.Q2ErrorWOCorrection;
- wm.Q2CorrectionDone = iPerl.Q2CorrectionDone;
- wm.Q2Correction = iPerl.Q2Correction;
- wm.Q2CorrRFlow = iPerl.Q2CorrRFlow;
- wm.Q2CorrLFlow = iPerl.Q2CorrLFlow;
- wm.Diff2Hz8Hz = iPerl.Diff2Hz8Hz;
- wm.Hz2CorrectionDone = iPerl.Hz2CorrectionDone;
- wm.Hz2Correction = iPerl.Hz2CorrectionFactor;
-
- if (iPerl.CalibrationStruct == null)
- {
- wm.Q2CorrFlowRight = 0;
- }
- else if (iPerl.CalibrationStruct.FlowArrow == WaterMeters.iPerl.FlowArrow.Left)
- {
- wm.Q2CorrFlowRight = iPerl.PositiveCounting ? 1 : 2;
- }
- else
- {
- wm.Q2CorrFlowRight = iPerl.PositiveCounting ? 2 : 1;
- }
-#endif
- }
- }
- }
+ if (wm != null && !wm.Disabled) wm.PurchaseOrder = PurchaseOrder;
}
}
}
diff --git a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderFactory.cs b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderFactory.cs
index bb11a1d1d..25d593013 100644
--- a/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderFactory.cs
+++ b/TestBenchFramework/BenchControl/Elde/FixedStartRegisterReader/RegisterReaderFactory.cs
@@ -8,7 +8,7 @@ namespace TBF.BenchControl.Elde.FixedStartRegisterReader
{
public class RegisterReaderFactory : IComponentFactory
{
- public string ClassName { get { return "Fixed-Start-Register-Reader"; } }
+ public string ClassName { get { return "RegisterReader for standing start/stop"; } }
public void ResetStaticProperties() { RegisterReader.ResetStaticProperties(); }
diff --git a/TestBenchFramework/BenchControl/Sequences/MainSeq.cs b/TestBenchFramework/BenchControl/Sequences/MainSeq.cs
index bcfb93196..22c47c877 100644
--- a/TestBenchFramework/BenchControl/Sequences/MainSeq.cs
+++ b/TestBenchFramework/BenchControl/Sequences/MainSeq.cs
@@ -529,9 +529,9 @@ namespace TBF.BenchControl.Sequences
foreach (var rr in sensPath.RegisterReaders)
{
- if ((rr is WaterMeters.iPerl.WaterMeter) && (BenchInfo != null))
+ if (rr is TestMethods.iPerlCommunication.iPerlHead.IperlHead && BenchInfo != null)
{
- (rr as WaterMeters.iPerl.WaterMeter).BenchName = BenchInfo.TestBenchName;
+ (rr as TestMethods.iPerlCommunication.iPerlHead.IperlHead).BenchName = BenchInfo.TestBenchName;
}
}
@@ -671,9 +671,9 @@ namespace TBF.BenchControl.Sequences
foreach (var rr in sensPath.RegisterReaders)
{
- if ((rr is WaterMeters.iPerl.WaterMeter) && (BenchInfo != null))
+ if ((rr is TestMethods.iPerlCommunication.iPerlHead.IperlHead) && (BenchInfo != null))
{
- (rr as WaterMeters.iPerl.WaterMeter).BenchName = BenchInfo.TestBenchName;
+ (rr as TestMethods.iPerlCommunication.iPerlHead.IperlHead).BenchName = BenchInfo.TestBenchName;
}
}
@@ -766,9 +766,9 @@ namespace TBF.BenchControl.Sequences
foreach (var rr in sensPath.RegisterReaders)
{
- if ((rr is WaterMeters.iPerl.WaterMeter) && (BenchInfo != null))
+ if ((rr is TestMethods.iPerlCommunication.iPerlHead.IperlHead) && (BenchInfo != null))
{
- (rr as WaterMeters.iPerl.WaterMeter).BenchName = BenchInfo.TestBenchName;
+ (rr as TestMethods.iPerlCommunication.iPerlHead.IperlHead).BenchName = BenchInfo.TestBenchName;
}
}
diff --git a/TestBenchFramework/BenchControl/TbfComponents.cs b/TestBenchFramework/BenchControl/TbfComponents.cs
index f395d2c40..4b568cb7f 100644
--- a/TestBenchFramework/BenchControl/TbfComponents.cs
+++ b/TestBenchFramework/BenchControl/TbfComponents.cs
@@ -39,7 +39,6 @@ namespace TBF.BenchControl
Factories.Add(new Dummy.RegulValve.Factory());
Factories.Add(new Dummy.Valve.Factory());
Factories.Add(new Elde.Diverter.DiverterFactory());
- Factories.Add(new Elde.FixedStartRegisterReader.RegisterReaderFactory());
Factories.Add(new Elde.FlowMeter.FlowMeterFactory());
Factories.Add(new Elde.FlowMeterTwins.FlowMeterFactory());
Factories.Add(new TestMethods.Adjustment.Factory());
@@ -66,7 +65,6 @@ namespace TBF.BenchControl
Factories.Add(new DataEntry.WMStates.EntryFormFactory());
Factories.Add(new Ambient.Comet.Factory());
Factories.Add(new Ambient.Greco.Factory());
- Factories.Add(new WaterMeters.iPerl.WaterMeterFactory()); /// iPerl
Factories.Add(new Keithley.Multimeter_2010_RS232.Factory()); /// Keithley.Multimeter_2010_RS232
Factories.Add(new Keithley.TempMeter.Factory()); /// Keithley.TempMeter
Factories.Add(new ResultsPrinters.LabelPrinter.PrinterFactory()); /// LabelPrinter
@@ -102,6 +100,8 @@ namespace TBF.BenchControl
Factories.Add(new Elde.PumpWithFM.PumpFactory());
Factories.Add(new Elde.PumpTandem.PumpFactory());
Factories.Add(new Elde.RegisterReader.Factory());
+ Factories.Add(new Elde.FixedStartRegisterReader.RegisterReaderFactory());
+ Factories.Add(new TestMethods.iPerlCommunication.iPerlHead.Factory()); /// iPerl head
Factories.Add(new Elde.RegulValve.RegulValveFactory());
Factories.Add(new Elde.RegulValveTandem.RegulValveTandemFactory());
Factories.Add(new ResultsPrinters.Cevak.PrinterFactory());
diff --git a/TestBenchFramework/BenchControl/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs b/TestBenchFramework/BenchControl/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs
index 97d2cf1d6..e70382707 100644
--- a/TestBenchFramework/BenchControl/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/CombinedWithDetection/CombinedWithDetectionSeq.cs
@@ -57,14 +57,14 @@ namespace TBF.BenchControl.TestMethods.CombinedWithDetection
for (int i = 0; i < Config.Data.WMsCount; i++)
{
- WaterMeters.iPerl.WaterMeter iPerl = ((sensPath.RegisterReaders != null) && (i < sensPath.RegisterReaders.Length))
- ? (sensPath.RegisterReaders[i] as WaterMeters.iPerl.WaterMeter)
- : null;
+ TestMethods.iPerlCommunication.iPerlHead.IperlHead iPerl = ((sensPath.RegisterReaders != null) && (i < sensPath.RegisterReaders.Length))
+ ? (sensPath.RegisterReaders[i] as TestMethods.iPerlCommunication.iPerlHead.IperlHead)
+ : null;
if (iPerl != null)
{
/// TODO: Reimplement
//iPerl.LastTestResult = meterRslt; /// Save this water meter test result to iPerl WM
- iPerl.NominalTestFlow = 500.0 * (double)(test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
+ iPerl.NominalTestFlowLph = 500.0 * (double)(test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
}
}
diff --git a/TestBenchFramework/BenchControl/TestMethods/Endurance/EnduranceSeq.cs b/TestBenchFramework/BenchControl/TestMethods/Endurance/EnduranceSeq.cs
index 7b224e7a6..004208b12 100644
--- a/TestBenchFramework/BenchControl/TestMethods/Endurance/EnduranceSeq.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/Endurance/EnduranceSeq.cs
@@ -219,8 +219,11 @@ namespace TBF.BenchControl.TestMethods.Endurance
foreach (var rr in sensPath.RegisterReaders)
{
- if (rr is WaterMeters.iPerl.WaterMeter) (rr as WaterMeters.iPerl.WaterMeter).TestName = test.Name;
- }
+ if (rr is TestMethods.iPerlCommunication.iPerlHead.IperlHead)
+ {
+ (rr as TestMethods.iPerlCommunication.iPerlHead.IperlHead).TestName = test.Name;
+ }
+ }
/// Measurement loop - preparation
@@ -336,7 +339,7 @@ namespace TBF.BenchControl.TestMethods.Endurance
Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single);
GenericDevices.IRegisterReader regReader = sensPath.RegisterReaders[i];
- WaterMeters.iPerl.WaterMeter iPerl = regReader as WaterMeters.iPerl.WaterMeter;
+ TestMethods.iPerlCommunication.iPerlHead.IperlHead iPerl = regReader as TestMethods.iPerlCommunication.iPerlHead.IperlHead;
if (meterRslt != null && regReader != null)
{
@@ -354,9 +357,6 @@ namespace TBF.BenchControl.TestMethods.Endurance
meterRslt.VolumeMeter = Math.Abs(iPerl.VolumeLtrEnd - iPerl.VolumeLtrStart);
meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime;
iPerl.VolumeLtrRef = meterRslt.VolumeRef;
- iPerl.LastTestResult2 = iPerl.LastTestResult; /// Save shift previous test result
- iPerl.LastTestResult = meterRslt; /// Save this test result
- iPerl.NominalTestFlow = 500.0 * (test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
}
else
{
@@ -371,7 +371,14 @@ namespace TBF.BenchControl.TestMethods.Endurance
meterRslt.Passed = (meterRslt.Error >= test.ErrLimLo + test.Uncertainty)
&& (meterRslt.Error <= test.ErrLimHi - test.Uncertainty);
meterRslt.TestDone = true;
- }
+
+ if (iPerl != null)
+ {
+ iPerl.LastTestResult2 = iPerl.LastTestResult; /// Save shift previous test result
+ iPerl.LastTestResult = meterRslt; /// Save this test result
+ iPerl.NominalTestFlowLph = 500.0 * (test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
+ }
+ }
}
}
diff --git a/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs b/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs
index a19e12e85..b100052e6 100644
--- a/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/FlyingStart/FlyingStartSeq.cs
@@ -64,14 +64,14 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
for (int i = 0; i < Config.Data.WMsCount; i++)
{
- WaterMeters.iPerl.WaterMeter iPerl = ((sensPath.RegisterReaders != null) && (i < sensPath.RegisterReaders.Length))
- ? (sensPath.RegisterReaders[i] as WaterMeters.iPerl.WaterMeter)
- : null;
+ TestMethods.iPerlCommunication.iPerlHead.IperlHead iPerl = ((sensPath.RegisterReaders != null) && (i < sensPath.RegisterReaders.Length))
+ ? (sensPath.RegisterReaders[i] as TestMethods.iPerlCommunication.iPerlHead.IperlHead)
+ : null;
if (iPerl != null)
{
/// TODO: Reimplement
//iPerl.LastTestResult = meterRslt; /// Save this water meter test result to iPerl WM
- iPerl.NominalTestFlow = 500.0 * (double)(test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
+ iPerl.NominalTestFlowLph = 500.0 * (double)(test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
}
}
@@ -312,8 +312,11 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
foreach (var rr in sensPath.RegisterReaders)
{
- if (rr is WaterMeters.iPerl.WaterMeter) (rr as WaterMeters.iPerl.WaterMeter).TestName = test.Name;
- }
+ if (rr is TestMethods.iPerlCommunication.iPerlHead.IperlHead)
+ {
+ (rr as TestMethods.iPerlCommunication.iPerlHead.IperlHead).TestName = test.Name;
+ }
+ }
/// Measurement loop - preparation
@@ -522,7 +525,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single);
GenericDevices.IRegisterReader regReader = sensPath.RegisterReaders[i];
- WaterMeters.iPerl.WaterMeter iPerl = regReader as WaterMeters.iPerl.WaterMeter;
+ TestMethods.iPerlCommunication.iPerlHead.IperlHead iPerl = regReader as TestMethods.iPerlCommunication.iPerlHead.IperlHead;
GenericDevices.IRoi cameraRoi = regReader as GenericDevices.IRoi;
if (meterRslt != null && regReader != null)
@@ -541,15 +544,6 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
meterRslt.VolumeMeter = Math.Abs(iPerl.VolumeLtrEnd - iPerl.VolumeLtrStart);
meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime;
iPerl.VolumeLtrRef = meterRslt.VolumeRef;
-#if IPERL
- meterRslt.WaterMeter.CalibFactor = (iPerl.CalibrationStruct != null) ? iPerl.CalibrationStruct.Calibration : 0;
- meterRslt.WaterMeter.Q2Correction = iPerl.Q2Correction;
- meterRslt.WaterMeter.Q2CorrRFlow = iPerl.Q2CorrRFlow;
- meterRslt.WaterMeter.Q2CorrLFlow = iPerl.Q2CorrLFlow;
-#endif
- iPerl.LastTestResult2 = iPerl.LastTestResult; /// Save shift previous test result
- iPerl.LastTestResult = meterRslt; /// Save this test result
- iPerl.NominalTestFlow = 500.0 * (test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
}
else if (cameraRoi != null)
{
@@ -576,6 +570,13 @@ namespace TBF.BenchControl.TestMethods.FlyingStart
meterRslt.Passed = (meterRslt.Error >= test.ErrLimLo + test.Uncertainty)
&& (meterRslt.Error <= test.ErrLimHi - test.Uncertainty);
meterRslt.TestDone = true;
+
+ if (iPerl != null)
+ {
+ iPerl.LastTestResult2 = iPerl.LastTestResult; /// Save shift previous test result
+ iPerl.LastTestResult = meterRslt; /// Save this test result
+ iPerl.NominalTestFlowLph = 500.0 * (test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
+ }
}
}
}
diff --git a/TestBenchFramework/BenchControl/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs b/TestBenchFramework/BenchControl/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs
index 947a90dbc..18cba7b0c 100644
--- a/TestBenchFramework/BenchControl/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs
@@ -67,14 +67,14 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
for (int i = 0; i < Config.Data.WMsCount; i++)
{
- WaterMeters.iPerl.WaterMeter iPerl = ((sensPath.RegisterReaders != null) && (i < sensPath.RegisterReaders.Length))
- ? (sensPath.RegisterReaders[i] as WaterMeters.iPerl.WaterMeter)
- : null;
- if (iPerl != null)
+ TestMethods.iPerlCommunication.iPerlHead.IperlHead iPerl = ((sensPath.RegisterReaders != null) && (i < sensPath.RegisterReaders.Length))
+ ? (sensPath.RegisterReaders[i] as TestMethods.iPerlCommunication.iPerlHead.IperlHead)
+ : null;
+ if (iPerl != null)
{
/// TODO: Reimplement
//iPerl.LastTestResult = meterRslt; /// Save this water meter test result to iPerl WM
- iPerl.NominalTestFlow = 500.0 * (double)(test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
+ iPerl.NominalTestFlowLph = 500.0 * (double)(test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
}
}
@@ -531,8 +531,11 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
foreach (var rr in sensPath.RegisterReaders)
{
- if (rr is WaterMeters.iPerl.WaterMeter) (rr as WaterMeters.iPerl.WaterMeter).TestName = test.Name;
- }
+ if (rr is TestMethods.iPerlCommunication.iPerlHead.IperlHead)
+ {
+ (rr as TestMethods.iPerlCommunication.iPerlHead.IperlHead).TestName = test.Name;
+ }
+ }
/// Measurement loop - preparation
@@ -868,7 +871,7 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
/// MetersKind.Single meters
Results.Entities.MeterTestRslt meterRslt = BatchRslts.GetMeterTestRslt(testName, i, Config.Entities.CompoundMeterId.Single);
GenericDevices.IRegisterReader regReader = sensPath.RegisterReaders[i];
- WaterMeters.iPerl.WaterMeter iPerl = regReader as WaterMeters.iPerl.WaterMeter;
+ TestMethods.iPerlCommunication.iPerlHead.IperlHead iPerl = regReader as TestMethods.iPerlCommunication.iPerlHead.IperlHead;
GenericDevices.IRoi cameraRoi = regReader as GenericDevices.IRoi;
if (meterRslt != null && regReader != null)
@@ -887,15 +890,6 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
meterRslt.VolumeMeter = Math.Abs(iPerl.VolumeLtrEnd - iPerl.VolumeLtrStart);
meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime;
iPerl.VolumeLtrRef = meterRslt.VolumeRef;
-#if IPERL
- meterRslt.WaterMeter.CalibFactor = (iPerl.CalibrationStruct != null) ? iPerl.CalibrationStruct.Calibration : 0;
- meterRslt.WaterMeter.Q2Correction = iPerl.Q2Correction;
- meterRslt.WaterMeter.Q2CorrRFlow = iPerl.Q2CorrRFlow;
- meterRslt.WaterMeter.Q2CorrLFlow = iPerl.Q2CorrLFlow;
-#endif
- iPerl.LastTestResult2 = iPerl.LastTestResult; /// Save shift previous test result
- iPerl.LastTestResult = meterRslt; /// Save this test result
- iPerl.NominalTestFlow = 500.0 * (test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
}
else if (cameraRoi != null)
{
@@ -922,6 +916,13 @@ namespace TBF.BenchControl.TestMethods.FlyingStartMassCollection
meterRslt.Passed = (meterRslt.Error >= test.ErrLimLo + test.Uncertainty)
&& (meterRslt.Error <= test.ErrLimHi - test.Uncertainty);
meterRslt.TestDone = true;
+
+ if (iPerl != null)
+ {
+ iPerl.LastTestResult2 = iPerl.LastTestResult; /// Save shift previous test result
+ iPerl.LastTestResult = meterRslt; /// Save this test result
+ iPerl.NominalTestFlowLph = 500.0 * (test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
+ }
}
}
}
diff --git a/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs
index 5305e6dde..e1ac031d4 100644
--- a/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationForm.cs
@@ -16,7 +16,7 @@ using log4net;
using Config.Entities;
using TBF.Resources;
using TBF.BenchControl.Sequences;
-using TBF.BenchControl.WaterMeters.iPerl;
+using TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead;
namespace TBF.BenchControl.TestMethods.iPerlCommunication
{
@@ -74,17 +74,17 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
/// 0..3
/// Com port number
/// Value returned by openPort(...)
- public static unsafe int OpenPort(WaterMeters.iPerl.WaterMeter wm)
+ public static unsafe int OpenPort(IperlHead iperlHead)
{
- if (wm.DebugLevel != DebugMode.Normal) return 0; /// No function in debug mode
+ if (iperlHead.DebugLevel != DebugMode.Normal) return 0; /// No function in debug mode
- if (wm.RfidComPortNr > 0)
+ if (iperlHead.RfidComPortNr > 0)
{
- return openPort1(wm.RfidComPortNr);
+ return openPort1(iperlHead.RfidComPortNr);
}
else
{
- switch (wm.MuxBoardNr)
+ switch (iperlHead.MuxBoardNr)
{
default:
case 1: return openPort1(cfg.RfidPortNrBoard1);
@@ -101,17 +101,17 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
/// 0..3
/// Com port number
/// Value returned by openPort(...)
- public static unsafe int ClosePort(WaterMeters.iPerl.WaterMeter wm)
+ public static unsafe int ClosePort(IperlHead iperlHead)
{
- if (wm.DebugLevel != DebugMode.Normal) return 0; /// No function in debug mode
+ if (iperlHead.DebugLevel != DebugMode.Normal) return 0; /// No function in debug mode
- if (wm.RfidComPortNr > 0)
+ if (iperlHead.RfidComPortNr > 0)
{
return closePort1();
}
else
{
- switch (wm.MuxBoardNr)
+ switch (iperlHead.MuxBoardNr)
{
default:
case 1: return closePort1();
@@ -126,11 +126,11 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
/// Wrapper function with safe interface and unsafe body
///
/// Value returned by readRequestPort(...)
- public static unsafe int ReadRequestPort(WaterMeters.iPerl.WaterMeter wm, MessageID messageID, int offset, int lenght, out byte[] buffer, int timeout)
+ public static unsafe int ReadRequestPort(IperlHead iperlHead, MessageID messageID, int offset, int lenght, out byte[] buffer, int timeout)
{
buffer = new byte[lenght];
- if (wm.DebugLevel != DebugMode.Normal) return wm.Name.Equals("iPerl13") ? 2 : 0; /// Simulates an error on position 13
+ if (iperlHead.DebugLevel != DebugMode.Normal) return iperlHead.Name.Equals("iPerl13") ? 2 : 0; /// Simulates an error on position 13
byte[] buf = new byte[200];
@@ -139,13 +139,13 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
{
int retv;
- if (wm.RfidComPortNr > 0)
+ if (iperlHead.RfidComPortNr > 0)
{
retv = readRequestPort1(messageID, offset, lenght, pBuf, timeout);
}
else
{
- switch (wm.MuxBoardNr)
+ switch (iperlHead.MuxBoardNr)
{
default:
case 1: retv = readRequestPort1(messageID, offset, lenght, pBuf, timeout); break;
@@ -160,11 +160,11 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
///
/// Logging
///
- string name = string.Format("{0}({1})", wm.Name, wm.SerialNr);
- if ((messageID == MessageID.Configuration) && (offset == 0) && (lenght == WaterMeters.iPerl.ConfigStruct.Length))
- rfidDataLogger.InfoFormat("{0}: ReadRequestPort({1},...) returned {2} {3}", name, messageID, retv, (retv != 0) ? "!" : WaterMeters.iPerl.ConfigStruct.FromByteArray(buffer).ToString());
- else if ((messageID == MessageID.Calibration) && (offset == 0) && (lenght == WaterMeters.iPerl.CalibrationStruct.Length))
- rfidDataLogger.InfoFormat("{0}: ReadRequestPort({1},...) returned {2} {3}", name, messageID, retv, (retv != 0) ? "!" : WaterMeters.iPerl.CalibrationStruct.FromByteArray(buffer).ToString());
+ string name = string.Format("{0}({1})", iperlHead.Name, iperlHead.SerialNr);
+ if ((messageID == MessageID.Configuration) && (offset == 0) && (lenght == ConfigStruct.Length))
+ rfidDataLogger.InfoFormat("{0}: ReadRequestPort({1},...) returned {2} {3}", name, messageID, retv, (retv != 0) ? "!" : ConfigStruct.FromByteArray(buffer).ToString());
+ else if ((messageID == MessageID.Calibration) && (offset == 0) && (lenght == CalibrationStruct.Length))
+ rfidDataLogger.InfoFormat("{0}: ReadRequestPort({1},...) returned {2} {3}", name, messageID, retv, (retv != 0) ? "!" : CalibrationStruct.FromByteArray(buffer).ToString());
else if ((messageID == MessageID.Calibration) && (offset == 2) && (lenght == 2))
rfidDataLogger.InfoFormat("{0}: ReadRequestPort({1},2,2,...) returned {2} {3}", name, messageID, retv, (retv != 0) ? "!" : string.Format("Cal={0}", buf[0] + 256 * buf[1]));
else
@@ -178,21 +178,21 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
/// Wrapper function with safe interface adn unsafe body
///
/// Value returned by writeRequestPort(...)
- public static unsafe int WriteRequestPort(WaterMeters.iPerl.WaterMeter wm, MessageID messageID, int offset, int lenght, byte[] buffer, int timeout)
+ public static unsafe int WriteRequestPort(IperlHead iperlHead, MessageID messageID, int offset, int lenght, byte[] buffer, int timeout)
{
- if (wm.DebugLevel != DebugMode.Normal) return 0;
+ if (iperlHead.DebugLevel != DebugMode.Normal) return 0;
fixed (byte* pBuf = buffer)
{
int retv;
- if (wm.RfidComPortNr > 0)
+ if (iperlHead.RfidComPortNr > 0)
{
retv = writeRequestPort1(messageID, offset, lenght, pBuf, timeout);
}
else
{
- switch (wm.MuxBoardNr)
+ switch (iperlHead.MuxBoardNr)
{
default:
case 1: retv = writeRequestPort1(messageID, offset, lenght, pBuf, timeout); break;
@@ -207,7 +207,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
///
/// Logging
///
- string name = string.Format("{0}({1})", wm.Name, wm.SerialNr);
+ string name = string.Format("{0}({1})", iperlHead.Name, iperlHead.SerialNr);
if (lenght == 1)
rfidDataLogger.InfoFormat("{0}: WriteRequestPort({2}, {3}, {4}, {5}) returned {1} {6}", name, retv, messageID, offset, lenght, pBuf[0].ToString("X2"), (retv != 0) ? "!" : "");
else if (lenght == 2)
@@ -260,7 +260,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
PictureBox[] counters;
TextBox[] messages;
- static IList waterMeters;
+ static IList iperlHeads;
static IList waterMeterPositions; /// keeps original indices in RegisterReaders list
Modbus.QuidoRS.QuidoRS quido;
@@ -331,7 +331,11 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
wmTextBox46, wmTextBox47, wmTextBox48,
};
- formCompleted = false;
+ /// Initialize lists
+ iperlHeads = new List();
+ waterMeterPositions = new List();
+
+ formCompleted = false;
startTime = DateTime.Now;
startTimeSec = StateMachine.Time;
@@ -412,21 +416,18 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
void ConstructorCommon()
{
- waterMeters = new List();
- waterMeterPositions = new List();
- ///
for (int wmPos = 0; wmPos < ProcessData.RegisterReaders.Length; wmPos++)
{
- WaterMeters.iPerl.WaterMeter iPerl = ProcessData.RegisterReaders[wmPos] as WaterMeters.iPerl.WaterMeter;
+ IperlHead iperlHead = ProcessData.RegisterReaders[wmPos] as IperlHead;
- if (iPerl != null)
+ if (iperlHead != null)
{
- waterMeters.Add(iPerl);
+ iperlHeads.Add(iperlHead);
waterMeterPositions.Add(wmPos);
}
}
- WaterMetersCount = waterMeters.Count;
+ WaterMetersCount = iperlHeads.Count;
ShuffleTextBoxes(WaterMetersCount, Config.Data.LineSize);
@@ -442,7 +443,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
completedCommCount = 0;
stopWorkerThreads = false;
- foreach (var iPerl in iPerlCommunicationForm.waterMeters)
+ foreach (var iPerl in iPerlCommunicationForm.iperlHeads)
{
if (!rfidPortNrs.Contains(iPerl.MuxBoardNr))
{
@@ -510,9 +511,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
void Localize()
{
Text = Strings.Water_Meter_States;
- for (int i = 0; i < Math.Min(textBoxesCount, waterMeters.Count); i++)
+ for (int i = 0; i < Math.Min(textBoxesCount, iperlHeads.Count); i++)
{
- labels[i].Text = waterMeters[i].Name;
+ labels[i].Text = iperlHeads[i].Name;
}
}
@@ -541,9 +542,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
Top = (ls.iPerlCommunicationsFormTop != 0) ? ls.iPerlCommunicationsFormTop : 150;
/// Reset opto-data indication
- for (int i = 0; i < waterMeters.Count; i++)
+ for (int i = 0; i < iperlHeads.Count; i++)
{
- waterMeters[i].FlushedDataCount = 0;
+ iperlHeads[i].FlushedDataCount = 0;
counters[i].BackColor = Color.Red;
}
@@ -661,26 +662,29 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
int wmNr = 0;
bool wmFound = false;
- foreach (var wm in waterMeters)
+ for (int j = 0; j < iperlHeads.Count; j++)
{
- if ((wm.MuxBoardNr == rfidPortNr) && (wm.Group == group))
+ IperlHead ihead = iperlHeads[j];
+
+ if ((ihead.MuxBoardNr == rfidPortNr) && (ihead.Group == group))
{
wmFound = true;
+ WaterMeters.WaterMeter.WaterMeter wm = SequenceBase.WaterMeters[waterMeterPositions[j]] as WaterMeters.WaterMeter.WaterMeter; /// WaterMeters.WaterMeter.WaterMeter implements iPerl specific variables
CommErr error;
string resultStr = string.Empty;
- if (activity.ToLower().Contains(ReadConfigurationStr.ToLower())) error = ReadConfiguration(wm, ref resultStr);
- else if (activity.ToLower().Contains(SetTestModeStr.ToLower())) error = SetTestMode(wm, ref resultStr);
- else if (activity.ToLower().Equals(SetActiveModeStr.ToLower())) error = SetActiveMode(wm, ref resultStr);
- else if (activity.ToLower().Equals(ReadCalibrationStr.ToLower())) error = ReadCalibration(wm, ref resultStr);
- else if (activity.ToLower().Contains(WriteCalibrationFactorStr.ToLower())) error = WriteCalibrationFactor(wm, ref resultStr);
- else if (activity.ToLower().Equals(NormalizeCalibrationFactorStr.ToLower())) error = NormalizeCalibrationFactor(wm, ref resultStr);
- else if (activity.ToLower().Equals(ResetQ2CorrectionStr.ToLower())) error = ResetQ2Correction(wm, ref resultStr);
- else if (activity.ToLower().Equals(WriteQ2CorrectionStr.ToLower())) error = WriteQ2Correction(wm, ref resultStr, false); /// standard iPerl
- else if (activity.ToLower().Equals(WriteQ2CorrectionAltStr.ToLower())) error = WriteQ2Correction(wm, ref resultStr, true); /// DEWA iPerl
- else if (activity.ToLower().Equals(Reset2HzCorrectionStr.ToLower())) error = Reset2HzCorrection(wm, ref resultStr);
- else if (activity.ToLower().Equals(Write2HzCorrectionStr.ToLower())) error = Write2HzCorrection(wm, ref resultStr);
+ if (activity.ToLower().Contains(ReadConfigurationStr.ToLower())) error = ReadConfiguration(ihead, wm, ref resultStr);
+ else if (activity.ToLower().Contains(SetTestModeStr.ToLower())) error = SetTestMode(ihead, wm, ref resultStr);
+ else if (activity.ToLower().Equals(SetActiveModeStr.ToLower())) error = SetActiveMode(ihead, wm, ref resultStr);
+ else if (activity.ToLower().Equals(ReadCalibrationStr.ToLower())) error = ReadCalibration(ihead, wm, ref resultStr);
+ else if (activity.ToLower().Contains(WriteCalibrationFactorStr.ToLower())) error = WriteCalibrationFactor(ihead, wm, ref resultStr);
+ else if (activity.ToLower().Equals(NormalizeCalibrationFactorStr.ToLower())) error = NormalizeCalibrationFactor(ihead, wm, ref resultStr);
+ else if (activity.ToLower().Equals(ResetQ2CorrectionStr.ToLower())) error = ResetQ2Correction(ihead, wm, ref resultStr);
+ else if (activity.ToLower().Equals(WriteQ2CorrectionStr.ToLower())) error = WriteQ2Correction(ihead, wm, ref resultStr, false); /// standard iPerl
+ else if (activity.ToLower().Equals(WriteQ2CorrectionAltStr.ToLower())) error = WriteQ2Correction(ihead, wm, ref resultStr, true); /// DEWA iPerl
+ else if (activity.ToLower().Equals(Reset2HzCorrectionStr.ToLower())) error = Reset2HzCorrection(ihead, wm, ref resultStr);
+ else if (activity.ToLower().Equals(Write2HzCorrectionStr.ToLower())) error = Write2HzCorrection(ihead, wm, ref resultStr);
else
{
error = CommErr.None;
@@ -692,20 +696,20 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
{
OnCommCompleted(null, new CommCompletedEventArgs(threadId, wmNr, resultStr));
}
- else if (wm.CommFailed || error == CommErr.CommFailed)
+ else if (ihead.CommFailed || error == CommErr.CommFailed)
{
OnCommCompleted(null, new CommCompletedEventArgs(threadId, wmNr, "Watermeter is disabled"));
}
else
{
OnCommCompleted(null, new CommCompletedEventArgs(threadId, wmNr, string.Format("{0} failed ({1}) !!!", activity, error)));
- rfidDataLogger.ErrorFormat("Group={0}, Board={1}, {2} failed ({3}) !!!", currentGroup, wm.MuxBoardNr, activity, error);
- wm.CommFailed = true;
+ rfidDataLogger.ErrorFormat("Group={0}, Board={1}, {2} failed ({3}) !!!", currentGroup, ihead.MuxBoardNr, activity, error);
+ ihead.CommFailed = true;
}
break;
}
wmNr++;
- TBF.UiBridge.Bridge.OnTestProgress(null, new TBF.UiBridge.TestProgressEventArgs(tests[i], Config.Entities.Progress.FlowSetting));
+ TBF.UiBridge.Bridge.OnTestProgress(null, new TBF.UiBridge.TestProgressEventArgs(tests[i], Config.Entities.Progress.FlowSetting));
}
if (!wmFound)
@@ -730,10 +734,10 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
///
/// Read a complete configuration structure of the watermeter
///
- /// Water meter object
+ /// Water meter object
/// String passed to caller
/// true on success
- static CommErr ReadConfiguration(WaterMeters.iPerl.WaterMeter wm, ref string resultStr)
+ static CommErr ReadConfiguration(IperlHead ihead, WaterMeters.WaterMeter.WaterMeter wm, ref string resultStr)
{
///
/// The activity is "Read configuration" (this enables the watermeter, resets error flag)
@@ -741,12 +745,12 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
///
if (!multiTestParams[currentActivityStep].Activity.ToLower().Contains(" if enabled"))
{
- wm.CommFailed = false;
+ ihead.CommFailed = false;
}
- if (wm.CommFailed) return CommErr.CommFailed;
+ if (ihead.CommFailed) return CommErr.CommFailed;
- if (OpenPort(wm) != 0) return CommErr.OpenPort; /// Open RFID port
+ if (OpenPort(ihead) != 0) return CommErr.OpenPort; /// Open RFID port
CommErr error = CommErr.Read;
@@ -754,16 +758,16 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
byte[] config = null;
for (int j = 0; j < cfg.MaxCommRetries; j++)
{
- if (0 == ReadRequestPort(wm, MessageID.Configuration, 0, ConfigStruct.Length, out config, cfg.CommTimeout))
+ if (0 == ReadRequestPort(ihead, MessageID.Configuration, 0, ConfigStruct.Length, out config, cfg.CommTimeout))
{
error = CommErr.None;
- wm.ConfigStruct = ConfigStruct.FromByteArray(config);
- resultStr = wm.ConfigStruct.ToString(1);
+ ihead.ConfigStruct = ConfigStruct.FromByteArray(config);
+ resultStr = ihead.ConfigStruct.ToString(1);
break;
}
}
- ClosePort(wm); /// Close RFID port
+ ClosePort(ihead); /// Close RFID port
return error;
}
@@ -775,12 +779,12 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
/// whether the testModeConfig is correctly set, if necessary it is changed to the specified value.
/// Read a part of configuration afterwards to verify the mode was set correctly.
///
- /// Water meter object
+ /// Water meter object
/// String passed to caller
/// true on success
- static CommErr SetTestMode(WaterMeters.iPerl.WaterMeter wm, ref string resultStr)
+ static CommErr SetTestMode(IperlHead ihead, WaterMeters.WaterMeter.WaterMeter wm, ref string resultStr)
{
- if (wm.CommFailed) return CommErr.CommFailed;
+ if (ihead.CommFailed) return CommErr.CommFailed;
Byte testModeConfig = 0xA0; /// Default value
///
@@ -794,41 +798,41 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
}
}
- if (wm.ConfigStruct.MeterState == MeterState.Test && wm.ConfigStruct.TestModeConfig == testModeConfig)
+ if (ihead.ConfigStruct.MeterState == MeterState.Test && ihead.ConfigStruct.TestModeConfig == testModeConfig)
{
/// Already in the correct test mode
- resultStr = "Already " + wm.ConfigStruct.ToString(1);
+ resultStr = "Already " + ihead.ConfigStruct.ToString(1);
return CommErr.None;
}
/// Communication necessary
- if (OpenPort(wm) != 0) return CommErr.OpenPort; /// Open RFID port
+ if (OpenPort(ihead) != 0) return CommErr.OpenPort; /// Open RFID port
CommErr error = CommErr.None;
- if (error==CommErr.None && (wm.ConfigStruct.TestModeConfig != testModeConfig) && (wm.ConfigStruct.MeterState != MeterState.Active))
+ if (error==CommErr.None && (ihead.ConfigStruct.TestModeConfig != testModeConfig) && (ihead.ConfigStruct.MeterState != MeterState.Active))
{
/// Switch to Active mode in order to change TestModeConfig
error = CommErr.CmdActive;
byte[] cmd = new byte[1] { (byte)6 };
for (int j = 0; j < cfg.MaxCommRetries; j++)
{
- if (0 == WriteRequestPort(wm, MessageID.Command, 0, 1, cmd, cfg.CommTimeout)) { error = CommErr.None; break; }
+ if (0 == WriteRequestPort(ihead, MessageID.Command, 0, 1, cmd, cfg.CommTimeout)) { error = CommErr.None; break; }
}
Thread.Sleep(250);
}
- if (error == CommErr.None && (wm.ConfigStruct.TestModeConfig != testModeConfig))
+ if (error == CommErr.None && (ihead.ConfigStruct.TestModeConfig != testModeConfig))
{
/// Change the TestModeConfig if necessary
error = CommErr.Write;
byte[] tstMdCfg = new byte[1] { testModeConfig };
for (int j = 0; j < cfg.MaxCommRetries; j++)
{
- if (0 == WriteRequestPort(wm, MessageID.Configuration, 21, 1, tstMdCfg, cfg.CommTimeout))
+ if (0 == WriteRequestPort(ihead, MessageID.Configuration, 21, 1, tstMdCfg, cfg.CommTimeout))
{
- wm.ConfigStruct.Update(21, tstMdCfg);
+ ihead.ConfigStruct.Update(21, tstMdCfg);
error = CommErr.None;
break;
}
@@ -844,7 +848,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
byte[] cmd = new byte[1] { (byte)7 };
for (int j = 0; j < cfg.MaxCommRetries; j++)
{
- if (0 == WriteRequestPort(wm, MessageID.Command, 0, 1, cmd, cfg.CommTimeout)) { error = CommErr.None; break; }
+ if (0 == WriteRequestPort(ihead, MessageID.Command, 0, 1, cmd, cfg.CommTimeout)) { error = CommErr.None; break; }
}
Thread.Sleep(250);
@@ -858,20 +862,20 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
byte[] cfg_0_3 = null;
for (int j = 0; j < cfg.MaxCommRetries; j++)
{
- if (0 == ReadRequestPort(wm, MessageID.Configuration, 0, 4, out cfg_0_3, cfg.CommTimeout))
+ if (0 == ReadRequestPort(ihead, MessageID.Configuration, 0, 4, out cfg_0_3, cfg.CommTimeout))
{
- wm.ConfigStruct.Update(0, cfg_0_3);
- if (wm.ConfigStruct.MeterState == MeterState.Test)
+ ihead.ConfigStruct.Update(0, cfg_0_3);
+ if (ihead.ConfigStruct.MeterState == MeterState.Test)
{
error = CommErr.None;
- resultStr = wm.ConfigStruct.ToString(1);
+ resultStr = ihead.ConfigStruct.ToString(1);
break;
}
}
}
}
- ClosePort(wm); /// Close RFID port
+ ClosePort(ihead); /// Close RFID port
return error;
}
@@ -881,12 +885,12 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
/// Set the watermeter to the active mode.
/// Read a part of configuration afterwards to verify the mode was set correctly.
///
- /// Water meter object
+ /// Water meter object
/// String passed to caller
/// true on success
- static CommErr SetActiveMode(WaterMeters.iPerl.WaterMeter wm, ref string resultStr)
+ static CommErr SetActiveMode(IperlHead ihead, WaterMeters.WaterMeter.WaterMeter wm, ref string resultStr)
{
- if (OpenPort(wm) != 0) return CommErr.OpenPort; /// Open RFID port
+ if (OpenPort(ihead) != 0) return CommErr.OpenPort; /// Open RFID port
CommErr error = CommErr.CmdActive;
@@ -894,7 +898,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
byte[] cmd = new byte[1] { (byte)6 };
for (int j = 0; j < cfg.MaxCommRetries; j++)
{
- if (0 == WriteRequestPort(wm, MessageID.Command, 0, 1, cmd, cfg.CommTimeout))
+ if (0 == WriteRequestPort(ihead, MessageID.Command, 0, 1, cmd, cfg.CommTimeout))
{
error = CommErr.None;
break;
@@ -928,14 +932,14 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
#else
if (error == CommErr.None)
{
- if (wm.ConfigStruct == null)
+ if (ihead.ConfigStruct == null)
resultStr = "OK (Config not available)";
else
- resultStr = wm.ConfigStruct.ToString(1);
+ resultStr = ihead.ConfigStruct.ToString(1);
}
#endif
- ClosePort(wm); /// Close RFID port
+ ClosePort(ihead); /// Close RFID port
return error;
}
@@ -944,14 +948,14 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
///
/// Read a complete calibration structure from the watermeter
///
- /// Water meter object
+ /// Water meter object
/// String passed to caller
/// true on success
- static CommErr ReadCalibration(WaterMeters.iPerl.WaterMeter wm, ref string resultStr)
+ static CommErr ReadCalibration(IperlHead ihead, WaterMeters.WaterMeter.WaterMeter wm, ref string resultStr)
{
- if (wm.CommFailed) return CommErr.CommFailed;
+ if (ihead.CommFailed) return CommErr.CommFailed;
- if (OpenPort(wm) != 0) return CommErr.OpenPort; /// Open RFID port
+ if (OpenPort(ihead) != 0) return CommErr.OpenPort; /// Open RFID port
CommErr error = CommErr.Read;
@@ -959,16 +963,19 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
byte[] calib = null;
for (int j = 0; j < cfg.MaxCommRetries; j++)
{
- if (0 == ReadRequestPort(wm, MessageID.Calibration, 0, CalibrationStruct.Length, out calib, cfg.CommTimeout))
+ if (0 == ReadRequestPort(ihead, MessageID.Calibration, 0, CalibrationStruct.Length, out calib, cfg.CommTimeout))
{
- wm.CalibrationStruct = CalibrationStruct.FromByteArray(calib);
- resultStr = wm.CalibrationStruct.ToString();
- error = wm.VerifyIPerlType() ? CommErr.None : CommErr.WrongIPerlType;
+ ihead.CalibrationStruct = CalibrationStruct.FromByteArray(calib);
+#if IPERL
+ if (wm != null && wm.OriginalCalibFactor == 0) wm.OriginalCalibFactor = ihead.CalibrationStruct.Calibration;
+#endif
+ resultStr = ihead.CalibrationStruct.ToString();
+ error = ihead.VerifyIPerlType() ? CommErr.None : CommErr.WrongIPerlType;
break;
}
}
- ClosePort(wm); /// Close RFID port
+ ClosePort(ihead); /// Close RFID port
return error;
}
@@ -978,12 +985,12 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
/// Write the calculated calibration factor to the water meter.
/// Read a part of CalibrationStruct afterwards to verify factor was written correctly.
///
- /// Water meter object
+ /// Water meter object
/// String passed to caller
/// true on success
- static CommErr WriteCalibrationFactor(WaterMeters.iPerl.WaterMeter wm, ref string resultStr)
+ static CommErr WriteCalibrationFactor(IperlHead ihead, WaterMeters.WaterMeter.WaterMeter wm, ref string resultStr)
{
- if (wm.CommFailed) return CommErr.CommFailed;
+ if (ihead.CommFailed) return CommErr.CommFailed;
///
/// Parse calibration factor (1 argument) or calibration factor limits (2 arguments)
@@ -1002,7 +1009,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
UInt16.TryParse(arguments[0], out factorLimitLo) && factorLimitLo > 0 &&
UInt16.TryParse(arguments[1], out factorLimitHi) && factorLimitHi > 0)
{
- newCalibFactor = wm.CalculateNewCalibFactor(wm.CalibrationFactor, factorLimitLo, factorLimitHi);
+ newCalibFactor = ihead.CalculateNewCalibFactor(ihead.CalibrationFactor, factorLimitLo, factorLimitHi);
}
else if (arguments.Length == 1 && UInt16.TryParse(arguments[0], out val) && val > 0)
{
@@ -1010,12 +1017,12 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
}
else
{
- newCalibFactor = wm.CalculateNewCalibFactor(wm.CalibrationFactor, wm.FactorLimitLo, wm.FactorLimitHi);
+ newCalibFactor = ihead.CalculateNewCalibFactor(ihead.CalibrationFactor, ihead.FactorLimitLo, ihead.FactorLimitHi);
}
}
else
{
- newCalibFactor = wm.CalculateNewCalibFactor(wm.CalibrationFactor, wm.FactorLimitLo, wm.FactorLimitHi);
+ newCalibFactor = ihead.CalculateNewCalibFactor(ihead.CalibrationFactor, ihead.FactorLimitLo, ihead.FactorLimitHi);
}
if (newCalibFactor == 0) return CommErr.CalibFactorOoRange;
@@ -1023,7 +1030,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
///
/// Start communication with iPerl
///
- if (OpenPort(wm) != 0) return CommErr.OpenPort; /// Open RFID port
+ if (OpenPort(ihead) != 0) return CommErr.OpenPort; /// Open RFID port
CommErr error;
byte[] data = new byte[2] { (byte)(newCalibFactor & 0x00FF), (byte)((newCalibFactor >> 8) & 0x00FF) };
@@ -1034,31 +1041,34 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
/// Write the new calibration factor (up to cfg.MaxCommRetries tims)
///
error = CommErr.Write;
- if (0 == WriteRequestPort(wm, MessageID.Calibration, 2, 2, data, cfg.CommTimeout))
+ if (0 == WriteRequestPort(ihead, MessageID.Calibration, 2, 2, data, cfg.CommTimeout))
{
///
/// Read and verify the calibration factor
///
error = CommErr.ReadAfterWrite;
byte[] calib_2_3 = null;
- if (0 == ReadRequestPort(wm, MessageID.Calibration, 2, 2, out calib_2_3, cfg.CommTimeout))
+ if (0 == ReadRequestPort(ihead, MessageID.Calibration, 2, 2, out calib_2_3, cfg.CommTimeout))
{
error = CommErr.Verify;
if (calib_2_3 != null && calib_2_3.Length == 2 && data[0] == calib_2_3[0] && data[1] == calib_2_3[1])
{
error = CommErr.None;
- wm.CalibrationStruct.Update(data, 2);
- resultStr = wm.CalibrationStruct.ToString();
+ ihead.CalibrationStruct.Update(data, 2);
+#if IPERL
+ if (wm != null) wm.CalibFactor = newCalibFactor;
+#endif
+ resultStr = ihead.CalibrationStruct.ToString();
break;
}
}
}
- wm.CalibrationStruct.Update(data, 2);
+ ihead.CalibrationStruct.Update(data, 2);
}
while (++writeAndVerifyRetries <= cfg.MaxCommRetries);
- ClosePort(wm); /// Close RFID port
+ ClosePort(ihead); /// Close RFID port
return error;
}
@@ -1067,26 +1077,26 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
///
/// Normalize calibration factor in case ti is close to value 8000.
///
- /// Water meter object
+ /// Water meter object
/// String passed to caller
/// true on success
- static CommErr NormalizeCalibrationFactor(WaterMeters.iPerl.WaterMeter wm, ref string resultStr)
+ static CommErr NormalizeCalibrationFactor(IperlHead ihead, WaterMeters.WaterMeter.WaterMeter wm, ref string resultStr)
{
- if (wm.CommFailed) return CommErr.CommFailed;
+ if (ihead.CommFailed) return CommErr.CommFailed;
- if (wm.CalibrationFactor <= 5000)
+ if (ihead.CalibrationFactor <= 5000)
{
resultStr = "Calibratin factor is OK";
return CommErr.None; /// No need to update the calibration factor
}
- if (OpenPort(wm) != 0) return CommErr.OpenPort; /// Open RFID port
+ if (OpenPort(ihead) != 0) return CommErr.OpenPort; /// Open RFID port
CommErr error = CommErr.Write;
/// Determine the new calibration factor
UInt16 newCalibFactor = 0;
- switch (wm.CalibrationStruct.MeterType)
+ switch (ihead.CalibrationStruct.MeterType)
{
case MeterType.DN15: newCalibFactor = 2650; break;
case MeterType.DN20: newCalibFactor = 3746; break;
@@ -1104,10 +1114,10 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
byte[] data = new byte[2] { (byte)(newCalibFactor & 0x00FF), (byte)((newCalibFactor >> 8) & 0x00FF) };
for (int j = 0; j < cfg.MaxCommRetries; j++)
{
- if (0 == WriteRequestPort(wm, MessageID.Calibration, 2, 2, data, cfg.CommTimeout))
+ if (0 == WriteRequestPort(ihead, MessageID.Calibration, 2, 2, data, cfg.CommTimeout))
{
error = CommErr.None;
- wm.CalibrationStruct.Update(data, 2);
+ ihead.CalibrationStruct.Update(data, 2);
break;
}
}
@@ -1120,17 +1130,17 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
byte[] calib_2_3 = null;
for (int j = 0; j < cfg.MaxCommRetries; j++)
{
- if (0 == ReadRequestPort(wm, MessageID.Calibration, 2, 2, out calib_2_3, cfg.CommTimeout))
+ if (0 == ReadRequestPort(ihead, MessageID.Calibration, 2, 2, out calib_2_3, cfg.CommTimeout))
{
error = CommErr.None;
- wm.CalibrationStruct.Update(calib_2_3, 2);
- resultStr = wm.CalibrationStruct.ToString();
+ ihead.CalibrationStruct.Update(calib_2_3, 2);
+ resultStr = ihead.CalibrationStruct.ToString();
break;
}
}
}
- ClosePort(wm); /// Close RFID port
+ ClosePort(ihead); /// Close RFID port
return error;
}
@@ -1144,14 +1154,14 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
/// Reset both Q2 correction factors in the memory to 0.
/// Read them back to verify factors were written correctly.
///
- /// Water meter object
+ /// Water meter object
/// String passed to caller
/// true on success
- static CommErr ResetQ2Correction(WaterMeters.iPerl.WaterMeter wm, ref string resultStr)
+ static CommErr ResetQ2Correction(IperlHead ihead, WaterMeters.WaterMeter.WaterMeter wm, ref string resultStr)
{
- if (wm.CommFailed) return CommErr.CommFailed;
+ if (ihead.CommFailed) return CommErr.CommFailed;
- if (OpenPort(wm) != 0) return CommErr.OpenPort; /// Open RFID port
+ if (OpenPort(ihead) != 0) return CommErr.OpenPort; /// Open RFID port
CommErr error = CommErr.Write;
@@ -1160,7 +1170,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
///
for (int j = 0; j < cfg.MaxCommRetries; j++)
{
- if (0 == WriteRequestPort(wm, MessageID.MetrologyMemory, Q2CorrFactorsAddr, wrData.Length, wrData, cfg.CommTimeout))
+ if (0 == WriteRequestPort(ihead, MessageID.MetrologyMemory, Q2CorrFactorsAddr, wrData.Length, wrData, cfg.CommTimeout))
{
error = CommErr.None;
break;
@@ -1194,11 +1204,11 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
if (error == CommErr.None)
{
resultStr = "Q2 corrections reset to 0";
- wm.Q2CorrRFlow = 0;
+ ihead.Q2CorrRFlow = 0;
}
#endif
- ClosePort(wm); /// Close RFID port
+ ClosePort(ihead); /// Close RFID port
return error;
}
@@ -1207,14 +1217,14 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
///
/// Reset 2Hz correction factor in the memory to 0.
///
- /// Water meter object
+ /// Water meter object
/// String passed to caller
/// true on success
- static CommErr Reset2HzCorrection(WaterMeters.iPerl.WaterMeter wm, ref string resultStr)
+ static CommErr Reset2HzCorrection(IperlHead ihead, WaterMeters.WaterMeter.WaterMeter wm, ref string resultStr)
{
- if (wm.CommFailed) return CommErr.CommFailed;
+ if (ihead.CommFailed) return CommErr.CommFailed;
- if (OpenPort(wm) != 0) return CommErr.OpenPort; /// Open RFID port
+ if (OpenPort(ihead) != 0) return CommErr.OpenPort; /// Open RFID port
CommErr error = CommErr.Write;
@@ -1223,7 +1233,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
///
for (int j = 0; j < cfg.MaxCommRetries; j++)
{
- if (0 == WriteRequestPort(wm, MessageID.MetrologyMemory, Hz2CorrFactorsAddr, wrData.Length, wrData, cfg.CommTimeout))
+ if (0 == WriteRequestPort(ihead, MessageID.MetrologyMemory, Hz2CorrFactorsAddr, wrData.Length, wrData, cfg.CommTimeout))
{
error = CommErr.None;
break;
@@ -1257,11 +1267,11 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
if (error == CommErr.None)
{
resultStr = "2Hz correction reset to 0";
- wm.Hz2CorrectionFactor = 0;
+ ihead.Hz2CorrectionFactor = 0;
}
#endif
- ClosePort(wm); /// Close RFID port
+ ClosePort(ihead); /// Close RFID port
return error;
}
@@ -1271,17 +1281,17 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
/// Write the calculated Q2 correction factors to the memory.
/// Read them back to verify factors were written correctly.
///
- /// Water meter object
+ /// Water meter object
/// String passed to caller
/// true on success
- static CommErr WriteQ2Correction(WaterMeters.iPerl.WaterMeter wm, ref string resultStr, bool DEWA)
+ static CommErr WriteQ2Correction(IperlHead ihead, WaterMeters.WaterMeter.WaterMeter wm, ref string resultStr, bool DEWA)
{
- if (wm.CommFailed) return CommErr.CommFailed;
- if (wm.LastTestResult == null) return CommErr.CommFailed; /// This should never happen
+ if (ihead.CommFailed) return CommErr.CommFailed;
+ if (ihead.LastTestResult == null) return CommErr.CommFailed; /// This should never happen
- wm.Q2ErrorWOCorrection = wm.LastTestResult.Error;
- wm.Q2CorrectionDone = false;
- wm.Q2CorrRFlow = 0;
+ ihead.Q2ErrorWOCorrection = ihead.LastTestResult.Error;
+ ihead.Q2CorrectionDone = false;
+ ihead.Q2CorrRFlow = 0;
double q2Correction = 0;
Byte q2CorrRFlow = 0;
@@ -1292,13 +1302,13 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
///
/// Standard process
///
- if (Math.Abs(wm.LastTestResult.Error) <= 0.5)
+ if (Math.Abs(ihead.LastTestResult.Error) <= 0.5)
{
resultStr = string.Format("Q2 correction = 0 (writing bypassed)");
return CommErr.None;
}
- if (!wm.CalculateQ2CorrectionFactor(wm.LastTestResult, out q2Correction))
+ if (!ihead.CalculateQ2CorrectionFactor(ihead.LastTestResult, out q2Correction))
{
return CommErr.None; /// Q2 error is too large, water meter failed anyhow
}
@@ -1311,18 +1321,18 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
///
/// DEWA process
///
- if (wm.LastTestResult.Error >= 0 && wm.LastTestResult.Error <= 1.0)
+ if (ihead.LastTestResult.Error >= 0 && ihead.LastTestResult.Error <= 1.0)
{
resultStr = string.Format("Q2 correction = 0 (writing bypassed)");
return CommErr.None;
}
- if (!wm.CalculateQ2CorrectionFactor(wm.LastTestResult, out q2Correction))
+ if (!ihead.CalculateQ2CorrectionFactor(ihead.LastTestResult, out q2Correction))
{
return CommErr.None; /// Q2 error is too large, water meter failed anyhow
}
- if (wm.LastTestResult.Error < 0)
+ if (ihead.LastTestResult.Error < 0)
{
q2CorrRFlow = (byte)((int)Math.Round(1.1 * q2Correction) & 0x000000FF);
q2CorrLFlow = (byte)((int)Math.Round(1.1 * q2Correction) & 0x000000FF);
@@ -1334,7 +1344,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
}
}
- if (OpenPort(wm) != 0) return CommErr.OpenPort; /// Open RFID port
+ if (OpenPort(ihead) != 0) return CommErr.OpenPort; /// Open RFID port
CommErr error = CommErr.Write;
@@ -1342,7 +1352,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
///
for (int j = 0; j < cfg.MaxCommRetries; j++)
{
- if (0 == WriteRequestPort(wm, MessageID.MetrologyMemory, Q2CorrFactorsAddr, wrData.Length, wrData, cfg.CommTimeout))
+ if (0 == WriteRequestPort(ihead, MessageID.MetrologyMemory, Q2CorrFactorsAddr, wrData.Length, wrData, cfg.CommTimeout))
{
error = CommErr.None;
break;
@@ -1366,9 +1376,21 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
{
error = CommErr.None;
resultStr = string.Format("Q2 factors: R-flow={0}, L-flow={1}", (SByte)q2CorrRFlow, (SByte)q2CorrLFlow);
- rfidDataLogger.Warn(wm.Name + ": " + resultStr);
- wm.Q2CorrectionDone = true;
- wm.Q2CorrectionFactor = q2CorrectionFactor;
+ rfidDataLogger.Warn(ihead.Name + ": " + resultStr);
+ ihead.Q2CorrectionDone = true;
+ ihead.Q2Correction = q2Correction;
+ ihead.Q2CorrRFlow = (int)(sbyte)q2CorrRFlow;
+ ihead.Q2CorrLFlow = (int)(sbyte)q2CorrLFlow;
+ #if IPERL
+ if (wm != null)
+ {
+ wm.Q2ErrorWOCorrection = ihead.Q2ErrorWOCorrection;
+ wm.Q2CorrectionDone = ihead.Q2CorrectionDone;
+ wm.Q2Correction = ihead.Q2Correction;
+ wm.Q2CorrRFlow = ihead.Q2CorrRFlow;
+ wm.Q2CorrLFlow = ihead.Q2CorrLFlow;
+ }
+ #endif
break;
}
}
@@ -1377,15 +1399,25 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
if (error == CommErr.None)
{
resultStr = string.Format("Q2 correction: R-flow={0}, L-flow={1}", (SByte)q2CorrRFlow, (SByte)q2CorrLFlow);
- rfidDataLogger.Warn(wm.Name + ": " + resultStr);
- wm.Q2CorrectionDone = true;
- wm.Q2Correction = q2Correction;
- wm.Q2CorrRFlow = (int)(sbyte)q2CorrRFlow;
- wm.Q2CorrLFlow = (int)(sbyte)q2CorrLFlow;
+ rfidDataLogger.Warn(ihead.Name + ": " + resultStr);
+ ihead.Q2CorrectionDone = true;
+ ihead.Q2Correction = q2Correction;
+ ihead.Q2CorrRFlow = (int)(sbyte)q2CorrRFlow;
+ ihead.Q2CorrLFlow = (int)(sbyte)q2CorrLFlow;
+ #if IPERL
+ if (wm != null)
+ {
+ wm.Q2ErrorWOCorrection = ihead.Q2ErrorWOCorrection;
+ wm.Q2CorrectionDone = ihead.Q2CorrectionDone;
+ wm.Q2Correction = ihead.Q2Correction;
+ wm.Q2CorrRFlow = ihead.Q2CorrRFlow;
+ wm.Q2CorrLFlow = ihead.Q2CorrLFlow;
+ }
+ #endif
}
#endif
- ClosePort(wm); /// Close RFID port
+ ClosePort(ihead); /// Close RFID port
return error;
}
@@ -1394,17 +1426,17 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
///
/// Write the calculated 2Hz correction factor to the memory.
///
- /// Water meter object
+ /// Water meter object
/// String passed to caller
/// true on success
- static CommErr Write2HzCorrection(WaterMeters.iPerl.WaterMeter wm, ref string resultStr)
+ static CommErr Write2HzCorrection(IperlHead ihead, WaterMeters.WaterMeter.WaterMeter wm, ref string resultStr)
{
- if (wm.CommFailed) return CommErr.CommFailed;
+ if (ihead.CommFailed) return CommErr.CommFailed;
/// Calculate the correction
- wm.Hz2CorrectionDone = false;
+ ihead.Hz2CorrectionDone = false;
int hz2CorrectionFactor;
- bool wmOK = wm.Calculate2HzCorrectionFactor(wm.LastTestResult2, wm.LastTestResult, out wm.Diff2Hz8Hz, out hz2CorrectionFactor);
+ bool wmOK = ihead.Calculate2HzCorrectionFactor(ihead.LastTestResult2, ihead.LastTestResult, out ihead.Diff2Hz8Hz, out hz2CorrectionFactor);
if (hz2CorrectionFactor == 0)
{
@@ -1412,7 +1444,7 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
return CommErr.None;
}
- if (OpenPort(wm) != 0) return CommErr.OpenPort; /// Open RFID port
+ if (OpenPort(ihead) != 0) return CommErr.OpenPort; /// Open RFID port
CommErr error = CommErr.Write;
@@ -1421,9 +1453,18 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
///
for (int j = 0; j < cfg.MaxCommRetries; j++)
{
- if (0 == WriteRequestPort(wm, MessageID.MetrologyMemory, Hz2CorrFactorsAddr, wrData.Length, wrData, cfg.CommTimeout))
+ if (0 == WriteRequestPort(ihead, MessageID.MetrologyMemory, Hz2CorrFactorsAddr, wrData.Length, wrData, cfg.CommTimeout))
{
error = CommErr.None;
+ ihead.Hz2CorrectionFactor = hz2CorrectionFactor;
+ ihead.Hz2CorrectionDone = true;
+#if IPERL
+ if (wm != null)
+ {
+ wm.Hz2CorrectionDone = ihead.Hz2CorrectionDone;
+ wm.Hz2CorrectionFactor = ihead.Hz2CorrectionFactor;
+ }
+#endif
break;
}
}
@@ -1455,13 +1496,13 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
if (error == CommErr.None)
{
resultStr = string.Format("2Hz correction = {0}", (SByte)hz2CorrectionByte);
- rfidDataLogger.Warn(wm.Name + ": " + resultStr);
- wm.Hz2CorrectionDone = true;
- wm.Hz2CorrectionFactor = hz2CorrectionFactor;
+ rfidDataLogger.Warn(ihead.Name + ": " + resultStr);
+ ihead.Hz2CorrectionDone = true;
+ ihead.Hz2CorrectionFactor = hz2CorrectionFactor;
}
#endif
- ClosePort(wm); /// Close RFID port
+ ClosePort(ihead); /// Close RFID port
return error;
}
@@ -1482,9 +1523,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
{
if (data.WMNr >= 0) messages[data.WMNr].Text = data.CommMessage;
- for (int i = 0; i < waterMeters.Count; i++)
+ for (int i = 0; i < iperlHeads.Count; i++)
{
- counters[i].BackColor = (waterMeters[i].FlushedDataDelta == 0) ? Color.Red : Color.Green;
+ counters[i].BackColor = (iperlHeads[i].FlushedDataDelta == 0) ? Color.Red : Color.Green;
}
lock (this)
@@ -1567,21 +1608,19 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
tstRslt.EndTime = endTime;
tstRslt.FlowSetTime = 0;
tstRslt.TestTime += testTime; /// [s] total communication time of all tests
-
- for (int i = 0; i < waterMeters.Count; i++)
- {
- Results.Entities.MeterTestRslt meterRslt =
+
+ for (int i = 0; i < iperlHeads.Count; i++)
+ {
+ Results.Entities.MeterTestRslt meterRslt =
ProcessData.BatchRslts.GetMeterTestRslt(test.Name, waterMeterPositions[i], Config.Entities.CompoundMeterId.Single);
- WaterMeters.iPerl.WaterMeter iPerl = waterMeters[i] as WaterMeters.iPerl.WaterMeter;
-
- if (meterRslt != null && iPerl != null)
- {
- meterRslt.WaterMeter.SerialNr = iPerl.SerialNr;
- meterRslt.Passed = (!iPerl.CommFailed && !iPerl.Disabled);
- meterRslt.TestDone = true;
- }
- }
+ if (meterRslt != null && iperlHeads[i] != null)
+ {
+ meterRslt.WaterMeter.SerialNr = iperlHeads[i].SerialNr;
+ meterRslt.Passed = (!iperlHeads[i].CommFailed && !iperlHeads[i].Disabled);
+ meterRslt.TestDone = true;
+ }
+ }
}
}
}
diff --git a/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationSeq.cs b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationSeq.cs
index 73fad47c8..d4ba0ba56 100644
--- a/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationSeq.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlCommunicationSeq.cs
@@ -124,14 +124,14 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
for (int i = 0; i < Config.Data.WMsCount; i++)
{
- WaterMeters.iPerl.WaterMeter iPerl = ((sensPath.RegisterReaders != null) && (i < sensPath.RegisterReaders.Length))
- ? (sensPath.RegisterReaders[i] as WaterMeters.iPerl.WaterMeter)
- : null;
+ TestMethods.iPerlCommunication.iPerlHead.IperlHead iPerl = ((sensPath.RegisterReaders != null) && (i < sensPath.RegisterReaders.Length))
+ ? (sensPath.RegisterReaders[i] as TestMethods.iPerlCommunication.iPerlHead.IperlHead)
+ : null;
if (iPerl != null)
{
/// TODO: Reimplement
//iPerl.LastTestResult = meterRslt; /// Save this water meter test result to iPerl WM
- iPerl.NominalTestFlow = 500.0 * (double)(test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
+ iPerl.NominalTestFlowLph = 500.0 * (double)(test.Qfrom + test.Qto); /// Ave. + convert to liter/hour
}
}
@@ -293,9 +293,9 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
Results.Entities.MeterTestRslt meterRslt = ProcessData.BatchRslts.GetMeterTestRslt(testName, i, CompoundMeterId.Single);
/// Reference to iPerl water meter or null:
- WaterMeters.iPerl.WaterMeter iPerl = ((sensPath.RegisterReaders != null) && (i < sensPath.RegisterReaders.Length))
- ? (sensPath.RegisterReaders[i] as WaterMeters.iPerl.WaterMeter)
- : null;
+ TestMethods.iPerlCommunication.iPerlHead.IperlHead iPerl = ((sensPath.RegisterReaders != null) && (i < sensPath.RegisterReaders.Length))
+ ? (sensPath.RegisterReaders[i] as TestMethods.iPerlCommunication.iPerlHead.IperlHead)
+ : null;
if (meterRslt != null && oriMeterRslt != null)
{
diff --git a/TestBenchFramework/BenchControl/WaterMeters/iPerl/CalibrationStruct.cs b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/CalibrationStruct.cs
similarity index 98%
rename from TestBenchFramework/BenchControl/WaterMeters/iPerl/CalibrationStruct.cs
rename to TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/CalibrationStruct.cs
index 19794e570..a02a9b24d 100644
--- a/TestBenchFramework/BenchControl/WaterMeters/iPerl/CalibrationStruct.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/CalibrationStruct.cs
@@ -1,10 +1,9 @@
///
-/// Copyright (c) 2015 Sensus Metering Systems
-/// Author: Milan Hanajík
+/// Copyright (c) 2015-2017 Sensus Metering Systems
///
using System;
-namespace TBF.BenchControl.WaterMeters.iPerl
+namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
{
public class CalibrationStruct
{
diff --git a/TestBenchFramework/BenchControl/WaterMeters/iPerl/ConfigStruct.cs b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/ConfigStruct.cs
similarity index 98%
rename from TestBenchFramework/BenchControl/WaterMeters/iPerl/ConfigStruct.cs
rename to TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/ConfigStruct.cs
index 4bffb4f24..6a777a587 100644
--- a/TestBenchFramework/BenchControl/WaterMeters/iPerl/ConfigStruct.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/ConfigStruct.cs
@@ -1,10 +1,9 @@
///
-/// Copyright (c) 2015 Sensus Metering Systems
-/// Author: Milan Hanajík
+/// Copyright (c) 2015-2017 Sensus Metering Systems
///
using System;
-namespace TBF.BenchControl.WaterMeters.iPerl
+namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
{
public class ConfigStruct
{
diff --git a/TestBenchFramework/BenchControl/WaterMeters/iPerl/Enums.cs b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/Enums.cs
similarity index 96%
rename from TestBenchFramework/BenchControl/WaterMeters/iPerl/Enums.cs
rename to TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/Enums.cs
index 26c6ac58c..d1446c6a4 100644
--- a/TestBenchFramework/BenchControl/WaterMeters/iPerl/Enums.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/Enums.cs
@@ -1,13 +1,12 @@
///
-/// Copyright (c) 2015 Sensus Metering Systems
-/// Author: Milan Hanajík
+/// Copyright (c) 2015-2017 Sensus Metering Systems
///
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
-namespace TBF.BenchControl.WaterMeters.iPerl
+namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
{
public enum MessageID
{
diff --git a/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/Factory.cs b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/Factory.cs
new file mode 100644
index 000000000..79744c175
--- /dev/null
+++ b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/Factory.cs
@@ -0,0 +1,26 @@
+///
+/// Copyright (c) 2015-2017 Sensus Metering Systems
+///
+using System.Collections.Generic;
+using TBF.BenchControl.Generic;
+
+namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
+{
+ public class Factory : IComponentFactory
+ {
+ public string ClassName { get { return "RegisterReader for iPerl/iPerl Head"; } }
+
+ public void ResetStaticProperties() { IperlHead.ResetStaticProperties(); }
+
+ public IComponent DummyComponent() { return new IperlHead(); }
+
+ public IComponent GetComponent(IComponentCfg cfg, IList components) { return new IperlHead(cfg); }
+
+ public IComponentCfg DefaultConfig() { return new IperlHeadCfg(this); }
+
+ public IComponentCfg CmpntCfgFromCmpntEntity(Config.Entities.Component component)
+ {
+ return ComponentCfgBase.CreateFromDbEntity(typeof(IperlHeadCfg), component, this);
+ }
+ }
+}
diff --git a/TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeter.cs b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHead.cs
similarity index 85%
rename from TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeter.cs
rename to TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHead.cs
index b2b6cc6e3..fce9683c0 100644
--- a/TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeter.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHead.cs
@@ -1,6 +1,5 @@
///
/// Copyright (c) 2015-2017 Sensus Metering Systems
-/// Author: Milan Hanajík
///
using System;
using System.Collections.Generic;
@@ -14,68 +13,32 @@ using TBF.BenchControl;
using TBF.BenchControl.Generic;
using TBF.Resources;
-namespace TBF.BenchControl.WaterMeters.iPerl
+namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
{
///
/// This component = instance of this class is a placeholder for a combined main watermeter
///
- public class WaterMeter : ComponentBase, IDevice, GenericDevices.IWaterMeter, GenericDevices.IRegisterReader, IOperation
+ public class IperlHead : ComponentBase, IDevice, GenericDevices.IRegisterReader, IOperation
{
- private static readonly ILog log = LogManager.GetLogger(typeof(WaterMeter));
+ private static readonly ILog log = LogManager.GetLogger(typeof(IperlHead));
public override string ToString() { return string.Format("iPerl({0})", Cfg.ToString(1)); }
- readonly WaterMeterCfg iPerlCfg;
+ readonly IperlHeadCfg iperlHeadCfg;
- public int RfidComPortNr { get { return iPerlCfg.RfidComPortNr; } }
- public int MuxBoardNr { get { return iPerlCfg.MuxBoardNr; } }
- public int Group { get { return iPerlCfg.Group; } }
+ public int RfidComPortNr { get { return iperlHeadCfg.RfidComPortNr; } }
+ public int MuxBoardNr { get { return iperlHeadCfg.MuxBoardNr; } }
+ public int Group { get { return iperlHeadCfg.Group; } }
- public double PulsesPerLtr { get { return (double)iPerlCfg.ProcParams.PulsesPerLtr; } }
- public double LtrsPerPulse { get { return ltrsPerPulse; } }
- readonly double ltrsPerPulse;
-
- /// WaterMeter type (product name) and producer
- public string ProductName { get { return iPerlCfg.ProcParams.ProductName; } }
- public string Producer { get { return iPerlCfg.ProcParams.Producer; } }
-
- /// Pipe diameter [mm]
- public float DN { get { return iPerlCfg.ProcParams.DN; } }
-
- /// Build lenght [mm]
- public float L { get { return iPerlCfg.ProcParams.L; } }
-
- public Mounting Mounting { get { return iPerlCfg.ProcParams.Mounting; } }
-
- /// Nominal water flow in [m3/h]
- public float Q4_Qmax { get { return iPerlCfg.ProcParams.Q4; } }
- public float Q3_Qn { get { return iPerlCfg.ProcParams.Qn; } }
- public float Q2_Qt { get { return iPerlCfg.ProcParams.Q2; } }
- public float Q1_Qmin { get { return iPerlCfg.ProcParams.Q1; } }
-
- /// Metrological class, etc
- public string MetrologicalClass { get { return iPerlCfg.ProcParams.MetrologicalClass; } }
- public TemperatureClass TemperatureClass { get { return iPerlCfg.ProcParams.TemperatureClass; } }
- public PressureLossClass PressureLossClass { get { return iPerlCfg.ProcParams.PressureLossClass; } }
- public MaxAdmissiblePressure MaxAdmissiblePressure { get { return iPerlCfg.ProcParams.MaxAdmissiblePressure; } }
- public FlowProfileSensitivityClass FlowProfileSensitivityClass { get { return iPerlCfg.ProcParams.FlowProfileSensitivityClass; } }
-
- /// WaterMeter approval information or signature
- public string ApprovalInfo { get { return iPerlCfg.ProcParams.ApprovalInfo; } }
- public string Certificate { get { return iPerlCfg.ProcParams.Certificate; } }
-
- public string Text1 { get { return iPerlCfg.ProcParams.Text1; } }
- public string Text2 { get { return iPerlCfg.ProcParams.Text2; } }
- public string Text3 { get { return iPerlCfg.ProcParams.Text3; } }
- public string Text4 { get { return iPerlCfg.ProcParams.Text4; } }
- public string Text5 { get { return iPerlCfg.ProcParams.Text5; } }
+ public double PulsesPerLtr { get { return 1000.0; } }
+ public double LtrsPerPulse { get { return 1 / PulsesPerLtr; } }
#if ORACLE_DB
- public int WMType_ID { get { return iPerlCfg.ProcParams.WMType_ID; } } /// Required by Oracle DB
- public int WMType_Rev { get { return iPerlCfg.ProcParams.WMType_Rev; } } /// Required by Oracle DB
+ public int WMType_ID { get { return iperlHeadCfg.ProcParams.WMType_ID; } } /// Required by Oracle DB
+ public int WMType_Rev { get { return iperlHeadCfg.ProcParams.WMType_Rev; } } /// Required by Oracle DB
#endif
- public ushort FactorLimitLo { get { return (ushort)iPerlCfg.ProcParams.FactorLimitLo; } }
- public ushort FactorLimitHi { get { return (ushort)iPerlCfg.ProcParams.FactorLimitHi; } }
+ public ushort FactorLimitLo { get { return (ushort)iperlHeadCfg.ProcParams.FactorLimitLo; } }
+ public ushort FactorLimitHi { get { return (ushort)iperlHeadCfg.ProcParams.FactorLimitHi; } }
/// Properties set by the Begin and the End form
public string SerialNr
@@ -158,7 +121,7 @@ namespace TBF.BenchControl.WaterMeters.iPerl
/// Result of the last test used to calculate Q2 correction factors, etc
public Results.Entities.MeterTestRslt LastTestResult2;
public Results.Entities.MeterTestRslt LastTestResult;
- public double NominalTestFlow; /// liter per hour
+ public double NominalTestFlowLph; /// in liter per hour
///
@@ -240,7 +203,7 @@ namespace TBF.BenchControl.WaterMeters.iPerl
const double B = 8.0; /// Raw units per minute, 8
const double C = B * 60.0; /// Raw units per hour, 480
double D = C / A; /// ml correction per hour
- double F = D / (NominalTestFlow * 10.0); /// Error corrected with 8 Raw Units per minute [%]
+ double F = D / (NominalTestFlowLph * 10.0); /// Error corrected with 8 Raw Units per minute [%]
double G = F / B; /// Error corrected with 1 Raw Unit per minute [%]
q2CorrectionFactor = (-1) * (q2TestResult.Error / G) * (q2TestResult.VolumeRef / q2TestResult.VolumeMeter);
@@ -371,18 +334,17 @@ namespace TBF.BenchControl.WaterMeters.iPerl
private SerialPort optoSerialPort;
- public WaterMeter()
+ public IperlHead()
{
ClearData();
}
- public WaterMeter(Generic.IComponentCfg cfg)
+ public IperlHead(Generic.IComponentCfg cfg)
: base(cfg)
{
ClearData();
- iPerlCfg = cfg as WaterMeterCfg;
- ltrsPerPulse = (iPerlCfg.ProcParams.PulsesPerLtr <= float.Epsilon) ? 0 : (1 / iPerlCfg.ProcParams.PulsesPerLtr);
+ iperlHeadCfg = cfg as IperlHeadCfg;
log.Debug(this.ToString());
}
@@ -401,7 +363,7 @@ namespace TBF.BenchControl.WaterMeters.iPerl
calibrationStruct = null;
LastTestResult = null;
- NominalTestFlow = 0;
+ NominalTestFlowLph = 0;
OriginalCalibFactor = 0;
Q2ErrorWOCorrection = 0;
@@ -431,7 +393,7 @@ namespace TBF.BenchControl.WaterMeters.iPerl
partOfTelegram = string.Empty;
/// Prepare serial port
- optoSerialPort = new SerialPort(string.Format("COM{0}", iPerlCfg.OptoComPortNr),
+ optoSerialPort = new SerialPort(string.Format("COM{0}", iperlHeadCfg.OptoComPortNr),
9600, Parity.None, 8, StopBits.One);
optoSerialPort.Handshake = Handshake.None;
@@ -808,12 +770,12 @@ namespace TBF.BenchControl.WaterMeters.iPerl
/// true when type is OK
public bool VerifyIPerlType()
{
- if (iPerlCfg.MeterType == MeterType.AutoDetect || CalibrationStruct == null)
+ if (iperlHeadCfg.MeterType == MeterType.AutoDetect || CalibrationStruct == null)
{
return true;
}
- return iPerlCfg.MeterType == CalibrationStruct.MeterType;
+ return iperlHeadCfg.MeterType == CalibrationStruct.MeterType;
}
public static double UnitVolume(VolumeUnits units)
@@ -829,17 +791,17 @@ namespace TBF.BenchControl.WaterMeters.iPerl
public double ScalingFactor()
{
- if ((iPerlCfg.MeterType == MeterType.AutoDetect) && (CalibrationStruct != null))
+ if ((iperlHeadCfg.MeterType == MeterType.AutoDetect) && (CalibrationStruct != null))
{
- return WaterMeter.ScalingFactor(CalibrationStruct.MeterType);
+ return IperlHead.ScalingFactor(CalibrationStruct.MeterType);
}
- else if (iPerlCfg.MeterType != MeterType.AutoDetect)
+ else if (iperlHeadCfg.MeterType != MeterType.AutoDetect)
{
- return WaterMeter.ScalingFactor(iPerlCfg.MeterType);
+ return IperlHead.ScalingFactor(iperlHeadCfg.MeterType);
}
else
{
- return WaterMeter.ScalingFactor(MeterType.DN20);
+ return IperlHead.ScalingFactor(MeterType.DN20);
}
}
diff --git a/TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeterCfg.cs b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHeadCfg.cs
similarity index 87%
rename from TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeterCfg.cs
rename to TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHeadCfg.cs
index b0bf9244f..025961f5e 100644
--- a/TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeterCfg.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHeadCfg.cs
@@ -11,11 +11,11 @@ using Config.Entities;
using TBF.BenchControl.Generic;
using TBF.Resources;
-namespace TBF.BenchControl.WaterMeters.iPerl
+namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
{
- public class WaterMeterCfg : ComponentCfgBase, Generic.IComponentCfg
+ public class IperlHeadCfg : ComponentCfgBase, Generic.IComponentCfg
{
- public IComponentCfgCtrl GetControl() { return new WaterMeterCfgCtrl(); }
+ public IComponentCfgCtrl GetControl() { return new IperlHeadCfgCtrl(); }
///
/// Serialized parameters
@@ -44,7 +44,7 @@ namespace TBF.BenchControl.WaterMeters.iPerl
/// Private parameterless constructor invoked by all other (public) constructors
- WaterMeterCfg()
+ IperlHeadCfg()
{
Name = "iPerl";
ParentName = string.Empty;
@@ -54,7 +54,7 @@ namespace TBF.BenchControl.WaterMeters.iPerl
ProcParams = new ProcParams(true);
}
- public WaterMeterCfg(IComponentFactory factory)
+ public IperlHeadCfg(IComponentFactory factory)
: this()
{
this.Factory = factory;
diff --git a/TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeterCfgCtrl.cs b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHeadCfgCtrl.cs
similarity index 93%
rename from TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeterCfgCtrl.cs
rename to TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHeadCfgCtrl.cs
index ac1bb0687..2015b8bda 100644
--- a/TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeterCfgCtrl.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHeadCfgCtrl.cs
@@ -1,6 +1,5 @@
///
-/// Copyright (c) 2015 Sensus Metering Systems
-/// Author: Milan Hanajík
+/// Copyright (c) 2015-2017 Sensus Metering Systems
///
using System;
using System.Net;
@@ -10,26 +9,26 @@ using log4net;
using TBF.BenchControl.Generic;
using TBF.Resources;
-namespace TBF.BenchControl.WaterMeters.iPerl
+namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
{
- public partial class WaterMeterCfgCtrl : UserControl, IComponentCfgCtrl
+ public partial class IperlHeadCfgCtrl : UserControl, IComponentCfgCtrl
{
- static readonly ILog log = LogManager.GetLogger(typeof(WaterMeterCfgCtrl));
+ static readonly ILog log = LogManager.GetLogger(typeof(IperlHeadCfgCtrl));
public bool ShowMore { get { return false; } }
- WaterMeterCfg config;
+ IperlHeadCfg config;
public IComponentCfg Config
{
get { return config as IComponentCfg; }
set
{
- config = value as WaterMeterCfg;
+ config = value as IperlHeadCfg;
Redraw();
}
}
- public WaterMeterCfgCtrl()
+ public IperlHeadCfgCtrl()
{
InitializeComponent();
}
diff --git a/TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeterCfgCtrl.designer.cs b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHeadCfgCtrl.designer.cs
similarity index 98%
rename from TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeterCfgCtrl.designer.cs
rename to TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHeadCfgCtrl.designer.cs
index 0c787f44d..46a5569fe 100644
--- a/TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeterCfgCtrl.designer.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHeadCfgCtrl.designer.cs
@@ -1,10 +1,9 @@
///
-/// Copyright (c) 2013-2015 Sensus Metering Systems
-/// Author: Milan Hanajík
+/// Copyright (c) 2015-2017 Sensus Metering Systems
///
-namespace TBF.BenchControl.WaterMeters.iPerl
+namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
{
- partial class WaterMeterCfgCtrl
+ partial class IperlHeadCfgCtrl
{
///
/// Required designer variable.
diff --git a/TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeterCfgCtrl.resx b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHeadCfgCtrl.resx
similarity index 100%
rename from TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeterCfgCtrl.resx
rename to TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/IperlHeadCfgCtrl.resx
diff --git a/TestBenchFramework/BenchControl/WaterMeters/iPerl/OptoReceivedEventArgs.cs b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/OptoReceivedEventArgs.cs
similarity index 67%
rename from TestBenchFramework/BenchControl/WaterMeters/iPerl/OptoReceivedEventArgs.cs
rename to TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/OptoReceivedEventArgs.cs
index f4c330443..fb59bceb2 100644
--- a/TestBenchFramework/BenchControl/WaterMeters/iPerl/OptoReceivedEventArgs.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/OptoReceivedEventArgs.cs
@@ -1,13 +1,12 @@
///
-/// Copyright (c) 2015 Sensus Metering Systems
-/// Author: Milan Hanajík
+/// Copyright (c) 2015-2017 Sensus Metering Systems
///
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
-namespace TBF.BenchControl.WaterMeters.iPerl
+namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
{
public class OptoReceivedEventArgs : EventArgs
{
diff --git a/TestBenchFramework/BenchControl/WaterMeters/iPerl/OptoTelegramRaw.cs b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/OptoTelegramRaw.cs
similarity index 98%
rename from TestBenchFramework/BenchControl/WaterMeters/iPerl/OptoTelegramRaw.cs
rename to TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/OptoTelegramRaw.cs
index 0df4af142..1cc1f3731 100644
--- a/TestBenchFramework/BenchControl/WaterMeters/iPerl/OptoTelegramRaw.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/OptoTelegramRaw.cs
@@ -1,7 +1,10 @@
-using System;
+///
+/// Copyright (c) 2015-2017 Sensus Metering Systems
+///
+using System;
using System.Globalization;
-namespace TBF.BenchControl.WaterMeters.iPerl
+namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
{
public class OptoTelegramRaw
{
diff --git a/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/ProcParams.cs b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/ProcParams.cs
new file mode 100644
index 000000000..ed860c806
--- /dev/null
+++ b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/ProcParams.cs
@@ -0,0 +1,169 @@
+///
+/// Copyright (c) 2015-2017 Sensus Metering Systems
+///
+using System;
+using System.IO;
+using System.Text;
+using System.Xml.Serialization;
+using Config.Entities;
+using TBF.BenchControl.Generic;
+using TBF.Resources;
+
+namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
+{
+ public class ProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
+ {
+ public MeterType MeterType;
+ public int FactorLimitLo; /// Lower limit for the calibration factor
+ public int FactorLimitHi; /// Upper limit for the calibration factor
+#if ORACLE_DB
+ public int WMType_ID; /// Required for Oracle DB: ID_WZTyp in table VT_PRUEFPUNKT_SOLL_SD
+ public int WMType_Rev; /// Required for Oracle DB: Rev_WZTyp in table VT_PRUEFPUNKT_SOLL_SD
+#endif
+
+
+ public override void InitializeAll()
+ {
+ MeterType = MeterType.AutoDetect;
+ FactorLimitLo = 1000;
+ FactorLimitHi = 8000;
+#if ORACLE_DB
+ WMType_ID = 2; /// Value for iPerl DN15
+ WMType_Rev = 1; /// Value for iPerl DN15
+#endif
+ }
+
+ string[] paramNames = new string[]
+ {
+ "iPerl type",
+ "Calib. factor Lo",
+ "Calib. factor Hi",
+#if ORACLE_DB
+ "WMType ID",
+ "WMType Rev.",
+#endif
+ };
+ public override string ParamName(int i) { return paramNames[i]; }
+ public override int ParamsCount() { return paramNames.Length; }
+
+ public override string ToString(int i)
+ {
+ switch (i)
+ {
+ case 0: return MeterType.ToString();
+ case 1: return FactorLimitLo.ToString();
+ case 2: return FactorLimitHi.ToString();
+#if ORACLE_DB
+ case 3: return WMType_ID.ToString();
+ case 4: return WMType_Rev.ToString();
+#endif
+ default: return string.Empty;
+ }
+ }
+
+ public void UpdateParam(int i, string strValue)
+ {
+ switch (i)
+ {
+ case 0:
+ for (MeterType mt = 0; mt < MeterType.Count; mt++)
+ {
+ if (mt.ToString().Equals(strValue)) { MeterType = mt; return; }
+ }
+ break;
+ case 1: FactorLimitLo = int.Parse(strValue); return;
+ case 2: FactorLimitHi = int.Parse(strValue); return;
+#if ORACLE_DB
+ case 3: WMType_ID = int.Parse(strValue); return;
+ case 4: WMType_Rev = int.Parse(strValue); return;
+#endif
+ default: return;
+ }
+ }
+
+ public bool ValidateParam(int i, string strValue, out string message)
+ {
+ message = string.Empty;
+
+ int iDummy;
+
+ switch (i)
+ {
+ case 0:
+ for (MeterType mt = 0; mt < MeterType.Count; mt++) if (mt.ToString().Equals(strValue)) return true;
+ break;
+ case 1:
+ case 2:
+ if (int.TryParse(strValue, out iDummy) && iDummy >= 1000 && iDummy <= 8000) return true;
+ break;
+
+#if ORACLE_DB
+ case 3: /// WMType_ID
+ case 4: /// WMType_Rev
+ if (int.TryParse(strValue, out iDummy)) return true;
+ break;
+#endif
+ default:
+ message = "Invalid index";
+ return false;
+ }
+
+ message = ParamName(i) + " is invalid";
+ return false;
+ }
+
+ void CopyContentTo(ProcParams prms)
+ {
+ prms.MeterType = this.MeterType;
+ prms.FactorLimitLo = this.FactorLimitLo;
+ prms.FactorLimitHi = this.FactorLimitHi;
+#if ORACLE_DB
+ prms.WMType_ID = this.WMType_ID;
+ prms.WMType_Rev = this.WMType_Rev;
+#endif
+ }
+
+ public IParamsProvider Clone()
+ {
+ ProcParams pars = new ProcParams();
+ CopyContentTo(pars);
+ return pars;
+ }
+
+ public override void UpdateProcedureParams(ComponentProcedure dbEntity)
+ {
+ if (dbEntity == null) return;
+ try
+ {
+ ProcParams tmp = (ProcParams)(new XmlSerializer(typeof(ProcParams)))
+ .Deserialize(new StringReader(dbEntity.Parameters));
+
+ procedureParamsEntity = dbEntity;
+ componentName = dbEntity.CmpntName;
+ procedure = dbEntity.Procedure;
+
+ tmp.CopyContentTo(this);
+ }
+ catch
+ {
+ }
+ }
+
+
+ public ProcParams()
+ {
+ }
+
+ public ProcParams(bool initialize)
+ {
+ if (initialize) InitializeAll();
+ }
+
+ public ProcParams(ComponentProcedure procParamsEntity, string componentName, Procedure procedure)
+ {
+ this.procedureParamsEntity = procParamsEntity;
+ this.componentName = componentName;
+ this.procedure = procedure;
+ }
+ }
+}
diff --git a/TestBenchFramework/BenchControl/WaterMeters/iPerl/StatusStruct.cs b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/StatusStruct.cs
similarity index 97%
rename from TestBenchFramework/BenchControl/WaterMeters/iPerl/StatusStruct.cs
rename to TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/StatusStruct.cs
index 864b1b1ec..d7954a226 100644
--- a/TestBenchFramework/BenchControl/WaterMeters/iPerl/StatusStruct.cs
+++ b/TestBenchFramework/BenchControl/TestMethods/iPerlCommunication/iPerlHead/StatusStruct.cs
@@ -1,10 +1,9 @@
///
-/// Copyright (c) 2015 Sensus Metering Systems
-/// Author: Milan Hanajík
+/// Copyright (c) 2015-2017 Sensus Metering Systems
///
using System;
-namespace TBF.BenchControl.WaterMeters.iPerl
+namespace TBF.BenchControl.TestMethods.iPerlCommunication.iPerlHead
{
public class StatusStruct
{
diff --git a/TestBenchFramework/BenchControl/WaterMeters/WaterMeter/WaterMeter.cs b/TestBenchFramework/BenchControl/WaterMeters/WaterMeter/WaterMeter.cs
index ddb5e827d..89b30648b 100644
--- a/TestBenchFramework/BenchControl/WaterMeters/WaterMeter/WaterMeter.cs
+++ b/TestBenchFramework/BenchControl/WaterMeters/WaterMeter/WaterMeter.cs
@@ -1,10 +1,7 @@
///
-/// Copyright (c) 2013-2015 Sensus Metering Systems
+/// Copyright (c) 2013-2017 Sensus Metering Systems
///
-using System;
-using System.Collections.Generic;
using log4net;
-using TBF.BenchControl;
using Config.Entities;
namespace TBF.BenchControl.WaterMeters.WaterMeter
@@ -59,7 +56,27 @@ namespace TBF.BenchControl.WaterMeters.WaterMeter
/// Water: cold / hot
public Config.Entities.Medium WaterTemp { get { return waterMeterCfg.ProcParams.WaterTemp; } }
- /// Properties set by the Begin and the End form
+#if IPERL
+ public ushort OriginalCalibFactor;
+ public ushort CalibFactor;
+
+ public double Q2ErrorWOCorrection;
+ public bool Q2CorrectionDone;
+ public double Q2Correction;
+ public int Q2CorrRFlow;
+ public int Q2CorrLFlow;
+
+ public double Diff2Hz8Hz;
+ public bool Hz2CorrectionDone;
+ public int Hz2CorrectionFactor;
+#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
{
get { return serialNr; }
diff --git a/TestBenchFramework/BenchControl/WaterMeters/iPerl/ProcParams.cs b/TestBenchFramework/BenchControl/WaterMeters/iPerl/ProcParams.cs
deleted file mode 100644
index 7f58ac464..000000000
--- a/TestBenchFramework/BenchControl/WaterMeters/iPerl/ProcParams.cs
+++ /dev/null
@@ -1,369 +0,0 @@
-///
-/// Copyright (c) 2015-2017 Sensus Metering Systems
-/// Author: Milan Hanajík
-///
-using System;
-using System.IO;
-using System.Text;
-using System.Xml.Serialization;
-using Config.Entities;
-using TBF.BenchControl.Generic;
-using TBF.Resources;
-
-namespace TBF.BenchControl.WaterMeters.iPerl
-{
- public class ProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
- {
- public string ProductName; /// Znak fabryczny (PL)
- public string Producer; /// Producent (PL), Hersteller (D)
-
- public float DN;
- public float L; /// stavebná dĺžka [mm]
- public Mounting Mounting;
-
- public float Q4; /// [m3/h]
- public float Qn; /// [m3/h]
- public float Q2; /// [m3/h]
- public float Q1; /// [m3/h]
-
- public string MetrologicalClass; /// Metr. Klasse
- public TemperatureClass TemperatureClass;
- public PressureLossClass PressureLossClass;
- public MaxAdmissiblePressure MaxAdmissiblePressure;
- public FlowProfileSensitivityClass FlowProfileSensitivityClass;
-
- public string ApprovalInfo; /// Zulassungszeichen, WE (PL)
- public string Certificate;
-
- public float PulsesPerLtr; /// Target low limit of the flow increase or decrease
-
- public string Text1;
- public string Text2;
- public string Text3;
- public string Text4;
- public string Text5;
- public MeterType MeterType;
-#if ORACLE_DB
- public int WMType_ID; /// Required for Oracle DB: ID_WZTyp in table VT_PRUEFPUNKT_SOLL_SD
- public int WMType_Rev; /// Required for Oracle DB: Rev_WZTyp in table VT_PRUEFPUNKT_SOLL_SD
-#endif
- public int FactorLimitLo; /// Lower limit for the calibration factor
- public int FactorLimitHi; /// Upper limit for the calibration factor
-
-
- public override void InitializeAll()
- {
- ProductName = string.Empty;
- Producer = string.Empty;
- DN = 0;
- L = 0;
- Mounting = Mounting.NotSpecified;
- Q4 = 4.0f;
- Qn = 2.5f;
- Q2 = 0.005f;
- Q1 = 0.003125f;
- MetrologicalClass = "R800";
- TemperatureClass = TemperatureClass.NotSpecified;
- PressureLossClass = PressureLossClass.NotSpecified;
- MaxAdmissiblePressure = MaxAdmissiblePressure.NotSpecified;
- FlowProfileSensitivityClass = FlowProfileSensitivityClass.NotSpecified;
- ApprovalInfo = string.Empty;
- Certificate = string.Empty;
- PulsesPerLtr = 1.0f;
- Text1 = string.Empty;
- Text2 = string.Empty;
- Text3 = string.Empty;
- Text4 = string.Empty;
- Text5 = string.Empty;
- MeterType = MeterType.AutoDetect;
-#if ORACLE_DB
- WMType_ID = 2; /// Value for iPerl DN15
- WMType_Rev = 1; /// Value for iPerl DN15
-#endif
- FactorLimitLo = 1000;
- FactorLimitHi = 8000;
- }
-
- string[] paramNames = new string[]
- {
- Strings.Product_name,
- Strings.Producer,
- "DN",
- Strings.L,
- Strings.Mounting,
- "Q4",
- "Q3",
- "Q2",
- "Q1",
- Strings.Metrological_class,
- Strings.Temperature_class,
- Strings.Pressure_loss_class,
- Strings.Maximum_admissible_pressure,
- Strings.Flow_profile_sensitivity_class,
- Strings.Approval_info,
- Strings.Certificate,
- Strings.PulsesPerLtr,
- "Text1",
- "Text2",
- "Text3",
- "Text4",
- "Text5",
- "iPerl type",
-#if ORACLE_DB
- "WMType ID",
- "WMType Rev.",
-#endif
- "Calib. factor Lo",
- "Calib. factor Hi",
- };
- public override string ParamName(int i) { return paramNames[i]; }
- public override int ParamsCount() { return paramNames.Length; }
-
- public override string ToString(int i)
- {
- switch (i)
- {
- case 0: return ProductName;
- case 1: return Producer;
- case 2: return DN.ToString();
- case 3: return L.ToString();
- case 4: return Mounting.ToDescription();
- case 5: return Q4.ToString();
- case 6: return Qn.ToString();
- case 7: return Q2.ToString();
- case 8: return Q1.ToString();
- case 9: return MetrologicalClass;
- case 10: return TemperatureClass.ToDescription();
- case 11: return PressureLossClass.ToDescription();
- case 12: return MaxAdmissiblePressure.ToDescription();
- case 13: return FlowProfileSensitivityClass.ToDescription();
- case 14: return ApprovalInfo;
- case 15: return Certificate;
- case 16: return PulsesPerLtr.ToString();
- case 17: return Text1;
- case 18: return Text2;
- case 19: return Text3;
- case 20: return Text4;
- case 21: return Text5;
- case 22: return MeterType.ToString();
-#if ORACLE_DB
- case 23: return WMType_ID.ToString();
- case 24: return WMType_Rev.ToString();
-#endif
- case 25: return FactorLimitLo.ToString();
- case 26: return FactorLimitHi.ToString();
- default: return string.Empty;
- }
- }
-
- public void UpdateParam(int i, string strValue)
- {
- switch (i)
- {
- case 0: ProductName = strValue; return;
- case 1: Producer = strValue; return;
- case 2: DN = Utils.ParseUFloat(strValue); return;
- case 3: L = Utils.ParseUFloat(strValue); return;
- case 4:
- for (Mounting m = 0; m < Mounting.Count; m++)
- {
- if (m.ToDescription().Equals(strValue)) { Mounting = m; return; }
- }
- break;
- case 5: Q4 = Utils.ParseUFloat(strValue); return;
- case 6: Qn = Utils.ParseUFloat(strValue); return;
- case 7: Q2 = Utils.ParseUFloat(strValue); return;
- case 8: Q1 = Utils.ParseUFloat(strValue); return;
- case 9: MetrologicalClass = strValue; return;
- case 10:
- for (TemperatureClass tc = 0; tc < TemperatureClass.Count; tc++)
- {
- if (tc.ToDescription().Equals(strValue)) { TemperatureClass = tc; return; }
- }
- break;
- case 11:
- for (PressureLossClass dp = 0; dp < PressureLossClass.Count; dp++)
- {
- if (dp.ToDescription().Equals(strValue)) { PressureLossClass = dp; return; }
- }
- break;
- case 12:
- for (MaxAdmissiblePressure map = 0; map < MaxAdmissiblePressure.Count; map++)
- {
- if (map.ToDescription().Equals(strValue)) { MaxAdmissiblePressure = map; return; }
- }
- break;
- case 13:
- for (FlowProfileSensitivityClass fps = 0; fps < FlowProfileSensitivityClass.Count; fps++)
- {
- if (fps.ToDescription().Equals(strValue)) { FlowProfileSensitivityClass = fps; return; }
- }
- break;
- case 14: ApprovalInfo = strValue; return;
- case 15: Certificate = strValue; return;
- case 16: PulsesPerLtr = Utils.ParseUFloat(strValue); return;
- case 17: Text1 = strValue; return;
- case 18: Text2 = strValue; return;
- case 19: Text3 = strValue; return;
- case 20: Text4 = strValue; return;
- case 21: Text5 = strValue; return;
- case 22:
- for (MeterType mt = 0; mt < MeterType.Count; mt++)
- {
- if (mt.ToString().Equals(strValue)) { MeterType = mt; return; }
- }
- break;
-#if ORACLE_DB
- case 23: WMType_ID = int.Parse(strValue); return;
- case 24: WMType_Rev = int.Parse(strValue); return;
-#endif
- case 25: FactorLimitLo = int.Parse(strValue); return;
- case 26: FactorLimitHi = int.Parse(strValue); return;
- default: return;
- }
- }
-
- public bool ValidateParam(int i, string strValue, out string message)
- {
- message = string.Empty;
-
- float dummy;
- int iDummy;
-
- switch (i)
- {
- case 0: /// ProductName
- case 1: /// Producer
- case 9: /// MetrologicalClass
- case 14: /// ApprovalInfo
- case 15: /// Certificate
- case 17: /// Text1
- case 18: /// Text2
- case 19: /// Text3
- case 20: /// Text4
- case 21: /// Text5
- return true;
- case 2: /// DN
- case 3: /// L
- case 5: /// Q4
- case 6: /// Q3
- case 7: /// Q2
- case 8: /// Q1
- case 16: /// PulsesPerLtr
- if (Utils.TryParseUFloat(strValue, out dummy)) return true;
- break;
- case 4:
- for (Mounting tc = 0; tc < Mounting.Count; tc++) if (tc.ToDescription().Equals(strValue)) return true;
- break;
- case 10:
- for (TemperatureClass tc = 0; tc < TemperatureClass.Count; tc++) if (tc.ToDescription().Equals(strValue)) return true;
- break;
- case 11:
- for (PressureLossClass tc = 0; tc < PressureLossClass.Count; tc++) if (tc.ToDescription().Equals(strValue)) return true;
- break;
- case 12:
- for (MaxAdmissiblePressure map = 0; map < MaxAdmissiblePressure.Count; map++) if (map.ToDescription().Equals(strValue)) return true;
- break;
- case 13:
- for (FlowProfileSensitivityClass tc = 0; tc < FlowProfileSensitivityClass.Count; tc++) if (tc.ToDescription().Equals(strValue)) return true;
- break;
- case 22:
- for (MeterType mt = 0; mt < MeterType.Count; mt++) if (mt.ToString().Equals(strValue)) return true;
- break;
-#if ORACLE_DB
- case 23: /// WMType_ID
- case 24: /// WMType_Rev
- if (int.TryParse(strValue, out iDummy)) return true;
- break;
-#endif
- case 25:
- case 26:
- if (int.TryParse(strValue, out iDummy) && iDummy >= 1000 && iDummy <= 8000) return true;
- break;
-
- default:
- message = "Invalid index";
- return false;
- }
-
- message = ParamName(i) + " is invalid";
- return false;
- }
-
- void CopyContentTo(ProcParams prms)
- {
- prms.ProductName = this.ProductName;
- prms.Producer = this.Producer;
- prms.DN = this.DN;
- prms.L = this.L;
- prms.Mounting = this.Mounting;
- prms.Q4 = this.Q4;
- prms.Qn = this.Qn;
- prms.Q2 = this.Q2;
- prms.Q1 = this.Q1;
- prms.MetrologicalClass = this.MetrologicalClass;
- prms.TemperatureClass = this.TemperatureClass;
- prms.PressureLossClass = this.PressureLossClass;
- prms.MaxAdmissiblePressure = this.MaxAdmissiblePressure;
- prms.FlowProfileSensitivityClass = this.FlowProfileSensitivityClass;
- prms.ApprovalInfo = this.ApprovalInfo;
- prms.Certificate = this.Certificate;
- prms.PulsesPerLtr = this.PulsesPerLtr;
- prms.Text1 = this.Text1;
- prms.Text2 = this.Text2;
- prms.Text3 = this.Text3;
- prms.Text4 = this.Text4;
- prms.Text5 = this.Text5;
- prms.MeterType = this.MeterType;
-#if ORACLE_DB
- prms.WMType_ID = this.WMType_ID;
- prms.WMType_Rev = this.WMType_Rev;
-#endif
- prms.FactorLimitLo = this.FactorLimitLo;
- prms.FactorLimitHi = this.FactorLimitHi;
- }
-
- public IParamsProvider Clone()
- {
- ProcParams pars = new ProcParams();
- CopyContentTo(pars);
- return pars;
- }
-
- public override void UpdateProcedureParams(ComponentProcedure dbEntity)
- {
- if (dbEntity == null) return;
- try
- {
- ProcParams tmp = (ProcParams)(new XmlSerializer(typeof(ProcParams)))
- .Deserialize(new StringReader(dbEntity.Parameters));
-
- procedureParamsEntity = dbEntity;
- componentName = dbEntity.CmpntName;
- procedure = dbEntity.Procedure;
-
- tmp.CopyContentTo(this);
- }
- catch
- {
- }
- }
-
-
- public ProcParams()
- {
- }
-
- public ProcParams(bool initialize)
- {
- if (initialize) InitializeAll();
- }
-
- public ProcParams(ComponentProcedure procParamsEntity, string componentName, Procedure procedure)
- {
- this.procedureParamsEntity = procParamsEntity;
- this.componentName = componentName;
- this.procedure = procedure;
- }
- }
-}
diff --git a/TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeterFactory.cs b/TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeterFactory.cs
deleted file mode 100644
index 2034f5191..000000000
--- a/TestBenchFramework/BenchControl/WaterMeters/iPerl/WaterMeterFactory.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-///
-/// Copyright (c) 2015-2016 Sensus Metering Systems
-///
-using System.Collections.Generic;
-using TBF.BenchControl.Generic;
-
-namespace TBF.BenchControl.WaterMeters.iPerl
-{
- public class WaterMeterFactory : IComponentFactory
- {
- public string ClassName { get { return "iPerl"; } }
-
- public void ResetStaticProperties() { WaterMeter.ResetStaticProperties(); }
-
- public IComponent DummyComponent() { return new WaterMeter(); }
-
- public IComponent GetComponent(IComponentCfg cfg, IList components) { return new WaterMeter(cfg); }
-
- public IComponentCfg DefaultConfig() { return new WaterMeterCfg(this); }
-
- public IComponentCfg CmpntCfgFromCmpntEntity(Config.Entities.Component component)
- {
- return ComponentCfgBase.CreateFromDbEntity(typeof(WaterMeterCfg), component, this);
- }
- }
-}
diff --git a/TestBenchFramework/TBF.csproj b/TestBenchFramework/TBF.csproj
index 38a9f4a68..121e1b9fa 100644
--- a/TestBenchFramework/TBF.csproj
+++ b/TestBenchFramework/TBF.csproj
@@ -833,6 +833,22 @@
iPerlCommunicationForm.cs
+
+
+
+
+
+
+
+ UserControl
+
+
+ IperlHeadCfgCtrl.cs
+
+
+
+
+
@@ -856,22 +872,6 @@
-
-
-
-
-
-
-
-
-
-
- UserControl
-
-
- WaterMeterCfgCtrl.cs
-
-
@@ -2042,6 +2042,9 @@
CycleDlg.cs
+
+ IperlHeadCfgCtrl.cs
+
CfgCtrl.cs
@@ -2084,9 +2087,6 @@
TestMethodCfgCtrl.cs
-
- WaterMeterCfgCtrl.cs
-
WaterMeterCfgCtrl.cs