Integrate Genesis meter support into FlyingStartMassCollectionSeq:

- Add initialization, calibration, and measurement logic for Genesis meters.
- Extend result handling to capture Genesis-specific data (timestamps, volumes, errors).
- Ensure proper cleanup of Genesis meters at test conclusion.
This commit is contained in:
Michal Buzik 2026-03-04 09:45:57 +01:00
parent ab0e5ea82a
commit 5cefd7fc3a

View File

@ -18,6 +18,7 @@ using TBF.Rig.RegisterReaders.PoseidonReader.implementations;
using TBF.Rig.Uni.SharedDialogs.SmartMetersCommunication.common;
using TBF.UiBridge;
using TBF.Rig.RegisterReaders.PulsesFromUniCB;
using TBF.Rig.TestMethods.GenesisCommunication.GenesisHead;
namespace TBF.Rig.TestMethods.FlyingStartMassCollection
{
@ -166,8 +167,11 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
/// Start the test, initialize test results
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;
string testName = Results.Utils.GetTestName(test.Name, test.Repeats, repetitionNr);
TestStartTime = DateTime.Now;
bool atleastOneGenesis = false;
atleastOneGenesis = GenesisHeadBatch.Start(sensPath.RegisterReaders, Program.LocalSettings.LastSNTexts);
//------------------------------------------------
Bridge.OnActivity(this, Strings.Checking_tank_capacity);
@ -447,7 +451,21 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
}
}
}
if (atleastOneGenesis)
{
if (test.Name.ToLower().Contains("calib"))
{
GenesisHeadBatch.BatchHolder.Value.MetersLogin();
GenesisHeadBatch.BatchHolder.Value.MetersInitCalibration();
}
if (test.Name.ToLower().Contains("Init"))
{
GenesisHeadBatch.BatchHolder.Value.MetersLogin();
GenesisHeadBatch.BatchHolder.Value.MetersInitMeasurement();
}
}
if (drainTheTank)
{
@ -933,6 +951,7 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
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;
TestMethods.GenesisCommunication.GenesisHead.GenesisHead Genesis = regReader as TestMethods.GenesisCommunication.GenesisHead.GenesisHead;
if (meterRslt != null && regReader != null)
{
@ -971,9 +990,58 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
meterRslt.PulsesPerLiter = regReader.PulsesPerLtr;//.csv file column
meterRslt.QuantityUnits = regReader.QuantityUnits;
meterRslt.PulsesMeter = Convert.ToDouble(regReader.WMPulses);
//Genesis grab data to results
if (Genesis != null)
{
meterRslt.PulsesMaster = Convert.ToDouble(regReader.WMRefPulses); // missing in geenral genesis
Genesis.Stop(tstRslt.TestTime, tstRslt.VolumeCTV);
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)
{
Genesis.Log("MeterIdDetailResults na!");
}
else
{
if (Genesis.DetailedResults != null)
{
try
{
GenesisHeadBatch.MeterIdDetailResults.Add(meterRslt.SerialNr(), Genesis.DetailedResults);
}
catch (Exception ex)
{
Genesis.Log(ex.Message.ToString());
}
if (dstrReader != null)
{
}
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 if (dstrReader != null)
{
if (dstrReader is SmartReader poseidon) //is Poseidon reader family
{
@ -1194,9 +1262,9 @@ namespace TBF.Rig.TestMethods.FlyingStartMassCollection
if (stopCycle) retVal = Event.ErrorFlagsStop;
stopTest:
StopRecordingStatistics(); /// Make sure graph files are closed
stopTest:
GenesisHeadBatch.BatchHolder.Value.RemoveAllMeters();
StopRecordingStatistics(); /// Make sure graph files are closed
///
/// Quit this sequence