Poseidon - Flying - Opto communication
Enhance `FlyingStartMassCollectionSeq` with Poseidon reader support, detailed error handling, and improved test data processing.
This commit is contained in:
parent
3f28051d79
commit
42ee9eaee3
@ -12,6 +12,9 @@ using TBF.Boxes;
|
||||
using TBF.Resources;
|
||||
using TBF.UiBridge;
|
||||
using TBF.Rig.GenericDevices;
|
||||
using TBF.Rig.RegisterReaders.PoseidonReader;
|
||||
using TBF.Rig.RegisterReaders.PoseidonReader.implementations;
|
||||
using TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication.common;
|
||||
|
||||
namespace TBF.Rig.TestMethods.FlyingStartMassCollection
|
||||
{
|
||||
@ -751,25 +754,56 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
|
||||
if (oneMTR != null && regReader != null)
|
||||
{
|
||||
oneMTR.RegReaderType = (int)regReader.RegisterReaderType;
|
||||
oneMTR.PulsesPerLiter = regReader.PulsesPerLtr;
|
||||
|
||||
/// Optionally supress pulses from the large water meter
|
||||
oneMTR.PulsesMeter = (isAux == 0 && compoundTestParams.SupressTrills) ? 0 : Convert.ToDouble(regReader.WMPulses);
|
||||
oneMTR.PulsesMaster = Convert.ToDouble(regReader.WMRefPulses);
|
||||
oneMTR.TestTime = cBrd.TestTime;
|
||||
oneMTR.VolumeStart = 0;
|
||||
oneMTR.VolumeEnd = 0;
|
||||
oneMTR.VolumeRef = tstRslt.VolumeCTV;
|
||||
|
||||
if (oneMTR.PulsesMaster != 0)
|
||||
if (regReader is PoseidonReader poseidon) //is Poseidon reader family
|
||||
{
|
||||
oneMTR.PulsesMeter *= (tstRslt.PulsesMaster / oneMTR.PulsesMaster);
|
||||
oneMTR.PulsesMaster = tstRslt.PulsesMaster;
|
||||
oneMTR.PulsesPerLiter = 0;
|
||||
|
||||
/// Optionally supress pulses from the large water meter
|
||||
oneMTR.PulsesMeter = 0;
|
||||
oneMTR.PulsesMaster = 0;
|
||||
oneMTR.TestTime = cBrd.TestTime;
|
||||
oneMTR.VolumeStart = 0;
|
||||
oneMTR.VolumeEnd = 0;
|
||||
oneMTR.VolumeRef = tstRslt.VolumeCTV;
|
||||
|
||||
if (oneMTR.PulsesMaster != 0)
|
||||
{
|
||||
oneMTR.PulsesMeter *= (tstRslt.PulsesMaster / oneMTR.PulsesMaster);
|
||||
oneMTR.PulsesMaster = tstRslt.PulsesMaster;
|
||||
}
|
||||
|
||||
oneMTR.VolumeMeter = poseidon.WMVolume;
|
||||
|
||||
oneMTR.Error =
|
||||
Formulas.ErrorFromVolumes(oneMTR.VolumeMeter,
|
||||
tstRslt.VolumeCTV); /// Main/Aux meter error is not usedfor evaluation
|
||||
}
|
||||
else
|
||||
{
|
||||
oneMTR.PulsesPerLiter = regReader.PulsesPerLtr;
|
||||
|
||||
oneMTR.VolumeMeter = oneMTR.PulsesMeter * regReader.LtrsPerPulse; /// liter
|
||||
/// Optionally supress pulses from the large water meter
|
||||
oneMTR.PulsesMeter = (isAux == 0 && compoundTestParams.SupressTrills)
|
||||
? 0
|
||||
: Convert.ToDouble(regReader.WMPulses);
|
||||
oneMTR.PulsesMaster = Convert.ToDouble(regReader.WMRefPulses);
|
||||
oneMTR.TestTime = cBrd.TestTime;
|
||||
oneMTR.VolumeStart = 0;
|
||||
oneMTR.VolumeEnd = 0;
|
||||
oneMTR.VolumeRef = tstRslt.VolumeCTV;
|
||||
|
||||
oneMTR.Error = Formulas.ErrorFromVolumes(oneMTR.VolumeMeter, tstRslt.VolumeCTV); /// Main/Aux meter error is not usedfor evaluation
|
||||
if (oneMTR.PulsesMaster != 0)
|
||||
{
|
||||
oneMTR.PulsesMeter *= (tstRslt.PulsesMaster / oneMTR.PulsesMaster);
|
||||
oneMTR.PulsesMaster = tstRslt.PulsesMaster;
|
||||
}
|
||||
|
||||
oneMTR.VolumeMeter = oneMTR.PulsesMeter * regReader.LtrsPerPulse; /// liter
|
||||
|
||||
oneMTR.Error =
|
||||
Formulas.ErrorFromVolumes(oneMTR.VolumeMeter,
|
||||
tstRslt.VolumeCTV); /// Main/Aux meter error is not usedfor evaluation
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -887,16 +921,58 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
|
||||
if (dstrReader != null)
|
||||
{
|
||||
|
||||
meterRslt.TimestampStart = dstrReader.TimestampSecStart;
|
||||
meterRslt.TimestampEnd = !dstrReader.NoSamples ? dstrReader.TimestampSecEnd : (dstrReader.TimestampSecStart + tstRslt.TestTime);
|
||||
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 (dstrReader is SmartReader poseidon) //is Poseidon reader family
|
||||
{
|
||||
log.Info("Poseidon reader detected - Results");
|
||||
meterRslt.TimestampStart = poseidon.TimestampSecStart;
|
||||
meterRslt.TimestampEnd = !poseidon.NoSamples
|
||||
? poseidon.TimestampSecEnd
|
||||
: (poseidon.TimestampSecStart + tstRslt.TestTime);
|
||||
meterRslt.TestTime = meterRslt.TimestampEnd - meterRslt.TimestampStart;
|
||||
meterRslt.VolumeStart = poseidon.VolumeLtrStart; /// liter
|
||||
meterRslt.VolumeEnd = poseidon.VolumeLtrStart + poseidon.WMVolume; //dstrReader.VolumeLtrEnd; /// liter
|
||||
meterRslt.VolumeMeter = poseidon.WMVolume;
|
||||
|
||||
if (iPerl != null)
|
||||
if (!(meterRslt.TestTime == 0 || tstRslt.TestTime == 0))
|
||||
{
|
||||
meterRslt.VolumeRef = tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime;
|
||||
meterRslt.PulsesMaster =
|
||||
tstRslt.PulsesMaster * meterRslt.TestTime / tstRslt.TestTime;
|
||||
}
|
||||
else
|
||||
{
|
||||
meterRslt.VolumeRef = tstRslt.VolumeCTV;
|
||||
meterRslt.PulsesMaster = tstRslt.PulsesMaster;
|
||||
}
|
||||
|
||||
log.Info($"meterRslt.TimestampStart = {meterRslt.TimestampStart} \n" +
|
||||
$"meterRslt.TimestampEnd = {meterRslt.TimestampEnd }\n" +
|
||||
$"meterRslt.TestTime = {meterRslt.TestTime}\n" +
|
||||
$"meterRslt.VolumeStart = {meterRslt.VolumeStart}\n" +
|
||||
$"meterRslt.VolumeEnd = {meterRslt.VolumeEnd}\n" +
|
||||
$"meterRslt.VolumeMeter = {meterRslt.VolumeMeter}\n" +
|
||||
$"meterRslt.VolumeRef = {meterRslt.VolumeRef}\n" +
|
||||
$"meterRslt.PulsesMaster = {meterRslt.PulsesMaster}\n");
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
meterRslt.TimestampStart = dstrReader.TimestampSecStart;
|
||||
meterRslt.TimestampEnd = !dstrReader.NoSamples
|
||||
? dstrReader.TimestampSecEnd
|
||||
: (dstrReader.TimestampSecStart + tstRslt.TestTime);
|
||||
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)
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user