private void PLC_OnDeviceChanged(DeviceChangedArgs e) { switch (e.Device.Name) { case SAF.inPLC_ERRACK: ledPLC_ERRACK.Energized = e.Device.Value; if (e.Device.Value) { vPLC.SetState(SAF.inPLC_ERRACK, false); } break; case SAF.inPLC_RESTART: ledPLC_RESTART.Energized = e.Device.Value; if (e.Device.Value) { vPLC.SetState(SAF.inPLC_RESTART, false); } break; case SAF.inPLC_CHB_UNLCK: ledPLC_CHB_UNLCK.Energized = e.Device.Value; break; case SAF.inPLC_HV_EN: ledPLC_HV_EN.Energized = e.Device.Value; swHVPower.Energized = e.Device.Value; break; case SAF.inPLC_SP_EN: ledPLC_SP_EN.Energized = e.Device.Value; swSpellmanHV.Energized = e.Device.Value; break; case SAF.inPLC_TESTING: ledPLC_TESTING.Energized = e.Device.Value; swTesting.Energized = e.Device.Value; break; case SAF.outPLC_RUN: ledPLC_RUN.Energized = e.Device.Value; break; case SAF.outPLC_ERRCOM: ledPLC_ERRCOM.Energized = e.Device.Value; break; case SAF.SFI_CHB_UNLCK: ledSFI_CHB_UNLCK.Energized = e.Device.Value; ledCHBLock.Energized = e.Device.Value; if (e.Device.Value) { this.Invoke((MethodInvoker) delegate { btnCHBLock.Text = "Lock Chamber"; }); } else { this.Invoke((MethodInvoker) delegate { btnCHBLock.Text = "Unlock Chamber"; }); } break; case SAF.SFI_CHB_OPEN: ledSFI_CHB_OPEN.Energized = e.Device.Value; ledCHBDoor.Energized = e.Device.Value; break; case SAF.SFI_HV_PWR: ledSFI_HV_PWR.Energized = e.Device.Value; break; case SAF.SFI_EMO: ledSFI_EMO.Energized = !e.Device.Value; break; case SAF.SFI_XRAYS_1: ledSFI_XRAYS_1.Energized = e.Device.Value; break; case SAF.SFI_XRAYS_2: ledSFI_XRAYS_2.Energized = e.Device.Value; break; case SAF.SFO_CHB_UNLCK: ledSFO_CHB_UNLCK.Energized = e.Device.Value; ledCHBLock.Energized = e.Device.Value; break; case SAF.SFO_HV_PWR: ledSFO_HV_PWR.Energized = e.Device.Value; break; case SAF.SFO_SP_INTLCK: ledSFO_SP_INTLCK.Energized = e.Device.Value; break; case SAF.SFO_BUZZER: ledSFO_BUZZER.Energized = e.Device.Value; break; case SAF.SFO_LED_SAFE: ledSFO_LED_SAFE.Energized = e.Device.Value; ledSafe.Energized = e.Device.Value; this.Invoke((MethodInvoker) delegate { btnCHBLock.Enabled = e.Device.Value; }); break; case SAF.SFO_LED_HV: ledSFO_LED_HV.Energized = e.Device.Value; ledHV.Energized = e.Device.Value; break; case SAF.SFO_LED_XRAYS: ledSFO_LED_XRAYS.Energized = e.Device.Value; ledXRays.Energized = e.Device.Value; break; case SAF.SFO_LED_TESTING: ledSFO_LED_TESTING.Energized = e.Device.Value; ledTesting.Energized = e.Device.Value; break; case PLC.PLO_PS_PWR: ledPLO_PS_PWR.Energized = e.Device.Value; swPSPower.Energized = e.Device.Value; break; case PLC.PLO_LED_ERROR: ledPLO_LED_ERROR.Energized = e.Device.Value; ledError.Energized = e.Device.Value; swError.Energized = e.Device.Value; break; case PLC.PLO_LED_EMO: ledPLO_LED_EMO.Energized = e.Device.Value; break; case PLC.PLO_SPELLMAN1: ledPLO_SPELLMAN1.Energized = e.Device.Value; swSpellman1.Energized = e.Device.Value; break; case PLC.PLO_SPELLMAN2: ledPLO_SPELLMAN2.Energized = e.Device.Value; swSpellman2.Energized = e.Device.Value; break; case PLC.PLO_SPELLMAN3: ledPLO_SPELLMAN3.Energized = e.Device.Value; swSpellman3.Energized = e.Device.Value; break; case PLC.PLO_SPELLMAN4: ledPLO_SPELLMAN4.Energized = e.Device.Value; swSpellman4.Energized = e.Device.Value; break; case PLC.PLO_SPELLMAN5: ledPLO_SPELLMAN5.Energized = e.Device.Value; swSpellman5.Energized = e.Device.Value; break; case PLC.PLO_SPELLMAN6: ledPLO_SPELLMAN6.Energized = e.Device.Value; swSpellman6.Energized = e.Device.Value; break; case PLC.PLO_FAN_CHB: ledPLO_FAN_CHB.Energized = e.Device.Value; swChamberFan.Energized = e.Device.Value; break; case PLC.PLI_TEMP_CAB: string vTempCAB = e.Device.Value.ToString(); vTempCAB = vTempCAB.Insert(vTempCAB.Length - 1, ".") + "°C"; this.Invoke((MethodInvoker) delegate { lblTempCAB.Text = vTempCAB; }); break; case PLC.PLI_TEMP_CHB: string vTempCHB = e.Device.Value.ToString(); vTempCHB = vTempCHB.Insert(vTempCHB.Length - 1, ".") + "°C"; this.Invoke((MethodInvoker) delegate { lblTempCHB.Text = vTempCHB; }); break; case PLC.PLI_UPS_ALARM: ledPLI_UPS_ALARM.Energized = !e.Device.Value; break; case PLC.PLI_UPS_BATTERY: ledPLI_UPS_BATTERY.Energized = e.Device.Value; break; case PLC.PLI_UPS_CHARGE: ledPLI_UPS_CHARGE.Energized = e.Device.Value; break; case PLC.PLI_PWR_TEMP: ledPLI_PWR_TEMP.Energized = e.Device.Value; break; case PLC.PLI_PWR_OUTPUT: ledPLI_PWR_OUTPUT.Energized = e.Device.Value; break; case PLC.PLI_PWR_OVP: ledPLI_PWR_OVP.Energized = e.Device.Value; break; } }
/// <summary> /// Handle PLC state changes. /// </summary> /// <param name="e">Event args.</param> private void PLCStateChanged(DeviceChangedArgs e) { Invoke((MethodInvoker) delegate { lblSafe.BackColor = safe ? Color.LightGreen : Color.LightGray; lblHV.BackColor = hvEnable ? Color.White : Color.LightGray; lblXrays.BackColor = xRays ? Color.LightBlue : Color.LightGray; lblTest.BackColor = testing ? Color.Gold : Color.LightGray; lblError.BackColor = error ? Color.IndianRed : Color.LightGray; }); switch (e.Device.Name) { case SAF.inPLC_ERRACK: if (e.Device.Value) { plc.SetState(SAF.inPLC_ERRACK, false); } break; case SAF.inPLC_RESTART: if (e.Device.Value) { plc.SetState(SAF.inPLC_RESTART, false); } break; case SAF.SFI_CHB_UNLCK: doorLocked = !e.Device.Value; break; case SAF.SFI_CHB_OPEN: doorOpen = e.Device.Value; break; case SAF.SFI_EMO: eStopPressed = !e.Device.Value; if (eStopPressed) { Pause(); } break; case SAF.SFO_LED_SAFE: safe = e.Device.Value; break; case SAF.SFO_LED_XRAYS: xRays = e.Device.Value; break; case SAF.SFO_LED_TESTING: testing = e.Device.Value; Invoke((MethodInvoker) delegate { selected = null; Settings.Default.CurrentlyTesting = testing; Settings.Default.Save(); }); break; case PLC.PLO_LED_ERROR: error = e.Device.Value; break; case SAF.SFO_HV_PWR: _hvEnable = e.Device.Value; break; case PLC.PLO_PS_PWR: _psEnable = e.Device.Value; break; case PLC.PLI_UPS_BATTERY: powerLoss = e.Device.Value; if (powerLoss) { plc.SetState(PLC.PLO_LED_ERROR, powerLoss); Tools.ShutdownPC(); } break; } }