2025-09-02 15:32:24 +01:00
|
|
|
|
namespace AiQ_GUI
|
|
|
|
|
|
{
|
|
|
|
|
|
internal class LED
|
|
|
|
|
|
{
|
|
|
|
|
|
// Checks the LED voltages and currents against expected values, displaying results in the provided label
|
|
|
|
|
|
public static void CheckLEDs(List<double> VorI, Label lblVorI, string VormA, double ExpVorI)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
VorI.Sort(); // Sort the list from lowest to highest to prepare for finding the median
|
|
|
|
|
|
double medianVorI = (VorI[2] + VorI[3]) / 2.0; // Will always be even (6) number of channels therefore average the two middle elements
|
2025-12-23 13:01:15 +00:00
|
|
|
|
string medianText = $"Median: {medianVorI}{VormA}";
|
2025-09-02 15:32:24 +01:00
|
|
|
|
|
2026-01-05 12:35:28 +00:00
|
|
|
|
//Expected value of 0 means informational only (force green)
|
|
|
|
|
|
if (ExpVorI == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (lblVorI == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
MainForm.Instance.AddLabelToPanel($"LED {VormA} = {medianText}", false);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
lblVorI.Invoke(() =>
|
|
|
|
|
|
{
|
|
|
|
|
|
lblVorI.Text = lblVorI.Text.TrimEnd('=', ' ') + " = " + medianText;
|
|
|
|
|
|
lblVorI.ForeColor = Color.LimeGreen;
|
|
|
|
|
|
});
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-02 15:32:24 +01:00
|
|
|
|
// Define the 20% threshold ranges
|
|
|
|
|
|
double LowerThreshold = ExpVorI * 0.8;
|
|
|
|
|
|
double UpperThreshold = ExpVorI * 1.2;
|
|
|
|
|
|
|
|
|
|
|
|
// Check median is within 20% of the expected value
|
|
|
|
|
|
if (medianVorI < LowerThreshold || medianVorI > UpperThreshold)
|
|
|
|
|
|
{
|
2025-12-23 13:01:15 +00:00
|
|
|
|
medianText += $" (away from expected {ExpVorI}{VormA})";
|
2026-01-05 12:35:28 +00:00
|
|
|
|
if (lblVorI == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
MainForm.Instance.AddLabelToPanel($"LED {VormA} = {medianText}", true);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2025-12-23 13:01:15 +00:00
|
|
|
|
lblVorI.Invoke(() =>
|
|
|
|
|
|
{
|
|
|
|
|
|
lblVorI.Text = lblVorI.Text.TrimEnd('=', ' ') + " = " + medianText;
|
|
|
|
|
|
lblVorI.ForeColor = Color.Red;
|
|
|
|
|
|
});
|
2025-09-02 15:32:24 +01:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
List<string> outOfRangeVoltageChannels = []; // List to store out-of-range channels
|
|
|
|
|
|
|
|
|
|
|
|
// Check each voltage/current channel is within 20% of expected
|
|
|
|
|
|
for (int i = 0; i < 6; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (VorI[i] < LowerThreshold || VorI[i] > UpperThreshold)
|
|
|
|
|
|
outOfRangeVoltageChannels.Add($"Ch{i + 1}");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// If there are no single channels outside the threshold then green, else red
|
|
|
|
|
|
if (outOfRangeVoltageChannels.Count == 0)
|
|
|
|
|
|
{
|
2026-01-05 12:35:28 +00:00
|
|
|
|
if (lblVorI == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
MainForm.Instance.AddLabelToPanel($"LED {VormA} = {medianText}", false);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2025-12-23 13:01:15 +00:00
|
|
|
|
lblVorI.Invoke(() =>
|
|
|
|
|
|
{
|
|
|
|
|
|
lblVorI.Text = lblVorI.Text.TrimEnd('=', ' ') + " = " + medianText;
|
|
|
|
|
|
lblVorI.ForeColor = Color.LimeGreen;
|
|
|
|
|
|
});
|
2025-09-02 15:32:24 +01:00
|
|
|
|
}
|
|
|
|
|
|
else if (outOfRangeVoltageChannels.Count != 0)
|
|
|
|
|
|
{
|
2025-12-23 13:01:15 +00:00
|
|
|
|
string errorText = medianText + " (error on " + string.Join(", ", outOfRangeVoltageChannels) + ")";
|
2026-01-05 12:35:28 +00:00
|
|
|
|
if (lblVorI == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
MainForm.Instance.AddLabelToPanel($"LED {VormA} = {errorText}", true);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2025-12-23 13:01:15 +00:00
|
|
|
|
lblVorI.Invoke(() =>
|
|
|
|
|
|
{
|
|
|
|
|
|
lblVorI.Text = lblVorI.Text.TrimEnd('=', ' ') + " = " + errorText;
|
|
|
|
|
|
lblVorI.ForeColor = Color.Red;
|
|
|
|
|
|
});
|
2025-09-02 15:32:24 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
2025-12-19 16:14:13 +00:00
|
|
|
|
MainForm.Instance.AddToActionsList($"Error checking LEDs: {ex.Message}", Level.ERROR);
|
2025-09-02 15:32:24 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|