iPerlCommunicationForm : Better try/catch, more logging, ver. 2.18.1152

This commit is contained in:
Milan Hanajik 2019-02-25 16:15:26 +01:00
parent 138e436645
commit 5586f58c6e
3 changed files with 108 additions and 89 deletions

View File

@ -1,5 +1,5 @@
/// ///
/// Copyright (c) 2015-2017 Sensus Metering Systems /// Copyright (c) 2015-2019 Sensus Metering Systems
/// Author: Milan Hanajík /// Author: Milan Hanajík
/// ///
using System; using System;
@ -24,5 +24,16 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
this.CommMessage = commMessage; this.CommMessage = commMessage;
this.CommErr = commErr; this.CommErr = commErr;
} }
public override string ToString()
{
return string.Format("Thread={0} WMNr0={1} IHead={2} WM={3} CommMsg={4} CommErr={5}",
ThreadId,
WMNr0,
(Ihead != null) ? Ihead.Name : "null",
Wm.WMPosition,
(CommMessage != null) ? CommMessage : "null",
CommErr);
}
} }
} }

View File

@ -2187,100 +2187,108 @@ namespace TBF.BenchControl.TestMethods.iPerlCommunication
void DoOnCommCompleted(object sender, CommCompletedEventArgs data) void DoOnCommCompleted(object sender, CommCompletedEventArgs data)
{ {
/// try
/// Update the text message {
/// ///
if (data.WMNr0 >= 0) messages[data.WMNr0].Text = data.CommMessage; /// Update the text message
///
if (data.WMNr0 >= 0) messages[data.WMNr0].Text = data.CommMessage;
/// ///
/// Update head active/inactive switch /// Update head active/inactive switch
/// ///
if (data.WMNr0 >= 0 && data.CommErr == CommErr.HeadDisabledByUser) if (data.WMNr0 >= 0 && data.CommErr == CommErr.HeadDisabledByUser)
{
/// iPerl head was disabled by the user
ckbState[data.WMNr0] = false;
checkBoxes[data.WMNr0].Checked = false;
checkBoxes[data.WMNr0].Enabled = false;
if (data.Ihead != null) data.Ihead.Disabled = true;
if (data.Wm != null) data.Wm.Disabled = true;
}
else if (data.WMNr0 >= 0 && data.CommErr == CommErr.None)
{
/// One RFID communication successful => iPerl cannot be disabled by the user anymore
ckbState[data.WMNr0] = true;
checkBoxes[data.WMNr0].Checked = true;
checkBoxes[data.WMNr0].Enabled = false;
}
///
/// Update opto-communication indication
///
for (int i = 0; i < iperlHeads.Count; i++)
{
if (iperlHeads[i] == null || iperlHeads[i].Disabled)
{ {
counters[i].BackColor = DisabledColor; /// iPerl head was disabled by the user
ckbState[data.WMNr0] = false;
checkBoxes[data.WMNr0].Checked = false;
checkBoxes[data.WMNr0].Enabled = false;
if (data.Ihead != null) data.Ihead.Disabled = true;
if (data.Wm != null) data.Wm.Disabled = true;
}
else if (data.WMNr0 >= 0 && data.CommErr == CommErr.None)
{
/// One RFID communication successful => iPerl cannot be disabled by the user anymore
ckbState[data.WMNr0] = true;
checkBoxes[data.WMNr0].Checked = true;
checkBoxes[data.WMNr0].Enabled = false;
}
///
/// Update opto-communication indication
///
for (int i = 0; i < iperlHeads.Count; i++)
{
if (iperlHeads[i] == null || iperlHeads[i].Disabled)
{
counters[i].BackColor = DisabledColor;
}
else
{
switch (iperlHeads[i].CheckFlowDirection())
{
case OptoHeadState.OptoAndDirOK:
counters[i].BackColor = OptoAndDirOKColor;
break;
case OptoHeadState.DirNok:
counters[i].BackColor = DirNokColor;
break;
default:
case OptoHeadState.OptoNok:
counters[i].BackColor = OptoNokColor;
break;
}
}
}
#if !TURA_SPECIAL
///
/// Branch
///
lock (this)
{
completedCommCount++;
if (cfg.UseMuxBoards && completedCommCount < muxBrdOrGroup14Nrs.Count) return;
if (!cfg.UseMuxBoards && completedCommCount < 4) return;
completedCommCount = 0;
}
#endif
if (currentGroup < lastGroup)
{
/// Go to the next step / next group
if (quido != null)
{
quido.SetOutputs((ushort)(16 - currentGroup - 1));
Thread.Sleep(2000);
}
currentGroup++;
}
else if (currentActivityStep + 1 < multiTestParams.Count)
{
currentGroup = 0;
currentActivityStep++;
activityLabel.Text = multiTestParams[currentActivityStep].Activity;
if (quido != null)
{
quido.SetOutputs((ushort)(16 - currentGroup - 1));
Thread.Sleep(2000);
}
currentGroup++;
} }
else else
{ {
switch (iperlHeads[i].CheckFlowDirection()) /// Wait until all threads are finished
{ workerThreads[data.ThreadId].Join(2000);
case OptoHeadState.OptoAndDirOK: NormalClose();
counters[i].BackColor = OptoAndDirOKColor;
break;
case OptoHeadState.DirNok:
counters[i].BackColor = DirNokColor;
break;
default:
case OptoHeadState.OptoNok:
counters[i].BackColor = OptoNokColor;
break;
}
} }
} }
catch (Exception e)
#if !TURA_SPECIAL
///
/// Branch
///
lock (this)
{ {
completedCommCount++; log.ErrorFormat("DoOnCommCompleted({0}) failed: {1}", data, e.Message);
if (cfg.UseMuxBoards && completedCommCount < muxBrdOrGroup14Nrs.Count) return; log.FatalFormat("StackTrace : {0}{1}", Environment.NewLine, e.StackTrace);
if (!cfg.UseMuxBoards && completedCommCount < 4) return;
completedCommCount = 0;
}
#endif
if (currentGroup < lastGroup)
{
/// Go to the next step / next group
if (cfg.UseMuxBoards && (quido != null))
{
quido.SetOutputs((ushort)(16 - currentGroup - 1));
Thread.Sleep(2000);
}
currentGroup++;
}
else if (currentActivityStep + 1 < multiTestParams.Count)
{
currentGroup = 0;
currentActivityStep++;
activityLabel.Text = multiTestParams[currentActivityStep].Activity;
if (cfg.UseMuxBoards && (quido != null))
{
quido.SetOutputs((ushort)(16 - currentGroup - 1));
Thread.Sleep(2000);
}
currentGroup++;
}
else
{
/// Wait until all threads are finished
workerThreads[data.ThreadId].Join(2000);
NormalClose();
} }
} }

View File

@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number // Build Number
// Revision // Revision
// //
[assembly: AssemblyVersion("2.18.1151.0")] [assembly: AssemblyVersion("2.18.1152.0")]
[assembly: AssemblyFileVersion("2.18.1151.0")] [assembly: AssemblyFileVersion("2.18.1152.0")]