fix for Stop measurement and save/Collect after End Session

This commit is contained in:
Michal Buzik 2024-10-09 16:07:11 +02:00
parent 3d7aaaaa3d
commit d2ef959f15
7 changed files with 104 additions and 29 deletions

View File

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using Common;
using Config.Entities;
namespace Results.Entities
{
@ -246,10 +247,17 @@ namespace Results.Entities
public virtual float TempLimHi() { return TestData.TempLimHi; }
public virtual bool Evaluate() { return TestData.Evaluate; }
public virtual Publish Publish() { return (Publish)TestData.Publish; }
public virtual bool TestCollected { get; set; } /// Not mapped to DB - just help method to Collect
public virtual bool TestMeasured { get; set; } /// Not mapped to DB - just help method to Collect
public TestRslt()
{
TestCollected = false;
TestMeasured = false;
MethodClass = string.Empty;
Remark = string.Empty;
}
@ -390,6 +398,9 @@ namespace Results.Entities
Counter3 = src.Counter3;
Counter4 = src.Counter4;
Counter5 = src.Counter5;
TestCollected = src.TestCollected;
TestMeasured = src.TestMeasured;
}
/// <summary> Wrapper </summary>
@ -428,7 +439,7 @@ namespace Results.Entities
public virtual string ToString(int i)
{
return string.Format("TestRslt: Part={0} RepetitionNr={1} TestDone={2} Remark={3} StartTime={4} EndTime={5} FlowSetTime={6} TestTime={7} PulsesMaster={8} ConstMaster={9} MassStartRaw={10} MassStart={11} MassEndRaw={12} MassEnd={13} DensityIn={14} DensityOut={15} DensityDiv={16} MassOfEvapWaater={17} FlowMass={18} FlowVolume={19} VolumeCTV={20} VolumeMaster={21} ErrorMaster={22} DiverterStart={85} DiverterEnd={86} ErrorFlags={23} InfoFlags={24} AmbTempMean={25} AmbTempStart={26} AmbTempEnd={27} AmbTempMin={28} AmbTempMax={29} AmbPressMean={30} AmbPressStart={31} AmbPressEnd={32} AmbPressMin={33} AmbPressMax={34} AmbHumiMean={35} AmbHumiStart={36} AmbHumiEnd={37} AmbHumiMin={38} AmbHumiMax={39} PressUpMean={40} PressUpStart={41} PressUpEnd={42} PressUpMin={43} PressUpMax={44} PressDownMean={45} PressDownStart={46} PressDownEnd={47} PressDownMin={48} PressDownMax={49} PressDeltaMean={50} PressDeltaStart={51} PressDeltaEnd={52} PressDeltaMin={53} PressDeltaMax={54} TempUpMean={55} TempUpStart={56} TempUpEnd={57} TempUpMin={58} TempUpMax={59} TempDownMean={60} TempDownStart={61} TempDownEnd={62} TempDownMin={63} TempDownMax={64} TempDivMean={65} TempDivStart={66} TempDivEnd={67} TempDivMin={68} TempDivMax={69} FlowMean={70} FlowStart={71} FlowEnd={72} FlowMin={73} FlowMax={74} Custom1={75} Custom2={76} Custom3={77} Custom4={78} Custom5={79} Custom6={80} Custom7={81} Custom8={82} Custom9={83} Custom10={84}",
return string.Format("TestRslt: Part={0} RepetitionNr={1} TestDone={2} Remark={3} StartTime={4} EndTime={5} FlowSetTime={6} TestTime={7} PulsesMaster={8} ConstMaster={9} MassStartRaw={10} MassStart={11} MassEndRaw={12} MassEnd={13} DensityIn={14} DensityOut={15} DensityDiv={16} MassOfEvapWaater={17} FlowMass={18} FlowVolume={19} VolumeCTV={20} VolumeMaster={21} ErrorMaster={22} DiverterStart={85} DiverterEnd={86} ErrorFlags={23} InfoFlags={24} AmbTempMean={25} AmbTempStart={26} AmbTempEnd={27} AmbTempMin={28} AmbTempMax={29} AmbPressMean={30} AmbPressStart={31} AmbPressEnd={32} AmbPressMin={33} AmbPressMax={34} AmbHumiMean={35} AmbHumiStart={36} AmbHumiEnd={37} AmbHumiMin={38} AmbHumiMax={39} PressUpMean={40} PressUpStart={41} PressUpEnd={42} PressUpMin={43} PressUpMax={44} PressDownMean={45} PressDownStart={46} PressDownEnd={47} PressDownMin={48} PressDownMax={49} PressDeltaMean={50} PressDeltaStart={51} PressDeltaEnd={52} PressDeltaMin={53} PressDeltaMax={54} TempUpMean={55} TempUpStart={56} TempUpEnd={57} TempUpMin={58} TempUpMax={59} TempDownMean={60} TempDownStart={61} TempDownEnd={62} TempDownMin={63} TempDownMax={64} TempDivMean={65} TempDivStart={66} TempDivEnd={67} TempDivMin={68} TempDivMax={69} FlowMean={70} FlowStart={71} FlowEnd={72} FlowMin={73} FlowMax={74} Custom1={75} Custom2={76} Custom3={77} Custom4={78} Custom5={79} Custom6={80} Custom7={81} Custom8={82} Custom9={83} Custom10={84} TestMeasured={85} TestCollected={86}",
Part, RepetitionNr, TestDone, Remark, StartTime, EndTime, FlowSetTime, TestTime,
PulsesMaster, ConstMaster, MassStartRaw, MassStart, MassEndRaw, MassEnd,
DensityIn, DensityLine, DensityDiv, MassOfEvapWater, Qdetected, Flow,
@ -444,7 +455,7 @@ namespace Results.Entities
TempDivMean, TempDivStart, TempDivEnd, TempDivMin, TempDivMax,
FlowMean, FlowStart, FlowEnd, FlowMin, FlowMax,
Custom1, Custom2, Custom3, Custom4, Custom5, Custom6, Custom7, Custom8, Custom9, Custom10,
DiverterStart, DiverterEnd);
DiverterStart, DiverterEnd, TestMeasured, TestCollected);
}
@ -586,6 +597,8 @@ namespace Results.Entities
writer.Write(Counter3);
writer.Write(Counter4);
writer.Write(Counter5);
writer.Write(TestMeasured);
writer.Write(TestCollected);
}
public virtual void ReadBinary(BinaryReader reader, IList<TestData> testDatas)
@ -727,6 +740,8 @@ namespace Results.Entities
Counter3 = reader.ReadInt32();
Counter4 = reader.ReadInt32();
Counter5 = reader.ReadInt32();
TestMeasured = reader.ReadBoolean();
TestCollected = reader.ReadBoolean();
}
}
}

View File

@ -205,6 +205,7 @@ namespace TBF.Rig.DataEntry.StandartCameraPurchaseOrder
public IOperation ShowTestCollectFormOp(IRegReader[] regReaders, double volumeRef, double errLimLo,
double errLimHi)
{
if (currentOp != CurrentOp.None) throw new Exception("Sequence error");
currentOp = CurrentOp.TestBothStates;
this.regReaders = regReaders;
this.refVolume = refVolume;

View File

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net;
using log4net;
using NHibernate;
using Common;
@ -1248,24 +1249,7 @@ namespace TBF.Rig.Sequences
//ON THE END run collector process if is actual (defined and actual process supports it)
if (testFinished && collector != null && collectDataAfterTests)
{
IProcedureCameraCollect collectorParent = collector as IProcedureCameraCollect;
collectorParent.DefineParentProcess(StateMachine.Procedure);
ITestMethod testMethodCollector = collector as ITestMethod;
if (testMethodCollector != null &&
testMethodCollector.CanTest(StateMachine.Procedure.MetersKind))
{
try
{
log.InfoFormat("Test single {0}: Execute(., {1}, {2})", test.Name, repetNr,
true);
e = testMethodCollector.Execute(test, repetNr, true);
}
catch (Exception exception)
{
log.ErrorFormat("Read ", exception);
}
}
e = RunCollector(collector, test, repetNr);
}
if (testMethod.DoTransitions())
@ -1336,6 +1320,33 @@ namespace TBF.Rig.Sequences
/// Update batch results, determine whether watermeters passed all required tests
///
State.Create("MainSeq : Collector")
.AddOperation(checkUiOp)
.EnterState();
do
{
e = StateMachine.WaitRunDevsRunOps();
if (e.Contains(Event.UiCmdStop)) goto stop;
} while (false);
//--------------------------------
{
TBF.Rig.Generic.IComponent collector =
TbfComponents.FindFirstSequenceComponentImpl<IProcedureCameraCollect>();
//ON THE END run collector process if is actual (defined and actual process supports it)
if (collector != null)
{
for (int i = 0; i < StateMachine.TestInstances.Length; i++)
{
int testIx = i;
Test test = StateMachine.TestInstances[testIx].Test;
int repetNr = StateMachine.TestInstances[testIx].Repetition;
e = RunCollector(collector, test, repetNr);
}
}
}
/// Determine the end of the last test and save it as the batch end time
DateTime lastTestEndTime = DateTime.MinValue;
if (BatchRslts.Batch.TestRslts != null)
@ -1628,6 +1639,32 @@ namespace TBF.Rig.Sequences
return;
}
private static IList<Event> RunCollector(IComponent collector, Test test, int repetNr)
{
IProcedureCameraCollect collectorParent = collector as IProcedureCameraCollect;
collectorParent.DefineParentProcess(StateMachine.Procedure);
ITestMethod testMethodCollector = collector as ITestMethod;
IList<Event> e = null;
if (testMethodCollector != null &&
testMethodCollector.CanTest(StateMachine.Procedure.MetersKind))
{
try
{
log.InfoFormat("Test single {0}: Execute(., {1}, {2})", test.Name, repetNr,
true);
e = testMethodCollector.Execute(test, repetNr, true);
log.DebugFormat("Collector with name: {0} done with Events:{1} ", test.Name, e);
}
catch (Exception exception)
{
log.ErrorFormat("Read ", exception);
}
}
return e;
}
bool IsApprovedByLegalizator()
{

View File

@ -663,6 +663,14 @@ namespace TBF.Rig.Sequences
testRslt.RepetitionNr == oriTstRslt.RepetitionNr)
{
testRslt.CopyContentFrom(oriTstRslt);
if (testRslt.TestDone)
{
//Question is waht behaviour is beter, but i will start again measurments
testRslt.TestMeasured = true;
testRslt.TestCollected = true;
}
break;
}
}

View File

@ -1205,8 +1205,10 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollectionAdvance
meterRslt.Passed = (meterRslt.Error >= test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime) + test.Uncertainty)
&& (meterRslt.Error <= test.GetErrLimHi(tstRslt.VolumeCTV, tstRslt.TestTime) - test.Uncertainty)
&& (tstRslt.ErrorFlags == 0);
meterRslt.TestDone = true;
tstRslt.TestDone = true;
meterRslt.TestDone = false;
tstRslt.TestDone = false;
tstRslt.TestMeasured = true;
tstRslt.TestCollected = false;
}
}
}

View File

@ -7,10 +7,8 @@ using System.IO;
using log4net;
using Common;
using Config.Entities;
using TBF.Boxes;
using TBF.Resources;
using TBF.Rig.GenericDevices;
using TBF.Rig.Network.RestAPI;
using TBF.Rig.Sequences;
using TBF.UiBridge;
@ -46,8 +44,20 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollectionAdvanceCollect
public IList<Event> Execute(Config.Entities.Test test, int repetitionNr, bool isLastRepetition,
Common.DebugMode debugLevel)
{
IList<Event> e; /// Events from currently running operations
string testName = Results.Utils.GetTestName(test.Name, test.Repeats, repetitionNr);
Results.Entities.TestRslt tstRslt = BatchRslts.GetTestRslt(testName, test.Part);
if (tstRslt != null &&
((tstRslt.TestCollected && tstRslt.TestMeasured) ||
!tstRslt.TestMeasured)
)
{
//skip this
return new List<Event>();
}
int waterMetersCount = Math.Min(BenchInfo.WaterMetersCount, sensPath.RegisterReaders.Length);
checkUiOp = new Operations.CheckUIOp(true); /// Runs in more then one state
processDataLoggingOp = new TBF.Rig.Operations.ProcessDataLoggingOp(processDataLogger, this, false);
@ -65,11 +75,10 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollectionAdvanceCollect
/// 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);
log.DebugFormat("Start the test - testName: {0}, test -> name: {1} -> Repeats: {2} -> repetitionNr: {3}", testName, test.Name, test.Repeats, repetitionNr);
Results.Entities.TestRslt tstRslt = BatchRslts.GetTestRslt(testName, test.Part);
/// Test if
///
/// Enter water meter begin states and read the start mass at the same time
///
@ -202,6 +211,10 @@ namespace TBF.Rig.TestMethods.StandingStartMassCollectionAdvanceCollect
meterRslt.Passed = (meterRslt.Error >= test.GetErrLimLo(tstRslt.VolumeCTV, tstRslt.TestTime) + test.Uncertainty)
&& (meterRslt.Error <= test.GetErrLimHi(tstRslt.VolumeCTV, tstRslt.TestTime) - test.Uncertainty)
&& (tstRslt.ErrorFlags == 0);
meterRslt.TestDone = true;
tstRslt.TestDone = true;
tstRslt.TestCollected = true;
}
}
}

View File

@ -2,7 +2,6 @@
/// Copyright (c) 2013-2016 Sensus Metering Systems
///
using System;
using Config.Entities;
namespace TBF.UiBridge
{