Example #1
0
        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;
            }
        }