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>
<site name="MeterProcessState" id="2"> <site name="MeterProcessState" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool"> <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> </application>
<bindings> <bindings>
<binding protocol="http" bindingInformation="*:56011:localhost" /> <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> /// <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); 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> /// <summary>
/// pass informations from current running test point /// pass informations from current running test point
/// </summary> /// </summary>
@@ -203,6 +207,22 @@ namespace XylemCommonUiLegacyGenCtl
void Dispose(bool fromCode); 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, AddMeters,
PrepareMeters, PrepareMeters,
MetersPrepared, MetersPrepared,
WaitingForErrorFrame, ReadyForMesuremnt,
StartMesurement,
StopMesurement,
} }
private BatchState _currentState; private BatchState _currentState;
@@ -202,10 +204,6 @@ namespace XylemCommonUiLegacyGenCtl
break; break;
case BatchState.PrepareMeasurement: case BatchState.PrepareMeasurement:
break; break;
case BatchState.MeasurementActive:
break;
case BatchState.MeasurementCompleted:
break;
case BatchState.TestContainerIsReady: case BatchState.TestContainerIsReady:
break; break;
case BatchState.BatchIsReady: case BatchState.BatchIsReady:
@@ -214,12 +212,29 @@ namespace XylemCommonUiLegacyGenCtl
_currentState = AddAllMeters_Internal() ? BatchState.PrepareMeters : BatchState.Error; _currentState = AddAllMeters_Internal() ? BatchState.PrepareMeters : BatchState.Error;
break; break;
case BatchState.PrepareMeters: case BatchState.PrepareMeters:
_currentState = PrepareMeters_Internal() ? BatchState.WaitingForErrorFrame : BatchState.Error; _currentState = PrepareMeters_Internal() ? BatchState.MetersPrepared : BatchState.Error;
break;
case BatchState.WaitingForErrorFrame:
break; break;
case BatchState.MetersPrepared: case BatchState.MetersPrepared:
//Wait For Caller when every thing is setup
break; 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 }// lock repeated execution of identical state
} }
} }
@@ -714,26 +729,36 @@ namespace XylemCommonUiLegacyGenCtl
_logger.Error("Test setup container missing"); _logger.Error("Test setup container missing");
return false; return false;
} }
var listOfTasks = new List<Task>();
foreach (var item in TestSetupContainer.meterTestSettings) foreach (var item in TestSetupContainer.meterTestSettings)
{ {
if (item != null && (item.FlowAdjustment || item.FlowTesting)) 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(); var meter = new GenesisMeter();
meter.SerialNumber = item.SerialNr; meter.SerialNumber = item.SerialNr;
meter.CurrentActionText = "FlowTest"; meter.CurrentActionText = "FlowTest";
meter.SetupFromConfigFile(item.Slot, false, _useRequest, true); meter.SetupFromConfigFile(item.Slot, false, _useRequest, true);
meter.LogRawData(_rawLogging); meter.LogRawData(_rawLogging);
batch.AddMeter(meter); batch.AddMeter(meter);
meter.Login(); meter.Login();
meter.EnableAutoLogon(); meter.EnableAutoLogon();
meter.WriteLog("Add from AddAllMeters"); meter.WriteLog("Add from AddAllMeters");
} }
}));
} }
} }
listOfTasks.ForEach(t => t.Start());
Task.WaitAll(listOfTasks.ToArray());
setBusy(false); setBusy(false);
return true; return true;
} }
@@ -888,8 +913,8 @@ namespace XylemCommonUiLegacyGenCtl
setBusy(true, $"Set {slot} LCD"); setBusy(true, $"Set {slot} LCD");
Task.Factory.StartNew(() => Task.Factory.StartNew(() =>
{ {
//FF-55-00-00 //FF-55-00-00
var meter = batch.ListOfMeters.First(f => f.Slot == slot); var meter = batch.ListOfMeters.First(f => f.Slot == slot);
var state = Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts.DisplayCodes.FlowTested; var state = Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts.DisplayCodes.FlowTested;
if (!Succeed) if (!Succeed)
@@ -910,8 +935,8 @@ namespace XylemCommonUiLegacyGenCtl
else else
{ {
gen.WriteLog($"meter not active because display code has an error on code:{displayStateString}"); gen.WriteLog($"meter not active because display code has an error on code:{displayStateString}");
//skip set //skip set
return; return;
} }
} }
@@ -995,7 +1020,7 @@ namespace XylemCommonUiLegacyGenCtl
{ {
CalibrationIsDone = new Dictionary<Int32, LegacyCalibrationResult>(); CalibrationIsDone = new Dictionary<Int32, LegacyCalibrationResult>();
} }
var listOfTasks = new List<Task>();
foreach (var meter in batch.ListOfMeters) foreach (var meter in batch.ListOfMeters)
{ {
@@ -1018,25 +1043,33 @@ namespace XylemCommonUiLegacyGenCtl
if (_useRequest) if (_useRequest)
{ {
((GenesisMeter)meter).ReLogin();
((GenesisMeter)meter).WriteLog("Prepare meter for Measurement/Adjustment "); listOfTasks.Add(new Task(() =>
_logger.Debug("Prepare Meters for Measurement/Adjustment");
if (IsAdjustment)
{ {
((GenesisMeter)meter).InitCalibration();
} ((GenesisMeter)meter).ReLogin();
else ((GenesisMeter)meter).WriteLog("Prepare meter for Measurement/Adjustment ");
{ _logger.Debug("Prepare Meters for Measurement/Adjustment");
((GenesisMeter)meter).InitMeasurement(); if (IsAdjustment)
} {
((GenesisMeter)meter).InitCalibration();
}
else
{
((GenesisMeter)meter).InitMeasurement();
}
}));
//// Reboot, HighPressure //// Reboot, HighPressure
////ReadOut Alarms, Show and reset ////ReadOut Alarms, Show and reset
//_logger.Debug($"Start CheckMetersAreReadyForTest"); //_logger.Debug($"Start CheckMetersAreReadyForTest");
} }
} }
TryInvoke(new Action(UpdateBatch));
listOfTasks.ForEach(t => t.Start());
Task.WaitAll(listOfTasks.ToArray());
TryInvoke(new Action(UpdateBatch));
CheckMetersAreReadyForTest(); CheckMetersAreReadyForTest();
setBusy(false); setBusy(false);
return true; 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() private void CheckMetersAreReadyForTest()
@@ -1203,19 +1152,20 @@ namespace XylemCommonUiLegacyGenCtl
var MeterReadyForTest = false; var MeterReadyForTest = false;
while (i >= 0) while (i >= 0)
{ {
Thread.Sleep(sleepTimeS * 1000); new System.Threading.ManualResetEvent(false).WaitOne(i * 2000);
try try
{ {
var r = ((GenesisMeter)meter).GetMainMeasurementResult(null, null, true); var r = ((GenesisMeter)meter).GetMainMeasurementResult(null, null, true);
i -= sleepTimeS; 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}"); _logger.Info($" Meter {meter.Slot} Meter has progress {r.DutVolumeCm}");
TryInvoke(new Action(() => 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; MeterReadyForTest = true;
break; break;
} }
@@ -1256,34 +1206,47 @@ namespace XylemCommonUiLegacyGenCtl
} }
public void StartMeasurement() public Boolean StartMeasurement_Internal()
{ {
try try
{ {
var listOfTasks = new List<Task>();
foreach (var item in batch.ListOfMeters) 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) var settings = TestSetupContainer.meterTestSettings.First(f => f != null && f.Slot == item.Slot);
{
item.StartCalibration(); if (IsAdjustment && settings.FlowAdjustment)
} {
if (!IsAdjustment && settings.FlowTesting) item.StartCalibration();
{ }
item.StartMeasurement(); if (!IsAdjustment && settings.FlowTesting)
} {
item.StartMeasurement();
}
}));
} }
listOfTasks.ForEach(t => t.Start());
Task.WaitAll(listOfTasks.ToArray());
currentMode = Mode.AutoRefresh; currentMode = Mode.AutoRefresh;
//this.RefeshTimer.Enabled = true; return true;
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.Error(ex, "StartMeasurement"); _logger.Error(ex, "StartMeasurement");
} }
return false;
}
public void StartMeasurement()
{
_currentState = BatchState.StartMesurement;
} }
public void SetLoggerActionText(String ActionText) public void SetLoggerActionText(String ActionText)
{ {
@@ -1295,8 +1258,11 @@ namespace XylemCommonUiLegacyGenCtl
} }
} }
} }
public void StopMeasurement() public void StopMeasurement()
{
_currentState = BatchState.StopMesurement;
}
public Boolean StopMeasurement_Internal()
{ {
try try
{ {
@@ -1324,13 +1290,10 @@ namespace XylemCommonUiLegacyGenCtl
item.StopMeasurement(); item.StopMeasurement();
} }
} }
var listOfTasks = new List<Task>();
foreach (var item in batch.ListOfMeters) 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); var settings = TestSetupContainer.meterTestSettings.First(f => f != null && f.Slot == item.Slot);
if (IsAdjustment && !settings.FlowAdjustment) 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;
} }
} if (item is GenesisMeter gm)
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)) gm.CurrentActionText = "FlowTest";
{
item.StopMeasurement();
}
Thread.Sleep(100);
retrys = retrys + 1;
} }
} }));
} }
listOfTasks.ForEach(t => t.Start());
Task.WaitAll(listOfTasks.ToArray());
return true;
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.Error(ex, "StopMeasurement"); _logger.Error(ex, "StopMeasurement");
} }
return false;
} }
Boolean ICtlBatch.IsBusy() Boolean ICtlBatch.IsBusy()
{ {
@@ -1620,17 +1594,17 @@ namespace XylemCommonUiLegacyGenCtl
PredictedTs = predictedTs; PredictedTs = predictedTs;
RefError = refError; RefError = refError;
currentMode = Mode.AutoRefresh; currentMode = Mode.AutoRefresh;
//this.RefreshTimer.Interval = 10000; //this.RefreshTimer.Interval = 10000;
//this.RefreshTimer.Tick += new EventHandler(this.RefreshTimer_Tick); //this.RefreshTimer.Tick += new EventHandler(this.RefreshTimer_Tick);
//this.RefreshTimer.Enabled = true; //this.RefreshTimer.Enabled = true;
pgbUpdate.Maximum = 10000; pgbUpdate.Maximum = 10000;
updateLabelCollection(); updateLabelCollection();
ExpertMode(cbxExpert.Checked); ExpertMode(cbxExpert.Checked);
// dgvBatch.Size = new Size(SizeOfMeter, dgvBatch.Size.Height); // dgvBatch.Size = new Size(SizeOfMeter, dgvBatch.Size.Height);
pgbEndTime.Maximum = (Int32)predictedTs; pgbEndTime.Maximum = (Int32)predictedTs;
})); }));
} }
@@ -1810,9 +1784,9 @@ namespace XylemCommonUiLegacyGenCtl
currentMode = Mode.View; currentMode = Mode.View;
TryInvoke(new Action(() => TryInvoke(new Action(() =>
{ {
//this.RefreshTimer.Enabled = false; //this.RefreshTimer.Enabled = false;
//this.pnlEndTime.Visible = false; //this.pnlEndTime.Visible = false;
})); }));
} }
else else
{ {
@@ -1821,8 +1795,8 @@ namespace XylemCommonUiLegacyGenCtl
TryInvoke(new Action(() => TryInvoke(new Action(() =>
{ {
//this.RefreshTimer.Enabled = true; //this.RefreshTimer.Enabled = true;
})); }));
stopWatch.Start(); stopWatch.Start();
} }
@@ -1870,8 +1844,8 @@ namespace XylemCommonUiLegacyGenCtl
{ {
if (item is GenesisMeter) if (item is GenesisMeter)
{ {
// ((GenesisMeter)item).(); // ((GenesisMeter)item).();
} }
} }
Thread.Sleep(1000); Thread.Sleep(1000);
@@ -1939,8 +1913,8 @@ namespace XylemCommonUiLegacyGenCtl
genesis.QuickLogin(); genesis.QuickLogin();
genesis.BuildAndCheckCalibFactorsAllChannels(StoreRefVolume, StoreTestTimeRef, calFactor); genesis.BuildAndCheckCalibFactorsAllChannels(StoreRefVolume, StoreTestTimeRef, calFactor);
//genesis.SetCalibFactorsAllChannels(true); //genesis.SetCalibFactorsAllChannels(true);
genesis.SetCalibFactorsAllChannels(); genesis.SetCalibFactorsAllChannels();
return new Tuple<Boolean, Int32>(true, baseMeter.Slot); return new Tuple<Boolean, Int32>(true, baseMeter.Slot);
} }
@@ -1961,8 +1935,8 @@ namespace XylemCommonUiLegacyGenCtl
var t = new Task(() => var t = new Task(() =>
{ {
// ReSharper disable once CoVariantArrayConversion // ReSharper disable once CoVariantArrayConversion
Task.WaitAll(taskList.ToArray()); Task.WaitAll(taskList.ToArray());
Boolean overallResult = true; Boolean overallResult = true;
foreach (var item in taskList) foreach (var item in taskList)
@@ -2205,5 +2179,29 @@ namespace XylemCommonUiLegacyGenCtl
CtlBatchStateMachine(); 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;
}
} }
} }