Genesis heap
This commit is contained in:
parent
b2276c086c
commit
ab0e5ea82a
@ -1,5 +1,5 @@
|
||||
## Version History
|
||||
|
||||
| Version | Target Environment | Title | Description |
|
||||
|------------|--------------------------------------------------------------|-----------------------------------------------------|------------------------------------|
|
||||
| 3.9.2149.0 | HeatMeters, Heat meter sensors, Procedure Dilog, Tab Process | Excanged columns value 'Sensor' and 'Heat meter sensor' | Fix in code ProcedureDlg, row 1851 |
|
||||
| Version | Source of change | Target Environment | Title | Description |
|
||||
|------------|----------------------|--------------------------------------------------------------|-----------------------------------------------------|------------------------------------|
|
||||
| 3.9.2149.0 | Michal databse error | HeatMeters, Heat meter sensors, Procedure Dilog, Tab Process | Excanged columns value 'Sensor' and 'Heat meter sensor' | Fix in code ProcedureDlg, row 1851 |
|
||||
|
||||
@ -6,10 +6,13 @@ using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using log4net;
|
||||
using Common;
|
||||
using Config.Entities;
|
||||
using Results.Entities;
|
||||
using TBF.Rig;
|
||||
using TBF.Rig.GenericDevices;
|
||||
using TBF.Boxes;
|
||||
using TBF.Resources;
|
||||
using TBF.Rig.TestMethods.GenesisCommunication.GenesisHead;
|
||||
using TBF.UiBridge;
|
||||
|
||||
namespace TBF.Rig.TestMethods.FlyingStart
|
||||
@ -135,6 +138,8 @@ namespace TBF.Rig.TestMethods.FlyingStart
|
||||
Bridge.OnTestSelected(this, new TestSelectedEventArgs(test, repetitionNr, inPath, benchPath, outPath, sensPath, heatMetersPath));
|
||||
string testName = Results.Utils.GetTestName(test.Name, test.Repeats, repetitionNr);
|
||||
TestStartTime = DateTime.Now;
|
||||
// Genesis switch
|
||||
bool atleastOneGenesis = GenesisHeadBatch.Start(sensPath.RegisterReaders, Program.LocalSettings.LastSNTexts);
|
||||
|
||||
///
|
||||
/// Optionally display prompt to emerge temperature meters to appropriate baths for heat meters test
|
||||
@ -323,6 +328,20 @@ namespace TBF.Rig.TestMethods.FlyingStart
|
||||
|
||||
temperature_set:
|
||||
|
||||
//TODO genesis - check with genesis switch
|
||||
if (atleastOneGenesis)
|
||||
{
|
||||
if (test.Name.ToLower().Contains("calib"))
|
||||
{
|
||||
GenesisHeadBatch.BatchHolder.Value.MetersLogin();
|
||||
GenesisHeadBatch.BatchHolder.Value.MetersInitCalibration();
|
||||
|
||||
} else if (test.Name.ToLower().Contains("Init"))
|
||||
{
|
||||
GenesisHeadBatch.BatchHolder.Value.MetersLogin();
|
||||
GenesisHeadBatch.BatchHolder.Value.MetersInitMeasurement();
|
||||
}
|
||||
}
|
||||
///
|
||||
/// Prepare cameras, ROI-s and measurementOperations
|
||||
///
|
||||
@ -358,7 +377,12 @@ namespace TBF.Rig.TestMethods.FlyingStart
|
||||
|
||||
foreach (var rr in sensPath.RegisterReaders)
|
||||
{
|
||||
if (rr is IRegReaderDatastream) (rr as IRegReaderDatastream).TestIsGoingToStartSoon(test, repetitionNr);
|
||||
if (rr is IRegReaderDatastream)
|
||||
(rr as IRegReaderDatastream).TestIsGoingToStartSoon(test, repetitionNr);
|
||||
|
||||
if (rr is GenesisHead) // Genesis - CORDONEL head
|
||||
(rr as GenesisHead).StartRead(test.Name, BatchRslts.Batch.BatchNr, repetitionNr);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -426,8 +450,21 @@ namespace TBF.Rig.TestMethods.FlyingStart
|
||||
|
||||
/// Measurement loop end
|
||||
StopRecordingStatistics();
|
||||
|
||||
//TODO genesis - check with genesis switch
|
||||
if (atleastOneGenesis)
|
||||
{
|
||||
if (test.Name.ToLower().Contains("calib"))
|
||||
{
|
||||
GenesisHeadBatch.BatchHolder.Value.MetersStopCalibration();
|
||||
}
|
||||
else if (test.Name.ToLower().Contains("Init"))
|
||||
{
|
||||
GenesisHeadBatch.BatchHolder.Value.MetersStopMeasurement();
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------
|
||||
//------------------------------------------------
|
||||
Bridge.OnActivity(this, Strings.Test_completed);
|
||||
//------------------------------------------------
|
||||
|
||||
@ -589,6 +626,7 @@ namespace TBF.Rig.TestMethods.FlyingStart
|
||||
GenericDevices.IRegReaderDatastream dstrReader = regReader as GenericDevices.IRegReaderDatastream;
|
||||
TestMethods.iPerlCommunication.iPerlHead.IperlHead iPerl = regReader as TestMethods.iPerlCommunication.iPerlHead.IperlHead;
|
||||
GenericDevices.IRegReaderLiveCamera cameraRoi = regReader as GenericDevices.IRegReaderLiveCamera;
|
||||
GenesisHead Genesis = regReader as GenesisHead;
|
||||
|
||||
if (meterRslt != null && regReader != null)
|
||||
{
|
||||
@ -596,83 +634,147 @@ namespace TBF.Rig.TestMethods.FlyingStart
|
||||
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;
|
||||
meterRslt.PulsesMeter = Convert.ToDouble(regReader.WMPulses);
|
||||
|
||||
if (dstrReader != null)
|
||||
{
|
||||
meterRslt.TimestampStart = dstrReader.TimestampSecStart;
|
||||
meterRslt.TimestampEnd = dstrReader.NoSamples ? (dstrReader.TimestampSecStart + tstRslt.TestTime) : dstrReader.TimestampSecEnd;
|
||||
meterRslt.TestTime = meterRslt.TimestampEnd - meterRslt.TimestampStart;
|
||||
meterRslt.VolumeStart = dstrReader.VolumeLtrStart; /// liter
|
||||
meterRslt.VolumeEnd = dstrReader.VolumeLtrEnd; /// liter
|
||||
meterRslt.VolumeMeter = Math.Abs(dstrReader.VolumeLtrEnd - dstrReader.VolumeLtrStart);
|
||||
meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime;
|
||||
meterRslt.PulsesMaster = tstRslt.PulsesMaster * meterRslt.TestTime / tstRslt.TestTime;
|
||||
|
||||
if (Genesis != null)
|
||||
{
|
||||
Genesis.Stop(tstRslt.TestTime, tstRslt.VolumeCTV);
|
||||
|
||||
if (iPerl != null)
|
||||
meterRslt.TimestampStart = Genesis.TimestampSecStart;
|
||||
meterRslt.TimestampEnd = Genesis.TimestampSecEnd;
|
||||
meterRslt.TestTime = Genesis.WMTestTime;
|
||||
meterRslt.VolumeStart = Genesis.BeginWMState;
|
||||
meterRslt.VolumeEnd = Genesis.EndWMState; /// liter
|
||||
meterRslt.VolumeMeter = Math.Abs(Genesis.WMVolume);
|
||||
meterRslt.VolumeRef = tstRslt.VolumeCTV;
|
||||
if (GenesisHeadBatch.MeterIdDetailResults == null)
|
||||
{
|
||||
if (iPerl.ResultCode != 0 && (meterRslt.WaterMeter.ResultCode & (int)Results.Entities.ResultCode.OptoErrorCodeMask) == 0)
|
||||
Genesis.Log("MeterIdDetailResults na!");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Genesis.DetailedResults != null)
|
||||
{
|
||||
meterRslt.WaterMeter.ResultCode |= iPerl.ResultCode;
|
||||
try
|
||||
{
|
||||
GenesisHeadBatch.MeterIdDetailResults.Add(meterRslt.SerialNr(), Genesis.DetailedResults);
|
||||
}
|
||||
catch (Exception ex) { Genesis.Log(ex.Message.ToString()); }
|
||||
}
|
||||
#if IPERL
|
||||
meterRslt.WaterMeter.CalibFactor = iPerl.CalibFactor;
|
||||
meterRslt.ExtraDataPath = iPerl.ExtraDataPath;
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 1) meterRslt.X1 = iPerl.X[0];
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 2) meterRslt.X2 = iPerl.X[1];
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 3) meterRslt.X3 = iPerl.X[2];
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 4) meterRslt.X4 = iPerl.X[3];
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 5) meterRslt.X5 = iPerl.X[4];
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 6) meterRslt.X6 = iPerl.X[5];
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 7) meterRslt.X7 = iPerl.X[6];
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 8) meterRslt.X8 = iPerl.X[7];
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 9) meterRslt.X9 = iPerl.X[8];
|
||||
#endif
|
||||
iPerl.LastTestResult2 = iPerl.LastTestResult; /// Save shift previous test result
|
||||
iPerl.LastTestResult = meterRslt; /// Save this test result
|
||||
}
|
||||
}
|
||||
else if (cameraRoi != null)
|
||||
{
|
||||
meterRslt.TimestampStart = cameraRoi.TimestampStart; /// second
|
||||
meterRslt.TimestampEnd = cameraRoi.TimestampEnd; /// second
|
||||
|
||||
meterRslt.VolumeStart = cameraRoi.VolumeStart; /// liter
|
||||
meterRslt.VolumeEnd = cameraRoi.VolumeEnd; /// liter
|
||||
meterRslt.VolumeMeter = cameraRoi.VolumeEnd - cameraRoi.VolumeStart; /// liter
|
||||
|
||||
if (meterRslt.VolumeMeter != 0)
|
||||
{
|
||||
/// Normal measurement with camera
|
||||
meterRslt.TestTime = cameraRoi.TimestampEnd - cameraRoi.TimestampStart; /// second
|
||||
meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime;
|
||||
meterRslt.PulsesMaster = tstRslt.PulsesMaster * meterRslt.TestTime / tstRslt.TestTime;
|
||||
}
|
||||
else
|
||||
{
|
||||
/// None or one pulse from the water meter using camera
|
||||
meterRslt.TestTime = tstRslt.TestTime;
|
||||
meterRslt.VolumeRef = tstRslt.VolumeCTV;
|
||||
meterRslt.PulsesMaster = tstRslt.PulsesMaster;
|
||||
else
|
||||
{
|
||||
Genesis.Log("DetailedResults na!");
|
||||
}
|
||||
}
|
||||
|
||||
Genesis.Log("VolumeRef=" + meterRslt.VolumeRef);
|
||||
Genesis.Log("TestTime Meter =" + meterRslt.TestTime + "S, test time ref =" + tstRslt.TestTime + "s");
|
||||
Genesis.Log(" results for " + test.Name);
|
||||
Genesis.Log(" Ref Vol = " + meterRslt.VolumeRef + " m³");
|
||||
Genesis.Log(" Ref Time = " + tstRslt.TestTime + " s");
|
||||
Genesis.Log(" Meter Time = " + meterRslt.TestTime + " s");
|
||||
Genesis.Log(" Meter Vol = " + meterRslt.VolumeMeter + " m³");
|
||||
|
||||
var calError = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
|
||||
Genesis.Log(" MeterError = " + calError.ToString() + " %");
|
||||
}
|
||||
else
|
||||
{
|
||||
meterRslt.PulsesMaster = Convert.ToDouble(regReader.WMRefPulses);
|
||||
meterRslt.VolumeStart = 0;
|
||||
meterRslt.VolumeEnd = 0;
|
||||
meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// liter
|
||||
///
|
||||
if (regReader.WMPulses >= 1)
|
||||
{
|
||||
/// Normal measurement
|
||||
meterRslt.TestTime = cBrd.TestTimeWM(regReader.Position);
|
||||
meterRslt.VolumeRef = meterRslt.PulsesMaster * tstRslt.ConstMaster; /// liter
|
||||
}
|
||||
else
|
||||
{
|
||||
/// None or one pulse from the water meter
|
||||
meterRslt.TestTime = tstRslt.TestTime;
|
||||
meterRslt.VolumeRef = tstRslt.VolumeCTV; /// liter
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dstrReader != null)
|
||||
{
|
||||
meterRslt.TimestampStart = dstrReader.TimestampSecStart;
|
||||
meterRslt.TimestampEnd = dstrReader.NoSamples
|
||||
? (dstrReader.TimestampSecStart + tstRslt.TestTime)
|
||||
: dstrReader.TimestampSecEnd;
|
||||
meterRslt.TestTime = meterRslt.TimestampEnd - meterRslt.TimestampStart;
|
||||
meterRslt.VolumeStart = dstrReader.VolumeLtrStart; /// liter
|
||||
meterRslt.VolumeEnd = dstrReader.VolumeLtrEnd; /// liter
|
||||
meterRslt.VolumeMeter =
|
||||
Math.Abs(dstrReader.VolumeLtrEnd - dstrReader.VolumeLtrStart);
|
||||
meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime;
|
||||
meterRslt.PulsesMaster =
|
||||
tstRslt.PulsesMaster * meterRslt.TestTime / tstRslt.TestTime;
|
||||
|
||||
if (iPerl != null)
|
||||
{
|
||||
if (iPerl.ResultCode != 0 && (meterRslt.WaterMeter.ResultCode &
|
||||
(int)Results.Entities.ResultCode
|
||||
.OptoErrorCodeMask) == 0)
|
||||
{
|
||||
meterRslt.WaterMeter.ResultCode |= iPerl.ResultCode;
|
||||
}
|
||||
#if IPERL
|
||||
meterRslt.WaterMeter.CalibFactor = iPerl.CalibFactor;
|
||||
meterRslt.ExtraDataPath = iPerl.ExtraDataPath;
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 1)
|
||||
meterRslt.X1 = iPerl.X[0];
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 2)
|
||||
meterRslt.X2 = iPerl.X[1];
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 3)
|
||||
meterRslt.X3 = iPerl.X[2];
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 4)
|
||||
meterRslt.X4 = iPerl.X[3];
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 5)
|
||||
meterRslt.X5 = iPerl.X[4];
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 6)
|
||||
meterRslt.X6 = iPerl.X[5];
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 7)
|
||||
meterRslt.X7 = iPerl.X[6];
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 8)
|
||||
meterRslt.X8 = iPerl.X[7];
|
||||
if (TestMethods.iPerlCommunication.iPerlHead.IperlHead.FeatureVectorSize >= 9)
|
||||
meterRslt.X9 = iPerl.X[8];
|
||||
#endif
|
||||
iPerl.LastTestResult2 =
|
||||
iPerl.LastTestResult; /// Save shift previous test result
|
||||
iPerl.LastTestResult = meterRslt; /// Save this test result
|
||||
}
|
||||
}
|
||||
else if (cameraRoi != null)
|
||||
{
|
||||
meterRslt.TimestampStart = cameraRoi.TimestampStart; /// second
|
||||
meterRslt.TimestampEnd = cameraRoi.TimestampEnd; /// second
|
||||
|
||||
meterRslt.VolumeStart = cameraRoi.VolumeStart; /// liter
|
||||
meterRslt.VolumeEnd = cameraRoi.VolumeEnd; /// liter
|
||||
meterRslt.VolumeMeter = cameraRoi.VolumeEnd - cameraRoi.VolumeStart; /// liter
|
||||
|
||||
if (meterRslt.VolumeMeter != 0)
|
||||
{
|
||||
/// Normal measurement with camera
|
||||
meterRslt.TestTime =
|
||||
cameraRoi.TimestampEnd - cameraRoi.TimestampStart; /// second
|
||||
meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime;
|
||||
meterRslt.PulsesMaster =
|
||||
tstRslt.PulsesMaster * meterRslt.TestTime / tstRslt.TestTime;
|
||||
}
|
||||
else
|
||||
{
|
||||
/// None or one pulse from the water meter using camera
|
||||
meterRslt.TestTime = tstRslt.TestTime;
|
||||
meterRslt.VolumeRef = tstRslt.VolumeCTV;
|
||||
meterRslt.PulsesMaster = tstRslt.PulsesMaster;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
meterRslt.PulsesMaster = Convert.ToDouble(regReader.WMRefPulses);
|
||||
meterRslt.VolumeStart = 0;
|
||||
meterRslt.VolumeEnd = 0;
|
||||
meterRslt.VolumeMeter = meterRslt.PulsesMeter * regReader.LtrsPerPulse; /// liter
|
||||
///
|
||||
if (regReader.WMPulses >= 1)
|
||||
{
|
||||
/// Normal measurement
|
||||
meterRslt.TestTime = cBrd.TestTimeWM(regReader.Position);
|
||||
meterRslt.VolumeRef = meterRslt.PulsesMaster * tstRslt.ConstMaster; /// liter
|
||||
}
|
||||
else
|
||||
{
|
||||
/// None or one pulse from the water meter
|
||||
meterRslt.TestTime = tstRslt.TestTime;
|
||||
meterRslt.VolumeRef = tstRslt.VolumeCTV; /// liter
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
meterRslt.Error = Formulas.ErrorFromVolumes(meterRslt.VolumeMeter, meterRslt.VolumeRef);
|
||||
@ -724,10 +826,14 @@ namespace TBF.Rig.TestMethods.FlyingStart
|
||||
/// Append the results to the CSV-file
|
||||
allResults.Info(TestResult2CsvLine(testName, test.Part));
|
||||
|
||||
//TODO genesis - process result writing
|
||||
//ProcessDatabaseResultsWriting(test, tstRslt);
|
||||
|
||||
if (stopCycle) retVal = Event.ErrorFlagsStop;
|
||||
|
||||
stopTest:
|
||||
|
||||
GenesisHeadBatch.BatchHolder.Value.RemoveAllMeters();
|
||||
StopRecordingStatistics();
|
||||
|
||||
cBrd.StopAll(false);
|
||||
@ -748,8 +854,36 @@ namespace TBF.Rig.TestMethods.FlyingStart
|
||||
return new List<Event> { retVal };
|
||||
}
|
||||
|
||||
//backup how work genesis - not a clean code!
|
||||
// private void ProcessDatabaseResultsWriting(Test test, TestRslt tstRslt)
|
||||
// {
|
||||
// IList<Event> e;
|
||||
// if (!String.IsNullOrEmpty(test.Procedure.ResultsWriter))
|
||||
// {
|
||||
// string[] writers = StateMachine.Procedure.ResultsWriter.Split(new char[] { '~' });
|
||||
// foreach (var writerName in writers)
|
||||
// {
|
||||
// IResultsWriter writer = TbfComponents.FindComponent(writerName) as IResultsWriter;
|
||||
// if (writer != null && writer is )
|
||||
// {
|
||||
// var SensusLaWriter = ((DB.SensusLa.Database)writer);
|
||||
//
|
||||
// State.Create(string.Format("{0}({1}) : Store results into db.", test.Method, test.Name))
|
||||
// .AddOperation(checkUiOp)
|
||||
// .AddOperation(SensusLaWriter.WriteResultsOp(tstRslt, BatchRslts, GenesisHeadBatch.MeterIdDetailResults))
|
||||
// .EnterState();
|
||||
// do
|
||||
// {
|
||||
// e = StateMachine.WaitRunDevsRunOps();
|
||||
// }
|
||||
// while (!e.Contains(Event.Error) && !e.Contains(Event.ResultsWritten) && !e.Contains(Event.ResultsNotWritten));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
IList<Event> Simulate(Config.Entities.Test test, int repetitionNr, bool isLastRepetition,
|
||||
|
||||
IList<Event> Simulate(Config.Entities.Test test, int repetitionNr, bool isLastRepetition,
|
||||
Compound.TestParams compoundTestParams,
|
||||
HeatMeters.TestParams heatMetersTestParams,
|
||||
Common.DebugMode debugLevel)
|
||||
|
||||
@ -0,0 +1,197 @@
|
||||
///
|
||||
/// Copyright (c) 2015-2017 Sensus Metering Systems
|
||||
///
|
||||
using System;
|
||||
|
||||
namespace TBF.Rig.TestMethods.GenesisCommunication.GenesisHead
|
||||
{
|
||||
public class CalibrationStruct
|
||||
{
|
||||
public static readonly int Length = 35;
|
||||
|
||||
public Byte Version;
|
||||
public MeterType MeterType;
|
||||
public UInt16 Calibration;
|
||||
public VolumeUnits VolumeUnits;
|
||||
public FlowArrow FlowArrow;
|
||||
public UInt16 FWVersion;
|
||||
public UInt16[] TargetField;
|
||||
public UInt16 RecipMeanCurrent;
|
||||
public UInt16 ThresholdVolume;
|
||||
public UInt16 ThresholdTime;
|
||||
public UInt16 FlowActivationThr;
|
||||
public UInt16 VolumeArrowThr;
|
||||
public UInt32 CalibrationTime;
|
||||
public ulong SerialNumber;
|
||||
public MeterSealed MeterSealed;
|
||||
public byte CheckSum;
|
||||
|
||||
|
||||
public CalibrationStruct()
|
||||
{
|
||||
TargetField = new UInt16[3];
|
||||
}
|
||||
|
||||
public byte[] ToByteArray()
|
||||
{
|
||||
byte[] result = new byte[Length];
|
||||
|
||||
result[0] = Version;
|
||||
result[1] = (byte)MeterType;
|
||||
|
||||
result[2] = (byte)(Calibration & 0x00FF);
|
||||
result[3] = (byte)((Calibration >> 8) & 0x00FF);
|
||||
|
||||
result[4] = (byte)VolumeUnits;
|
||||
|
||||
result[5] = (byte)FlowArrow;
|
||||
|
||||
result[6] = (byte)(FWVersion & 0x00FF);
|
||||
result[7] = (byte)((FWVersion >> 8) & 0x00FF);
|
||||
|
||||
result[8] = (byte)( TargetField[0] & 0x00FF);
|
||||
result[9] = (byte)((TargetField[0] >> 8) & 0x00FF);
|
||||
result[10] = (byte)( TargetField[1] & 0x00FF);
|
||||
result[11] = (byte)((TargetField[1] >> 8) & 0x00FF);
|
||||
result[12] = (byte)( TargetField[2] & 0x00FF);
|
||||
result[13] = (byte)((TargetField[2] >> 8) & 0x00FF);
|
||||
|
||||
result[14] = (byte)(RecipMeanCurrent & 0x00FF);
|
||||
result[15] = (byte)((RecipMeanCurrent >> 8) & 0x00FF);
|
||||
|
||||
result[16] = (byte)(ThresholdVolume & 0x00FF);
|
||||
result[17] = (byte)((ThresholdVolume >> 8) & 0x00FF);
|
||||
|
||||
result[18] = (byte)(ThresholdTime & 0x00FF);
|
||||
result[19] = (byte)((ThresholdTime >> 8) & 0x00FF);
|
||||
|
||||
result[20] = (byte)(FlowActivationThr & 0x00FF);
|
||||
result[21] = (byte)((FlowActivationThr >> 8) & 0x00FF);
|
||||
|
||||
result[22] = (byte)(VolumeArrowThr & 0x00FF);
|
||||
result[23] = (byte)((VolumeArrowThr >> 8) & 0x00FF);
|
||||
|
||||
result[24] = (byte)(CalibrationTime & 0x000000FF);
|
||||
result[25] = (byte)((CalibrationTime >> 8) & 0x000000FF);
|
||||
result[26] = (byte)((CalibrationTime >> 16) & 0x000000FF);
|
||||
result[27] = (byte)((CalibrationTime >> 24) & 0x000000FF);
|
||||
|
||||
result[28] = (byte)(SerialNumber & 0x00000000000000FF);
|
||||
result[29] = (byte)((SerialNumber >> 8) & 0x00000000000000FF);
|
||||
result[30] = (byte)((SerialNumber >> 16) & 0x00000000000000FF);
|
||||
result[31] = (byte)((SerialNumber >> 24) & 0x00000000000000FF);
|
||||
result[32] = (byte)((SerialNumber >> 32) & 0x00000000000000FF);
|
||||
|
||||
result[33] = (byte)MeterSealed;
|
||||
result[34] = CheckSum;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a calibration structure from a complete byte array
|
||||
/// </summary>
|
||||
/// <param name="data">A complete byte array data</param>
|
||||
/// <returns>CalibrationStruct or null when byte array was not complete</returns>
|
||||
public static CalibrationStruct FromByteArray(byte[] data)
|
||||
{
|
||||
if (data.Length != Length) return null;
|
||||
|
||||
CalibrationStruct result = new CalibrationStruct();
|
||||
|
||||
result.Version = data[0];
|
||||
result.MeterType = (MeterType)data[1];
|
||||
result.Calibration = (UInt16)(data[2] + 256 * data[3]);
|
||||
result.VolumeUnits = (VolumeUnits)data[4];
|
||||
result.FlowArrow = (FlowArrow)data[5];
|
||||
result.FWVersion = (UInt16)(data[6] + 256 * data[7]);
|
||||
result.TargetField[0] = (UInt16)(data[8] + 256 * data[9]);
|
||||
result.TargetField[1] = (UInt16)(data[10] + 256 * data[11]);
|
||||
result.TargetField[2] = (UInt16)(data[12] + 256 * data[13]);
|
||||
result.RecipMeanCurrent = (UInt16)(data[14] + 256 * data[15]);
|
||||
result.ThresholdVolume = (UInt16)(data[16] + 256 * data[17]);
|
||||
result.ThresholdTime = (UInt16)(data[18] + 256 * data[19]);
|
||||
result.FlowActivationThr = (UInt16)(data[20] + 256 * data[21]);
|
||||
result.VolumeArrowThr = (UInt16)(data[22] + 256 * data[23]);
|
||||
result.CalibrationTime = (((UInt32)data[27] * 256 + data[26]) * 256 + data[25]) * 256 + data[24];
|
||||
result.SerialNumber = ((((UInt64)data[32] * 256 + data[31]) * 256 + data[30]) * 256 + data[29]) * 256 + data[28];
|
||||
result.MeterSealed = (MeterSealed)data[33];
|
||||
result.CheckSum = data[34];
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update the calibration structure from an incomplete byte array
|
||||
/// </summary>
|
||||
/// <param name="data">Byte array data</param>
|
||||
/// <param name="offset">Offset of byte array data in CalibrationStruct</param>
|
||||
/// <returns>true when successful, false when data are not appropriate</returns>
|
||||
public bool Update(byte[] data, int offset)
|
||||
{
|
||||
if (offset == 2 && data.Length == 2)
|
||||
{
|
||||
/// Data containing iPerl calibration factor
|
||||
Calibration = (UInt16)(data[2 - offset] + 256 * data[3 - offset]);
|
||||
return true;
|
||||
}
|
||||
else if (offset == 0 && data.Length == Length)
|
||||
{
|
||||
/// Data containing a complete CalibrationStruct
|
||||
Version = data[0];
|
||||
MeterType = (MeterType)data[1];
|
||||
Calibration = (UInt16)(data[2] + 256 * data[3]);
|
||||
VolumeUnits = (VolumeUnits)data[4];
|
||||
FlowArrow = (FlowArrow)data[5];
|
||||
FWVersion = (UInt16)(data[6] + 256 * data[7]);
|
||||
TargetField[0] = (UInt16)(data[8] + 256 * data[9]);
|
||||
TargetField[1] = (UInt16)(data[10] + 256 * data[11]);
|
||||
TargetField[2] = (UInt16)(data[12] + 256 * data[13]);
|
||||
RecipMeanCurrent = (UInt16)(data[14] + 256 * data[15]);
|
||||
ThresholdVolume = (UInt16)(data[16] + 256 * data[17]);
|
||||
ThresholdTime = (UInt16)(data[18] + 256 * data[19]);
|
||||
FlowActivationThr = (UInt16)(data[20] + 256 * data[21]);
|
||||
VolumeArrowThr = (UInt16)(data[22] + 256 * data[23]);
|
||||
CalibrationTime = (((UInt32)data[27] * 256 + data[26]) * 256 + data[25]) * 256 + data[24];
|
||||
SerialNumber = ((((UInt64)data[32] * 256 + data[31]) * 256 + data[30]) * 256 + data[29]) * 256 + data[28];
|
||||
MeterSealed = (MeterSealed)data[33];
|
||||
CheckSum = data[34];
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
public string FWVersionStr()
|
||||
{
|
||||
int d1 = (FWVersion >> 8) & 0x000F;
|
||||
int d2 = (FWVersion >> 12) & 0x000F;
|
||||
int d3 = (FWVersion >> 4) & 0x000F;
|
||||
int d4 = FWVersion & 0x000F;
|
||||
return string.Format("{0}.{1}{2}{3}", d1, d2, d3, d4);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("Calibration: V{0} Type={1} Cal={2} Units={3} FlowArrow.{4} FW={5} Hi={6} Norm={7} Low={8} RMC={9} ThrVol={10} ThrTime={11} FlActThr={12} VolArrThr={13} CalTm={14} SN={15} MeterSealed={16} Chksum={17}",
|
||||
Version,
|
||||
MeterType,
|
||||
Calibration,
|
||||
VolumeUnits,
|
||||
FlowArrow,
|
||||
FWVersion,
|
||||
TargetField[0],
|
||||
TargetField[1],
|
||||
TargetField[2],
|
||||
RecipMeanCurrent,
|
||||
ThresholdVolume,
|
||||
ThresholdTime,
|
||||
FlowActivationThr,
|
||||
VolumeArrowThr,
|
||||
CalibrationTime,
|
||||
SerialNumber,
|
||||
MeterSealed,
|
||||
CheckSum.ToString("X2"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,225 @@
|
||||
///
|
||||
/// Copyright (c) 2015-2017 Sensus Metering Systems
|
||||
///
|
||||
using System;
|
||||
|
||||
namespace TBF.Rig.TestMethods.GenesisCommunication.GenesisHead
|
||||
{
|
||||
public class ConfigStruct
|
||||
{
|
||||
public const int Length = 32;
|
||||
|
||||
public Byte Version; /// 0: 1 byte
|
||||
public MeterState MeterState; /// 1: 1 byte
|
||||
public UInt32 TargetTimeVeryLowBatt; /// 2: 4 bytes in seconds
|
||||
public UInt32 TargetTimeLowBatt; /// 6: 4 bytes, in seconds
|
||||
public UInt32 TestModeTime; /// 10: 4 bytes, Max. test mode time in seconds
|
||||
public UInt16 EmptyPipeThreshold; /// 14: 2 bytes
|
||||
public byte[] PCBNumber; /// 16: 5 bytes
|
||||
public byte TestModeConfig; /// 21: 1 byte
|
||||
public UInt32 RadioAddress; /// 22: 4 bytes
|
||||
public UInt16 TempCalibration; /// 26: 2 bytes
|
||||
public UInt16 AlarmMask; /// 28: 2 bytes, Default 0xA3F7
|
||||
public UInt16 ConfigCheckSum; /// 30: 2 bytes
|
||||
|
||||
public ConfigStruct()
|
||||
{
|
||||
PCBNumber = new byte[5];
|
||||
}
|
||||
|
||||
public byte[] ToByteArray()
|
||||
{
|
||||
byte[] result = new byte[Length];
|
||||
|
||||
result[0] = Version;
|
||||
result[1] = (byte)MeterState;
|
||||
|
||||
result[2] = (byte)(TargetTimeVeryLowBatt & 0x000000FF);
|
||||
result[3] = (byte)((TargetTimeVeryLowBatt >> 8) & 0x000000FF);
|
||||
result[4] = (byte)((TargetTimeVeryLowBatt >> 16) & 0x000000FF);
|
||||
result[5] = (byte)((TargetTimeVeryLowBatt >> 24) & 0x000000FF);
|
||||
|
||||
result[6] = (byte)(TargetTimeLowBatt & 0x000000FF);
|
||||
result[7] = (byte)((TargetTimeLowBatt >> 8) & 0x000000FF);
|
||||
result[8] = (byte)((TargetTimeLowBatt >> 16) & 0x000000FF);
|
||||
result[9] = (byte)((TargetTimeLowBatt >> 24) & 0x000000FF);
|
||||
|
||||
result[10] = (byte)(TestModeTime & 0x000000FF);
|
||||
result[11] = (byte)((TestModeTime >> 8) & 0x000000FF);
|
||||
result[12] = (byte)((TestModeTime >> 16) & 0x000000FF);
|
||||
result[13] = (byte)((TestModeTime >> 24) & 0x000000FF);
|
||||
|
||||
result[14] = (byte)(EmptyPipeThreshold & 0x00FF);
|
||||
result[15] = (byte)((EmptyPipeThreshold >> 8) & 0x00FF);
|
||||
|
||||
result[16] = PCBNumber[0];
|
||||
result[17] = PCBNumber[1];
|
||||
result[18] = PCBNumber[2];
|
||||
result[19] = PCBNumber[3];
|
||||
result[20] = PCBNumber[4];
|
||||
|
||||
result[21] = TestModeConfig;
|
||||
|
||||
result[22] = (byte)(RadioAddress & 0x000000FF);
|
||||
result[23] = (byte)((RadioAddress >> 8) & 0x000000FF);
|
||||
result[24] = (byte)((RadioAddress >> 16) & 0x000000FF);
|
||||
result[25] = (byte)((RadioAddress >> 24) & 0x000000FF);
|
||||
|
||||
result[26] = (byte)(TempCalibration & 0x00FF);
|
||||
result[27] = (byte)((TempCalibration >> 8) & 0x00FF);
|
||||
|
||||
result[28] = (byte)(AlarmMask & 0x00FF);
|
||||
result[29] = (byte)((AlarmMask >> 8) & 0x00FF);
|
||||
|
||||
result[30] = (byte)(ConfigCheckSum & 0x00FF);
|
||||
result[31] = (byte)((ConfigCheckSum >> 8) & 0x00FF);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a configuration structure from a complete byte array
|
||||
/// </summary>
|
||||
/// <param name="data">A complete byte array data</param>
|
||||
/// <returns>ConfigStruct or null when byte array was not complete</returns>
|
||||
public static ConfigStruct FromByteArray(byte[] data)
|
||||
{
|
||||
if (data.Length != Length) return null;
|
||||
|
||||
ConfigStruct result = new ConfigStruct();
|
||||
|
||||
result.Version = data[0];
|
||||
result.MeterState = (MeterState)data[1];
|
||||
result.TargetTimeVeryLowBatt = (((UInt32)data[5] * 256 + data[4]) * 256 + data[3]) * 256 + data[2];
|
||||
result.TargetTimeLowBatt = (((UInt32)data[9] * 256 + data[8]) * 256 + data[7]) * 256 + data[6];
|
||||
result.TestModeTime = (((UInt32)data[13] * 256 + data[12]) * 256 + data[11]) * 256 + data[10];
|
||||
result.EmptyPipeThreshold = (UInt16)(data[15] * 256 + data[14]);
|
||||
result.PCBNumber[0] = data[16];
|
||||
result.PCBNumber[1] = data[17];
|
||||
result.PCBNumber[2] = data[18];
|
||||
result.PCBNumber[3] = data[19];
|
||||
result.PCBNumber[4] = data[20];
|
||||
result.TestModeConfig = data[21];
|
||||
result.RadioAddress = (((UInt32)data[25] * 256 + data[24]) * 256 + data[23]) * 256 + data[22];
|
||||
result.TempCalibration = (UInt16)(data[27] * 256 + data[26]);
|
||||
result.AlarmMask = (UInt16)(data[29] * 256 + data[28]);
|
||||
result.ConfigCheckSum = (UInt16)(data[31] * 256 + data[30]);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update the configuration structure from an incomplete byte array
|
||||
/// </summary>
|
||||
/// <param name="offset">Offset of byte array data in ConfigStruct</param>
|
||||
/// <param name="data">Byte array data</param>
|
||||
/// <returns>true when successful, false when data are not appropriate</returns>
|
||||
public bool Update(int offset, byte[] data)
|
||||
{
|
||||
if (offset == 0 && data.Length == 2)
|
||||
{
|
||||
/// iPerl mode of function
|
||||
Version = data[0];
|
||||
MeterState = (MeterState)data[1];
|
||||
return true;
|
||||
}
|
||||
else if (offset == 0 && data.Length == 4)
|
||||
{
|
||||
/// iPerl mode of function and extra 2 bytes
|
||||
Version = data[0];
|
||||
MeterState = (MeterState)data[1];
|
||||
return true;
|
||||
}
|
||||
else if (offset == 21 && data.Length == 1)
|
||||
{
|
||||
/// TestModeConfig value
|
||||
TestModeConfig = data[21 - offset];
|
||||
return true;
|
||||
}
|
||||
else if (offset == 0 && data.Length == Length)
|
||||
{
|
||||
/// Complete ConfigStruct
|
||||
Version = data[0];
|
||||
MeterState = (MeterState)data[1];
|
||||
TargetTimeVeryLowBatt = (((UInt32)data[5] * 256 + data[4]) * 256 + data[3]) * 256 + data[2];
|
||||
TargetTimeLowBatt = (((UInt32)data[9] * 256 + data[8]) * 256 + data[7]) * 256 + data[6];
|
||||
TestModeTime = (((UInt32)data[13] * 256 + data[12]) * 256 + data[11]) * 256 + data[10];
|
||||
EmptyPipeThreshold = (UInt16)(data[15] * 256 + data[14]);
|
||||
PCBNumber[0] = data[16];
|
||||
PCBNumber[1] = data[17];
|
||||
PCBNumber[2] = data[18];
|
||||
PCBNumber[3] = data[19];
|
||||
PCBNumber[4] = data[20];
|
||||
TestModeConfig = data[21];
|
||||
RadioAddress = (((UInt32)data[25] * 256 + data[24]) * 256 + data[23]) * 256 + data[22];
|
||||
TempCalibration = (UInt16)(data[27] * 256 + data[26]);
|
||||
AlarmMask = (UInt16)(data[29] * 256 + data[28]);
|
||||
ConfigCheckSum = (UInt16)(data[31] * 256 + data[30]);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns PCB number string (12 characters, 12 decimal digits)
|
||||
/// </summary>
|
||||
/// <returns>PCB number STRING</returns>
|
||||
public string GetPcbNrString()
|
||||
{
|
||||
return PCBNumber2String(this.PCBNumber);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts PCBNumber to string (12 characters, 12 decimal digits)
|
||||
/// </summary>
|
||||
/// <param name="pcbNumber"></param>
|
||||
/// <returns>PCB number string</returns>
|
||||
public static string PCBNumber2String(byte[] pcbNumber)
|
||||
{
|
||||
if (pcbNumber.Length != 5) return string.Empty;
|
||||
|
||||
Int64 number = 0;
|
||||
for (int i = 4; i >= 0; i--)
|
||||
{
|
||||
number = 256 * number + (Int64)pcbNumber[i];
|
||||
}
|
||||
|
||||
return number.ToString();
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("Config: V{0} State={1} VLoBattT={2}s LoBattT={3}s TestModeT={4}s EPThld={5} PCB#={6} TMCfg={7} RadioAddr={8} TempCalib={9} AlarmMask={10} CfgCheckSum={11}",
|
||||
Version,
|
||||
MeterState,
|
||||
TargetTimeVeryLowBatt,
|
||||
TargetTimeLowBatt,
|
||||
TestModeTime,
|
||||
EmptyPipeThreshold,
|
||||
GetPcbNrString(),
|
||||
TestModeConfig.ToString("X2"),
|
||||
RadioAddress,
|
||||
TempCalibration,
|
||||
AlarmMask.ToString("X4"),
|
||||
ConfigCheckSum.ToString("X4"));
|
||||
}
|
||||
|
||||
public string ToString(int sel)
|
||||
{
|
||||
return string.Format("{1} PCB#={6} TMCfg={7}",
|
||||
Version,
|
||||
MeterState,
|
||||
TargetTimeVeryLowBatt,
|
||||
TargetTimeLowBatt,
|
||||
TestModeTime,
|
||||
EmptyPipeThreshold,
|
||||
GetPcbNrString(),
|
||||
TestModeConfig.ToString("X2"),
|
||||
RadioAddress,
|
||||
TempCalibration,
|
||||
AlarmMask.ToString("X4"),
|
||||
ConfigCheckSum.ToString("X4"));
|
||||
}
|
||||
}
|
||||
}
|
||||
110
TBF/Rig/TestMethods/GenesisCommunication/GenesisHead/Enums.cs
Normal file
110
TBF/Rig/TestMethods/GenesisCommunication/GenesisHead/Enums.cs
Normal file
@ -0,0 +1,110 @@
|
||||
///
|
||||
/// Copyright (c) 2015-2017 Sensus Metering Systems
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace TBF.Rig.TestMethods.GenesisCommunication.GenesisHead
|
||||
{
|
||||
public enum MessageID
|
||||
{
|
||||
Calibration = 0x00, /// Access to stCalibration
|
||||
Configuration = 0x01, /// Access to stConfig
|
||||
Status = 0x02, /// Access to stStaus, read only
|
||||
Power = 0x03, /// Access to stPower, containing power info from both processors
|
||||
LCD = 0x04, /// Access to stLCD
|
||||
EventData = 0x05, /// NOT USED
|
||||
IntervalData = 0x06, /// NOT USED
|
||||
Diagnostics = 0x07, /// Access tostMetroDiagArray, read onl
|
||||
MetrologyMemory = 0x08, /// Memory block access, read only
|
||||
Error_LongAck = 0x09, /// Error message
|
||||
Command = 0x0A, /// Command to execute, with no arguments
|
||||
Parameterizing = 0x0B, /// Parameterizing message is used in MCI-SPI interface only
|
||||
Error_ShortAck = 0x0C, /// Short acknowledge message is used in MCI-SPI interface only
|
||||
ChanelAlive = 0x0D, /// Channel alive message is used in MCI-SPI interface only
|
||||
RadioPassthrough = 0x0E, /// RFID <-> Metrology <-> Radio passthrough message
|
||||
ASICRegisterReadTest = 0x0F, /// ASIC Register read test
|
||||
IMIDebugMessagesAccess = 0x10, /// IMI debug messages read test
|
||||
ProductionChecksumsRead = 0x11, /// Production checksum read: Calibration (1 byte), Configuration (2 bytes), spare (4 bytes)
|
||||
HardwareParametersTest = 0x12, /// Hardware Parameters Testing: User configurable fixed field drive time (1 byte)
|
||||
/// <summary>
|
||||
/// Notes:
|
||||
/// 1. Short Ack message contains 1-byte error code and all the fields (Offset, Payload length, payload and password) will not be present.
|
||||
/// 2. Channel Alive message does not contain the fields (Offset, Payload length, payload and password).
|
||||
/// 3. Except the above two special messages, rest all the messages in the above table will follow the message format mentioned in sections 3.1 and 3.2.
|
||||
/// </summary>
|
||||
Count /// Number of MessageID-s
|
||||
}
|
||||
|
||||
public enum MeterType : byte
|
||||
{
|
||||
DN15 = 0,
|
||||
CoaxManifold = 1,
|
||||
DN20 = 2,
|
||||
DN25 = 3,
|
||||
DN26 = 4, /// DN25*
|
||||
DN32 = 5,
|
||||
DN40 = 6,
|
||||
AutoDetect,
|
||||
Count /// Number of meter types
|
||||
}
|
||||
|
||||
public enum VolumeUnits : byte
|
||||
{
|
||||
m3 = 0,
|
||||
UK_gallon = 1,
|
||||
US_gallon = 2,
|
||||
Count /// Number of volume units
|
||||
}
|
||||
|
||||
public enum FlowArrow : byte
|
||||
{
|
||||
No = 0,
|
||||
Right = 1,
|
||||
Left = 2,
|
||||
Count /// Number of flow arrows
|
||||
}
|
||||
|
||||
public enum MeterSealed : byte
|
||||
{
|
||||
InProduction = 0x00,
|
||||
OutOfProduction = 0xA5,
|
||||
Sealed = 0x5A,
|
||||
}
|
||||
|
||||
public enum MeterState : byte
|
||||
{
|
||||
None = 0,
|
||||
Idle = 1,
|
||||
Active = 2,
|
||||
Test = 3,
|
||||
EndOfLife = 4,
|
||||
Count /// Number of meter states
|
||||
}
|
||||
|
||||
public enum FlowState : byte
|
||||
{
|
||||
No = 0,
|
||||
Reverse = 1,
|
||||
Forward = 2,
|
||||
EmptyPipe = 3,
|
||||
Count /// Number of flow states
|
||||
}
|
||||
|
||||
public enum OptoTelegramFlags : byte
|
||||
{
|
||||
OK = 0,
|
||||
OK_TestStart,
|
||||
OK_TestEnd,
|
||||
InvalidTelegram, /// Wrong telegram format of checksum error
|
||||
SyncError,
|
||||
}
|
||||
|
||||
public enum OptoState
|
||||
{
|
||||
Read,
|
||||
Flush,
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
///
|
||||
/// Copyright (c) 2015-2017 Sensus Metering Systems
|
||||
///
|
||||
using System.Collections.Generic;
|
||||
using TBF.Rig.Generic;
|
||||
|
||||
namespace TBF.Rig.TestMethods.GenesisCommunication.GenesisHead
|
||||
{
|
||||
public class Factory : IComponentFactory
|
||||
{
|
||||
public string ClassName { get { return "RegisterReader for Genesis"; } }
|
||||
|
||||
public void ResetStaticProperties() { GenesisHead.ResetStaticProperties(); }
|
||||
|
||||
public IComponent DummyComponent() { return new GenesisHead(); }
|
||||
|
||||
public IComponent GetComponent(IComponentCfg cfg, IList<IComponent> components) { return new GenesisHead(cfg); }
|
||||
|
||||
public IComponentCfg DefaultConfig() { return new GenesisHeadCfg(this); }
|
||||
|
||||
public IComponentCfg CmpntCfgFromCmpntEntity(Config.Entities.Component component)
|
||||
{
|
||||
return ComponentCfgBase.CreateFromDbEntity(GenesisHeadCfg.Serializer, component, this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,638 @@
|
||||
using Config.Entities;
|
||||
using log4net;
|
||||
///
|
||||
/// Copyright (c) 2015-2018 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using TBF.Rig.Generic;
|
||||
using TBF.Rig.GenericDevices;
|
||||
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
|
||||
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
|
||||
using Xylem.Common.Metrology.Measurements;
|
||||
using Xylem.Common.Metrology.Measurements.Consts;
|
||||
using Common;
|
||||
using System.IO.Ports;
|
||||
|
||||
namespace TBF.Rig.TestMethods.GenesisCommunication.GenesisHead
|
||||
{
|
||||
public static class GenesisHeadBatch
|
||||
{
|
||||
public static Dictionary<string, List<MeasurementResults>> MeterIdDetailResults = new Dictionary<string, List<MeasurementResults>>();
|
||||
private static readonly ILog log = LogManager.GetLogger(typeof(GenesisHeadBatch));
|
||||
public static readonly Lazy<MeterBatch> BatchHolder = new Lazy<MeterBatch>(() =>
|
||||
{
|
||||
return new MeterBatch();
|
||||
});
|
||||
|
||||
internal static bool Start(IRegReader[] registerReaders, string[] lastSNTexts)
|
||||
{
|
||||
try
|
||||
{
|
||||
MeterIdDetailResults = new Dictionary<string, List<MeasurementResults>>();
|
||||
int index = 0;
|
||||
var ret = false;
|
||||
foreach (var rr in registerReaders)
|
||||
{
|
||||
if (rr is TestMethods.GenesisCommunication.GenesisHead.GenesisHead)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(lastSNTexts[index]))
|
||||
{
|
||||
var myGenesis = ((TestMethods.GenesisCommunication.GenesisHead.GenesisHead)rr).SetUp();
|
||||
myGenesis.SerialNumber = lastSNTexts[index];
|
||||
ret = true;
|
||||
}
|
||||
}
|
||||
index = index + 1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
log.Fatal(ex.Message, ex);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// This component = instance of this class is a placeholder for a combined main watermeter
|
||||
/// </summary>
|
||||
public class GenesisHead : ComponentBase, IDevice, GenericDevices./*IRegisterReader*/IRegReader, IOperation
|
||||
{
|
||||
public List<MeasurementResults> DetailedResults { get; set; }
|
||||
private static readonly ILog log = LogManager.GetLogger(typeof(GenesisHead));
|
||||
public override string ToString() { return string.Format("Genesis({0})", Cfg.ToString(1)); }
|
||||
|
||||
public RegisterReaderType RegisterReaderType { get { return RegisterReaderType.DataStream; } }
|
||||
|
||||
private readonly GenesisHeadCfg genesisHeadCfg;
|
||||
public int SlotNr { get { return genesisHeadCfg.SlotNr; } }
|
||||
public double PulsesPerLtr { get { return 1000.0; } }
|
||||
public double LtrsPerPulse { get { return 1 / PulsesPerLtr; } }
|
||||
public string QuantityUnits { get; set; }
|
||||
public int Position { get; }//...MF
|
||||
double IRegReader.PulsesPerLtr { get; set; }
|
||||
|
||||
// Adding the missing static method to resolve the error. ...MF
|
||||
public static void ResetStaticProperties()
|
||||
{
|
||||
// Add logic to reset static properties here, if applicable.
|
||||
// If no static properties exist, this method can remain empty.
|
||||
}
|
||||
|
||||
#if 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 float CalibTarget { get { return (ushort)genesisHeadCfg.ProcParams.CalibTarget; } }
|
||||
public ushort FactorLimitLo { get { return (ushort)genesisHeadCfg.ProcParams.FactorLimitLo; } }
|
||||
public ushort FactorLimitHi { get { return (ushort)genesisHeadCfg.ProcParams.FactorLimitHi; } }
|
||||
|
||||
/// Properties set by the Begin and the End form
|
||||
//todo rd implement
|
||||
public string SerialNr;
|
||||
|
||||
|
||||
public string EndState
|
||||
{
|
||||
get { return endState; }
|
||||
set { endState = value; }
|
||||
}
|
||||
|
||||
private string endState;
|
||||
|
||||
public string BeginState
|
||||
{
|
||||
get { return beginState; }
|
||||
set { beginState = value; }
|
||||
}
|
||||
|
||||
private string beginState;
|
||||
|
||||
public bool Disabled
|
||||
{
|
||||
get { return disabled; }
|
||||
set { disabled = value; }
|
||||
}
|
||||
|
||||
private bool disabled;
|
||||
|
||||
public bool CommFailed
|
||||
{
|
||||
get { return commFailed; }
|
||||
set { commFailed = value; }
|
||||
}
|
||||
|
||||
private bool commFailed;
|
||||
|
||||
public int ResultCode
|
||||
{
|
||||
get { return resultCode; }
|
||||
}
|
||||
|
||||
private int resultCode;
|
||||
|
||||
|
||||
/// <summary> ConfigStruct of the water meter obtained or updated by iPerlCommunication </summary>
|
||||
public ConfigStruct ConfigStruct
|
||||
{
|
||||
get { return configStruct; }
|
||||
set { configStruct = value; }
|
||||
}
|
||||
|
||||
private ConfigStruct configStruct;
|
||||
|
||||
/// <summary> CalibrationStruct of the water meter obtained or updated by iPerlCommunication </summary>
|
||||
public CalibrationStruct CalibrationStruct
|
||||
{
|
||||
get { return calibrationStruct; }
|
||||
set { calibrationStruct = value; }
|
||||
}
|
||||
|
||||
private CalibrationStruct calibrationStruct;
|
||||
|
||||
public ushort OrigCalibFactor;
|
||||
public ushort CalibFactor { get { return (CalibrationStruct != null) ? CalibrationStruct.Calibration : (ushort)0; } }
|
||||
|
||||
public double Q2ErrWOCorrection;
|
||||
public bool Q2CorrectionDone;
|
||||
public double Q2Correction;
|
||||
public int Q2CorrRFlow;
|
||||
public int Q2CorrLFlow;
|
||||
|
||||
public double Diff2Hz8Hz;
|
||||
public bool Hz2CorrectionDone;
|
||||
public int Hz2Correction;
|
||||
|
||||
public string FWVersion { get { return (CalibrationStruct != null) ? CalibrationStruct.FWVersionStr() : string.Empty; } }
|
||||
|
||||
|
||||
/// <summary> Result of the last test used to calculate Q2 correction factors, etc </summary>
|
||||
public Results.Entities.MeterTestRslt LastTestResult2;
|
||||
public Results.Entities.MeterTestRslt LastTestResult;
|
||||
public double NominalTestFlowLph; /// in liter per hour
|
||||
|
||||
|
||||
///
|
||||
/// Required for IRegisterReader interface
|
||||
///
|
||||
public int WMPulses { get { return wmPulses; } }
|
||||
public int WMRefPulses { get { return wmRefPulses; } }
|
||||
public double WMVolume { get { return wmVolume; } }
|
||||
public double BeginWMState { get { return beginWMState; } }
|
||||
public double EndWMState { get { return endWMState; } }
|
||||
public double WMTestTime { get { return wmTestTime; } }
|
||||
|
||||
private double beginWMState;
|
||||
private double endWMState;
|
||||
private double wmVolume;
|
||||
private int wmPulses;
|
||||
private int wmRefPulses;
|
||||
private double wmTestTime;
|
||||
|
||||
|
||||
/// <summary> Name set by the test, to be used as a part of the opto-data log file name </summary>
|
||||
public string TestName;
|
||||
|
||||
/// <summary> Name set by the test, to be used as a part of the opto-data log file name </summary>
|
||||
public string BenchName;
|
||||
|
||||
///
|
||||
/// Volume of water from the opto telegram
|
||||
///
|
||||
private Int64 lastVolumeRaw; /// Last read raw volume
|
||||
private double volumeLtr; ///
|
||||
private double volumeLtr0;
|
||||
|
||||
|
||||
///
|
||||
/// Timestamp from the opto telegram
|
||||
///
|
||||
private double timestampSec;
|
||||
private double timestampSec0;
|
||||
|
||||
public bool NoSamples { get { return (timestampSecEnd - timestampSecStart) < float.Epsilon; } }
|
||||
public double TimestampSecStart { get { return timestampSecStart; } }
|
||||
public double TimestampSecEnd { get { return timestampSecEnd; } }
|
||||
|
||||
private double timestampSecStart;
|
||||
private double timestampSecEnd;
|
||||
|
||||
public GenesisHead()
|
||||
{
|
||||
}
|
||||
|
||||
public GenesisHead(Generic.IComponentCfg cfg)
|
||||
: base(cfg)
|
||||
{
|
||||
ClearData();
|
||||
|
||||
genesisHeadCfg = cfg as GenesisHeadCfg;
|
||||
|
||||
log.Debug(this.ToString());
|
||||
}
|
||||
|
||||
private GenesisMeter myGenesis = null;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public GenesisMeter SetUp()
|
||||
{
|
||||
try
|
||||
{
|
||||
Log("Call SetUp()");
|
||||
if (myGenesis != null)
|
||||
{
|
||||
myGenesis.DisposeMeter();
|
||||
}
|
||||
//add for gen
|
||||
|
||||
myGenesis = new GenesisMeter();
|
||||
myGenesis.SetupFromConfigFile(SlotNr);
|
||||
Log("Add Meter to batch");
|
||||
GenesisHeadBatch.BatchHolder.Value.AddMeter(myGenesis);
|
||||
Log("Log Raw Data");
|
||||
myGenesis.LogRawData(true);
|
||||
return myGenesis;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
if (myGenesis != null)
|
||||
{
|
||||
Log(e.Message);
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clear data related to a specific water meter
|
||||
/// </summary>
|
||||
public void ClearData()
|
||||
{
|
||||
DetailedResults = new List<MeasurementResults>();
|
||||
resultCode = 0;
|
||||
|
||||
disabled = false;
|
||||
commFailed = false;
|
||||
endState = string.Empty;
|
||||
beginState = string.Empty;
|
||||
|
||||
configStruct = null;
|
||||
calibrationStruct = null;
|
||||
|
||||
LastTestResult = null;
|
||||
NominalTestFlowLph = 0;
|
||||
|
||||
OrigCalibFactor = 0;
|
||||
Q2ErrWOCorrection = 0;
|
||||
Q2CorrectionDone = false;
|
||||
Q2CorrRFlow = 0;
|
||||
}
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
ClearData();
|
||||
|
||||
if (DebugLevel == DebugMode.Normal)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void RunDeviceBefore()
|
||||
{
|
||||
|
||||
|
||||
////todo: RD- Login??
|
||||
//if (DebugLevel == DebugMode.Normal)
|
||||
//{
|
||||
|
||||
|
||||
// if (myGenesis != null)
|
||||
// {
|
||||
// Log("TBF RunDeviceBefore");
|
||||
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// //throw new Exception("No meter was bound!");
|
||||
// }
|
||||
//}
|
||||
//else if (DebugLevel == DebugMode.FailureDuringOperation)
|
||||
//{
|
||||
//}
|
||||
}
|
||||
|
||||
public void RunDeviceAfter() { }
|
||||
|
||||
public void StopDevice()
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
if (DebugLevel == DebugMode.Normal && myGenesis != null)
|
||||
{
|
||||
myGenesis.DisposeMeter();
|
||||
|
||||
GenesisHeadBatch.BatchHolder.Value.RemoveMeter(myGenesis);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public void StopDevice2() { }
|
||||
|
||||
/// <summary>
|
||||
/// Events: Event.ReadRegisterDone, Event.Error
|
||||
/// </summary>
|
||||
/// <returns>ReadWaterMeter instance reference casted to IOperaton</returns>
|
||||
public IOperation ReadRegisterOp()
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clear data/counters related to a specific tests
|
||||
/// </summary>
|
||||
public void Clear()
|
||||
{
|
||||
resultCode = 0;
|
||||
|
||||
sampleNr = 0;
|
||||
|
||||
volumeLtr = 0;
|
||||
volumeLtr0 = 0;
|
||||
timestampSec = 0;
|
||||
timestampSec0 = 0;
|
||||
|
||||
ReadPulses();
|
||||
}
|
||||
|
||||
public void TestCompleted()
|
||||
{
|
||||
/// TODO: Implement
|
||||
}
|
||||
|
||||
private int sampleNr; /// This is to determine when the test start sample should be taken
|
||||
|
||||
|
||||
private bool StoreStartPackage = false;
|
||||
private bool StoreEndPackage = false;
|
||||
private bool Enable = false;
|
||||
public bool IsCalibration = false;
|
||||
/// <summary>Start this operation</summary>
|
||||
public void Start()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
public void StartRead(string TestName, int batchNr, int repetitionNr)
|
||||
{
|
||||
StoreStartPackage = false;
|
||||
StoreEndPackage = false;
|
||||
//Start mesurement
|
||||
if (DebugLevel == DebugMode.Normal)
|
||||
{
|
||||
if (myGenesis != null)
|
||||
{
|
||||
IsCalibration = false;
|
||||
Log($"TBF Start Measurement {TestName}");
|
||||
myGenesis.CurrentActionText = $"Batch{batchNr}_Rep{repetitionNr}";
|
||||
|
||||
|
||||
if (TestName.ToLower().Contains("calib"))
|
||||
{
|
||||
IsCalibration = true;
|
||||
//myGenesis.Login();
|
||||
myGenesis.StartCalibration();
|
||||
}
|
||||
else if (TestName.ToLower().Contains("login"))
|
||||
{
|
||||
//myGenesis.Login();
|
||||
|
||||
myGenesis.InitMeasurement();
|
||||
}
|
||||
else
|
||||
{
|
||||
DetailedResults = new List<MeasurementResults>();
|
||||
|
||||
myGenesis.StartMeasurement();
|
||||
}
|
||||
|
||||
StoreStartPackage = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Log(string text)
|
||||
{
|
||||
if (DebugLevel == DebugMode.Normal)
|
||||
{
|
||||
if (myGenesis != null)
|
||||
{
|
||||
myGenesis.WriteLog(text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>Run this operation</summary>
|
||||
/// <returns>eventDone</returns>
|
||||
public Event Run()
|
||||
{
|
||||
if (DebugLevel == DebugMode.Normal)
|
||||
{
|
||||
if (myGenesis != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
//var results = myGenesis.GetIntermediateMeasurementResult();
|
||||
//readOutResults(results);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return Event.ReadRegisterDone;
|
||||
}
|
||||
public double RefVolume = 0.0;
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
//Stop(null);
|
||||
if (DebugLevel == DebugMode.Normal && myGenesis != null)
|
||||
{
|
||||
if (IsCalibration)
|
||||
{
|
||||
myGenesis.StopCalibration();
|
||||
}
|
||||
else
|
||||
{
|
||||
myGenesis.StopMeasurement();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Stop this operation</summary>
|
||||
public void Stop(Double? testTimeS = null, double? refVol = null)
|
||||
{
|
||||
|
||||
if (DebugLevel == DebugMode.Normal && myGenesis != null)
|
||||
{
|
||||
Log($"TBF Stop Measurement {IsCalibration} {testTimeS} {refVol }");
|
||||
if (IsCalibration)
|
||||
{
|
||||
//myGenesis.StopCalibration();
|
||||
int retryCounter = 400;
|
||||
while (myGenesis.GetCalibrationState() != MeasurementStates.IsCompleted)
|
||||
{
|
||||
if (retryCounter < 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
Thread.Sleep(10);
|
||||
retryCounter = retryCounter - 1;
|
||||
}
|
||||
try
|
||||
{
|
||||
var results = myGenesis.GetMainMeasurementResult(refVol, testTimeS, false);
|
||||
|
||||
readOutResults(results, testTimeS);
|
||||
if (refVol.HasValue && refVol.Value != 0.0)
|
||||
{
|
||||
|
||||
|
||||
myGenesis.BuildAndCheckCalibFactorsAllChannels(refVol.Value / 1000, testTimeS, Q2ErrWOCorrection);
|
||||
myGenesis.SetCalibFactorsAllChannels(false);
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MarkAsError();
|
||||
Log("Error while Stop Calib " + ex.Message);
|
||||
if (ex.InnerException != null)
|
||||
{
|
||||
Log("Inner Error:" + ex.InnerException.Message);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int retryCounter = 4000;
|
||||
//myGenesis.StopMeasurement();
|
||||
try
|
||||
{
|
||||
while (myGenesis.GetMeasurementState() != MeasurementStates.IsCompleted)
|
||||
{
|
||||
if (retryCounter < 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
Thread.Sleep(10);
|
||||
retryCounter = retryCounter - 1;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (refVol.HasValue && testTimeS.HasValue)
|
||||
{
|
||||
Log("GetMainMeasurementResult V" + refVol.ToString() + " and S" + testTimeS.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
Log("GetMainMeasurementResult empty");
|
||||
}
|
||||
|
||||
DetailedResults = myGenesis.GetAllMeasurementResults(refVol, testTimeS);
|
||||
foreach (var item in DetailedResults)
|
||||
{
|
||||
Log("Detail Measurement Channel =" + item.Channel + "; CorrectedDutVolumeCm= " + item.CorrectedDutVolumeCm + "; DeviationDutToRefPer= " + item.DeviationDutToRefPer);
|
||||
}
|
||||
|
||||
|
||||
readOutResults(DetailedResults.First(), testTimeS);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MarkAsError();
|
||||
Log("Error while Stop Measurement " + ex.Message);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MarkAsError();
|
||||
Log("Error while GetMeasurementState " + ex.Message);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
StoreEndPackage = true;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void readOutResults(MeasurementResults results, double? testTimeS)
|
||||
{
|
||||
volumeLtr = results.CorrectedDutVolumeCm * 1000;
|
||||
timestampSec = results.DutStopRecord.GetTimeS();
|
||||
if (testTimeS.HasValue)
|
||||
{
|
||||
wmTestTime = testTimeS.Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
wmTestTime = results.DutTimeS;
|
||||
}
|
||||
|
||||
wmVolume = results.CorrectedDutVolumeCm * 1000;
|
||||
Log("DutFlowRateCmPh" + results.DutFlowRateCmPh.ToString());
|
||||
Log("CorrectedDutVolumeCm=" + results.CorrectedDutVolumeCm.ToString());
|
||||
Log("DutVolumeCm=" + results.DutVolumeCm.ToString());
|
||||
ReadPulses();
|
||||
}
|
||||
|
||||
private void MarkAsError()
|
||||
{
|
||||
volumeLtr = 0;
|
||||
timestampSec = 0;
|
||||
wmTestTime = 0;
|
||||
wmVolume = 0;
|
||||
ReadPulses();
|
||||
}
|
||||
|
||||
private void ReadPulses()
|
||||
{
|
||||
beginWMState = volumeLtr0;
|
||||
endWMState = volumeLtr;
|
||||
wmPulses = (int)(wmVolume * (double)PulsesPerLtr + 0.5);
|
||||
wmRefPulses = StateMachine.ControlBoardMain.RefPulses;//EtPulses(0);//...MF
|
||||
}
|
||||
|
||||
private bool optoSerialPortParsingEnabled;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,63 @@
|
||||
///
|
||||
/// Copyright (c) 2015-2017 Sensus Metering Systems
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Xml.Serialization;
|
||||
using Config.Entities;
|
||||
using TBF.Rig.Generic;
|
||||
using TBF.Resources;
|
||||
using Common;
|
||||
|
||||
namespace TBF.Rig.TestMethods.GenesisCommunication.GenesisHead
|
||||
{
|
||||
public class GenesisHeadCfg : ComponentCfgBase, Generic.IComponentCfg
|
||||
{
|
||||
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(GenesisHeadCfg) })[0];
|
||||
public override XmlSerializer GetSerializer() { return Serializer; }
|
||||
|
||||
|
||||
public IComponentCfgCtrl GetControl(IList<Config.Entities.Component> cmpntEntities) { return new GenesisHeadCfgCtrl(); }//...MF
|
||||
|
||||
///
|
||||
/// Serialized parameters
|
||||
///
|
||||
public int SlotNr; /// Number written to QuidoRS to connct the watermeter to RfidComPort, 1 .. 10
|
||||
|
||||
/// <summary> Procedure parameters </summary>
|
||||
[XmlIgnore]
|
||||
public ProcParams ProcParams;
|
||||
public override IParamsProvider GetRuntimeProcParamsProvider() { return ProcParams; }
|
||||
public override IParamsProvider CreateProcParamsProvider() { return new ProcParams(true); }
|
||||
|
||||
[XmlIgnore]
|
||||
public MeterType MeterType { get { return (ProcParams != null) ? ProcParams.MeterType : MeterType.AutoDetect; } }
|
||||
|
||||
|
||||
/// Private parameterless constructor invoked by all other (public) constructors
|
||||
GenesisHeadCfg()
|
||||
{
|
||||
Name = "Genesis";
|
||||
ParentName = string.Empty;
|
||||
SlotNr = 0;
|
||||
ProcParams = new ProcParams(true);
|
||||
}
|
||||
|
||||
public GenesisHeadCfg(IComponentFactory factory)
|
||||
: this()
|
||||
{
|
||||
this.Factory = factory;
|
||||
}
|
||||
|
||||
public string ToString(int i)
|
||||
{
|
||||
return string.Format("{0} SlotNr={1}",
|
||||
Name,
|
||||
SlotNr
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,92 @@
|
||||
///
|
||||
/// Copyright (c) 2015-2017 Sensus Metering Systems
|
||||
///
|
||||
using System;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Windows.Forms;
|
||||
using log4net;
|
||||
using TBF.Rig.Generic;
|
||||
using TBF.Resources;
|
||||
using Config.Entities;
|
||||
using Common;
|
||||
|
||||
namespace TBF.Rig.TestMethods.GenesisCommunication.GenesisHead
|
||||
{
|
||||
public partial class GenesisHeadCfgCtrl : UserControl, IComponentCfgCtrl
|
||||
{
|
||||
static readonly ILog log = LogManager.GetLogger(typeof(GenesisHeadCfgCtrl));
|
||||
|
||||
public bool ShowMore { get { return false; } }
|
||||
|
||||
GenesisHeadCfg config;
|
||||
public IComponentCfg Config
|
||||
{
|
||||
get { return config as IComponentCfg; }
|
||||
set
|
||||
{
|
||||
config = value as GenesisHeadCfg;
|
||||
Redraw();
|
||||
}
|
||||
}
|
||||
|
||||
public GenesisHeadCfgCtrl()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void WaterMeterCfgCtrl_Load(object sender, EventArgs e)
|
||||
{
|
||||
nameLabel.Text = Strings.Name;
|
||||
classNameLabel.Text = config.Factory.ClassName;
|
||||
slotNrTextBox.Text = config.SlotNr.ToString();
|
||||
Redraw();
|
||||
}
|
||||
|
||||
public void Closing()
|
||||
{
|
||||
}
|
||||
|
||||
void Redraw()
|
||||
{
|
||||
if (config == null) return; /// Control was not loaded, settings were not changed
|
||||
nameTextBox.Text = config.Name;
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void Unlock()
|
||||
{
|
||||
nameTextBox.Enabled = true;
|
||||
slotNrTextBox.Enabled = true;
|
||||
}
|
||||
|
||||
public CfgUpdateFlags VerifyCfg(ref string message)
|
||||
{
|
||||
CfgUpdateFlags flags = CfgUpdateFlags.None;
|
||||
|
||||
int dummy;
|
||||
|
||||
if (!int.TryParse(slotNrTextBox.Text, out dummy) || dummy < 1 || dummy > 7)
|
||||
{
|
||||
flags |= CfgUpdateFlags.Error;
|
||||
message += Environment.NewLine + string.Format(Strings.Invalid_0, muxBoardNrLabel.Text);
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
public CfgUpdateFlags UpdateCfg()
|
||||
{
|
||||
CfgUpdateFlags flags = CfgUpdateFlags.RestartRqrd;
|
||||
|
||||
if (config == null) return CfgUpdateFlags.Error; /// Control was not loaded, settings were not changed
|
||||
|
||||
config.Name = nameTextBox.Text;
|
||||
|
||||
config.SlotNr = int.Parse(slotNrTextBox.Text);
|
||||
|
||||
return flags;
|
||||
}
|
||||
}
|
||||
}
|
||||
121
TBF/Rig/TestMethods/GenesisCommunication/GenesisHead/GenesisHeadCfgCtrl.designer.cs
generated
Normal file
121
TBF/Rig/TestMethods/GenesisCommunication/GenesisHead/GenesisHeadCfgCtrl.designer.cs
generated
Normal file
@ -0,0 +1,121 @@
|
||||
///
|
||||
/// Copyright (c) 2015-2017 Sensus Metering Systems
|
||||
///
|
||||
namespace TBF.Rig.TestMethods.GenesisCommunication.GenesisHead
|
||||
{
|
||||
partial class GenesisHeadCfgCtrl : System.Windows.Forms.UserControl
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.nameTextBox = new System.Windows.Forms.TextBox();
|
||||
this.nameLabel = new System.Windows.Forms.Label();
|
||||
this.classNameLabel = new System.Windows.Forms.Label();
|
||||
this.slotNrTextBox = new System.Windows.Forms.TextBox();
|
||||
this.muxBoardNrLabel = new System.Windows.Forms.Label();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// nameTextBox
|
||||
//
|
||||
this.nameTextBox.Enabled = false;
|
||||
this.nameTextBox.Location = new System.Drawing.Point(135, 40);
|
||||
this.nameTextBox.Name = "nameTextBox";
|
||||
this.nameTextBox.Size = new System.Drawing.Size(121, 20);
|
||||
this.nameTextBox.TabIndex = 2;
|
||||
//
|
||||
// nameLabel
|
||||
//
|
||||
this.nameLabel.AutoSize = true;
|
||||
this.nameLabel.Location = new System.Drawing.Point(25, 43);
|
||||
this.nameLabel.Name = "nameLabel";
|
||||
this.nameLabel.Size = new System.Drawing.Size(35, 13);
|
||||
this.nameLabel.TabIndex = 1;
|
||||
this.nameLabel.Text = "Name";
|
||||
//
|
||||
// classNameLabel
|
||||
//
|
||||
this.classNameLabel.AutoSize = true;
|
||||
this.classNameLabel.Location = new System.Drawing.Point(132, 16);
|
||||
this.classNameLabel.Name = "classNameLabel";
|
||||
this.classNameLabel.Size = new System.Drawing.Size(60, 13);
|
||||
this.classNameLabel.TabIndex = 0;
|
||||
this.classNameLabel.Text = "ClassName";
|
||||
//
|
||||
// slotNrTextBox
|
||||
//
|
||||
this.slotNrTextBox.Enabled = false;
|
||||
this.slotNrTextBox.Location = new System.Drawing.Point(135, 63);
|
||||
this.slotNrTextBox.Name = "slotNrTextBox";
|
||||
this.slotNrTextBox.Size = new System.Drawing.Size(34, 20);
|
||||
this.slotNrTextBox.TabIndex = 9;
|
||||
//
|
||||
// muxBoardNrLabel
|
||||
//
|
||||
this.muxBoardNrLabel.AutoSize = true;
|
||||
this.muxBoardNrLabel.Location = new System.Drawing.Point(25, 66);
|
||||
this.muxBoardNrLabel.Name = "muxBoardNrLabel";
|
||||
this.muxBoardNrLabel.Size = new System.Drawing.Size(37, 13);
|
||||
this.muxBoardNrLabel.TabIndex = 8;
|
||||
this.muxBoardNrLabel.Text = "Slot nr";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Location = new System.Drawing.Point(176, 66);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(31, 13);
|
||||
this.label3.TabIndex = 13;
|
||||
this.label3.Text = "1 .. 6";
|
||||
//
|
||||
// GenesisHeadCfgCtrl
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.Controls.Add(this.label3);
|
||||
this.Controls.Add(this.slotNrTextBox);
|
||||
this.Controls.Add(this.muxBoardNrLabel);
|
||||
this.Controls.Add(this.nameTextBox);
|
||||
this.Controls.Add(this.nameLabel);
|
||||
this.Controls.Add(this.classNameLabel);
|
||||
this.Name = "GenesisHeadCfgCtrl";
|
||||
this.Size = new System.Drawing.Size(396, 123);
|
||||
this.Load += new System.EventHandler(this.WaterMeterCfgCtrl_Load);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox nameTextBox;
|
||||
private System.Windows.Forms.Label nameLabel;
|
||||
private System.Windows.Forms.Label classNameLabel;
|
||||
private System.Windows.Forms.TextBox slotNrTextBox;
|
||||
private System.Windows.Forms.Label muxBoardNrLabel;
|
||||
private System.Windows.Forms.Label label3;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
@ -0,0 +1,20 @@
|
||||
///
|
||||
/// Copyright (c) 2015-2017 Sensus Metering Systems
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace TBF.Rig.TestMethods.GenesisCommunication.GenesisHead
|
||||
{
|
||||
public class OptoReceivedEventArgs : EventArgs
|
||||
{
|
||||
public string Data;
|
||||
|
||||
public OptoReceivedEventArgs(string data)
|
||||
{
|
||||
this.Data = data;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,295 @@
|
||||
///
|
||||
/// Copyright (c) 2015-2017 Sensus Metering Systems
|
||||
///
|
||||
using System;
|
||||
using System.Globalization;
|
||||
namespace TBF.Rig.TestMethods.GenesisCommunication.GenesisHead
|
||||
{
|
||||
public class OptoTelegramRaw
|
||||
{
|
||||
public static readonly int Length = 42;
|
||||
private static CultureInfo culture;
|
||||
|
||||
|
||||
///
|
||||
/// Strobed value
|
||||
///
|
||||
public static decimal TestStartTimestampDec;
|
||||
|
||||
///
|
||||
/// Stored values
|
||||
///
|
||||
public OptoTelegramFlags Flags;
|
||||
|
||||
public DateTime DateTime; /// From PC
|
||||
public float RefFlow; /// [m3/h]
|
||||
public int Counter;
|
||||
|
||||
public UInt32 EmfRaw; /// From iPerl opto data
|
||||
public Int16 MagneticFieldRaw;
|
||||
public Int16 FlowRaw;
|
||||
public UInt32 VolumeRaw;
|
||||
public Int64 VolumeRawExt;
|
||||
public Int16 Impedance;
|
||||
public UInt32 Timestamp;
|
||||
public Int64 TimestampExt;
|
||||
public byte CheckSum;
|
||||
|
||||
///
|
||||
/// Calculated values
|
||||
///
|
||||
public double EMF()
|
||||
{
|
||||
Int32 signedEmf = (EmfRaw > 0x7FFFFF) ? ((int)EmfRaw - 0x1000000) : (int)EmfRaw;
|
||||
return 0.000000333 * (double)signedEmf;
|
||||
}
|
||||
public double MagneticField() { return (double)MagneticFieldRaw; }
|
||||
public double Flow(double scalingFactor) { return 0.225 * scalingFactor * (double)FlowRaw; }
|
||||
public double Volume(double scalingFactor) { return 0.0000625 * scalingFactor * (double)VolumeRawExt; }
|
||||
public Int32 FlipTime() { return Impedance; }
|
||||
public decimal TimestampDec() { return (decimal)TimestampExt / (decimal)8192; }
|
||||
public double VolumeDelta(double scalingFactor, OptoTelegramRaw previous) { return (previous == null) ? 0 : Volume(scalingFactor) - previous.Volume(scalingFactor); }
|
||||
public decimal TimeDelta() { return TimestampDec() - TestStartTimestampDec; }
|
||||
public string Label()
|
||||
{
|
||||
if (Flags == OptoTelegramFlags.OK_TestStart) return "#### start test ####";
|
||||
else if (Flags == OptoTelegramFlags.OK_TestEnd) return "#### end of test ####";
|
||||
else return string.Empty;
|
||||
}
|
||||
|
||||
|
||||
static OptoTelegramRaw()
|
||||
{
|
||||
culture = CultureInfo.CreateSpecificCulture("DE"); /// This is to use comma as decimal number separator
|
||||
}
|
||||
|
||||
public OptoTelegramRaw()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parses optical telegram and returns OptoTelegramRaw object
|
||||
/// </summary>
|
||||
/// <description>
|
||||
/// Create a configuration structure from a complete byte array
|
||||
///
|
||||
/// Telegram description:
|
||||
///
|
||||
/// AAAAAA[tab]BBBB[tab]CCCC[tab]DDDDDD[tab]EEEE[tab]FFFFFFFF[tab]GG[cr][lf] (42 bytes)
|
||||
///
|
||||
/// Data Comment Type Calculate to decimal
|
||||
/// ----------------------------------------------------------------
|
||||
/// AAAAAA EMF Int24 Value * 0.000000333
|
||||
/// BBBB Magnetic field Int16 Value
|
||||
/// CCCC Flow Int16 Value * 0.225 * Scalig factor
|
||||
/// DDDDDD Volume Int24 Value / 16000 * Scaling factor
|
||||
/// EEEE Impedance Int16 Value
|
||||
/// FFFFFFFF Timestamp Uint32 Value / 8192
|
||||
/// GG Checksum Byte
|
||||
/// ----------------------------------------------------------------
|
||||
///
|
||||
/// Example:
|
||||
/// FFFFFE 51EA 0000 65324E 0087 F6319DFF 86
|
||||
/// FFDD3A 51F9 0000 65324E 0088 F631A60B 45
|
||||
/// ...
|
||||
/// </description>
|
||||
/// <param name="data">A complete byte array data</param>
|
||||
/// <returns>true = telegram OK, false = telegram NOK</returns>
|
||||
public bool UpdateFromString(string telegram, int counter, ref Int64 volumeRawExtLast, ref Int64 timestampExtLast)
|
||||
{
|
||||
DateTime = DateTime.Now;
|
||||
Counter = counter;
|
||||
RefFlow = (float)Sequences.ProcessData.RefFlow.Val;
|
||||
|
||||
if ((telegram == null) || (telegram.Length < Length) ||
|
||||
(telegram[6] != '\t') || (telegram[11] != '\t') || (telegram[16] != '\t') ||
|
||||
(telegram[23] != '\t') || (telegram[28] != '\t') || (telegram[37] != '\t') ||
|
||||
(telegram[40] != '\r') || (telegram[41] != '\n'))
|
||||
{
|
||||
Flags = OptoTelegramFlags.InvalidTelegram;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool f1 = UInt32.TryParse(telegram.Substring(0, 6), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out EmfRaw);
|
||||
bool f2 = Int16.TryParse(telegram.Substring(7, 4), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out MagneticFieldRaw);
|
||||
bool f3 = Int16.TryParse(telegram.Substring(12, 4), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out FlowRaw);
|
||||
bool f4 = UInt32.TryParse(telegram.Substring(17, 6), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out VolumeRaw);
|
||||
bool f5 = Int16.TryParse(telegram.Substring(24, 4), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out Impedance);
|
||||
bool f6 = UInt32.TryParse(telegram.Substring(29, 8), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out Timestamp);
|
||||
bool f7 = byte.TryParse(telegram.Substring(38, 2), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out CheckSum);
|
||||
|
||||
bool allOk = f1 && f2 && f3 && f4 && f5 && f6 && f7;
|
||||
Flags = allOk ? OptoTelegramFlags.OK : OptoTelegramFlags.InvalidTelegram;
|
||||
|
||||
///
|
||||
/// Cope with 'VolumeRaw' overflow
|
||||
///
|
||||
Int64 uncorrected = (Int64)(((UInt64)volumeRawExtLast & 0xFFFFFFFFFF000000UL) | VolumeRaw);
|
||||
if (Math.Abs(uncorrected - volumeRawExtLast) <= 0x800000L)
|
||||
{
|
||||
VolumeRawExt = volumeRawExtLast = uncorrected;
|
||||
}
|
||||
else if (Math.Abs(uncorrected + 0x1000000L - volumeRawExtLast) <= 0x800000L)
|
||||
{
|
||||
VolumeRawExt = volumeRawExtLast = uncorrected + 0x1000000L;
|
||||
}
|
||||
else if (Math.Abs(uncorrected - 0x1000000L - volumeRawExtLast) <= 0x800000L)
|
||||
{
|
||||
VolumeRawExt = volumeRawExtLast = uncorrected - 0x1000000L;
|
||||
}
|
||||
else
|
||||
{
|
||||
VolumeRawExt = volumeRawExtLast = uncorrected;
|
||||
}
|
||||
|
||||
///
|
||||
/// Cope with 'Timestamp' overflow
|
||||
///
|
||||
uncorrected = (Int64)(((UInt64)timestampExtLast & 0xFFFFFFFF00000000UL) | Timestamp);
|
||||
if (Math.Abs(uncorrected - timestampExtLast) <= 0x80000000L)
|
||||
{
|
||||
TimestampExt = timestampExtLast = uncorrected;
|
||||
}
|
||||
else if (Math.Abs(uncorrected + 0x100000000L - timestampExtLast) <= 0x80000000L)
|
||||
{
|
||||
TimestampExt = timestampExtLast = uncorrected + 0x100000000L;
|
||||
}
|
||||
else if (Math.Abs(uncorrected - 0x100000000L - timestampExtLast) <= 0x80000000L)
|
||||
{
|
||||
TimestampExt = timestampExtLast = uncorrected - 0x100000000L;
|
||||
}
|
||||
else
|
||||
{
|
||||
TimestampExt = timestampExtLast = uncorrected;
|
||||
}
|
||||
|
||||
return allOk;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Alternative to UpdateFromString(...) when data are flushed
|
||||
/// </summary>
|
||||
public bool UpdateFromStringDummy(string telegram)
|
||||
{
|
||||
DateTime = DateTime.Now;
|
||||
RefFlow = (float)Sequences.ProcessData.RefFlow.Val;
|
||||
|
||||
if ((telegram == null) || (telegram.Length < Length) ||
|
||||
(telegram[6] != '\t') || (telegram[11] != '\t') || (telegram[16] != '\t') ||
|
||||
(telegram[23] != '\t') || (telegram[28] != '\t') || (telegram[37] != '\t') ||
|
||||
(telegram[40] != '\r') || (telegram[41] != '\n'))
|
||||
{
|
||||
Flags = OptoTelegramFlags.InvalidTelegram;
|
||||
return false;
|
||||
}
|
||||
|
||||
//bool f1 = UInt32.TryParse(telegram.Substring(0, 6), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out EmfRaw);
|
||||
//bool f2 = Int16.TryParse(telegram.Substring(7, 4), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out MagneticFieldRaw);
|
||||
//bool f3 = Int16.TryParse(telegram.Substring(12, 4), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out FlowRaw);
|
||||
//bool f4 = UInt32.TryParse(telegram.Substring(17, 6), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out VolumeRaw);
|
||||
//bool f5 = Int16.TryParse(telegram.Substring(24, 4), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out Impedance);
|
||||
//bool f6 = UInt32.TryParse(telegram.Substring(29, 8), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out Timestamp);
|
||||
//bool f7 = byte.TryParse(telegram.Substring(38, 2), NumberStyles.HexNumber, CultureInfo.CurrentCulture, out CheckSum);
|
||||
//return f1 && f2 && f3 && f4 && f5 && f6 && f7;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public void SetFlags(OptoTelegramFlags flags)
|
||||
{
|
||||
this.Flags = flags;
|
||||
}
|
||||
|
||||
|
||||
public string ToString(double scalingFactor, OptoTelegramRaw previous)
|
||||
{
|
||||
if (Flags == OptoTelegramFlags.SyncError)
|
||||
{
|
||||
return "Sychronization error";
|
||||
}
|
||||
else if (Flags == OptoTelegramFlags.InvalidTelegram)
|
||||
{
|
||||
return "Invalid telegram";
|
||||
}
|
||||
else /// if (flags == OptoTelegramFlags.OK / OptoTelegramFlags.OK_TestStart / OptoTelegramFlags.OK_TestEnd)
|
||||
{
|
||||
return string.Format("{0}:{1}:{2}.{3}\t{4} :\t{5}\t{6}\t{7}\t{8}\t{9}\t{10}\t{11}\t{12}\t{13}\t{14}\t{15}\t{16}\t{17}\t{18}\t{19}\t{20}\t{21}\t{22}",
|
||||
DateTime.Hour.ToString("D2"),
|
||||
DateTime.Minute.ToString("D2"),
|
||||
DateTime.Second.ToString("D2"),
|
||||
DateTime.Millisecond.ToString("D4"),
|
||||
Counter,
|
||||
EmfRaw.ToString("X6"),
|
||||
MagneticFieldRaw.ToString("X4"),
|
||||
FlowRaw.ToString("X4"),
|
||||
VolumeRaw.ToString("X6"),
|
||||
Impedance.ToString("X4"),
|
||||
Timestamp.ToString("X8"),
|
||||
CheckSum.ToString("X2"),
|
||||
EMF().ToString("F4", culture),
|
||||
MagneticField().ToString("F0", culture),
|
||||
Flow(scalingFactor).ToString("F2", culture),
|
||||
Volume(scalingFactor).ToString("F4", culture),
|
||||
FlipTime().ToString("F0", culture),
|
||||
TimestampDec().ToString("F4", culture),
|
||||
(RefFlow * 1000).ToString("F2", culture),
|
||||
VolumeDelta(scalingFactor, previous).ToString("F4", culture),
|
||||
TimeDelta().ToString("F3", culture),
|
||||
scalingFactor.ToString("F1", culture),
|
||||
Label());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Filter RefFlow data in an array of OptoTelegramRaw objects by a FIR filter:
|
||||
///
|
||||
/// kSize = 5, kSize2 = 2
|
||||
///
|
||||
/// i k
|
||||
/// ---------------------------------------------------------------------------
|
||||
/// 0 -5 filtered[0] = data[0]
|
||||
/// 1 -4 filtered[1] = data[1]
|
||||
/// 2 -3 filtered[2] = data[0]*k[0] + ... + data[4]*k[4]
|
||||
/// 3 -2 filtered[3] = data[1]*k[0] + ... + data[5]*k[4]
|
||||
/// 4 -1 filtered[4] = data[2]*k[0] + ... + data[6]*k[4]
|
||||
/// 5 0 data[0] = filtered[0], filtered[0] = data[3]*k[0] + ... + data[7]*k[4]
|
||||
/// 6 1 data[1] = filtered[1], filtered[1] = data[4]*k[0] + ... + data[8]*k[4]
|
||||
/// 7 ...
|
||||
/// </summary>
|
||||
/// <param name="optoData">array of OptoTelegramRaw objects</param>
|
||||
/// <param name="optoDataCount">number of objects to process</param>
|
||||
public static void FIRFilterFlow(OptoTelegramRaw[] optoData, int optoDataCount)
|
||||
{
|
||||
float[] kernel = new float[] { 0.1f, 0.2f, 0.4f, 0.2f, 0.1f };
|
||||
int kSize = kernel.Length;
|
||||
int kSize2 = kernel.Length / 2;
|
||||
|
||||
float[] filtered = new float[kSize];
|
||||
|
||||
for (int i = 0; i < optoDataCount; i++)
|
||||
{
|
||||
int k = i - kSize;
|
||||
if (k >= 0) optoData[k].RefFlow = filtered[i % kSize];
|
||||
|
||||
if (i < kSize2 || i >= optoDataCount - kSize2)
|
||||
{
|
||||
filtered[i % kSize] = optoData[i].RefFlow;
|
||||
}
|
||||
else
|
||||
{
|
||||
float weoightedSum = 0;
|
||||
for (int j = -kSize2; j <= kSize2; j++)
|
||||
weoightedSum += optoData[i + j].RefFlow * kernel[j + kSize2];
|
||||
|
||||
filtered[i % kSize] = weoightedSum;
|
||||
}
|
||||
}
|
||||
|
||||
for (int k = optoDataCount - kSize; k < optoDataCount; k++)
|
||||
{
|
||||
if (k >= 0) optoData[k].RefFlow = filtered[k % kSize];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,186 @@
|
||||
///
|
||||
/// Copyright (c) 2015-2017 Sensus Metering Systems
|
||||
///
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Xml.Serialization;
|
||||
using Config.Entities;
|
||||
using TBF.Rig.Generic;
|
||||
using TBF.Resources;
|
||||
using Common;
|
||||
|
||||
namespace TBF.Rig.TestMethods.GenesisCommunication.GenesisHead
|
||||
{
|
||||
public partial class ProcParams : ProcedureParamsBase, IParamsProvider, IProcedureParams
|
||||
{
|
||||
public static XmlSerializer Serializer = XmlSerializer.FromTypes(new[] { typeof(ProcParams) })[0];
|
||||
public override XmlSerializer GetSerializer() { return Serializer; }
|
||||
|
||||
public MeterType MeterType;
|
||||
public float CalibTarget; /// Target error after calibration in [%]
|
||||
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;
|
||||
CalibTarget = 0;
|
||||
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. target [%]",
|
||||
"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 CalibTarget.ToString();
|
||||
case 2: return FactorLimitLo.ToString();
|
||||
case 3: return FactorLimitHi.ToString();
|
||||
#if ORACLE_DB
|
||||
case 4: return WMType_ID.ToString();
|
||||
case 5: return WMType_Rev.ToString();
|
||||
#endif
|
||||
default: return string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
public CfgUpdateFlags 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 CfgUpdateFlags.None; }
|
||||
}
|
||||
break;
|
||||
case 1: CalibTarget = Utils.ParseSFloat(strValue); return CfgUpdateFlags.None;
|
||||
case 2: FactorLimitLo = int.Parse(strValue); return CfgUpdateFlags.None;
|
||||
case 3: FactorLimitHi = int.Parse(strValue); return CfgUpdateFlags.None;
|
||||
#if ORACLE_DB
|
||||
case 4: WMType_ID = int.Parse(strValue); return CfgUpdateFlags.None;
|
||||
case 5: WMType_Rev = int.Parse(strValue); return CfgUpdateFlags.None;
|
||||
#endif
|
||||
default: return CfgUpdateFlags.None;
|
||||
}
|
||||
|
||||
return CfgUpdateFlags.None;
|
||||
}
|
||||
|
||||
public bool ValidateParam(int i, string strValue, out string message)
|
||||
{
|
||||
message = string.Empty;
|
||||
|
||||
int iDummy;
|
||||
float fDummy;
|
||||
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
for (MeterType mt = 0; mt < MeterType.Count; mt++) if (mt.ToString().Equals(strValue)) return true;
|
||||
break;
|
||||
case 1:
|
||||
if (Utils.TryParseSFloat(strValue, out fDummy) && fDummy >= -10.0f && fDummy <= 10.0f) return true;
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
if (int.TryParse(strValue, out iDummy) && iDummy >= 1000 && iDummy <= 8000) return true;
|
||||
break;
|
||||
|
||||
#if ORACLE_DB
|
||||
case 4: /// WMType_ID
|
||||
case 5: /// 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.CalibTarget = this.CalibTarget;
|
||||
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 virtual bool UpdateFromDbEntity(ComponentProcedure dbEntity)
|
||||
{
|
||||
if (dbEntity == null) return false;
|
||||
try
|
||||
{
|
||||
ProcParams tmp = Serializer.Deserialize(new StringReader(dbEntity.Parameters)) as ProcParams;
|
||||
|
||||
procedureParamsEntity = dbEntity;
|
||||
componentName = dbEntity.CmpntName;
|
||||
procedure = dbEntity.Procedure;
|
||||
|
||||
if (tmp != null) tmp.CopyContentTo(this);
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,160 @@
|
||||
///
|
||||
/// Copyright (c) 2015-2017 Sensus Metering Systems
|
||||
///
|
||||
using System;
|
||||
|
||||
namespace TBF.Rig.TestMethods.GenesisCommunication.GenesisHead
|
||||
{
|
||||
public class StatusStruct
|
||||
{
|
||||
public static readonly int Length = 48;
|
||||
|
||||
public Byte Version;
|
||||
public FlowState FlowState;
|
||||
public UInt32 BillingVolume;
|
||||
public UInt32 ForwardVolume;
|
||||
public UInt32 ReverseVolume;
|
||||
public UInt32 SecondsActive;
|
||||
public UInt32 SecondsIdle;
|
||||
public UInt32 SecondsUsed;
|
||||
public UInt32 UTC;
|
||||
public Int32 ScaledAvgFlowRate;
|
||||
public UInt16 PeakFlowRate;
|
||||
public UInt16 AlarmState;
|
||||
public byte RebootCount;
|
||||
public byte[] AlarmCount;
|
||||
public UInt16 FlipTime;
|
||||
|
||||
|
||||
public StatusStruct()
|
||||
{
|
||||
AlarmCount = new byte[7];
|
||||
}
|
||||
|
||||
public byte[] ToByteArray()
|
||||
{
|
||||
byte[] result = new byte[Length];
|
||||
|
||||
result[0] = Version;
|
||||
result[1] = (byte)FlowState;
|
||||
|
||||
result[2] = (byte)(BillingVolume & 0x000000FF);
|
||||
result[3] = (byte)((BillingVolume >> 8) & 0x000000FF);
|
||||
result[4] = (byte)((BillingVolume >> 16) & 0x000000FF);
|
||||
result[5] = (byte)((BillingVolume >> 24) & 0x000000FF);
|
||||
|
||||
result[6] = (byte)(ForwardVolume & 0x000000FF);
|
||||
result[7] = (byte)((ForwardVolume >> 8) & 0x000000FF);
|
||||
result[8] = (byte)((ForwardVolume >> 16) & 0x000000FF);
|
||||
result[9] = (byte)((ForwardVolume >> 24) & 0x000000FF);
|
||||
|
||||
result[10] = (byte)(ReverseVolume & 0x000000FF);
|
||||
result[11] = (byte)((ReverseVolume >> 8) & 0x000000FF);
|
||||
result[12] = (byte)((ReverseVolume >> 16) & 0x000000FF);
|
||||
result[13] = (byte)((ReverseVolume >> 24) & 0x000000FF);
|
||||
|
||||
result[14] = (byte)(SecondsActive & 0x000000FF);
|
||||
result[15] = (byte)((SecondsActive >> 8) & 0x000000FF);
|
||||
result[16] = (byte)((SecondsActive >> 16) & 0x000000FF);
|
||||
result[17] = (byte)((SecondsActive >> 24) & 0x000000FF);
|
||||
|
||||
result[18] = (byte)(SecondsIdle & 0x000000FF);
|
||||
result[19] = (byte)((SecondsIdle >> 8) & 0x000000FF);
|
||||
result[20] = (byte)((SecondsIdle >> 16) & 0x000000FF);
|
||||
result[21] = (byte)((SecondsIdle >> 24) & 0x000000FF);
|
||||
|
||||
result[22] = (byte)(SecondsUsed & 0x000000FF);
|
||||
result[23] = (byte)((SecondsUsed >> 8) & 0x000000FF);
|
||||
result[24] = (byte)((SecondsUsed >> 16) & 0x000000FF);
|
||||
result[25] = (byte)((SecondsUsed >> 24) & 0x000000FF);
|
||||
|
||||
result[26] = (byte)(UTC & 0x000000FF);
|
||||
result[27] = (byte)((UTC >> 8) & 0x000000FF);
|
||||
result[28] = (byte)((UTC >> 16) & 0x000000FF);
|
||||
result[29] = (byte)((UTC >> 24) & 0x000000FF);
|
||||
|
||||
result[30] = (byte)(ScaledAvgFlowRate & 0x000000FF);
|
||||
result[31] = (byte)((ScaledAvgFlowRate >> 8) & 0x000000FF);
|
||||
result[32] = (byte)((ScaledAvgFlowRate >> 16) & 0x000000FF);
|
||||
result[33] = (byte)((ScaledAvgFlowRate >> 24) & 0x000000FF); /// TODO: test with negative value
|
||||
|
||||
result[34] = (byte)(PeakFlowRate & 0x00FF);
|
||||
result[35] = (byte)((PeakFlowRate >> 8) & 0x00FF);
|
||||
|
||||
result[36] = (byte)(AlarmState & 0x00FF);
|
||||
result[37] = (byte)((AlarmState >> 8) & 0x00FF);
|
||||
|
||||
result[38] = RebootCount;
|
||||
|
||||
result[39] = AlarmCount[0];
|
||||
result[40] = AlarmCount[1];
|
||||
result[41] = AlarmCount[2];
|
||||
result[42] = AlarmCount[3];
|
||||
result[43] = AlarmCount[4];
|
||||
result[44] = AlarmCount[5];
|
||||
result[45] = AlarmCount[6];
|
||||
|
||||
result[46] = (byte)(FlipTime & 0x00FF);
|
||||
result[47] = (byte)((FlipTime >> 8) & 0x00FF);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static StatusStruct FromByteArray(byte[] data)
|
||||
{
|
||||
if (data.Length != Length) return null;
|
||||
|
||||
StatusStruct result = new StatusStruct();
|
||||
|
||||
result.Version = data[0];
|
||||
result.FlowState = (FlowState)data[1];
|
||||
result.BillingVolume = (((UInt32)data[5] * 256 + data[4]) * 256 + data[3]) * 256 + data[2];
|
||||
result.ForwardVolume = (((UInt32)data[9] * 256 + data[8]) * 256 + data[7]) * 256 + data[6];
|
||||
result.ReverseVolume = (((UInt32)data[13] * 256 + data[12]) * 256 + data[11]) * 256 + data[10];
|
||||
result.SecondsActive = (((UInt32)data[17] * 256 + data[16]) * 256 + data[15]) * 256 + data[14];
|
||||
result.SecondsIdle = (((UInt32)data[21] * 256 + data[20]) * 256 + data[19]) * 256 + data[18];
|
||||
result.SecondsUsed = (((UInt32)data[25] * 256 + data[24]) * 256 + data[23]) * 256 + data[22];
|
||||
result.UTC = (((UInt32)data[29] * 256 + data[28]) * 256 + data[27]) * 256 + data[26];
|
||||
result.ScaledAvgFlowRate = (((Int32)data[33] * 256 + data[32]) * 256 + data[31]) * 256 + data[30]; /// TODO: test with negative value
|
||||
result.PeakFlowRate = (UInt16)(data[34] + 256 * data[35]);
|
||||
result.AlarmState = (UInt16)(data[36] + 256 * data[37]);
|
||||
result.RebootCount = data[38];
|
||||
result.AlarmCount[0] = data[39];
|
||||
result.AlarmCount[1] = data[40];
|
||||
result.AlarmCount[2] = data[41];
|
||||
result.AlarmCount[3] = data[42];
|
||||
result.AlarmCount[4] = data[43];
|
||||
result.AlarmCount[5] = data[44];
|
||||
result.AlarmCount[6] = data[45];
|
||||
result.FlipTime = (UInt16)(data[46] * 256 + data[47]);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("Status: V{0} Flow={1} BillVol={2} ForwVol={3} RevVol={4} SecActive={5}s SecIdle={6}s SecUsed={7}s UTC={8} AvgFlowRate={9} PeekFlowRate={10} AlarmState={11} RebootCount={12} A0={13} A1={14} A2={15} A3={16} A4={17} A5={18} A6={19} FlipTime={20}",
|
||||
Version,
|
||||
FlowState,
|
||||
BillingVolume,
|
||||
ForwardVolume,
|
||||
ReverseVolume,
|
||||
SecondsActive,
|
||||
SecondsIdle,
|
||||
SecondsUsed,
|
||||
UTC,
|
||||
ScaledAvgFlowRate,
|
||||
PeakFlowRate,
|
||||
AlarmState,
|
||||
RebootCount,
|
||||
AlarmCount[0],
|
||||
AlarmCount[1],
|
||||
AlarmCount[2],
|
||||
AlarmCount[3],
|
||||
AlarmCount[4],
|
||||
AlarmCount[5],
|
||||
AlarmCount[6],
|
||||
FlipTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -117,6 +117,9 @@
|
||||
<Reference Include="log4net, Version=2.0.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\log4net.2.0.15\lib\net45\log4net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Logic.ProductionToProductMapper">
|
||||
<HintPath>..\packages\Common\Logic.ProductionToProductMapper.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="mscorlib" />
|
||||
<Reference Include="MySql.Data">
|
||||
<HintPath>..\packages\MySql.Data.6.6.5\lib\net40\MySql.Data.dll</HintPath>
|
||||
@ -167,6 +170,21 @@
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="Xylem.Common.CommonCore">
|
||||
<HintPath>..\packages\Common\Xylem.Common.CommonCore.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore">
|
||||
<HintPath>..\packages\Common\Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xylem.Common.Hardware.WaterMeter.WaterMeterCore">
|
||||
<HintPath>..\packages\Common\Xylem.Common.Hardware.WaterMeter.WaterMeterCore.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xylem.Common.Hardware.WaterMeter.WaterMeterRegisters">
|
||||
<HintPath>..\packages\Common\Xylem.Common.Hardware.WaterMeter.WaterMeterRegisters.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Xylem.Common.Metrology.Measurements">
|
||||
<HintPath>..\packages\Common\Xylem.Common.Metrology.Measurements.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Boxes\CheckBoxImage.cs">
|
||||
@ -1571,6 +1589,18 @@
|
||||
<DependentUpon>TestMethodCfgCtrl.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Rig\TestMethods\FlyingStartMassCollection\Single\TestParams.cs" />
|
||||
<Compile Include="Rig\TestMethods\GenesisCommunication\GenesisHead\CalibrationStruct.cs" />
|
||||
<Compile Include="Rig\TestMethods\GenesisCommunication\GenesisHead\ConfigStruct.cs" />
|
||||
<Compile Include="Rig\TestMethods\GenesisCommunication\GenesisHead\Enums.cs" />
|
||||
<Compile Include="Rig\TestMethods\GenesisCommunication\GenesisHead\Factory.cs" />
|
||||
<Compile Include="Rig\TestMethods\GenesisCommunication\GenesisHead\GenesisHead.cs" />
|
||||
<Compile Include="Rig\TestMethods\GenesisCommunication\GenesisHead\GenesisHeadCfg.cs" />
|
||||
<Compile Include="Rig\TestMethods\GenesisCommunication\GenesisHead\GenesisHeadCfgCtrl.cs" />
|
||||
<Compile Include="Rig\TestMethods\GenesisCommunication\GenesisHead\GenesisHeadCfgCtrl.designer.cs" />
|
||||
<Compile Include="Rig\TestMethods\GenesisCommunication\GenesisHead\OptoReceivedEventArgs.cs" />
|
||||
<Compile Include="Rig\TestMethods\GenesisCommunication\GenesisHead\OptoTelegramRaw.cs" />
|
||||
<Compile Include="Rig\TestMethods\GenesisCommunication\GenesisHead\ProcParams.cs" />
|
||||
<Compile Include="Rig\TestMethods\GenesisCommunication\GenesisHead\StatusStruct.cs" />
|
||||
<Compile Include="Rig\TestMethods\iPerlCommunication\AllCompletedEventArgs.cs" />
|
||||
<Compile Include="Rig\TestMethods\iPerlCommunication\CheckBoxImage.cs">
|
||||
<SubType>Component</SubType>
|
||||
@ -3488,6 +3518,7 @@
|
||||
<EmbeddedResource Include="Rig\TestMethods\FlyingStartTankCollection\Single\TestMethodCfgCtrl.resx">
|
||||
<DependentUpon>TestMethodCfgCtrl.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Rig\TestMethods\GenesisCommunication\GenesisHead\GenesisHeadCfgCtrl.resx" />
|
||||
<EmbeddedResource Include="Rig\TestMethods\GrabImage\GrabImageCfgCtrl.resx">
|
||||
<DependentUpon>GrabImageCfgCtrl.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
|
||||
BIN
packages/Antlr3.Runtime.3.5.1/.signature.p7s
vendored
Normal file
BIN
packages/Antlr3.Runtime.3.5.1/.signature.p7s
vendored
Normal file
Binary file not shown.
BIN
packages/Antlr3.Runtime.3.5.1/Antlr3.Runtime.3.5.1.nupkg
vendored
Normal file
BIN
packages/Antlr3.Runtime.3.5.1/Antlr3.Runtime.3.5.1.nupkg
vendored
Normal file
Binary file not shown.
BIN
packages/Antlr3.Runtime.3.5.1/lib/net20/Antlr3.Runtime.dll
vendored
Normal file
BIN
packages/Antlr3.Runtime.3.5.1/lib/net20/Antlr3.Runtime.dll
vendored
Normal file
Binary file not shown.
3249
packages/Antlr3.Runtime.3.5.1/lib/net20/Antlr3.Runtime.xml
vendored
Normal file
3249
packages/Antlr3.Runtime.3.5.1/lib/net20/Antlr3.Runtime.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Antlr3.Runtime.3.5.1/lib/net40-client/Antlr3.Runtime.dll
vendored
Normal file
BIN
packages/Antlr3.Runtime.3.5.1/lib/net40-client/Antlr3.Runtime.dll
vendored
Normal file
Binary file not shown.
3249
packages/Antlr3.Runtime.3.5.1/lib/net40-client/Antlr3.Runtime.xml
vendored
Normal file
3249
packages/Antlr3.Runtime.3.5.1/lib/net40-client/Antlr3.Runtime.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Antlr3.Runtime.3.5.1/lib/netstandard1.1/Antlr3.Runtime.dll
vendored
Normal file
BIN
packages/Antlr3.Runtime.3.5.1/lib/netstandard1.1/Antlr3.Runtime.dll
vendored
Normal file
Binary file not shown.
3220
packages/Antlr3.Runtime.3.5.1/lib/netstandard1.1/Antlr3.Runtime.xml
vendored
Normal file
3220
packages/Antlr3.Runtime.3.5.1/lib/netstandard1.1/Antlr3.Runtime.xml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
BIN
packages/Common/Logic.ProductionToProductMapper.dll
Normal file
BIN
packages/Common/Logic.ProductionToProductMapper.dll
Normal file
Binary file not shown.
11
packages/Common/Logic.ProductionToProductMapper.dll.config
Normal file
11
packages/Common/Logic.ProductionToProductMapper.dll.config
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
BIN
packages/Common/Logic.ProductionToProductMapper.pdb
Normal file
BIN
packages/Common/Logic.ProductionToProductMapper.pdb
Normal file
Binary file not shown.
19
packages/Common/MeterFilesEraseRestore.json
Normal file
19
packages/Common/MeterFilesEraseRestore.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"Erase": [
|
||||
"1\\tstfile",
|
||||
"1\\fdrdata",
|
||||
"1\\logdata",
|
||||
"1\\blklist",
|
||||
"1\\mettable",
|
||||
"1\\pulsedbg",
|
||||
"1\\upg*",
|
||||
"1\\img*"
|
||||
],
|
||||
"Restore": [
|
||||
{
|
||||
"Name": "1\\tstfile",
|
||||
"ByteSize": 262144,
|
||||
"Pattern": null
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
packages/Common/NLog.dll
Normal file
BIN
packages/Common/NLog.dll
Normal file
Binary file not shown.
28548
packages/Common/NLog.xml
Normal file
28548
packages/Common/NLog.xml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Common/Newtonsoft.Json.dll
Normal file
BIN
packages/Common/Newtonsoft.Json.dll
Normal file
Binary file not shown.
9646
packages/Common/Newtonsoft.Json.xml
Normal file
9646
packages/Common/Newtonsoft.Json.xml
Normal file
File diff suppressed because it is too large
Load Diff
64
packages/Common/NlogConfig.xml
Normal file
64
packages/Common/NlogConfig.xml
Normal file
@ -0,0 +1,64 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<variable name="BasePath" value="" />
|
||||
<targets>
|
||||
<!--CalibrationHelper-->
|
||||
<target name="CalibrationHelper" xsi:type="File" fileName="${BasePath}\${shortdate}\${processname}\CalibrationHelper.log" CreateDirs="True" layout="${longdate} | ${level} | ${message} ${exception:format=toString}" archiveAboveSize="50000000" archiveFileName="C:\GenesisLog\${shortdate}\${processname}\{##}_CalibrationHelper.log" />
|
||||
<!--LedRawData-->
|
||||
<target xsi:type="BufferingWrapper" name="TargetLedRawDataBase" bufferSize="10000" flushTimeout="-1" slidingTimeout="true">
|
||||
<target name="LedRawDataBase" xsi:type="File" fileName="${BasePath}\${shortdate}\${processname}\LedRawData_BASE.log" CreateDirs="True" layout="${longdate} | ${message} ${exception:format=toString}" archiveAboveSize="50000000" archiveFileName="C:\GenesisLog\${shortdate}\${processname}\{##}_LedRawData_BASE.log" />
|
||||
</target>
|
||||
<!--C:\GenesisLog\${shortdate}
|
||||
C:\GenesisLog\${shortdate}-->
|
||||
<!--MeterBatch-->
|
||||
<target name="MeterBatch" xsi:type="File" fileName="${BasePath}\${shortdate}\${processname}\Meter_BASE.log" CreateDirs="True" layout="${longdate} | ${level} | ${message} ${exception:format=toString}" archiveAboveSize="50000000" archiveFileName="C:\GenesisLog\${shortdate}\${processname}\{##}_Meter_BASE.log" />
|
||||
<!--Meter-->
|
||||
<target name="MeterBase" xsi:type="File" fileName="${BasePath}\${shortdate}\${processname}\Meter_BASE.log" CreateDirs="True" layout="${longdate} | ${level} | ${message} ${exception:format=toString}" archiveAboveSize="50000000" archiveFileName="C:\GenesisLog\${shortdate}\${processname}\{##}_Meter_BASE.log" />
|
||||
<target name="Slot:0" xsi:type="File" fileName="${BasePath}\${shortdate}\${processname}\Meter_SlotSlot:0.log" CreateDirs="True" layout="${longdate} | ${level} | ${message} ${exception:format=toString}" archiveAboveSize="50000000" archiveFileName="C:\GenesisLog\${shortdate}\${processname}\{##}_Meter_SlotSlot:0.log" />
|
||||
<!--COM-->
|
||||
<target name="COMBase" xsi:type="File" fileName="${BasePath}\${shortdate}\${processname}\COM_BASE.log" CreateDirs="True" layout="${longdate} | ${level} | ${message} ${exception:format=toString}" archiveAboveSize="50000000" archiveFileName="C:\GenesisLog\${shortdate}\${processname}\{##}_COM_BASE.log" />
|
||||
<!--ServiceFwUpdateBuilder-->
|
||||
<target name="ServiceFwUpdateBuilder" xsi:type="File" fileName="${BasePath}\${shortdate}\${processname}\ServiceFwUpdateBuilder.log" CreateDirs="True" layout="${longdate} | ${level} | ${message} ${exception:format=toString}" archiveAboveSize="50000000" archiveFileName="C:\GenesisLog\${shortdate}\${processname}\{##}_ServiceFwUpdateBuilder.log" />
|
||||
<!--ServiceFwUpdateLoader-->
|
||||
<target name="ServiceFwUpdateLoader" xsi:type="File" fileName="${BasePath}\${shortdate}\${processname}\ServiceFwUpdateLoader.log" CreateDirs="True" layout="${longdate} | ${level} | ${message} ${exception:format=toString}" archiveAboveSize="50000000" archiveFileName="C:\GenesisLog\${shortdate}\${processname}\{##}_ServiceFwUpdateLoader.log" />
|
||||
<!--ServiceFwUpdateSw-->
|
||||
<target name="ServiceFwUpdateSw" xsi:type="File" fileName="${BasePath}\${shortdate}\${processname}\ServiceFwUpdateSw.log" CreateDirs="True" layout="${longdate} | ${level} | ${message} ${exception:format=toString}" archiveAboveSize="50000000" archiveFileName="C:\GenesisLog\${shortdate}\${processname}\{##}_ServiceFwUpdateSw.log" />
|
||||
<!--default-->
|
||||
<target name="default" xsi:type="File" fileName="${BasePath}\${shortdate}\${processname}\default.log" CreateDirs="True" layout="${longdate} | ${level} | ${message} ${exception:format=toString}" archiveAboveSize="50000000" archiveFileName="C:\GenesisLog\${shortdate}\${processname}\{##}_default.log" />
|
||||
<target name="PreAdjWr" xsi:type="File" fileName="${BasePath}\${shortdate}\${processname}\PreAdjWr.log" CreateDirs="True" layout="${longdate} | ${level} | ${message} ${exception:format=toString}" />
|
||||
<target name="ctlBatch" xsi:type="File" fileName="${BasePath}\${shortdate}\${processname}\ctlBatch.log" CreateDirs="True" layout="${longdate} | ${level} | ${message} ${exception:format=toString}" archiveAboveSize="50000000" archiveFileName="C:\GenesisLog\${shortdate}\${processname}\{##}_ctlBatch.log" />
|
||||
<target name="StreamingQualityFile" xsi:type="File" fileName="${BasePath}\${shortdate}\${processname}\StreamingQuality.log" CreateDirs="True" layout="${longdate} | ${level} | ${message} ${exception:format=toString}" />
|
||||
<target name="ProductionUIFile" xsi:type="File" fileName="${BasePath}\${shortdate}\${processname}\ProductionUIFile.log" CreateDirs="True" layout="${longdate} | ${level} | ${message} ${exception:format=toString}" />
|
||||
</targets>
|
||||
<rules>
|
||||
<!--ServiceFwUpdateBuilder-->
|
||||
<logger name="ServiceFwUpdateBuilder" minLevel="Trace" appendTo="ServiceFwUpdateSw" />
|
||||
<!--ServiceFwUpdateLoader-->
|
||||
<logger name="ServiceFwUpdateLoader" minLevel="Trace" appendTo="ServiceFwUpdateLoader" />
|
||||
<!--ServiceFwUpdateSw-->
|
||||
<logger name="ServiceFwUpdateSw" minLevel="Trace" appendTo="ServiceFwUpdateSw" />
|
||||
<!--CalibrationHelper-->
|
||||
<logger name="CalibrationHelper" minLevel="Trace" appendTo="CalibrationHelper" />
|
||||
<!--LedRawData-->
|
||||
<logger name="LedRawDataBase" minLevel="Trace" appendTo="TargetLedRawDataBase" />
|
||||
<!--MeterBatch-->
|
||||
<logger name="MeterBatch" minLevel="Trace" appendTo="MeterBatch" />
|
||||
<!--Meter-->
|
||||
<logger name="MeterBase" minLevel="Trace" appendTo="MeterBase" />
|
||||
<logger name="Slot:0" minLevel="Trace" appendTo="Slot:0" />
|
||||
<logger name="GenesisRequestProtocolBase" minLevel="Trace" appendTo="MeterBase" />
|
||||
<logger name="MeasurementBase" minLevel="Trace" appendTo="MeterBase" />
|
||||
<!--COM-->
|
||||
<logger name="SerialComPortBase" minLevel="Trace" appendTo="COMBase" />
|
||||
<logger name="IrdaBase" minLevel="Trace" appendTo="COMBase" />
|
||||
<logger name="RfidBase" minLevel="Trace" appendTo="COMBase" />
|
||||
<logger name="TransmitProtocolBase" minLevel="Trace" appendTo="COMBase" />
|
||||
<!--default-->
|
||||
<logger name="*" minLevel="Debug" appendTo="default" />
|
||||
<!--Ui logger-->
|
||||
<logger name="ctlBatch" minLevel="Trace" appendTo="ctlBatch" />
|
||||
<logger name="StreamingQuality" minLevel="Trace" appendTo="StreamingQualityFile" />
|
||||
<logger name="PreAdjWr" minLevel="Trace" appendTo="PreAdjWr" />
|
||||
<logger name="ProductionUI" minLevel="Trace" appendTo="ProductionUIFile" />
|
||||
</rules>
|
||||
</nlog>
|
||||
BIN
packages/Common/PdfSharp.dll
Normal file
BIN
packages/Common/PdfSharp.dll
Normal file
Binary file not shown.
23546
packages/Common/PdfSharp.xml
Normal file
23546
packages/Common/PdfSharp.xml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Common/RestSharp.dll
Normal file
BIN
packages/Common/RestSharp.dll
Normal file
Binary file not shown.
3024
packages/Common/RestSharp.xml
Normal file
3024
packages/Common/RestSharp.xml
Normal file
File diff suppressed because it is too large
Load Diff
BIN
packages/Common/Xylem.Common.CommonCore.Configuration.dll
Normal file
BIN
packages/Common/Xylem.Common.CommonCore.Configuration.dll
Normal file
Binary file not shown.
BIN
packages/Common/Xylem.Common.CommonCore.Configuration.pdb
Normal file
BIN
packages/Common/Xylem.Common.CommonCore.Configuration.pdb
Normal file
Binary file not shown.
BIN
packages/Common/Xylem.Common.CommonCore.ThreadWatcher.dll
Normal file
BIN
packages/Common/Xylem.Common.CommonCore.ThreadWatcher.dll
Normal file
Binary file not shown.
BIN
packages/Common/Xylem.Common.CommonCore.ThreadWatcher.pdb
Normal file
BIN
packages/Common/Xylem.Common.CommonCore.ThreadWatcher.pdb
Normal file
Binary file not shown.
BIN
packages/Common/Xylem.Common.CommonCore.dll
Normal file
BIN
packages/Common/Xylem.Common.CommonCore.dll
Normal file
Binary file not shown.
BIN
packages/Common/Xylem.Common.CommonCore.pdb
Normal file
BIN
packages/Common/Xylem.Common.CommonCore.pdb
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,223 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>Xylem.Common.Hardware.Interfaces.Ports.PortCore</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.BasePortDataEventArgs">
|
||||
<inheritdoc cref="T:System.EventArgs" />
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.BasePortDataEventArgs._receivedTime">
|
||||
<summary>
|
||||
Marker for incoming record at time of the PC
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.BasePortDataEventArgs.GetData">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.BasePortDataEventArgs.SetData(System.Object)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.BasePortDataEventArgs.SetReceivedTime(System.DateTimeOffset)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.BasePortDataEventArgs.GetReceivedTime">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.BasePortDataEventArgs.SetSyncMarkRecord(Xylem.Common.CommonCore.Consts.SyncMarkRecord)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.BasePortDataEventArgs.GetSyncMarkRecord">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.IPortDataEventArgs">
|
||||
<summary>
|
||||
Interface for port data event arguments
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.IPortDataEventArgs.GetData">
|
||||
<summary>
|
||||
Read data
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.IPortDataEventArgs.SetData(System.Object)">
|
||||
<summary>
|
||||
Write data
|
||||
</summary>
|
||||
<param name="data"></param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.IPortDataEventArgs.GetReceivedTime">
|
||||
<summary>
|
||||
Reading received time
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.IPortDataEventArgs.SetReceivedTime(System.DateTimeOffset)">
|
||||
<summary>
|
||||
Writing received time
|
||||
</summary>
|
||||
<param name="receivedTime"></param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.IPortDataEventArgs.SetSyncMarkRecord(Xylem.Common.CommonCore.Consts.SyncMarkRecord)">
|
||||
<summary>
|
||||
Setting the data marker
|
||||
</summary>
|
||||
<param name="syncMarkRecord"></param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.IPortDataEventArgs.GetSyncMarkRecord">
|
||||
<summary>
|
||||
Getting the data marker
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.ListBytePortDataEventArgs">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.ListBytePortDataEventArgs.#ctor(System.Collections.Generic.List{System.Byte},System.DateTimeOffset,Xylem.Common.CommonCore.Consts.SyncMarkRecord)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.ListBytePortDataEventArgs.GetData">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.ListBytePortDataEventArgs.SetData(System.Object)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.StringPortDataEventArgs">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.StringPortDataEventArgs.#ctor(System.String,System.DateTimeOffset,Xylem.Common.CommonCore.Consts.SyncMarkRecord)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.StringPortDataEventArgs.GetData">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.StringPortDataEventArgs.SetData(System.Object)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.Interfaces.Ports.PortCore.IPort">
|
||||
<summary>
|
||||
Interface for Ports
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.Interfaces.Ports.PortCore.IPort.OnRawRecordReceived">
|
||||
<summary>
|
||||
event for record received, either bytes or string
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.Interfaces.Ports.PortCore.IPort.OnRawRecordSendOut">
|
||||
<summary>
|
||||
event for record received, either bytes or string
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.IPort.SynchronizeReceiveBuffer(Xylem.Common.CommonCore.Consts.SyncMarkRecord)">
|
||||
<summary>
|
||||
set specific mark
|
||||
and flush or delete all incoming byte from buffer when SyncMarkRecord is <see cref="F:Xylem.Common.CommonCore.Consts.SyncMarkRecord.SyncStart"/> or
|
||||
<see cref="F:Xylem.Common.CommonCore.Consts.SyncMarkRecord.SyncEnd"/>
|
||||
</summary>
|
||||
<param name="syncMarkRecord"></param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.IPort.Open">
|
||||
<summary>
|
||||
if the port needs stuff to open, always open for better logical handling
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.IPort.Dispose">
|
||||
<summary>
|
||||
close and dispose all connections
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.IPort.IsOpen">
|
||||
<summary>
|
||||
indicates if the Port is open (also on Ports that did not have an open state)
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.IPort.PortWrite(System.Byte[])">
|
||||
<summary>
|
||||
Write byte[] to the Stream/Port on Child Class
|
||||
wrapped with base class error handling
|
||||
</summary>
|
||||
<param name="data">Array of bytes to write</param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.IPort.Clear">
|
||||
<summary>
|
||||
discard all buffers
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.IPort.GetPortName">
|
||||
<summary>
|
||||
Return the port name
|
||||
</summary>
|
||||
<returns>name of the port as string</returns>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.Interfaces.Ports.PortCore.TransmitPortSettings">
|
||||
<summary>
|
||||
Store Port settings set most likely from transmit protocol
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.Interfaces.Ports.PortCore.TransmitPortSettings.#ctor(System.Nullable{System.Byte},System.Nullable{System.UInt16},System.UInt16,System.Int32,System.UInt32,System.Nullable{System.UInt32},System.Boolean)">
|
||||
<summary>
|
||||
The transmission protocol needs to inform the communication port how to setup,
|
||||
this is the data container.
|
||||
</summary>
|
||||
<param name="protSyncByte"></param>
|
||||
<param name="protLengthIndex"></param>
|
||||
<param name="protAddLength"></param>
|
||||
<param name="responseTimeoutMs"></param>
|
||||
<param name="baudRate"></param>
|
||||
<param name="receiveBufferFlushThreshold"></param>
|
||||
<param name="doubleSyncByte"></param>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.Interfaces.Ports.PortCore.TransmitPortSettings.ProtSyncByte">
|
||||
<summary>
|
||||
start of receiving synchronization byte at byte receive routine
|
||||
syncByte == null: use the readLine routine (ASCII) and NOT the BYTE routine,
|
||||
lengthPosition and additionalLength are not used
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.Interfaces.Ports.PortCore.TransmitPortSettings.ProtLengthIndex">
|
||||
<summary>
|
||||
position of length information field in received BYTE record
|
||||
lengthIndex == null: take the constant receive length of additionalLength
|
||||
because the record doesn't contain length information
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.Interfaces.Ports.PortCore.TransmitPortSettings.ProtAddLength">
|
||||
<summary>
|
||||
additional record length NOT covert by the record length information field
|
||||
lengthIndex == null: constant length for received record
|
||||
Being used for the BYTE records indicated by a valid syncByte,
|
||||
not being used for ASCII records.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.Interfaces.Ports.PortCore.TransmitPortSettings.ResponseTimeoutMs">
|
||||
<summary>
|
||||
Response time out in milliseconds
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.Interfaces.Ports.PortCore.TransmitPortSettings.BaudRate">
|
||||
<summary>
|
||||
BaudRate for Port
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.Interfaces.Ports.PortCore.TransmitPortSettings.ReceiveBufferFlushThreshold">
|
||||
<summary>
|
||||
lower threshold for buffer flushing if dataMarker != SkipDecoding
|
||||
receiveBufferFlushThreshold == null: never flush the communication buffer
|
||||
receiveBufferFlushThreshold == 0: flush always the communication buffer
|
||||
receiveBufferFlushThreshold == x: flush communication buffer if it exceeds x Byte
|
||||
waste old records if an up-to-date record is being needed for start/stop synchronization
|
||||
of a measurement. This is the level at which the old data have to be flushed because the
|
||||
data have been dammed up in the communication port input buffer which means they are to
|
||||
old for synchronization purposes.
|
||||
/// </summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.Interfaces.Ports.PortCore.TransmitPortSettings.DoubleSyncByte">
|
||||
<summary>
|
||||
a special implementation may require the doubling of the sync byte to re-synchronize
|
||||
</summary>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,205 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.BaseDataEventArgs">
|
||||
<inheritdoc />
|
||||
<summary>
|
||||
abstract for set structure for BaseDataEventArgs
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.BaseDataEventArgs.GetData">
|
||||
<summary>
|
||||
'Base' get event record form real child.
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.BaseDataEventArgs.GetEventData">
|
||||
<summary>
|
||||
get real Event record
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.BaseDataEventArgs.RawData">
|
||||
<summary>
|
||||
Holds the record before decoding, for logging
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.CalibDataEventArgs">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.CalibDataEventArgs.CalibChl">
|
||||
<summary>
|
||||
Stream record for calibration on channel
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.CalibDataEventArgs.GetEventData">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.FlowDataEventArgs">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.FlowDataEventArgs.NewData">
|
||||
<summary>
|
||||
new record from Stream
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.FlowDataEventArgs.GetEventData">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.RegisterUpdatedEventArgs">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.RegisterUpdatedEventArgs.#ctor(Xylem.Common.Hardware.WaterMeter.Genesis.Registers.RegisterDefinition,System.Byte[])">
|
||||
<inheritdoc />
|
||||
<summary>
|
||||
Ctor with base record
|
||||
</summary>
|
||||
<param name="register">base record <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.RegisterUpdatedEventArgs.Register" /></param>
|
||||
<param name="value">base record <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.RegisterUpdatedEventArgs.Value" /></param>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.RegisterUpdatedEventArgs.Register">
|
||||
<summary>
|
||||
Register witch has updated
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.RegisterUpdatedEventArgs.Value">
|
||||
<summary>
|
||||
New Value in Register
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.RequestResponseDataEventArgs">
|
||||
<inheritdoc />
|
||||
<summary>
|
||||
EventArgs for Request Responses
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.RequestResponseDataEventArgs.RequestResponseData">
|
||||
<summary>
|
||||
Request response from meter
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.EventArguments.RequestResponseDataEventArgs.GetEventData">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord">
|
||||
<inheritdoc />
|
||||
<summary>
|
||||
hold streaming record for protocol H (contains calibration record)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.Validation">
|
||||
<summary>
|
||||
record validation
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.TotalTimeOfFlightS">
|
||||
<summary>
|
||||
total time of flight in seconds
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.DeltaTimeOfFlightS">
|
||||
<summary>
|
||||
delta time of flight in seconds
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.RAWTotalTimeOfFlight">
|
||||
<summary>
|
||||
total time of flight in cordonel units
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.RAWDeltaTimeOfFlight">
|
||||
<summary>
|
||||
delta time of flight in cordonel units
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.VolumeScaleRawPerMl">
|
||||
<summary>
|
||||
volume scale (default: 1024) means
|
||||
1024digits = 1ml
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.VolumeFactorRawToQm">
|
||||
<summary>
|
||||
volume factor to convert raw to m³
|
||||
uses 1E-6 (ml to m³) / VolumeScaleRawPerMl
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.DeltaVolumeRaw">
|
||||
<summary>
|
||||
raw volume between two samples
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.DeltaVolumeQm">
|
||||
<summary>
|
||||
calculated out of dRawVolume * VolumeFactorRawToQm .
|
||||
in cubic meters
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.AccuVolumeRaw">
|
||||
<summary>
|
||||
accumulated raw volume
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.SampleIntervalS">
|
||||
<summary>
|
||||
sample interval between two samples in seconds
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.AmplitudeUpV">
|
||||
<summary>
|
||||
high threshold amplitude in V
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.AmplitudeDownV">
|
||||
<summary>
|
||||
low threshold amplitude in V
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.PulseWidthRatioUp">
|
||||
<summary>
|
||||
high ratio for pulse width
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.PulseWidthRatioDown">
|
||||
<summary>
|
||||
low ratio for pulse width
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.TemperatureRaw">
|
||||
<summary>
|
||||
raw temperature
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.TemperaturePowFactor">
|
||||
<summary>
|
||||
temperature scale
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.TemperatureDegC">
|
||||
<summary>
|
||||
calculated temperature in degree C
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord.ToString">
|
||||
<summary>
|
||||
Get result as string
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.FlowTestRecord">
|
||||
<inheritdoc />
|
||||
<summary>
|
||||
struct to hold Led record for protocol F (contains measurement record)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.FlowTestRecord.ToString">
|
||||
<summary>
|
||||
Get result as string
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,618 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands">
|
||||
<summary>
|
||||
Commands that the genesis meter support over the request protocol.
|
||||
Functional Specification Breeze Core and Applications Revision:3.03(12748DOC11 - functional spec ICOE472.pdf)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.Nop">
|
||||
<summary>
|
||||
9.2.5
|
||||
Command 0x00 (NOP)
|
||||
This command will do nothing, and will have no response.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.QueryCaps">
|
||||
<summary>
|
||||
9.2.6
|
||||
Command 0x01 (Query capabilities)
|
||||
This command will be used by the external computer to discover the protocol parameters that may be varied.
|
||||
These can then be compared with the external computer’s capabilities and the best match selected.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.QueryCapsReply">
|
||||
<summary>
|
||||
response on <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.QueryCaps"/>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.SetCaps">
|
||||
<summary>
|
||||
9.2.7
|
||||
Command 0x03 (Set capabilities)
|
||||
Used to finalize the baud rate and packet settings after negotiation.
|
||||
The reply will be sent at the currently selected baud rate and packet length,
|
||||
after which the settings will take effect
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.SetCapsReply">
|
||||
<summary>
|
||||
response on <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.SetCaps"/>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.Train">
|
||||
<summary>
|
||||
9.2.8
|
||||
Command 0x05 (Train)
|
||||
This command will perform target driven data training, that is, where the target is in control of the data flow.
|
||||
See also command 0x11.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.TrainReply">
|
||||
<summary>
|
||||
response on <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.Train"/>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.RepeatLast">
|
||||
<summary>
|
||||
9.2.9
|
||||
Command 0x07 (Repeat last)
|
||||
Used by the external computer to request the last response to be resent, for example if it was found to be corrupted.
|
||||
Note that the response 0x08 will never be sent, the reply to command 0x07 will be a verbatim resend of the last response.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.RepeatLastReply">
|
||||
<summary>
|
||||
response on <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.RepeatLast"/>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.ReadData">
|
||||
<summary>
|
||||
9.2.10
|
||||
Command 0x09 (Read data)
|
||||
This command makes reads of any random selection of configuration registers, up to the maximum packet size negotiated.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.ReadDataReply">
|
||||
<summary>
|
||||
response on <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.ReadData"/>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.WriteData">
|
||||
<summary>
|
||||
9.2.11
|
||||
Command 0x0B (Write data)
|
||||
This command makes writes to any random selection of configuration registers, up to the maximum packet size negotiated.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.WriteDataReply">
|
||||
<summary>
|
||||
response on <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.WriteData"/>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.MultipleReadData">
|
||||
<summary>
|
||||
9.2.12
|
||||
Command 0x0D (Multiple read data)
|
||||
This command makes reads of one register multiple times, which will be more efficient than performing successive reads using command 0x09.
|
||||
This command will be available from protocol version 0.40, for earlier protocol versions command 0x09 should be used.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.MultipleReadDataReply">
|
||||
<summary>
|
||||
response on <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.MultipleReadData"/>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.MultipleWriteData">
|
||||
<summary>
|
||||
9.2.13
|
||||
Command 0x0F (Multiple write data)
|
||||
This command makes writes to one register multiple times, which will be more efficient than performing successive reads using command 0x0B.
|
||||
This command will be available from protocol version 0.40, for earlier protocol versions command 0x0B should be used.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.MultipleWriteDataReply">
|
||||
<summary>
|
||||
response on <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.MultipleWriteData"/>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.SetLevel">
|
||||
<summary>
|
||||
9.2.14
|
||||
Command 0x11 (Set level)
|
||||
This command will perform external driven data training, that is, where the external computer is in control of the data flow.
|
||||
This command will be available from protocol version 0.42, for earlier protocol versions command 0x05 should be used.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.SetLevelReply">
|
||||
<summary>
|
||||
response on <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.SetLevel"/>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.ConfigExErrors">
|
||||
<summary>
|
||||
Config Exchange error codes.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.HighLevelErrors">
|
||||
<summary>
|
||||
Transport errors for request protocol
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.LowLevelErrors">
|
||||
<summary>
|
||||
List of constance for error codes from genesis meter
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.LowLevelErrors.NoError">
|
||||
<summary>
|
||||
everything is fine
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.LowLevelErrors.SerialPortClosed">
|
||||
<summary>
|
||||
Port is not open
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.LowLevelErrors.SerialPortWriteFailure">
|
||||
<summary>
|
||||
fails to write to serial port
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.LowLevelErrors.SerialPortReadFailure">
|
||||
<summary>
|
||||
fails to read from serial port
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.LowLevelErrors.MaxDataLength">
|
||||
<summary>
|
||||
Command is to long
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.LowLevelErrors.Exception">
|
||||
<summary>
|
||||
deeper exception, check out log if this happen
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.LowLevelErrors.CrcCalcError">
|
||||
<summary>
|
||||
wrong CRC
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.LowLevelErrors.Unknown">
|
||||
<summary>
|
||||
something strange
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.LowLevelErrors.Timeout">
|
||||
<summary>
|
||||
Timeout occur
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.RequestAcknowledgeState">
|
||||
<summary>
|
||||
Acknowledge feedback from meter after communication
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.RequestAcknowledgeState.NoResponse">
|
||||
<summary>
|
||||
Response missing
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.RequestAcknowledgeState.CommandError">
|
||||
<summary>
|
||||
Response command not match the required command
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.RequestAcknowledgeState.AuthorizationRequired">
|
||||
<summary>
|
||||
Lost connection (logged out from meter), a re-authorization is required
|
||||
to access this command and/or register
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.RequestAcknowledgeState.MeterError">
|
||||
<summary>
|
||||
Meter error received, a retry may be useful
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.RequestAcknowledgeState.DecodingError">
|
||||
<summary>
|
||||
The response record couldn't be decoded
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.RequestAcknowledgeState.Ok">
|
||||
<summary>
|
||||
Valid meter response record
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Exceptions.RequestProtocolException">
|
||||
<summary>
|
||||
Holds all errors can occur on the request protocol
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Exceptions.RequestProtocolException.Command">
|
||||
<summary>
|
||||
Exception occurred on this command
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Exceptions.RequestProtocolException.ReceivedData">
|
||||
<summary>
|
||||
Exception occurred while receiving this data
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Exceptions.RequestProtocolException.ConfigExErrorCode">
|
||||
<summary>
|
||||
Error is interpreted and has a define error code
|
||||
if its not null is Genesis.Protocols.Request.Const.ConfigExErrors
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Exceptions.RequestProtocolException.HighLevelErrorCode">
|
||||
<summary>
|
||||
Error is interpreted and has a define error code
|
||||
if its not null is Genesis.Protocols.Request.Const.HighLevelError
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Exceptions.RequestProtocolException.#ctor(System.String)">
|
||||
<summary>
|
||||
Ctor with only message
|
||||
</summary>
|
||||
<param name="message">error message</param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Exceptions.RequestProtocolException.#ctor(System.String,System.Object)">
|
||||
<summary>
|
||||
Ctor with message and <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Exceptions.RequestProtocolException.Command"/>
|
||||
</summary>
|
||||
<param name="message">error message</param>
|
||||
<param name="command"><see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Exceptions.RequestProtocolException.Command"/></param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Exceptions.RequestProtocolException.#ctor(System.String,System.Object,System.Object)">
|
||||
<summary>
|
||||
Ctor with message, <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Exceptions.RequestProtocolException.Command"/> and <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Exceptions.RequestProtocolException.ReceivedData"/>
|
||||
</summary>
|
||||
<param name="message">error message</param>
|
||||
<param name="command"><see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Exceptions.RequestProtocolException.Command"/></param>
|
||||
<param name="receivedData"><see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Exceptions.RequestProtocolException.ReceivedData"/> </param>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord">
|
||||
<summary>
|
||||
Holds request commands with detail parameters to see processing state
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.Command">
|
||||
<summary>
|
||||
Indicates the base command <see cref="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands" />
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.ResponseCommand">
|
||||
<summary>
|
||||
Indicates the base command <see cref="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands" />
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.Register">
|
||||
<summary>
|
||||
the register the command refers to.
|
||||
needed to set Register dictionary to link response with dictionary key
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.Acknowledge">
|
||||
<summary>
|
||||
Command acknowledged
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.RetryCtr">
|
||||
<summary>
|
||||
Retry counter
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.WakeupMessageRetryCtr">
|
||||
<summary>
|
||||
Wakeup-message retry counter
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.ResponseErrorBase">
|
||||
<summary>
|
||||
indicates error base on <see cref="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord"/>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.ResponseErrorReason">
|
||||
<summary>
|
||||
indicates error reason on <see cref="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord"/>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.ResponseErrorCode">
|
||||
<summary>
|
||||
Combined error code of base and reason
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.ResponseErrorPosition">
|
||||
<summary>
|
||||
Chunk position of error on multiple read/write access
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.RequestProtocolData">
|
||||
<summary>
|
||||
Data containing the request protocol
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.EncodedRequestData">
|
||||
<summary>
|
||||
Encoded with transmit protocol, ready to stream to port as is
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.ResponsePayload">
|
||||
<summary>
|
||||
Extracted payload of response
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.ResponseTimeoutMs">
|
||||
<summary>
|
||||
Extracted payload of response
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.HideDataInLog">
|
||||
<summary>
|
||||
avoid logging for e.g. password
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.SkipRetryErrorCode">
|
||||
<summary>
|
||||
error mask to skip retries for functional errors <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.ResponseErrorCode"/>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.#ctor(System.Byte,System.Collections.Generic.List{System.Byte},System.Collections.Generic.List{System.Byte},System.Int32,Xylem.Common.Hardware.WaterMeter.Genesis.Registers.RegisterDefinition,System.Boolean,System.UInt16)">
|
||||
<summary>
|
||||
Ctor for an base command <see cref="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands" />
|
||||
</summary>
|
||||
<param name="command"><see cref="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands" /> as an byte</param>
|
||||
<param name="requestProtocolData">Request protocol data for logging</param>
|
||||
<param name="encodedRequestData"> Ready to send data encoded with transmit protocol retries</param>
|
||||
<param name="responseTimeoutMs">Timeout for response</param>
|
||||
<param name="register"><see cref="T:Xylem.Common.Hardware.WaterMeter.Genesis.Registers.RegisterDefinition"/> to do command with</param>
|
||||
<param name="hideDataInLog">hiding data in log file to avoid spying of passwords</param>
|
||||
<param name="skipRetryErrorCode">error mask to skip retries <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.ResponseErrorCode"/></param>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.EventArguments.AuthorizationRequiredEventArgs">
|
||||
<inheritdoc />
|
||||
<summary>
|
||||
if session is gone and a re authorization is necessary
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.EventArguments.AuthorizationRequiredEventArgs.#ctor(Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord)">
|
||||
<inheritdoc />
|
||||
<summary>
|
||||
Ctor
|
||||
</summary>
|
||||
<param name="command">this command will be resend after authorization</param>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.EventArguments.AuthorizationRequiredEventArgs.Command">
|
||||
<summary>
|
||||
Command to resend
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol">
|
||||
<summary>
|
||||
a bidirectional protocol support read and write genesis meter registers
|
||||
needed for
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol._recordsSendFifo">
|
||||
<summary>
|
||||
FIFO of records to be send next
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol._recordInProcess">
|
||||
<summary>
|
||||
This is the actual record in the send loop
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.LastCommTime">
|
||||
<summary>
|
||||
Last communication time for session refresh
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.OnRecordReadyToSend">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.OnRecordIsDecoded">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.OnAuthorizationGrant">
|
||||
<summary>
|
||||
Occurs when a meter Response for write password is good
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.OnMeterRegisterUpdated">
|
||||
<summary>
|
||||
Event after a register entries changed
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.AdditionalRetryTimeoutMs">
|
||||
<summary>
|
||||
User adjustable additional retry timeout. This is 0 ms for standard operation.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.#ctor(System.String)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.ProcessRecordList">
|
||||
<summary>
|
||||
Process all records needed to be sent, this routine has to be called
|
||||
to kick-off the communication of all RequestRecords saved to the send
|
||||
FIFO <see cref="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.AddRecordToSendFifo(System.Byte,System.Byte[],Xylem.Common.Hardware.WaterMeter.Genesis.Registers.RegisterDefinition,System.Boolean,System.UInt16)"/>
|
||||
</summary>
|
||||
<remarks date="2018-Dec-07" author="T.Wiedebusch">
|
||||
- Initial
|
||||
</remarks>
|
||||
<remarks date="2018-Dec-09" author="T.Wiedebusch">
|
||||
- Logging of raw RequestProtocol at time of sending,
|
||||
- Logging of retries.
|
||||
</remarks>
|
||||
<remarks date="2018-Dec-12" author="T.Wiedebusch">
|
||||
- Added timeout from transmit protocol.
|
||||
</remarks>
|
||||
<remarks date="2019-Jan-02" author="Drabesch">
|
||||
- Added reorder FIFO to bring login at first position
|
||||
</remarks>
|
||||
<remarks date="2019-Apr-11" author="T.Wiedebusch">
|
||||
- Hide data in logging for e.g. passwords
|
||||
</remarks>
|
||||
<remarks date="2019-Jun-06" author="T.Wiedebusch">
|
||||
- Retry counter reset if authorization required and this record will be put back into FIFO,
|
||||
- Retry delay corrected for all errors.
|
||||
</remarks>
|
||||
<remarks date="2019-Jun-12" author="T.Wiedebusch">
|
||||
- Dynamic retry delay: ResponseTimeoutMs * Retry counter.
|
||||
</remarks>
|
||||
<remarks date="2019-Jun-28" author="T.Wiedebusch">
|
||||
- Skip retries on specific error mask to speed up communication on functional errors
|
||||
or informational feed backs (e.g FW not installed 0x0004)
|
||||
<see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.ResponseErrorCode"/>
|
||||
</remarks>
|
||||
<remarks date="2019-Aug-29" author="T.Wiedebusch">
|
||||
- User adjustable additional retry timeout.
|
||||
</remarks>
|
||||
<remarks date="2020-Jan-17/18" author="T.Wiedebusch">
|
||||
- Response timeout message output,
|
||||
- Initialize acknowledge code before communication to NoResponse.
|
||||
</remarks>
|
||||
<remarks date="2020-Jan-22" author="T.Wiedebusch">
|
||||
- Response timeout deviated from system time.
|
||||
</remarks>
|
||||
<remarks date="2021-Feb-02" author="T.Wiedebusch">
|
||||
- Avoid enqueue of _recordInProcess if retry counter is 0.
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.AddRecordToSendFifo(System.Byte,System.Byte[],Xylem.Common.Hardware.WaterMeter.Genesis.Registers.RegisterDefinition,System.Boolean,System.UInt16)">
|
||||
<summary>
|
||||
Assemble record with transmit protocol and put it to record-send-FIFO,
|
||||
backup the ready-to-send, which is the dataEncodedWithTransmitProtocol,
|
||||
to the RequestRecord object for sending including the retry capability.
|
||||
</summary>
|
||||
<param name="payload">Data package with all details like CRC, etc</param>
|
||||
<param name="cmd">Command identifier <see cref="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands" /></param>
|
||||
<param name="register"><see cref="T:Xylem.Common.Hardware.WaterMeter.Genesis.Registers.RegisterDefinition" /> which is intend</param>
|
||||
<param name="hideDataInLog">hiding data in log file to avoid spying of passwords</param>
|
||||
<param name="skipRetryErrorCode">error mask to skip retries</param>
|
||||
<returns>the assembled record for the send FIFO</returns>
|
||||
<remarks date="2018-Dec-08" author="T.Wiedebusch">
|
||||
- Initial
|
||||
</remarks>
|
||||
<remarks date="2018-Dec-09" author="T.Wiedebusch">
|
||||
- Logging of raw data (RequestProtocol) moved to ProcessRecordList.
|
||||
</remarks>
|
||||
<remarks date="2018-Dec-12" author="T.Wiedebusch">
|
||||
- Added timeout from transmit protocol.
|
||||
</remarks>
|
||||
<remarks date="2019-Apr-11" author="T.Wiedebusch">
|
||||
- Hide data in logging for e.g. passwords
|
||||
</remarks>
|
||||
<remarks date="2019-Jun-28" author="T.Wiedebusch">
|
||||
- Skip retries on specific error mask to speed up communication on functional errors
|
||||
or informational feed backs (e.g FW not installed 0x0004)
|
||||
<see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.ResponseErrorCode"/>
|
||||
</remarks>
|
||||
<remarks date="2020-Jan-18" author="T.Wiedebusch">
|
||||
- Initial skip retry error code set to 0x0004 (e.g FW not installed 0x0004).
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.DecodeRecord(Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.IPortDataEventArgs)">
|
||||
<summary>
|
||||
Called after successful response.
|
||||
Decode and check record, handle Errors and dispatch result.
|
||||
Invokes <see cref="E:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.OnRecordIsDecoded" />if somebody is listening
|
||||
</summary>
|
||||
<remarks date="2018-Mar-15" author="R.Drahbesch">
|
||||
- Initial
|
||||
</remarks>
|
||||
<remarks date="2018-Dec-08" author="T.Wiedebusch">
|
||||
- First part reworked to extract the response protocol information
|
||||
</remarks>
|
||||
<remarks date="2019-Apr-11" author="T.Wiedebusch">
|
||||
- Hide data in logging for e.g. passwords
|
||||
</remarks>
|
||||
<remarks date="2019-Jun-28" author="T.Wiedebusch">
|
||||
- Error code extraction changed for <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.SkipRetryErrorCode"/>
|
||||
</remarks>
|
||||
<remarks date="2019-Dec-12/16" author="T.Wiedebusch">
|
||||
- Wakeup-message will avoid further timeout (during FW update this is in the range
|
||||
of 15000ms).
|
||||
- Allow one additional retry on decoding error, which is often the wakeup-message.
|
||||
</remarks>
|
||||
<remarks date="2019-Jan-17" author="T.Wiedebusch">
|
||||
- Send time reminder for timeout time calculation as output in log-file,
|
||||
- OnRecordIsDecoded?.Invoke moved before return to assure that the Acknowledge status is set.
|
||||
</remarks>
|
||||
<remarks date="2019-Jan-22" author="T.Wiedebusch">
|
||||
- Avoid activation of wakeup retry if record is meanwhile acknowledged.
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.CommandToMeter(System.Byte,Xylem.Common.Hardware.WaterMeter.Genesis.Registers.RegisterDefinition,System.Byte[],System.Nullable{System.Int32},System.Boolean,System.UInt16)">
|
||||
<summary>
|
||||
Method to send basic Commands to Meter. Creates an integer of 4 bytes for the payload.
|
||||
Supported Commands are: <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.ReadData" />,<see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.MultipleReadData" />,
|
||||
<see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.WriteData" />, <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.MultipleWriteData" /> and <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.QueryCaps" />.
|
||||
Calculate CRCs and Command length and check if command is valid.
|
||||
Use <see cref="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.AddRecordToSendFifo(System.Byte,System.Byte[],Xylem.Common.Hardware.WaterMeter.Genesis.Registers.RegisterDefinition,System.Boolean,System.UInt16)" /> to push data to Port/Meter.
|
||||
</summary>
|
||||
<param name="command">
|
||||
Supported <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.ReadData" />,<see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.MultipleReadData" />,
|
||||
<see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.WriteData" />, <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.MultipleWriteData" /> and <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.QueryCaps" />.
|
||||
</param>
|
||||
<param name="meterRegister">Register to Read or Write, null for <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.QueryCaps" /></param>
|
||||
<param name="payload">
|
||||
Data to push into the <see cref="T:Xylem.Common.Hardware.WaterMeter.Genesis.Registers.RegisterDefinition" />.
|
||||
must be null on Read Commands ( <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.ReadData" />,<see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.MultipleReadData" />)
|
||||
and not null on WriteData (<see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.WriteData" /> and <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.Consts.Commands.MultipleWriteData" />)
|
||||
</param>
|
||||
<param name="expectedLength"></param>
|
||||
<param name="hideDataInLog">hiding data in log file to avoid spying of passwords</param>
|
||||
<param name="skipRetryErrorCode">mask to skip reties on error</param>
|
||||
<returns>an new command just send to port/meter </returns>
|
||||
<remarks date="2018-Mar-15" author="R.Drahbesch">
|
||||
- Initial
|
||||
</remarks>
|
||||
<remarks date="2018-Dec-08" author="T.Wiedebusch">
|
||||
- Reworked to zero pad payload with chunks of 4 bytes, the caller needn't take care of the size
|
||||
</remarks>
|
||||
<remarks date="2018-Dec-09" author="T.Wiedebusch">
|
||||
- Corrected payload content in request protocol
|
||||
</remarks>
|
||||
<remarks date="2019-Apr-11" author="T.Wiedebusch">
|
||||
- Hide data in logging for e.g. passwords
|
||||
</remarks>
|
||||
<remarks date="2019-Jun-28" author="T.Wiedebusch">
|
||||
- Skip retries on specific error mask to speed up communication on functional errors
|
||||
or informational feed backs (e.g FW not installed 0x0004)
|
||||
<see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestRecord.ResponseErrorCode"/>
|
||||
</remarks>
|
||||
<remarks date="2019-Aug-28" author="R.Drabesch">
|
||||
- Multiple read for string split to simple reads.
|
||||
</remarks>
|
||||
<remarks date="2019-Jan-18" author="T.Wiedebusch">
|
||||
- Default <see cref="F:Xylem.Common.Hardware.WaterMeter.Genesis.GenesisConfig.CommunicationConfig.SkipRetryErrorCode"/> set.
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.CheckErrorCode">
|
||||
<summary>
|
||||
Analyzes the error code
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.ReorderRecordList(System.String)">
|
||||
<summary>
|
||||
Reorders the record list so that first entry is the defined topRegister
|
||||
</summary>
|
||||
<param name="topRegister"></param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.RequestProtocol.RequestProtocol.ContainsRegisterIdent(System.String)">
|
||||
<summary>
|
||||
Checks the active register to access
|
||||
</summary>
|
||||
<param name="registerName"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
Binary file not shown.
Binary file not shown.
@ -0,0 +1,99 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingProtocol">
|
||||
<inheritdoc />
|
||||
<summary>
|
||||
Layer between <see cref="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingDecoder" /> CRC16CCITT handler and Events
|
||||
block trashy telegrams
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingProtocol._streamingDecode">
|
||||
<summary>
|
||||
Decode data and hold results
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingProtocol.OnRecordIsDecoded">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingProtocol.DecodeRecord(Xylem.Common.Hardware.Interfaces.Ports.PortCore.EventArguments.IPortDataEventArgs)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingProtocol.#ctor(System.String,System.Boolean)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingDecoder">
|
||||
<summary>
|
||||
Data fields and definitions for GENESIS streaming protocol
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingDecoder._dataDefault">
|
||||
<summary>
|
||||
Default data for
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingDecoder.DataCalib">
|
||||
<summary>
|
||||
Calibration data
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingDecoder.#ctor(System.Boolean)">
|
||||
<summary>
|
||||
Constructor initializes all decoded members with default values
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingDecoder.DataFlowTest">
|
||||
<summary>
|
||||
Flow test data
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingDecoder.DecodeMsg(System.String)">
|
||||
<summary>
|
||||
Decoding the raw message
|
||||
</summary>
|
||||
<param name="rawMsg">message received as one line delimited with LF</param>
|
||||
<returns>true if decoding was successful and data has been validated</returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingDecoder.DecodeProtocolF(System.Collections.Generic.IList{System.String})">
|
||||
<summary>
|
||||
Extracting message from string fields for protocol 'f'
|
||||
</summary>
|
||||
<param name="field">Separated fields containing the measurement as string</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingDecoder.DecodeProtocolG(Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord@,System.Collections.Generic.IList{System.String})">
|
||||
<summary>
|
||||
Extracting message from string fields to individual raw channel for protocol 'g'
|
||||
</summary>
|
||||
<param name="dataProtGRec">Reference to result structure for raw data for one channel</param>
|
||||
<param name="field">Separated fields containing the measurement as string</param>
|
||||
<returns>true if protocol is valid</returns>
|
||||
<remarks date="2018-Mar-22" author="T.Wiedebusch">
|
||||
- Usage of VolumeFactorRawToQm and calculation of AccuDutOverflowVolumeCm
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingDecoder.DecodeProtocolH(Xylem.Common.Hardware.WaterMeter.Genesis.DataPackages.MeasurementRecords.CalibrationRecord@,System.Collections.Generic.IList{System.String})">
|
||||
<summary>
|
||||
Extracting message from string fields to individual raw channel for protocol 'g'
|
||||
</summary>
|
||||
<param name="dataProtHRec">Reference to result structure for raw data for one channel</param>
|
||||
<param name="field">Separated fields containing the measurement as string</param>
|
||||
<returns>true if protocol is valid</returns>
|
||||
<remarks date="2018-Mar-22" author="T.Wiedebusch">
|
||||
- Usage of VolumeFactorRawToQm and calculation of AccuDutOverflowVolumeCm
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingDecoder.ProtFsubString">
|
||||
field position in protocol 'f'
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingDecoder.ProtGsubString">
|
||||
field position in protocol 'g'
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.Genesis.Protocols.StreamingProtocol.StreamingDecoder.ProtHsubString">
|
||||
field position in protocol 'h'
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,563 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>Xylem.Common.Hardware.WaterMeter.WaterMeterCore</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCall">
|
||||
<summary>
|
||||
Applies an action to a list of meters in a separate thread
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCall.RunAction(System.Collections.Generic.List{Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter})">
|
||||
<summary>
|
||||
Starts a new task for a list of meters
|
||||
</summary>
|
||||
<param name="forMeters"></param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCall.DoSingleAction(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter)">
|
||||
<summary>
|
||||
Apply a single action to a specific meter
|
||||
</summary>
|
||||
<param name="meter"></param>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallConnectMeter">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallConnectMeter.DoSingleAction(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallInitCalibration">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallInitCalibration.DoSingleAction(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallInitMeasurement">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallInitMeasurement.DoSingleAction(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallLogin">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallLogin.DoSingleAction(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallSetCalibrationFactor">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallSetCalibrationFactor.DoSingleAction(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallStartCalibration">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallStartCalibration.DoSingleAction(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallStartMeasurement">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallStartMeasurement.DoSingleAction(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallStopCalibration">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallStopCalibration.DoSingleAction(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallStopMeasurement">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.BatchActions.BatchCallStopMeasurement.DoSingleAction(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts.ErrorState">
|
||||
<summary>
|
||||
Common definition for Meter handling in production and on test benches
|
||||
</summary>
|
||||
<summary>
|
||||
represents any error state a meter can have
|
||||
if hash code is 0 everything is running
|
||||
is Flags, so watch out to check with hasFlag!
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts.ErrorState.None">
|
||||
<summary>
|
||||
everything is good
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts.ErrorState.InitFailed">
|
||||
<summary>
|
||||
problems on initialization
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts.ErrorState.MeasurementFailed">
|
||||
<summary>
|
||||
problems on Measurement
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts.ErrorState.ComErrorRequestPort">
|
||||
<summary>
|
||||
Problem on communication with meter
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts.ErrorState.ComErrorLed">
|
||||
<summary>
|
||||
Problem on optical output on meter
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts.ErrorState.ComErrorPulse">
|
||||
<summary>
|
||||
if pulse can not readout
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts.ErrorState.ErrorQRef">
|
||||
<summary>
|
||||
no (or no good) reference flow available
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts.ErrorState.CalibrationFailed">
|
||||
<summary>
|
||||
Calibration went wrong
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts.ErrorState.CalibrationOutOfRange">
|
||||
<summary>
|
||||
calibration is out of range. Check documentation from meter to find limitation
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts.ErrorState.FatalError">
|
||||
<summary>
|
||||
blue screen like error
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch">
|
||||
<summary>
|
||||
Can hold various <see cref="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter"/>s and hold connection record to relieve the meter.
|
||||
Every contact with meter has to go over <see cref="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch"/> even if you have just only one.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.AddMeter(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter)">
|
||||
<summary>
|
||||
holds all <see cref="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter"/>
|
||||
Add <see cref="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.AddMeter(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter)"/> and delete with <see cref="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.RemoveMeter(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter)"/>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.RemoveMeter(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter)">
|
||||
<summary>
|
||||
Remove Meter from batch and clear communication
|
||||
</summary>
|
||||
<param name="meterToRemove"> meter to be removed</param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.GetMeter(System.Int32)">
|
||||
<summary>
|
||||
Get meter from slot number.
|
||||
</summary>
|
||||
<param name="slot"></param>
|
||||
<returns>null if slot has no genesis</returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.RemoveAllMeters">
|
||||
<summary>
|
||||
Remove all Meters and comports
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.GetCurrentMeter">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.GetCurrentMeterSlots">
|
||||
<summary>
|
||||
Detect all meters
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.MetersLogin">
|
||||
<summary>
|
||||
login to all meters
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.MetersInit">
|
||||
<summary>
|
||||
Initialize all meters
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.MetersInitCalibration">
|
||||
<summary>
|
||||
Initialize calibration for all meters
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.MetersInitMeasurement">
|
||||
<summary>
|
||||
Initialize measurement for all meters
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.MetersSaveCalculatedCalibration">
|
||||
<summary>
|
||||
Store new calculated calibration to all meters
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.MetersStartCalibration">
|
||||
<summary>
|
||||
Start calibration for all meters
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.MetersStartMeasurement">
|
||||
<summary>
|
||||
Start measurement for all meters
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.MetersStopCalibration">
|
||||
<summary>
|
||||
Stop calibration of all meters
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterBatch.MetersStopMeasurement">
|
||||
<summary>
|
||||
Stop measurements of all meters
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch">
|
||||
<summary>
|
||||
Can hold various <see cref="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter"/>s and hold connection record to relieve the meter.
|
||||
Every contact with meter has to go over <see cref="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch"/> even if you have only one.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.#ctor(System.String)">
|
||||
<summary>
|
||||
ctor
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.ListOfMeters">
|
||||
<summary>
|
||||
Registered list of meters
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.AddMeter(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.GetCurrentMeter">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.GetCurrentMeterSlots">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.RemoveMeter(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.MetersLogin">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.MetersInit">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.MetersInitCalibration">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.MetersInitMeasurement">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.MetersSaveCalculatedCalibration">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.MetersStartCalibration">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.MetersStartMeasurement">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.MetersStopCalibration">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.MetersStopMeasurement">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.GetMeter(System.Int32)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.RemoveAllMeters">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.MeterBatch.Dispose">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter">
|
||||
<inheritdoc />
|
||||
<summary>
|
||||
IMeter is the highest level interface between a meter with direct communication to a test bench.
|
||||
has general things like calibration, measurement and set up routines.
|
||||
no specific meter stuff in here!
|
||||
it is always disposable
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.OnProcessStatusChanged">
|
||||
<summary>
|
||||
occurs when ProcessState has changed
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.OnErrorStatusChanged">
|
||||
<summary>
|
||||
occurs when ErrorState has changed
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.OnInitCompleted">
|
||||
<summary>
|
||||
occurs when Init is completed
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.OnMeasurementInitCompleted">
|
||||
<summary>
|
||||
occurs when the initialization for Measurement is completed
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.OnMeasurementCompleted">
|
||||
<summary>
|
||||
occurs when the Measurement is completed
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.OnCalibInitCompleted">
|
||||
<summary>
|
||||
occurs when the initialization for calibration is completed
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.OnCalibCompleted">
|
||||
<summary>
|
||||
occurs when the calibration is completed
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.OnDisposeCompleted">
|
||||
<summary>
|
||||
occurs when meter gets disposed
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.SerialNumber">
|
||||
<summary>
|
||||
unique meter identification
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.ProcessStatus">
|
||||
<summary>
|
||||
read-only to see current Process state <see cref="T:Xylem.Common.Metrology.Measurements.Consts.ProcessState" />
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.ErrorStatus">
|
||||
<summary>
|
||||
read-only to see current Error state <see cref="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts.ErrorState" />
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.Slot">
|
||||
<summary>
|
||||
the current slot in test-bench
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.IntermediateUpdateTimeS">
|
||||
<summary>
|
||||
Setup of intermediate update time for measurement updates and overflow detections,
|
||||
has to be calculated depending on flow-rate and nominal diameter (DN)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.ConnectMeter">
|
||||
<summary>
|
||||
Open Com ports, try some communication, login
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.SetupFromConfigFile(System.Int32,System.Boolean)">
|
||||
<summary>
|
||||
Setup up meter from config file. just a workaround for vb6 calls. please do not use if your working with .net
|
||||
</summary>
|
||||
<param name="slot">Slot Number for Test bench</param>
|
||||
<param name="ignoreCorruptedData">don´t send CRC error or telegrams with error flag to caller</param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.Logout">
|
||||
<summary>
|
||||
Logout from device
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.Login">
|
||||
<summary>
|
||||
Start Login with password service
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.Login(System.String)">
|
||||
<summary>
|
||||
Start Login with out password service and a fixed password
|
||||
</summary>
|
||||
<param name="password">password for login</param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.InitMeasurement">
|
||||
<summary>
|
||||
set up measurement parameter and set meter into test-mode
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.StartMeasurement">
|
||||
<summary>
|
||||
Starting a Measurement
|
||||
Meter must be initialized <see cref="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.InitMeasurement" />
|
||||
Start to receive record from meter and decode this record into <code>MeasurementRecord</code>
|
||||
<see cref="T:Xylem.Common.Metrology.Measurements.IMeasurementRecord" />
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.StopMeasurement">
|
||||
<summary>
|
||||
Meter must have a active measurement <see cref="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.StartMeasurement" />
|
||||
Stop receive record from meter and decode record
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.GetMainMeasurementResult(System.Nullable{System.Double},System.Nullable{System.Double},System.Boolean)">
|
||||
<remarks date="2018JAN09" author="drabesch">
|
||||
- simplify the measurement results handling
|
||||
- getting the main measurement of the entire device (combination of all paths)
|
||||
- add MeasurementResult
|
||||
- remove all other methods
|
||||
</remarks>
|
||||
<summary>
|
||||
After a completed measurement , you can grab <see cref="T:Xylem.Common.Metrology.Measurements.MeasurementResults"/>
|
||||
</summary>
|
||||
<returns>Calculated results</returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.GetAllMeasurementResults(System.Nullable{System.Double},System.Nullable{System.Double},System.Boolean,System.Nullable{System.Int32})">
|
||||
<summary>
|
||||
The first measurement is ALWAYS a FlowTestRecord.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.GetMeasurementState(System.Nullable{System.Int32})">
|
||||
<summary>
|
||||
get current state of the running measurement
|
||||
</summary>
|
||||
<param name="onlyChannelNr">leave empty for an aggregate state for all measurements or pass the channel number to check</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.InitCalibration">
|
||||
<summary>
|
||||
set up calibration parameter (calibration factor to default) and set meter into calibration mode
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.StartCalibration">
|
||||
<summary>
|
||||
Starting a Calibration
|
||||
Meter must be initialized <see cref="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.InitCalibration" />
|
||||
Start to receive record from meter, decode and store this record
|
||||
no <see cref="T:Xylem.Common.Metrology.Measurements.IMeasurementRecord" /> available
|
||||
To finish calibration process run <see cref="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.StopCalibration" />
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.StopCalibration">
|
||||
<summary>
|
||||
Meter must have a active for calibration <see />
|
||||
Stop receive record from meter, decode and store record
|
||||
record will not calculate or store
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.GetCalibrationState">
|
||||
<summary>
|
||||
Get current state of the running calibration
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.BuildAndCheckCalibFactorsAllChannels(System.Double,System.Nullable{System.Double},System.Double,System.Double)">
|
||||
<summary>
|
||||
Calculate calibration factor for static and flying start / stop
|
||||
Results kept internal and not being saved to meter.
|
||||
if you want to store them on meter use <see cref="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.SetCalibFactorsAllChannels(System.Boolean)" />
|
||||
</summary>
|
||||
<param name="refVolumeCm">the reference volume is essential for calculation of calibration factor</param>
|
||||
<param name="refTimeS">the reference time is needed for flying start/stop</param>
|
||||
<param name="reqDeviationPercent">the required deviation to set the scale apart from 0</param>
|
||||
<param name="maxCalibFactorTolerancePercent"> override the default max calibration factor tolerance</param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.SetCalibFactorsAllChannels(System.Boolean)">
|
||||
<summary>
|
||||
Save calculated calibration on meter if no calibration results available an exception occurred
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.SetLcdText(System.Boolean,System.Byte[])">
|
||||
<summary>
|
||||
To control the LCD from meter for status information etc.
|
||||
</summary>
|
||||
<param name="release">if set to true the meter will show his normal screen, if set to false the next parameter will shown in display</param>
|
||||
<param name="textInHex">test shown in LCD in byte array as hex value (0x33,0xFF shows 33FF on screen)</param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.SetProcessState(Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts.DisplayCodes,System.Boolean)">
|
||||
<summary>
|
||||
Sets Display text and update production database
|
||||
</summary>
|
||||
<param name="newState">New ProductionState</param>
|
||||
<param name="webRequest">web logging required per default true, for offline usage set to false</param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.GetLastProcessState">
|
||||
<summary>
|
||||
Get last Process State
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.WriteLog(System.String)">
|
||||
<summary>
|
||||
Add external text to internal log file handling
|
||||
</summary>
|
||||
<param name="text">text to log</param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.LogRawData(System.Boolean)">
|
||||
<summary>
|
||||
Enable/Disable Raw record Logging
|
||||
</summary>
|
||||
<param name="on">True = Write Raw record into log/ false = Stop write raw record into log </param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.CheckStateAfterMeasurement">
|
||||
<summary>
|
||||
Check if the meter has any errors that can occur on a measurement
|
||||
the error reason has find out in the log files
|
||||
</summary>
|
||||
<returns>false = everything is good, detect at least one error</returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter.DisposeMeter">
|
||||
<summary>
|
||||
Clear all object set up on runtime
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterEvents">
|
||||
<summary>
|
||||
Interface for <see cref="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter"/> Events
|
||||
you can use <see cref="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterEvents"/> without events (so with out <see cref="T:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeter"/>)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterEvents.OnProcessStatusChanged">
|
||||
<summary>
|
||||
occurs when ProcessState has changed
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterEvents.OnErrorStatusChanged">
|
||||
<summary>
|
||||
occurs when ErrorState has changed
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterEvents.OnInitCompleted">
|
||||
<summary>
|
||||
occurs when Init is completed
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterEvents.OnMeasurementInitCompleted">
|
||||
<summary>
|
||||
occurs when the initializations for Measurement is completed
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterEvents.OnMeasurementCompleted">
|
||||
<summary>
|
||||
occurs when the Measurement is completed
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterEvents.OnCalibInitCompleted">
|
||||
<summary>
|
||||
occurs when the initializations for calibration is completed
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Hardware.WaterMeter.WaterMeterCore.IMeterEvents.OnCalibCompleted">
|
||||
<summary>
|
||||
occurs when the calibration is completed
|
||||
</summary>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
Binary file not shown.
Binary file not shown.
BIN
packages/Common/Xylem.Common.Logic.ProductionOrderCore.dll
Normal file
BIN
packages/Common/Xylem.Common.Logic.ProductionOrderCore.dll
Normal file
Binary file not shown.
BIN
packages/Common/Xylem.Common.Logic.ProductionOrderCore.pdb
Normal file
BIN
packages/Common/Xylem.Common.Logic.ProductionOrderCore.pdb
Normal file
Binary file not shown.
BIN
packages/Common/Xylem.Common.Logic.RelatePcb.dll
Normal file
BIN
packages/Common/Xylem.Common.Logic.RelatePcb.dll
Normal file
Binary file not shown.
BIN
packages/Common/Xylem.Common.Logic.RelatePcb.pdb
Normal file
BIN
packages/Common/Xylem.Common.Logic.RelatePcb.pdb
Normal file
Binary file not shown.
BIN
packages/Common/Xylem.Common.Logic.ServiceCore.dll
Normal file
BIN
packages/Common/Xylem.Common.Logic.ServiceCore.dll
Normal file
Binary file not shown.
BIN
packages/Common/Xylem.Common.Logic.ServiceCore.pdb
Normal file
BIN
packages/Common/Xylem.Common.Logic.ServiceCore.pdb
Normal file
Binary file not shown.
BIN
packages/Common/Xylem.Common.Logic.SoftwareAccessHelper.dll
Normal file
BIN
packages/Common/Xylem.Common.Logic.SoftwareAccessHelper.dll
Normal file
Binary file not shown.
BIN
packages/Common/Xylem.Common.Logic.SoftwareAccessHelper.pdb
Normal file
BIN
packages/Common/Xylem.Common.Logic.SoftwareAccessHelper.pdb
Normal file
Binary file not shown.
BIN
packages/Common/Xylem.Common.Metrology.Measurements.dll
Normal file
BIN
packages/Common/Xylem.Common.Metrology.Measurements.dll
Normal file
Binary file not shown.
BIN
packages/Common/Xylem.Common.Metrology.Measurements.pdb
Normal file
BIN
packages/Common/Xylem.Common.Metrology.Measurements.pdb
Normal file
Binary file not shown.
680
packages/Common/Xylem.Common.Metrology.Measurements.xml
Normal file
680
packages/Common/Xylem.Common.Metrology.Measurements.xml
Normal file
@ -0,0 +1,680 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>Xylem.Common.Metrology.Measurements</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Xylem.Common.Metrology.Measurements.BaseMeasurement">
|
||||
<inheritdoc />
|
||||
<summary>
|
||||
Holds all stuff for calibration of a Genesis Meter
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.BaseMeasurement.DutStartRecord">
|
||||
<summary>
|
||||
Record at the start of the measurement
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.BaseMeasurement.DutStopRecord">
|
||||
<summary>
|
||||
Record at the end of the measurement
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.BaseMeasurement._lastIntermediateRecord">
|
||||
<summary>
|
||||
Backup of intermediate record
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.BaseMeasurement._last2IntermediateRecord">
|
||||
<summary>
|
||||
Backup of intermediate record for short term result
|
||||
This can be used to observe a result (e.g. flow rate)
|
||||
between two intermediate records. The update time is
|
||||
set in the ctor by intermediateUpdateTimeS.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.BaseMeasurement.IntermediateRecord">
|
||||
<summary>
|
||||
Intermediate record for ongoing measurement
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Metrology.Measurements.BaseMeasurement.OnActionStateHasChanged">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.BaseMeasurement._accuDutOverflowVolumeCm">
|
||||
<summary>
|
||||
Holds the accumulated overflow volume, will work only if
|
||||
<see cref="M:Xylem.Common.Metrology.Measurements.BaseMeasurement.CheckForOverFlowVolumeAndTime" /> is being called cyclically.
|
||||
The overflow will take place due to the fixed point number format or the
|
||||
display resolution setting.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.BaseMeasurement._accuDutOverflowTimeS">
|
||||
<summary>
|
||||
Holds the accumulated overflow time, will work only if
|
||||
<see cref="M:Xylem.Common.Metrology.Measurements.BaseMeasurement.CheckForOverFlowVolumeAndTime" /> is being called cyclically.
|
||||
The overflow takes place due to the fixed point number format.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.BaseMeasurement.LoggerMeasurement">
|
||||
<summary>
|
||||
Logger for debug output of measurement
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.BaseMeasurement.Slot">
|
||||
<summary>
|
||||
Physical slot of the device
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.BaseMeasurement._channel">
|
||||
<summary>
|
||||
Identification of the channel
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Xylem.Common.Metrology.Measurements.BaseMeasurement.MeasurementState">
|
||||
<inheritdoc />
|
||||
<summary>
|
||||
State machine for one measurement (on one meter and one channel)
|
||||
</summary>
|
||||
<history date="2018Jan24" author="drabesch">
|
||||
- add State-machine for better handling
|
||||
</history>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.BaseMeasurement.#ctor(System.Int32,System.Type,System.Int32,System.Int32)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.BaseMeasurement.GetType">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.BaseMeasurement.GetChannel">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.BaseMeasurement.Clear">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.BaseMeasurement.Dispose">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.BaseMeasurement.GetShortTermMeasurementResult(System.Nullable{System.Double},System.Nullable{System.Double})">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.BaseMeasurement.GetIntermediateMeasurementResult(System.Nullable{System.Double},System.Nullable{System.Double})">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.BaseMeasurement.GetFinalMeasurementResult(System.Nullable{System.Double},System.Nullable{System.Double})">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.BaseMeasurement.GetMeasurementState">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.BaseMeasurement.StopMeasurement">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.BaseMeasurement.StartMeasurement">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.BaseMeasurement.StartIntermediateMeasurement">
|
||||
<summary>
|
||||
Set flag for starting Calibration.
|
||||
The next record is going to set the start values.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.BaseMeasurement.AddData(Xylem.Common.Metrology.Measurements.IMeasurementRecord)">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Metrology.Measurements.CalibrationMeasurement">
|
||||
<inheritdoc />
|
||||
<summary>
|
||||
Holds all stuff for calibration of a Genesis Meter
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.CalibrationMeasurement.CalibFactorRelativeDefault">
|
||||
<summary>
|
||||
Calibration default value used to reset meter calibration
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.CalibrationMeasurement._calibFactorToleranceRelative">
|
||||
<summary>
|
||||
relative value (e.g. 0.05)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Xylem.Common.Metrology.Measurements.CalibrationMeasurement.CalibFactorTolerancePercent">
|
||||
<summary>
|
||||
Setup the required tolerance in percent for check (e.g. 5 = +/-5%)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.CalibrationMeasurement.IsCalibFactorInTolerance(System.Double)">
|
||||
<summary>
|
||||
Check the tolerance of the calibration factor (e.g. 0.95 to 1.05 at 0.05 tolerance)
|
||||
</summary>
|
||||
<param name="calibFactorToCheck"></param>
|
||||
<returns>true if the calibration factor is inside the tolerance </returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.CalibrationMeasurement.#ctor(System.Int32,System.Type,System.Int32,System.Int32)">
|
||||
<inheritdoc />
|
||||
<summary>
|
||||
Remind the calibration factor for the register write access
|
||||
</summary>
|
||||
<param name="slot"></param>
|
||||
<param name="measurementRecordType">FlowTestRecord or CalibrationRecord</param>
|
||||
<param name="intermediateUpdateTimeS">Update time needed for overflow detection in seconds</param>
|
||||
<param name="channel"></param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.CalibrationMeasurement.CalculateCalibFactorRel(System.Double,System.Nullable{System.Double},System.Double)">
|
||||
<summary>
|
||||
Calculate calibration factor from reference volume and reference time if set.
|
||||
The deviation can adjust the factor to a required offset, it may be useful not to calibrate to 0.0).
|
||||
The Result is NOT being stored to the meter.
|
||||
CAN BE USED FOR STATIC START/STOP AND FLYING START/STOP PROCEDURE
|
||||
</summary>
|
||||
<param name="RefVolumeCm">reference volume in m³</param>
|
||||
<param name="refTimeS">reference time in seconds</param>
|
||||
<param name="reqDeviationPercent">the deviation to set the calibration in %</param>
|
||||
<returns> calibration factor as relative value or null if calibration factor cannot be calculated</returns>
|
||||
<history date="06-Dec-2018" author="Thomas Wiedebusch">
|
||||
- The scale factor for calibration is going to adjusted here to keep the measurement result accurate.
|
||||
</history>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Metrology.Measurements.Consts.MeasurementResultsStates">
|
||||
<summary>
|
||||
information about measurement results to identify on input depending results
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.MeasurementResultsStates.Okay">
|
||||
<summary>
|
||||
everything is good
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.MeasurementResultsStates.WrongChannel">
|
||||
<summary>
|
||||
inconsistent channel assignment
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.MeasurementResultsStates.ZeroDutTime">
|
||||
<summary>
|
||||
DUT time zero
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.MeasurementResultsStates.InvalidDutTime">
|
||||
<summary>
|
||||
DUT time is invalid
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.MeasurementResultsStates.InvalidOverFlowTime">
|
||||
<summary>
|
||||
over flow time is invalid
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.MeasurementResultsStates.ZeroRefTime">
|
||||
<summary>
|
||||
REF time zero
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.MeasurementResultsStates.InvalidRefTime">
|
||||
<summary>
|
||||
REF time is invalid
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.MeasurementResultsStates.ZeroDutVolume">
|
||||
<summary>
|
||||
DUT volume zero
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.MeasurementResultsStates.ZeroRefVolume">
|
||||
<summary>
|
||||
REF volume is unknown
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Metrology.Measurements.Consts.MeasurementStates">
|
||||
<summary>
|
||||
holds the current state for genesis actions (e.g. calibration,measurement)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.MeasurementStates.NotStarted">
|
||||
<summary>
|
||||
If Measurement/Calibration/Action is not started
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.MeasurementStates.IsWaitingForStartData">
|
||||
<summary>
|
||||
Measurement/Calibration/Action waits for next record package and sore this as start record,
|
||||
After this Measurement/Calibration/Action IsRunning
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.MeasurementStates.IsRunning">
|
||||
<summary>
|
||||
Measurement/Calibration/Action collecting record and wait for end call
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.MeasurementStates.IsWaitingForIntermediateData">
|
||||
<summary>
|
||||
Measurement/Calibration/Action collecting next record record
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.MeasurementStates.IsWaitingForEndData">
|
||||
<summary>
|
||||
Measurement/Calibration/Action waits for next record package and sore this as end record,
|
||||
After this Measurement/Calibration/Action IsCompleted
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.MeasurementStates.IsCompleted">
|
||||
<summary>
|
||||
Measurement/Calibration/Action has start and end record and can calculate a result
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Metrology.Measurements.Consts.ProcessState">
|
||||
<summary>
|
||||
ProcessState nearly linear
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.ProcessState.IsNotInit">
|
||||
<summary>
|
||||
meter not initialized
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.ProcessState.InitIsActive">
|
||||
<summary>
|
||||
meter currently in initialization
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.ProcessState.WaitForMeasurement">
|
||||
<summary>
|
||||
initialization done
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.ProcessState.MeasurementIsActive">
|
||||
<summary>
|
||||
meter is on measurement
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.ProcessState.MeasurementIsDone">
|
||||
<summary>
|
||||
Measurement is done (not equal to succeed)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.ProcessState.WaitForCalibration">
|
||||
<summary>
|
||||
Meter is prepared for calibration
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.ProcessState.CalibrationIsActive">
|
||||
<summary>
|
||||
meter is on calibration
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.ProcessState.WaitForQRef">
|
||||
<summary>
|
||||
need Q from reference meter for calculation
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.ProcessState.QRefDone">
|
||||
<summary>
|
||||
Calibration is calculated
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.Consts.ProcessState.CalibrationIsDone">
|
||||
<summary>
|
||||
Calibration is stored on meter
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Metrology.Measurements.IMeasurement">
|
||||
<inheritdoc />
|
||||
<summary>
|
||||
Collection of measurement interfaces
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:Xylem.Common.Metrology.Measurements.IMeasurement.OnActionStateHasChanged">
|
||||
<summary>
|
||||
Event for new action of measurement state
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurement.GetType">
|
||||
<summary>
|
||||
Get the Type of the measurement record
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurement.GetChannel">
|
||||
<summary>
|
||||
Get the channel no. the measurement collecting record for
|
||||
</summary>
|
||||
<returns> returns 0 when all channels should be collected</returns>
|
||||
</member>
|
||||
<member name="P:Xylem.Common.Metrology.Measurements.IMeasurement.MeasurementState">
|
||||
<summary>
|
||||
Actual state of the measurement
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurement.Clear">
|
||||
<summary>
|
||||
Clear start, intermediate and end record and set action state to idle
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurement.AddData(Xylem.Common.Metrology.Measurements.IMeasurementRecord)">
|
||||
<summary>
|
||||
Adding measurement record to processing FIFO
|
||||
</summary>
|
||||
<param name="record"></param>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurement.GetMeasurementState">
|
||||
<summary>
|
||||
Returns the actual state of the ongoing measurement
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurement.StartMeasurement">
|
||||
<summary>
|
||||
Fist clear all record from earlier calibrations.
|
||||
Set flag for starting measurement.
|
||||
The next record is going to set the start values.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurement.StopMeasurement">
|
||||
<summary>
|
||||
Stop grabbing record from streaming.
|
||||
Last Data package is count as end volume (and time)
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurement.GetShortTermMeasurementResult(System.Nullable{System.Double},System.Nullable{System.Double})">
|
||||
<summary>
|
||||
Returning the results of the ongoing measurement between two updates.
|
||||
This can be used to update the screen during measurements like actual flow rate.
|
||||
The timing will be set by the IntermediateUpdateTimeS.
|
||||
</summary>
|
||||
<param name="refTimeS"></param>
|
||||
<param name="RefVolumeCm"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurement.GetIntermediateMeasurementResult(System.Nullable{System.Double},System.Nullable{System.Double})">
|
||||
<summary>
|
||||
Returning the intermediate results of the ongoing measurement from the start of measurement until now!
|
||||
</summary>
|
||||
<param name="refTimeS"></param>
|
||||
<param name="RefVolumeCm"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurement.GetFinalMeasurementResult(System.Nullable{System.Double},System.Nullable{System.Double})">
|
||||
<summary>
|
||||
Returning the results of the measurements from start until stop.
|
||||
</summary>
|
||||
<param name="refTimeS">Measurement duration is needed explicit for flying start/stop procedure</param>
|
||||
<param name="RefVolumeCm">reference volume is ALWAYS needed for scale and deviation</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurement.RequestIntermediateRecord">
|
||||
<summary>
|
||||
Sets a marker that a mesaurment start looking for an intermediate record
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Metrology.Measurements.IMeasurementRecord">
|
||||
<inheritdoc />
|
||||
<summary>
|
||||
interface for all incoming streaming protocol
|
||||
to simplify measurements
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurementRecord.GetVolumeCm">
|
||||
<summary>
|
||||
Get volume of the record
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurementRecord.GetTimeS">
|
||||
<summary>
|
||||
Get time stamp of the record from meter
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurementRecord.GetDataSyncMark">
|
||||
<summary>
|
||||
Get Data
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurementRecord.GetChannel">
|
||||
<summary>
|
||||
Get the channel the record comes from
|
||||
</summary>
|
||||
<returns>returns 0 if the channel is unavailable for this type of record (e.g. protocol f) </returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurementRecord.GetOverflowVolumeCm">
|
||||
<summary>
|
||||
Get overflow volume
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.IMeasurementRecord.GetOverflowTimeS">
|
||||
<summary>
|
||||
get overflow time
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Metrology.Measurements.MeasurementRecord">
|
||||
<inheritdoc />
|
||||
<summary>
|
||||
struct to hold a measurement record
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementRecord.Channel">
|
||||
<summary>
|
||||
physical channel 1, 2 and 3
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementRecord.VolumeCm">
|
||||
<summary>
|
||||
actual volume in cubic meters
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementRecord.OverflowVolumeCm">
|
||||
<summary>
|
||||
Overflow volume
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementRecord.TimeS">
|
||||
<summary>
|
||||
time converted to seconds
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementRecord.OverflowTimeS">
|
||||
<summary>
|
||||
Overflow time
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementRecord.Crc">
|
||||
<summary>
|
||||
CRC16 CCITT
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementRecord.IsValid">
|
||||
<summary>
|
||||
record is valid
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementRecord.SyncMarkRecord">
|
||||
<summary>
|
||||
Mark package as start, end, intermediate or not sync
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementRecord.DecodedTime">
|
||||
<summary>
|
||||
time when package was decoded
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementRecord.ReceivedTime">
|
||||
<summary>
|
||||
time when package was received
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.MeasurementRecord.GetVolumeCm">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.MeasurementRecord.GetTimeS">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.MeasurementRecord.GetDataSyncMark">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.MeasurementRecord.GetChannel">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.MeasurementRecord.GetOverflowVolumeCm">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.MeasurementRecord.GetOverflowTimeS">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.MeasurementRecord.Clone">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="T:Xylem.Common.Metrology.Measurements.MeasurementResults">
|
||||
<inheritdoc />
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementResults.State">
|
||||
<inheritdoc cref="T:Xylem.Common.Metrology.Measurements.Consts.MeasurementResultsStates"/>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementResults.Channel">
|
||||
<summary>
|
||||
Channel being needed for later analysis of channel number
|
||||
as feedback to the caller
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementResults.AccuDutOverflowVolumeCm">
|
||||
<summary>
|
||||
Accumulated overflow volume in cubic-meters,
|
||||
the DUT internal range can overflow due to
|
||||
the limitation of the number or the display resolution.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementResults.AccuDutOverflowTimeS">
|
||||
<summary>
|
||||
Accumulated overflow time in seconds,
|
||||
the number-range can cause an timer overflow.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementResults.DutStartRecord">
|
||||
<summary>
|
||||
DUT start record
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementResults.DutStopRecord">
|
||||
<summary>
|
||||
DUT end record
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementResults.DutVolumeCm">
|
||||
<summary>
|
||||
Volume = (End Volume + overflow) - Start Volume in cubic meters,
|
||||
real DUT measurement uncorrected
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementResults.CorrectedDutVolumeCm">
|
||||
<summary>
|
||||
DUT measurement corrected if REF time is given
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementResults.RefVolumeCm">
|
||||
<summary>
|
||||
REF volume in cubic meters
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementResults.DutTimeS">
|
||||
<summary>
|
||||
Time = (End time + overflow) - Start time in seconds,
|
||||
real DUT measurement uncorrected
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementResults.RefTimeS">
|
||||
<summary>
|
||||
REF time in seconds
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementResults.DutFlowRateCmPh">
|
||||
<summary>
|
||||
Flow rate in cubic meters per hour based on DUT
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementResults.RefFlowRateCmPh">
|
||||
<summary>
|
||||
Flow rate in cubic meters per hour based on REF
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementResults.ScaleFactorRefToDut">
|
||||
<summary>
|
||||
Scale factor between REF volume and DUT volume
|
||||
this will use the <see cref="F:Xylem.Common.Metrology.Measurements.MeasurementResults.CorrectedDutVolumeCm"/>
|
||||
/// </summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementResults.DeviationDutToRefRel">
|
||||
<summary>
|
||||
Deviation between DUT volume and REF volume relative,
|
||||
this will use the <see cref="F:Xylem.Common.Metrology.Measurements.MeasurementResults.CorrectedDutVolumeCm"/>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:Xylem.Common.Metrology.Measurements.MeasurementResults.DeviationDutToRefPer">
|
||||
<summary>
|
||||
Deviation between DUT volume and REF volume in percent,
|
||||
this will use the <see cref="F:Xylem.Common.Metrology.Measurements.MeasurementResults.CorrectedDutVolumeCm"/>
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Xylem.Common.Metrology.Measurements.MeasurementResults.#ctor(Xylem.Common.Metrology.Measurements.IMeasurementRecord,Xylem.Common.Metrology.Measurements.IMeasurementRecord,System.Double,System.Double,System.Nullable{System.Double},System.Nullable{System.Double},System.Int32)">
|
||||
<summary>
|
||||
Calculation of measurement results, overflow will be taken into account:
|
||||
- DutVolumeCm in cubic meters:
|
||||
DUT volume measurement uncorrected, direct measurement from the DUT,
|
||||
- CorrectedDutVolumeCm in cubic meters:
|
||||
equals the uncorrected DutVolumeCm if REF time is unknown,
|
||||
else it is the volume calculated from the DUT flow-rate with the REF time,
|
||||
- DutTimeS in seconds:
|
||||
DUT time measurement,
|
||||
- DutFlowRateCmPh in cubic meters per hour:
|
||||
based on DUT volume and DUT time uncorrected,
|
||||
- RefFlowRateCmPh in cubic meters per hour:
|
||||
REF volume and REF time being used,
|
||||
- ScaleFactorRefToDut unit less:
|
||||
calculated with absolute and corrected DUT volume and REF volume
|
||||
needed for calibration, is higher than one if DUT volume is less than the REF volume,
|
||||
can be directly used to calculate the new scale by multiplication with the current scale,
|
||||
- DeviationDutToRefRel unit less:
|
||||
calculated with absolute and corrected DUT volume and REF volume
|
||||
deviation needed for verification relative of DUT to REF,
|
||||
- DeviationDutToRefPer in percent:
|
||||
calculated with absolute and corrected DUT volume and REF volume
|
||||
deviation needed for verification of DUT to REF in percent.
|
||||
</summary>
|
||||
<history date="07-Nov-2018" author="Thomas Wiedebusch">
|
||||
- Scale factor calculation added,
|
||||
- Deviation calculation added.
|
||||
</history>
|
||||
<history date="03-Nov-2018" author="Thomas Wiedebusch">
|
||||
- Flow rate calculation added,
|
||||
- Slot added.
|
||||
</history>
|
||||
<history date="19-Dec-2018" author="Thomas Wiedebusch">
|
||||
- RefVolumeCm, RefTimeSS and absVolumeQm added,
|
||||
- Slot removed.
|
||||
</history>
|
||||
<history date="22-Jan-2019" author="Thomas Wiedebusch">
|
||||
- FlowRateQmPh split to DutFlowRateCmPh and RefFlowRateCmPh,
|
||||
- CorrectedDutVolumeCm added,
|
||||
- input channel compared with start and end record channels.
|
||||
</history>
|
||||
<history date="27-Feb-2019" author="Thomas Wiedebusch">
|
||||
- State implemented.
|
||||
</history>
|
||||
<history date="01-Mar-2019" author="Thomas Wiedebusch">
|
||||
- Check and states for DUT time zero, DUT volume zero, over flow volume below zero,
|
||||
start and end record time below zero.
|
||||
</history>
|
||||
<history date="04-Mar-2019" author="Thomas Wiedebusch">
|
||||
- Supported static start/stop with DUT- and REF-volume, this is time independent but the
|
||||
DUT- and over-flow-times shouldn't be negative or zero.
|
||||
- Meter renamed to DUT (Device under Test).
|
||||
</history>
|
||||
<param name="dutStartRecord">Start of measurement record set </param>
|
||||
<param name="dutStopRecord">End of measurement record set </param>
|
||||
<param name="accuDutOverflowVolumeCm">accumulated overflow volume, will add to result volume</param>
|
||||
<param name="accuDutOverflowTimeS">accumulated overflow time, will add to result time</param>
|
||||
<param name="refTimeS">measured REF time</param>
|
||||
<param name="refVolumeCm">REF volume</param>
|
||||
<param name="requiredChannel">physical channel of measurement path (0 for main measurement)</param>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
BIN
packages/Common/Xylem.Common.Ui.CordonelPreadjustmentUi.exe
Normal file
BIN
packages/Common/Xylem.Common.Ui.CordonelPreadjustmentUi.exe
Normal file
Binary file not shown.
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
BIN
packages/Common/Xylem.Common.Ui.CordonelPreadjustmentUi.pdb
Normal file
BIN
packages/Common/Xylem.Common.Ui.CordonelPreadjustmentUi.pdb
Normal file
Binary file not shown.
BIN
packages/Common/Xylem.Common.Ui.GenesisToolBox.exe
Normal file
BIN
packages/Common/Xylem.Common.Ui.GenesisToolBox.exe
Normal file
Binary file not shown.
68
packages/Common/Xylem.Common.Ui.GenesisToolBox.exe.config
Normal file
68
packages/Common/Xylem.Common.Ui.GenesisToolBox.exe.config
Normal file
@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<section name="Xylem.Common.Ui.GenesisToolBox.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
||||
</sectionGroup>
|
||||
</configSections>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
|
||||
</startup>
|
||||
<userSettings>
|
||||
<Xylem.Common.Ui.GenesisToolBox.Properties.Settings>
|
||||
<setting name="InitialBinaryPath" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
<setting name="InitialPackageFile" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
</Xylem.Common.Ui.GenesisToolBox.Properties.Settings>
|
||||
</userSettings>
|
||||
<appSettings>
|
||||
<add key="AdminName" value="My Name" />
|
||||
<add key="AdminEMail" value="MyEMailAddress" />
|
||||
<add key="GenesisGetOrderNumberServiceUrl" value="http://sla12iis01/MeterProcessState/api/Password/ordernumber?PcbId=" />
|
||||
<add key="GenesisGetRadioAdressServiceUrl" value="http://sla12iis01/MeterProcessState/api/Password/radioadress?PcbId=" />
|
||||
<add key="GenesisGetKeySetIdServiceUrl" value="http://sla12iis01/MeterProcessState/api/Password/getkeysetid?PcbId=" />
|
||||
<add key="GenesisGetPasswordServiceUrl" value="http://sla12iis01/MeterProcessState/api/Password/GetPassword?PcbId=" />
|
||||
<add key="GenesisSetPasswordServiceUrl" value="http://sla12iis01/MeterProcessState/api/Password/setpassword?PcbId=" />
|
||||
<add key="GenesisPasswordContainerServiceUrl" value="http://sla12iis01/MeterProcessState/api/Password/GetPasswordHashFileContent?PcbId=" />
|
||||
<add key="MarriageServiceUrl" value="http://sla12iis01/MeterProcessState/api/Marriage/" />
|
||||
<add key="MeterProcessStateUrl" value="http://sla12iis01/MeterProcessState/api/ProccesState/" />
|
||||
<add key="GenesisFinalCheckServiceUrl" value="http://sla12iis01/MeterProcessState/api/FinalCheck/" />
|
||||
<add key="GenesisRadioCheckServiceUrl" value="http://sla12iis01/MeterProcessState/api/RadioCheck/" />
|
||||
<add key="GetSoftwareStartUpAccessUrl" value="http://sla12iis01/MeterProcessState/api/SoftwareAccess/GetVersionIsValid" />
|
||||
<!--<add key="GenesisGetOrderNumberServiceUrl" value="http://10.49.40.25/MeterProcessState/api/Password/ordernumber?PcbId=" />
|
||||
<add key="GenesisGetRadioAdressServiceUrl" value="http://10.49.40.25/MeterProcessState/api/Password/radioadress?PcbId=" />
|
||||
<add key="GenesisGetKeySetIdServiceUrl" value="http://10.49.40.25/MeterProcessState/api/Password/getkeysetid?PcbId=" />
|
||||
<add key="GenesisGetPasswordServiceUrl" value="http://10.49.40.25/MeterProcessState/api/Password/GetPassword?PcbId=" />
|
||||
<add key="GenesisSetPasswordServiceUrl" value="http://10.49.40.25/MeterProcessState/api/Password/setpassword?PcbId=" />
|
||||
<add key="GenesisPasswordContainerServiceUrl" value="http://10.49.40.25/MeterProcessState/api/Password/GetPasswordHashFileContent?PcbId=" />
|
||||
<add key="MarriageServiceUrl" value="http://10.49.40.25/MeterProcessState/api/Marriage/" />
|
||||
<add key="MeterProcessStateUrl" value="http://10.49.40.25/MeterProcessState/api/ProccesState/" />
|
||||
<add key="GenesisFinalCheckServiceUrl" value="http://10.49.40.25/MeterProcessState/api/FinalCheck/" />
|
||||
<add key="GenesisRadioCheckServiceUrl" value="http://10.49.40.25/MeterProcessState/api/RadioCheck/" />
|
||||
<add key="GetSoftwareStartUpAccessUrl" value="http://10.49.40.25/MeterProcessState/api/SoftwareAccess/GetVersionIsValid" />-->
|
||||
<add key="ClientSettingsProvider.ServiceUri" value="" />
|
||||
</appSettings>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<system.web>
|
||||
<membership defaultProvider="ClientAuthenticationMembershipProvider">
|
||||
<providers>
|
||||
<add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
|
||||
</providers>
|
||||
</membership>
|
||||
<roleManager defaultProvider="ClientRoleProvider" enabled="true">
|
||||
<providers>
|
||||
<add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
|
||||
</providers>
|
||||
</roleManager>
|
||||
</system.web>
|
||||
</configuration>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user