diff --git a/TBF/Properties/AssemblyInfo.cs b/TBF/Properties/AssemblyInfo.cs index dad560c36..d6df220a7 100644 --- a/TBF/Properties/AssemblyInfo.cs +++ b/TBF/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("3.9.3101.1")] -[assembly: AssemblyFileVersion("3.9.3101.1")] +[assembly: AssemblyVersion("3.9.3102.1")] +[assembly: AssemblyFileVersion("3.9.3102.1")] diff --git a/TBF/Rig/TestMethods/FlyingStart/FlyingStartSeq.cs b/TBF/Rig/TestMethods/FlyingStart/FlyingStartSeq.cs index 8b81c2ce5..5f6930bde 100644 --- a/TBF/Rig/TestMethods/FlyingStart/FlyingStartSeq.cs +++ b/TBF/Rig/TestMethods/FlyingStart/FlyingStartSeq.cs @@ -12,6 +12,7 @@ using TBF.Rig; using TBF.Rig.GenericDevices; using TBF.Boxes; using TBF.Resources; +using TBF.Rig.RegisterReaders.GenesisRegReader.implementations; using TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication.common; using TBF.UiBridge; @@ -464,6 +465,11 @@ namespace TBF.Rig.TestMethods.FlyingStart } while (!e.Contains(Event.TestCompleted) && !e.Contains(Event.Next)); /// 'Next' button is enabled in Debug version only + + //------------------------------------------------ + Bridge.OnActivity(this, Strings.Test_in_calculation); + //------------------------------------------------ + /// Measurement loop end StopRecordingStatistics(); @@ -532,7 +538,7 @@ namespace TBF.Rig.TestMethods.FlyingStart tstRslt.TimeBtwnMassMsrmnts = 0; tstRslt.ConstMasterRaw = outPath.FlowMeter.LtrPerPulse; /// Uncorrected master flowmeter coefficient tstRslt.VolumeMaster = tstRslt.ConstMasterRaw * tstRslt.PulsesMaster; /// [l] volume from the master flow meter - double flowMID = 3.6 * tstRslt.VolumeMaster / tstRslt.TestTime; /// [m3/h] + double flowMID = tstRslt.TestTime == 0 ? 0 : 3.6 * tstRslt.VolumeMaster / tstRslt.TestTime; /// [m3/h] /// Corrected data tstRslt.MassStart = 0; @@ -542,7 +548,7 @@ namespace TBF.Rig.TestMethods.FlyingStart /// Main result calculation tstRslt.VolumeCTV = tstRslt.ConstMasterCorr * tstRslt.PulsesMaster; /// [l] 1000.0f is because density is in [kg/m3] - tstRslt.Flow = 3.6 * tstRslt.VolumeCTV / tstRslt.TestTime; + tstRslt.Flow = tstRslt.TestTime==0 ? 0 : 3.6 * tstRslt.VolumeCTV / tstRslt.TestTime; tstRslt.ErrorMaster = 0.0; /// Not available without a mass measurement tstRslt.ConstMaster = tstRslt.ConstMasterCorr; @@ -660,6 +666,7 @@ namespace TBF.Rig.TestMethods.FlyingStart TestMethods.iPerlCommunication.iPerlHead.IperlHead iPerl = regReader as TestMethods.iPerlCommunication.iPerlHead.IperlHead; GenericDevices.IRegReaderLiveCamera cameraRoi = regReader as GenericDevices.IRegReaderLiveCamera; //GenesisHead Genesis = regReader as GenesisHead; + TBF.Rig.RegisterReaders.GenesisRegReader.implementations.GenesisSmartReader GenesisSmart = regReader as TBF.Rig.RegisterReaders.GenesisRegReader.implementations.GenesisSmartReader; if (meterRslt != null && regReader != null) { @@ -711,6 +718,24 @@ namespace TBF.Rig.TestMethods.FlyingStart Genesis.Log(" MeterError = " + calError.ToString() + " %"); } else*/ + if (GenesisSmart != null) + { + log.Debug("GenesisSmart - store data on end!"); + int CH1=0, CH2=1, CH3=2; + + CalculateMeterResults(meterRslt, GenesisSmart, tstRslt,GenesisSmart.TimestampSecStart, GenesisSmart.TimestampSecEnd, GenesisSmart.VolumeLtrStart, GenesisSmart.VolumeLtrEnd); + + //Init Calculate Calibration + GenesisSmart.RefVolume = meterRslt.VolumeRef; + GenesisSmart.RefTime = meterRslt.TestTime; + + //Store Raw Calibration Data to database + WaterMeterParentCopy(i, CH1,testName,meterRslt,GenesisSmart,tstRslt); + WaterMeterParentCopy(i, CH2,testName,meterRslt,GenesisSmart,tstRslt); + WaterMeterParentCopy(i, CH3,testName,meterRslt,GenesisSmart,tstRslt); + + } + else { if (dstrReader != null) { @@ -915,6 +940,97 @@ namespace TBF.Rig.TestMethods.FlyingStart // } // } + private const int CountCh = 3; + private static void WaterMeterParentCopy(int i, int iCH, string testName, MeterTestRslt meterRslt, + GenesisSmartReader genesisSmart, + TestRslt tstRslt) + { + WaterMeter waterMeterParent = BatchRslts.Batch.WaterMeters[i]; + int wmNrChX = (i*CountCh) + BatchRslts.WMPositionsCount + iCH + 1; + String sSerialNr = waterMeterParent.SerialNr + "_CH" + (iCH + 1); + WaterMeter chXWaterMeter = null; + //------ add new water meter to batch ------ + if (BatchRslts.Batch.WaterMeters.Count < wmNrChX || BatchRslts.Batch.WaterMeters[wmNrChX-1] == null) + { + log.Debug("add new water meter to batch, CH = " + (iCH + 1) + " CH = " + wmNrChX); + chXWaterMeter = new WaterMeter() + { + Batch = BatchRslts.Batch, + WaterMeterData = waterMeterParent.WaterMeterData, + MeterTestRslts = new List(), + SerialNr = sSerialNr, + WMPosition = wmNrChX, + YearOfProduction = 0, + Disabled = false, + }; + chXWaterMeter.CopyContentFrom(waterMeterParent); + + chXWaterMeter.SerialNr = sSerialNr; + chXWaterMeter.WMPosition = wmNrChX; + chXWaterMeter.YearOfProduction = waterMeterParent.YearOfProduction; + chXWaterMeter.Disabled = false; + + BatchRslts.Batch.WaterMeters.Add(chXWaterMeter); + } + else + { + chXWaterMeter = BatchRslts.Batch.WaterMeters[wmNrChX-1]; + } + //~------ add new water meter to batch ------~ + + //create copy of meterRslt and add to additionalResultsByChannel + MeterTestRslt meterTestRsltChX = new MeterTestRslt(chXWaterMeter, meterRslt.TestRslt, (CompoundMeterId)meterRslt.CompoundMeterId); + chXWaterMeter.MeterTestRslts.Add(meterTestRsltChX); + MeterTestRslt chanelXMeterRslt = BatchRslts.GetMeterTestRslt(testName, wmNrChX-1, Common.CompoundMeterId.Single); + + if (chanelXMeterRslt != null) + { + chanelXMeterRslt?.CopyContentFrom(meterRslt); + if (iCH == 0) + { + CalculateMeterResults(chanelXMeterRslt, genesisSmart, tstRslt, genesisSmart.TimestampSecStartRawCh1, + genesisSmart.TimestampSecEndRawCh1, genesisSmart.VolumeLtrStartRawCh1, genesisSmart.VolumeLtrEndRawCh1); + } + else if (iCH == 1) + { + CalculateMeterResults(chanelXMeterRslt, genesisSmart, tstRslt, genesisSmart.TimestampSecStartRawCh2, + genesisSmart.TimestampSecEndRawCh2, genesisSmart.VolumeLtrStartRawCh2, genesisSmart.VolumeLtrEndRawCh2); + } + else if (iCH == 2) + { + CalculateMeterResults(chanelXMeterRslt, genesisSmart, tstRslt, genesisSmart.TimestampSecStartRawCh3, + genesisSmart.TimestampSecEndRawCh3, genesisSmart.VolumeLtrStartRawCh3, genesisSmart.VolumeLtrEndRawCh3); + } + + if (!genesisSmart.EnableShowChanels) + { + chXWaterMeter.Disabled = !genesisSmart.EnableShowChanels; + meterTestRsltChX.TestDone = false; + } + else + { + meterTestRsltChX.TestDone = true; + } + + meterTestRsltChX.Passed = meterRslt.Passed; + } + } + + private static void CalculateMeterResults(MeterTestRslt meterRslt, IRegReaderDatastream dstrReader, TestRslt tstRslt, double dstrReaderTimestampSecStart, double dstrReaderTimestampSecEnd, double dstrReaderVolumeLtrStart, double dstrReaderVolumeLtrEnd) + { + meterRslt.TimestampStart = dstrReaderTimestampSecStart; + meterRslt.TimestampEnd = !dstrReader.NoSamples + ? dstrReaderTimestampSecEnd + : (dstrReaderTimestampSecStart + tstRslt.TestTime); + meterRslt.TestTime = meterRslt.TimestampEnd - meterRslt.TimestampStart; + meterRslt.VolumeStart = dstrReaderVolumeLtrStart; /// liter + meterRslt.VolumeEnd = dstrReaderVolumeLtrEnd; /// liter + meterRslt.VolumeMeter = + Math.Abs(dstrReaderVolumeLtrEnd - dstrReaderVolumeLtrStart); + meterRslt.VolumeRef = tstRslt.TestTime==0? tstRslt.VolumeCTV : tstRslt.VolumeCTV * meterRslt.TestTime / tstRslt.TestTime; + meterRslt.PulsesMaster = tstRslt.TestTime == 0? tstRslt.PulsesMaster : + tstRslt.PulsesMaster * meterRslt.TestTime / tstRslt.TestTime; + } IList Simulate(Config.Entities.Test test, int repetitionNr, bool isLastRepetition, Compound.TestParams compoundTestParams, diff --git a/TBF/Rig/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs b/TBF/Rig/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs index de47557ad..6cd888cb6 100644 --- a/TBF/Rig/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs +++ b/TBF/Rig/TestMethods/FlyingStartMassCollection/FlyingStartMassCollectionSeq.cs @@ -1086,10 +1086,6 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection bUpgradeCountOfMeters = true; int CH1=0, CH2=1, CH3=2; - //BatchRslts.Batch.WaterMeters.Add(ch1WaterMeter); //[i + BatchRslts.WMPositionsCount + CH1 + 1] - //BatchRslts.Batch.WaterMeters.Add(ch1WaterMeter); //[i + BatchRslts.WMPositionsCount + CH2 + 1] - //BatchRslts.Batch.WaterMeters.Add(ch1WaterMeter); //[i + BatchRslts.WMPositionsCount + CH3 + 1] - CalculateMeterResults(meterRslt, GenesisSmart, tstRslt,GenesisSmart.TimestampSecStart, GenesisSmart.TimestampSecEnd, GenesisSmart.VolumeLtrStart, GenesisSmart.VolumeLtrEnd); //Init Calculate Calibration