<Feat>: Add customer XML structure mapping support in ResultsWriter, increase revision to 3.9.3145.102

Cause:

- The customer XML format requires batch, DUT, group and test-level metadata.
- ResultsWriter did not provide variables for test position, repetition index, batch duration, DUT test duration or aggregated test statuses.
- Missing WaterMeterData could cause a NullReferenceException while evaluating WM Type.

Solution:

1. Added XML mapping variables
   - Added TestPositionInBatch and TestRepetitionNr.
   - Added BatchTime and TestsTotalTime.
   - Added PassedFromAllTests and PassedFromRepeatedTests.

2. Added hierarchical result evaluation
   - Evaluates the overall PANEL/DUT status from all tests.
   - Evaluates GROUP status from repeated instances of the selected test.

3. Improved meter data handling
   - Made WM Type evaluation null-safe when WaterMeterData is unavailable.

4. Increased revision
   - Updated revision to 3.9.3145.102.
This commit is contained in:
2026-09-04 08:20:50 +02:00
parent d3c8813012
commit 136be96e1b
46 changed files with 1754 additions and 288 deletions
@@ -1022,7 +1022,7 @@ namespace TBF.Rig.TestMethods.S640Communication
Results.Entities.WaterMeter wm = ProcessData.BatchRslts.Batch.WaterMeters[i];
if (optoHeads[i] != null && optoHeads[i].PcbNumber != 0 && wm != null && !wm.Disabled)
{
if (!wm.PassedFromTests())
if (!wm.PassedFromAllTests())
{
/// Red background
eRegisterNumbers[i].BackColor = Color.Pink;
@@ -1101,7 +1101,7 @@ namespace TBF.Rig.TestMethods.S640Communication
{
if (optoHeads[i] != null && optoHeads[i].PcbNumber != 0 &&
waterMeters[i] != null && !waterMeters[i].Disabled &&
(activity == S640Activity.Start || waterMeters[i].PassedFromTests()))
(activity == S640Activity.Start || waterMeters[i].PassedFromAllTests()))
{
count++;
@@ -1137,7 +1137,7 @@ namespace TBF.Rig.TestMethods.S640Communication
optoHeads[i].PcbNumber != 0 &&
ProcessData.BatchRslts.Batch.WaterMeters[i] != null &&
!ProcessData.BatchRslts.Batch.WaterMeters[i].Disabled &&
(activity == S640Activity.Start || ProcessData.BatchRslts.Batch.WaterMeters[i].PassedFromTests()))
(activity == S640Activity.Start || ProcessData.BatchRslts.Batch.WaterMeters[i].PassedFromAllTests()))
{
Results.Entities.WaterMeter wm = ProcessData.BatchRslts.Batch.WaterMeters[i];
@@ -2180,7 +2180,7 @@ namespace TBF.Rig.TestMethods.iPerlCommunication
if ((q2CorrType == Q2CorrType.ConditionalUpdate ||
q2CorrType == Q2CorrType.ConditionalUpdateRL ||
q2CorrType == Q2CorrType.ConditionalUpdateLR) && wm.PassedFromTests())
q2CorrType == Q2CorrType.ConditionalUpdateLR) && wm.PassedFromAllTests())
{
resultStr = string.Format("No Q2 correction update");
rfidDataLogger.InfoFormat("{0}({1}): No Q2 correction update", ihead.Name, ihead.SerialNr);