private void tmrUpdate_Tick(object sender, EventArgs e) { blinker = !blinker; if (manualControl) { txtInfo.Visible = false; lblkV.Text = tub.monkV.ToString("0.0"); lbluA.Text = tub.monuA.ToString("0.0"); btnPower.BackColor = tub.on ? Color.MediumSeaGreen : Color.DarkGray; ledWatchdog.Value = tub.utc.watchDogState; } else { txtInfo.Visible = true; } string msg = tub.status.ToString() + ". "; switch (tub.status) { case Tube.Status.Idle: ledStatus.OnColor = Color.LimeGreen; break; case Tube.Status.Testing: ledStatus.OnColor = Color.Orange; ledStatus.Value = blinker; tub.Relay(blinker); msg += runTimer.IsRunning? $"{ (runTime - runTimer.Elapsed).ToString().Split('.')[0] } Remaining." : ""; break; case Tube.Status.Paused: ledStatus.OnColor = Color.Orange; ledStatus.Value = true; msg += $"{ (runTime - runTimer.Elapsed).ToString().Split('.')[0] } Remaining."; break; case Tube.Status.Done: ledStatus.OnColor = Color.LimeGreen; ledStatus.Value = blinker; tub.Relay(blinker); break; case Tube.Status.Error: ledStatus.OnColor = Color.Red; ledStatus.Value = true; msg += errReason; break; } if (runTimer.IsRunning && runTimer.Elapsed.TotalSeconds >= runTime.TotalSeconds) // Passed { tub.status = Tube.Status.Done; Finished(""); } else if (runTimer.IsRunning) // Put failure modes here.. { if (tub.monkV > tub.setkV + tub.setkV * kVLim || tub.monkV < tub.setkV - tub.setkV * kVLim || tub.monuA > tub.setuA + tub.setuA * uALim || tub.monuA < tub.setuA - tub.setuA * uALim) { errorCount[0]++; if (errorCount[0] >= errorThreshold) { Finished(@"Monitors +/- thresholds"); } } if (!tub.on) { errorCount[1]++; if (errorCount[1] >= errorThreshold) { Finished("HV is unstable"); } } if (!tub.connected) { Finished("Station lost connection"); Dispose(); } } else if (!tub.connected) { Dispose(); } string hV = tub.on ? "ON" : "OFF"; StringBuilder s = new StringBuilder(); if (tub.serialNum > 0) { s.AppendLine(tub.serialNum.ToString()); } s.AppendLine(tub.name); s.AppendLine($"kV set: { tub.setkV.ToString("0.0") }"); s.AppendLine($"uA set: { tub.setuA.ToString("0.0") }"); s.AppendLine($"kV mon: { tub.monkV.ToString("0.0") }"); s.AppendLine($"uA mon: { tub.monuA.ToString("0.0") }"); s.AppendLine($"HV Status: { hV }"); txtInfo.Text = s.ToString(); lblStatus.Text = msg; if (runTime.TotalSeconds > 0) { progressBar.Value = (int)((runTimer.Elapsed.TotalSeconds / runTime.TotalSeconds) * 100); } else if (tub.status == Tube.Status.Done) { progressBar.Value = 100; } else { progressBar.Value = 0; } }