Finish the SM for ctlBatch

This commit is contained in:
Roland Drabesch
2023-01-04 17:06:27 +01:00
parent 8cb13dff88
commit ae52e6e258
5 changed files with 203 additions and 185 deletions
+1 -1
View File
@@ -155,7 +155,7 @@
</site>
<site name="MeterProcessState" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\Users\drabesch_ro\Repo\lab\la_operations\laa_production\Common\Service\MeterProcessState" />
<virtualDirectory path="/" physicalPath="C:\ProgrammeSensus\Repo\Lab\La_Operations\laa_production\Common\Service\MeterProcessState" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:56011:localhost" />
@@ -1 +1 @@
5ed75d99ee45ff67821090f1b3dbb001dd9e4fe3
46bd00889699f5a20a4981a22f62b66368323855
@@ -1 +1 @@
f64d563def603c89cafafa61a3219ba97e1e344c
81d60b90addc793525740e9993e19bf6665bd401
@@ -113,6 +113,10 @@ namespace XylemCommonUiLegacyGenCtl
/// <param name="IsFlyingStartStop">Just for logging (Test run against scale or ref meter)</param>
void PrepareMeters(string meterDn = "-", double refPulseValence = 0.0, double predictedQFlow = 0.0, double predictedTs = 0.0, double refError = 0.0, bool isAdjustment = false, bool IsFlyingStartStop = true);
/// <summary>
/// All parameters has pass to the batch and just witing till mesurement can start
/// </summary>
void SetReadyForMesuremnt();
/// <summary>
/// pass informations from current running test point
/// </summary>
@@ -203,6 +207,22 @@ namespace XylemCommonUiLegacyGenCtl
void Dispose(bool fromCode);
/// <summary>
/// Check SM If the State is MessuremntActive
/// </summary>
/// <returns></returns>
bool MeasurementIsActive();
/// <summary>
/// Check SM If the State is MMeasurementCompleted
/// // </summary>
/// <returns></returns>
bool MeasurementIsCompleted();
bool MetersArePrepared();
bool IsReadyForMesuremnt();
+180 -182
View File
@@ -69,7 +69,9 @@ namespace XylemCommonUiLegacyGenCtl
AddMeters,
PrepareMeters,
MetersPrepared,
WaitingForErrorFrame,
ReadyForMesuremnt,
StartMesurement,
StopMesurement,
}
private BatchState _currentState;
@@ -202,10 +204,6 @@ namespace XylemCommonUiLegacyGenCtl
break;
case BatchState.PrepareMeasurement:
break;
case BatchState.MeasurementActive:
break;
case BatchState.MeasurementCompleted:
break;
case BatchState.TestContainerIsReady:
break;
case BatchState.BatchIsReady:
@@ -214,12 +212,29 @@ namespace XylemCommonUiLegacyGenCtl
_currentState = AddAllMeters_Internal() ? BatchState.PrepareMeters : BatchState.Error;
break;
case BatchState.PrepareMeters:
_currentState = PrepareMeters_Internal() ? BatchState.WaitingForErrorFrame : BatchState.Error;
break;
case BatchState.WaitingForErrorFrame:
_currentState = PrepareMeters_Internal() ? BatchState.MetersPrepared : BatchState.Error;
break;
case BatchState.MetersPrepared:
//Wait For Caller when every thing is setup
break;
case BatchState.ReadyForMesuremnt:
//Wait for caller to start Mesurment
break;
case BatchState.StartMesurement:
_currentState = StartMeasurement_Internal() ? BatchState.MeasurementActive : BatchState.Error;
break;
case BatchState.MeasurementActive:
// wait for singal that the messuremnt can be stopped
break;
case BatchState.StopMesurement:
_currentState = StopMeasurement_Internal() ? BatchState.MeasurementCompleted : BatchState.Error;
break;
case BatchState.MeasurementCompleted:
//Measurement waiting for caller to grab all the results
break;
}// lock repeated execution of identical state
}
}
@@ -714,26 +729,36 @@ namespace XylemCommonUiLegacyGenCtl
_logger.Error("Test setup container missing");
return false;
}
var listOfTasks = new List<Task>();
foreach (var item in TestSetupContainer.meterTestSettings)
{
if (item != null && (item.FlowAdjustment || item.FlowTesting))
{
if (batch.ListOfMeters.All(f => f.Slot != item.Slot))
listOfTasks.Add(new Task(() =>
{
if (batch.ListOfMeters.All(f => f.Slot != item.Slot))
{
var meter = new GenesisMeter();
meter.SerialNumber = item.SerialNr;
meter.CurrentActionText = "FlowTest";
meter.SetupFromConfigFile(item.Slot, false, _useRequest, true);
meter.LogRawData(_rawLogging);
var meter = new GenesisMeter();
meter.SerialNumber = item.SerialNr;
meter.CurrentActionText = "FlowTest";
meter.SetupFromConfigFile(item.Slot, false, _useRequest, true);
meter.LogRawData(_rawLogging);
batch.AddMeter(meter);
meter.Login();
meter.EnableAutoLogon();
meter.WriteLog("Add from AddAllMeters");
}
batch.AddMeter(meter);
meter.Login();
meter.EnableAutoLogon();
meter.WriteLog("Add from AddAllMeters");
}
}));
}
}
listOfTasks.ForEach(t => t.Start());
Task.WaitAll(listOfTasks.ToArray());
setBusy(false);
return true;
}
@@ -888,8 +913,8 @@ namespace XylemCommonUiLegacyGenCtl
setBusy(true, $"Set {slot} LCD");
Task.Factory.StartNew(() =>
{
//FF-55-00-00
var meter = batch.ListOfMeters.First(f => f.Slot == slot);
//FF-55-00-00
var meter = batch.ListOfMeters.First(f => f.Slot == slot);
var state = Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts.DisplayCodes.FlowTested;
if (!Succeed)
@@ -910,8 +935,8 @@ namespace XylemCommonUiLegacyGenCtl
else
{
gen.WriteLog($"meter not active because display code has an error on code:{displayStateString}");
//skip set
return;
//skip set
return;
}
}
@@ -995,7 +1020,7 @@ namespace XylemCommonUiLegacyGenCtl
{
CalibrationIsDone = new Dictionary<Int32, LegacyCalibrationResult>();
}
var listOfTasks = new List<Task>();
foreach (var meter in batch.ListOfMeters)
{
@@ -1018,25 +1043,33 @@ namespace XylemCommonUiLegacyGenCtl
if (_useRequest)
{
((GenesisMeter)meter).ReLogin();
((GenesisMeter)meter).WriteLog("Prepare meter for Measurement/Adjustment ");
_logger.Debug("Prepare Meters for Measurement/Adjustment");
if (IsAdjustment)
listOfTasks.Add(new Task(() =>
{
((GenesisMeter)meter).InitCalibration();
}
else
{
((GenesisMeter)meter).InitMeasurement();
}
((GenesisMeter)meter).ReLogin();
((GenesisMeter)meter).WriteLog("Prepare meter for Measurement/Adjustment ");
_logger.Debug("Prepare Meters for Measurement/Adjustment");
if (IsAdjustment)
{
((GenesisMeter)meter).InitCalibration();
}
else
{
((GenesisMeter)meter).InitMeasurement();
}
}));
//// Reboot, HighPressure
////ReadOut Alarms, Show and reset
//_logger.Debug($"Start CheckMetersAreReadyForTest");
}
}
TryInvoke(new Action(UpdateBatch));
listOfTasks.ForEach(t => t.Start());
Task.WaitAll(listOfTasks.ToArray());
TryInvoke(new Action(UpdateBatch));
CheckMetersAreReadyForTest();
setBusy(false);
return true;
@@ -1079,90 +1112,6 @@ namespace XylemCommonUiLegacyGenCtl
}
private void CheckMetersAreReadyForTestStatic()
{
var listOfTasks = new List<Task>();
foreach (var meter in batch.ListOfMeters)
{
listOfTasks.Add(new Task(() =>
{
if (!(meter is GenesisMeter))
{
return;
}
var i = 1;
var sleepTimeS = 1;
_logger.Debug($" Meter {meter.Slot} CheckMetersAreReadyForTest loops {i};delay {sleepTimeS}S");
((GenesisMeter)meter).StartMeasurement();
var MeterReadyForTest = false;
while (i <= 7 && !MeterReadyForTest)
{
((GenesisMeter)meter).RequestIntermediateMeasurementState(0);
Thread.Sleep(i * 2000);
i = i + 1;
try
{
var state = ((GenesisMeter)meter).GetMeasurementState(0);
if (state != MeasurementStates.IsWaitingForStartData && state != MeasurementStates.NotStarted)
{
var r = ((GenesisMeter)meter).GetMainMeasurementResult(null, null, true);
if (r.DutVolumeCm != 0)
{
_logger.Info($" Meter {meter.Slot} Meter has progress (Volume{r.DutVolumeCm})");
MeterReadyForTest = true;
break;
}
}
_logger.Info($" Meter {meter.Slot} Meter no update display; loops left {i}; state {state}");
}
catch (Exception ex)
{
_logger.Error(ex, $" Meter {meter.Slot} CheckMetersAreReadyForTest loops {i};delay {sleepTimeS}S");
}
TryInvoke(new Action(() =>
{
updateCell("Status", meter.Slot, "Warte auf Zählerstand wechsel ", Color.LightYellow);
}));
}
((GenesisMeter)meter).StopMeasurement();
if (!MeterReadyForTest)
{
//todo event remove meter
_logger.Info($" Meter {meter.Slot} Meter has NO! progress");
TryInvoke(new Action(() =>
{
updateCell("Status", meter.Slot, "Zählerstand wechsel nicht erfasst", Color.LightPink);
}));
}
}));
}
listOfTasks.ForEach(t => t.Start());
Task.WaitAll(listOfTasks.ToArray());
}
private void CheckMetersAreReadyForTest()
@@ -1203,19 +1152,20 @@ namespace XylemCommonUiLegacyGenCtl
var MeterReadyForTest = false;
while (i >= 0)
{
Thread.Sleep(sleepTimeS * 1000);
new System.Threading.ManualResetEvent(false).WaitOne(i * 2000);
try
{
var r = ((GenesisMeter)meter).GetMainMeasurementResult(null, null, true);
i -= sleepTimeS;
if (r.DutVolumeCm != 0.0d)
//when Start and Stop Record have diffrent Volumes the meter is ready for test
if (r.DutStartRecord.GetVolumeCm() != r.DutStopRecord.GetVolumeCm())
{
_logger.Info($" Meter {meter.Slot} Meter has progress {r.DutVolumeCm}");
TryInvoke(new Action(() =>
{
// updateCell($"Status", meter.Slot, $"Zählerstand wechsel erfasst Von:{r.DutStartRecord.GetVolumeCm()} Auf: {r.DutStopRecord.GetVolumeCm()}", Color.LimeGreen);
}));
// updateCell($"Status", meter.Slot, $"Zählerstand wechsel erfasst Von:{r.DutStartRecord.GetVolumeCm()} Auf: {r.DutStopRecord.GetVolumeCm()}", Color.LimeGreen);
}));
MeterReadyForTest = true;
break;
}
@@ -1256,34 +1206,47 @@ namespace XylemCommonUiLegacyGenCtl
}
public void StartMeasurement()
public Boolean StartMeasurement_Internal()
{
try
{
var listOfTasks = new List<Task>();
foreach (var item in batch.ListOfMeters)
{
var settings = TestSetupContainer.meterTestSettings.First(f => f != null && f.Slot == item.Slot);
listOfTasks.Add(new Task(() =>
{
if (IsAdjustment && settings.FlowAdjustment)
{
item.StartCalibration();
}
if (!IsAdjustment && settings.FlowTesting)
{
item.StartMeasurement();
}
var settings = TestSetupContainer.meterTestSettings.First(f => f != null && f.Slot == item.Slot);
if (IsAdjustment && settings.FlowAdjustment)
{
item.StartCalibration();
}
if (!IsAdjustment && settings.FlowTesting)
{
item.StartMeasurement();
}
}));
}
listOfTasks.ForEach(t => t.Start());
Task.WaitAll(listOfTasks.ToArray());
currentMode = Mode.AutoRefresh;
//this.RefeshTimer.Enabled = true;
return true;
}
catch (Exception ex)
{
_logger.Error(ex, "StartMeasurement");
}
return false;
}
public void StartMeasurement()
{
_currentState = BatchState.StartMesurement;
}
public void SetLoggerActionText(String ActionText)
{
@@ -1295,8 +1258,11 @@ namespace XylemCommonUiLegacyGenCtl
}
}
}
public void StopMeasurement()
{
_currentState = BatchState.StopMesurement;
}
public Boolean StopMeasurement_Internal()
{
try
{
@@ -1324,13 +1290,10 @@ namespace XylemCommonUiLegacyGenCtl
item.StopMeasurement();
}
}
var listOfTasks = new List<Task>();
foreach (var item in batch.ListOfMeters)
{
if (item is GenesisMeter gm)
{
gm.CurrentActionText = "FlowTest";
}
var settings = TestSetupContainer.meterTestSettings.First(f => f != null && f.Slot == item.Slot);
if (IsAdjustment && !settings.FlowAdjustment)
@@ -1345,44 +1308,55 @@ namespace XylemCommonUiLegacyGenCtl
if (IsAdjustment)
listOfTasks.Add(new Task(() =>
{
Int32 retrys = 0;
while (item.GetCalibrationState() != MeasurementStates.IsCompleted && retrys < nrOfRetrys)
if (IsAdjustment)
{
if (retrys == (nrOfRetrys / 2))
Int32 retrys = 0;
while (item.GetCalibrationState() != MeasurementStates.IsCompleted && retrys < nrOfRetrys)
{
item.StopCalibration();
if (retrys == (nrOfRetrys / 2))
{
item.StopCalibration();
}
Thread.Sleep(100);
retrys = retrys + 1;
}
}
else
{
Int32 retrys = 0;
//remove channel filter 0
var onlyChnl = _checkAllChannels ? null : (Int32?)0;
while (item.GetMeasurementState(onlyChnl) != MeasurementStates.IsCompleted && retrys < nrOfRetrys)
{
if (retrys == (nrOfRetrys / 2))
{
item.StopMeasurement();
}
Thread.Sleep(100);
retrys = retrys + 1;
}
Thread.Sleep(100);
retrys = retrys + 1;
}
}
else
{
Int32 retrys = 0;
//remove channel filter 0
var onlyChnl = _checkAllChannels ? null : (Int32?)0;
while (item.GetMeasurementState(onlyChnl) != MeasurementStates.IsCompleted && retrys < nrOfRetrys)
if (item is GenesisMeter gm)
{
if (retrys == (nrOfRetrys / 2))
{
item.StopMeasurement();
}
Thread.Sleep(100);
retrys = retrys + 1;
gm.CurrentActionText = "FlowTest";
}
}
}));
}
listOfTasks.ForEach(t => t.Start());
Task.WaitAll(listOfTasks.ToArray());
return true;
}
catch (Exception ex)
{
_logger.Error(ex, "StopMeasurement");
}
return false;
}
Boolean ICtlBatch.IsBusy()
{
@@ -1620,17 +1594,17 @@ namespace XylemCommonUiLegacyGenCtl
PredictedTs = predictedTs;
RefError = refError;
currentMode = Mode.AutoRefresh;
//this.RefreshTimer.Interval = 10000;
//this.RefreshTimer.Tick += new EventHandler(this.RefreshTimer_Tick);
//this.RefreshTimer.Enabled = true;
pgbUpdate.Maximum = 10000;
//this.RefreshTimer.Interval = 10000;
//this.RefreshTimer.Tick += new EventHandler(this.RefreshTimer_Tick);
//this.RefreshTimer.Enabled = true;
pgbUpdate.Maximum = 10000;
updateLabelCollection();
ExpertMode(cbxExpert.Checked);
// dgvBatch.Size = new Size(SizeOfMeter, dgvBatch.Size.Height);
pgbEndTime.Maximum = (Int32)predictedTs;
// dgvBatch.Size = new Size(SizeOfMeter, dgvBatch.Size.Height);
pgbEndTime.Maximum = (Int32)predictedTs;
}));
}
@@ -1810,9 +1784,9 @@ namespace XylemCommonUiLegacyGenCtl
currentMode = Mode.View;
TryInvoke(new Action(() =>
{
//this.RefreshTimer.Enabled = false;
//this.pnlEndTime.Visible = false;
}));
//this.RefreshTimer.Enabled = false;
//this.pnlEndTime.Visible = false;
}));
}
else
{
@@ -1821,8 +1795,8 @@ namespace XylemCommonUiLegacyGenCtl
TryInvoke(new Action(() =>
{
//this.RefreshTimer.Enabled = true;
}));
//this.RefreshTimer.Enabled = true;
}));
stopWatch.Start();
}
@@ -1870,8 +1844,8 @@ namespace XylemCommonUiLegacyGenCtl
{
if (item is GenesisMeter)
{
// ((GenesisMeter)item).();
}
// ((GenesisMeter)item).();
}
}
Thread.Sleep(1000);
@@ -1939,8 +1913,8 @@ namespace XylemCommonUiLegacyGenCtl
genesis.QuickLogin();
genesis.BuildAndCheckCalibFactorsAllChannels(StoreRefVolume, StoreTestTimeRef, calFactor);
//genesis.SetCalibFactorsAllChannels(true);
genesis.SetCalibFactorsAllChannels();
//genesis.SetCalibFactorsAllChannels(true);
genesis.SetCalibFactorsAllChannels();
return new Tuple<Boolean, Int32>(true, baseMeter.Slot);
}
@@ -1961,8 +1935,8 @@ namespace XylemCommonUiLegacyGenCtl
var t = new Task(() =>
{
// ReSharper disable once CoVariantArrayConversion
Task.WaitAll(taskList.ToArray());
// ReSharper disable once CoVariantArrayConversion
Task.WaitAll(taskList.ToArray());
Boolean overallResult = true;
foreach (var item in taskList)
@@ -2205,5 +2179,29 @@ namespace XylemCommonUiLegacyGenCtl
CtlBatchStateMachine();
}
public void SetReadyForMesuremnt()
{
_currentState = BatchState.ReadyForMesuremnt;
}
public Boolean MeasurementIsActive()
{
return _currentState == BatchState.MeasurementActive;
}
public Boolean MeasurementIsCompleted()
{
return _currentState == BatchState.MeasurementCompleted;
}
public Boolean MetersArePrepared()
{
return _currentState == BatchState.MetersPrepared;
}
public Boolean IsReadyForMesuremnt()
{
return _currentState == BatchState.ReadyForMesuremnt;
}
}
}