using SA_LTT; using SA_LTT.Info.AttenuatorCalInfo; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace SA_LTT_UI.Viewer { public partial class AttenuatorCalViewer : Form { MainFrame _mainFrame; Thread t_UIUpdate; bool updateCheck; AttenuatorCalData[] currentAttenuatorCalData; double _beamHeight; double _beamWidth; protected override CreateParams CreateParams { get { CreateParams MyCp = base.CreateParams; MyCp.ExStyle |= 0x02000000; return MyCp; } } public AttenuatorCalViewer(MainFrame mainFrame) { InitializeComponent(); _mainFrame = mainFrame; _beamHeight = _mainFrame.equipment.settingParameterManager.SettingParameter.BeamHeight; _beamWidth = _mainFrame.equipment.settingParameterManager.SettingParameter.BeamWidth; t_UIUpdate = new Thread(UIUpdateTh); t_UIUpdate.Start(); } private void UIUpdateTh() { while (_mainFrame.equipment.IsDisposed == false) { Thread.Sleep(10); if (updateCheck == false) { updateCheck = true; UIUpdate(); } } } private void UIUpdate() { if (InvokeRequired) { BeginInvoke(new UIUpdateDelegate(UIUpdate)); return; } else { try { tb_LastCalTime.Text = _mainFrame.equipment.equipmentInfo.AttenuatorCalDate.ToString("yyyy-MM-dd HH:mm:ss"); DateTime attenuaCalDateTime = _mainFrame.equipment.equipmentInfo.AttenuatorCalDate.AddHours(_mainFrame.equipment.settingParameterManager.SettingParameter.AttenuatorCalCycle); TimeSpan calDTime = (attenuaCalDateTime - DateTime.Now); if(calDTime.TotalHours < 0) { tb_CalDTime.Text = $"-{-calDTime.Days} {-calDTime.Hours}:{-calDTime.Minutes}:{-calDTime.Seconds}"; } else { tb_CalDTime.Text = $"{calDTime.Days} {calDTime.Hours}:{calDTime.Minutes}:{calDTime.Seconds}"; } tb_StartAngle.Text = $"{_mainFrame.equipment.settingParameterManager.SettingParameter.AttenuatorCalStartAngle}"; tb_EndAngle.Text = $"{_mainFrame.equipment.settingParameterManager.SettingParameter.AttenuatorCalEndAngle}"; tb_AngleStep.Text = $"{_mainFrame.equipment.settingParameterManager.SettingParameter.AttenuatorCalAngleStep}"; tb_OriginalEnergy.Text = $"{_mainFrame.equipment.powerMeter.Energy:F4}"; tb_Energy.Text = $"{_mainFrame.equipment.powerMeter.EnergyPerUnitArea:F4}"; tb_CurrentAngle.Text = $"{_mainFrame.equipment.attenuator.Degree:F3}"; UpdateSteps(); UpdateAttenuatorCalData(); } catch (Exception e) { EquipmentLogManager.Instance.WriteExceptionLog(e.StackTrace); } finally { updateCheck = false; } } } private void UpdateSteps() { if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.AttenuatorCalStart) { lb_PowerMeterInitialize.BackColor = Color.Green; lb_CenterPositionMove.BackColor = Color.Green; lb_PowerMeterPositionMove.BackColor = Color.Green; lb_AttenuatorSet.BackColor = Color.Green; lb_CoolingWait.BackColor = Color.Green; lb_LaserOn.BackColor = Color.Green; lb_PowerMeasure.BackColor = Color.Green; lb_LaserOff.BackColor = Color.Green; lb_DataSet.BackColor = Color.Green; lb_Complete.BackColor = Color.Green; } else if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.AcPowerMeterInitialize) { lb_PowerMeterInitialize.BackColor = Color.Lime; lb_CenterPositionMove.BackColor = Color.Green; lb_PowerMeterPositionMove.BackColor = Color.Green; lb_AttenuatorSet.BackColor = Color.Green; lb_CoolingWait.BackColor = Color.Green; lb_LaserOn.BackColor = Color.Green; lb_PowerMeasure.BackColor = Color.Green; lb_LaserOff.BackColor = Color.Green; lb_DataSet.BackColor = Color.Green; lb_Complete.BackColor = Color.Green; } else if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.AcMovePowerMeterPosition) { lb_PowerMeterInitialize.BackColor = Color.Lime; lb_CenterPositionMove.BackColor = Color.Lime; lb_PowerMeterPositionMove.BackColor = Color.Green; lb_AttenuatorSet.BackColor = Color.Green; lb_CoolingWait.BackColor = Color.Green; lb_LaserOn.BackColor = Color.Green; lb_PowerMeasure.BackColor = Color.Green; lb_LaserOff.BackColor = Color.Green; lb_DataSet.BackColor = Color.Green; lb_Complete.BackColor = Color.Green; } else if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.AcAttenuatorSet) { lb_PowerMeterInitialize.BackColor = Color.Lime; lb_CenterPositionMove.BackColor = Color.Lime; lb_PowerMeterPositionMove.BackColor = Color.Lime; lb_AttenuatorSet.BackColor = Color.Lime; lb_CoolingWait.BackColor = Color.Green; lb_LaserOn.BackColor = Color.Green; lb_PowerMeasure.BackColor = Color.Green; lb_LaserOff.BackColor = Color.Green; lb_DataSet.BackColor = Color.Green; lb_Complete.BackColor = Color.Green; } else if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.AcCoolingTimeWait) { lb_PowerMeterInitialize.BackColor = Color.Lime; lb_CenterPositionMove.BackColor = Color.Lime; lb_PowerMeterPositionMove.BackColor = Color.Lime; lb_AttenuatorSet.BackColor = Color.Lime; lb_CoolingWait.BackColor = Color.Lime; lb_LaserOn.BackColor = Color.Green; lb_PowerMeasure.BackColor = Color.Green; lb_LaserOff.BackColor = Color.Green; lb_DataSet.BackColor = Color.Green; lb_Complete.BackColor = Color.Green; } else if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.AcLaserOn) { lb_PowerMeterInitialize.BackColor = Color.Lime; lb_CenterPositionMove.BackColor = Color.Lime; lb_PowerMeterPositionMove.BackColor = Color.Lime; lb_AttenuatorSet.BackColor = Color.Lime; lb_CoolingWait.BackColor = Color.Lime; lb_LaserOn.BackColor = Color.Green; lb_PowerMeasure.BackColor = Color.Green; lb_LaserOff.BackColor = Color.Green; lb_DataSet.BackColor = Color.Green; lb_Complete.BackColor = Color.Green; } else if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.AcMeasurementEnd) { lb_PowerMeterInitialize.BackColor = Color.Lime; lb_CenterPositionMove.BackColor = Color.Lime; lb_PowerMeterPositionMove.BackColor = Color.Lime; lb_AttenuatorSet.BackColor = Color.Lime; lb_CoolingWait.BackColor = Color.Lime; lb_LaserOn.BackColor = Color.Lime; lb_PowerMeasure.BackColor = Color.Lime; lb_LaserOff.BackColor = Color.Green; lb_DataSet.BackColor = Color.Green; lb_Complete.BackColor = Color.Green; } else if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.AcLaserOff) { lb_PowerMeterInitialize.BackColor = Color.Lime; lb_CenterPositionMove.BackColor = Color.Lime; lb_PowerMeterPositionMove.BackColor = Color.Lime; lb_AttenuatorSet.BackColor = Color.Lime; lb_CoolingWait.BackColor = Color.Lime; lb_LaserOn.BackColor = Color.Lime; lb_PowerMeasure.BackColor = Color.Lime; lb_LaserOff.BackColor = Color.Lime; lb_DataSet.BackColor = Color.Green; lb_Complete.BackColor = Color.Green; } else if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.AcMeasurementDataCheck) { lb_PowerMeterInitialize.BackColor = Color.Lime; lb_CenterPositionMove.BackColor = Color.Lime; lb_PowerMeterPositionMove.BackColor = Color.Lime; lb_AttenuatorSet.BackColor = Color.Lime; lb_CoolingWait.BackColor = Color.Lime; lb_LaserOn.BackColor = Color.Lime; lb_PowerMeasure.BackColor = Color.Lime; lb_LaserOff.BackColor = Color.Lime; lb_DataSet.BackColor = Color.Lime; lb_Complete.BackColor = Color.Green; } else if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.AttenuatorCalEnd) { lb_PowerMeterInitialize.BackColor = Color.Lime; lb_CenterPositionMove.BackColor = Color.Lime; lb_PowerMeterPositionMove.BackColor = Color.Lime; lb_AttenuatorSet.BackColor = Color.Lime; lb_LaserOn.BackColor = Color.Lime; lb_PowerMeasure.BackColor = Color.Lime; lb_LaserOff.BackColor = Color.Lime; lb_Complete.BackColor = Color.Lime; } } private void UpdateAttenuatorCalData() { if (currentAttenuatorCalData == null) { currentAttenuatorCalData = _mainFrame.equipment.attenuatorCalInfo.GetAttenuatorCalData(); lv_AttenuatorCalData.Items.Clear(); foreach (AttenuatorCalData data in currentAttenuatorCalData) { ListViewItem lvi = new ListViewItem($"{data.AttenuatorAngle}"); lvi.SubItems.Add($"{data.Energy}"); lvi.SubItems.Add($"{(data.Energy / (_beamHeight * _beamWidth)) * 100:F3}"); lv_AttenuatorCalData.Items.Add(lvi); } } else { AttenuatorCalData[] datas = _mainFrame.equipment.attenuatorCalInfo.GetAttenuatorCalData(); bool equalCheck = true; if(currentAttenuatorCalData.Length == datas.Length) { for (int i = 0; i < datas.Length; i++) { if(currentAttenuatorCalData[i].IsEqual(datas[i]) == false) { equalCheck = false; break; } } } else { equalCheck = false; } if(equalCheck == false || _beamHeight != _mainFrame.equipment.settingParameterManager.SettingParameter.BeamHeight || _beamWidth != _mainFrame.equipment.settingParameterManager.SettingParameter.BeamWidth) { _beamHeight = _mainFrame.equipment.settingParameterManager.SettingParameter.BeamHeight; _beamWidth = _mainFrame.equipment.settingParameterManager.SettingParameter.BeamWidth; currentAttenuatorCalData = _mainFrame.equipment.attenuatorCalInfo.GetAttenuatorCalData(); lv_AttenuatorCalData.Items.Clear(); foreach (AttenuatorCalData data in currentAttenuatorCalData) { ListViewItem lvi = new ListViewItem($"{data.AttenuatorAngle}"); lvi.SubItems.Add($"{data.Energy}"); lvi.SubItems.Add($"{(data.Energy / (_beamHeight * _beamWidth)) * 100:F3}"); lv_AttenuatorCalData.Items.Add(lvi); } } } } private void btn_Close_Click(object sender, EventArgs e) { EquipmentLogManager.Instance.WriteButtonLog($"{this.Name} : {((Control)sender).Text}"); this.Hide(); } private void btn_Start_Click(object sender, EventArgs e) { if (_mainFrame.equipment.ProcessStatus == SA_LTT.ProcessStatus.Idle) { if (_mainFrame.equipment.alarmManager.OccurredAlarms.Exists(x => x.Level == AlarmLevel.Heavy)) { MessageBox.Show("Alarm이 발생중입니다.", "확인", MessageBoxButtons.OK); return; } if (_mainFrame.equipment.piLaser.CurrentPiLaserStatus.EnableLdd == false || _mainFrame.equipment.piLaser.CurrentPiLaserStatus.EnableShutter == false || _mainFrame.equipment.piLaser.CurrentPiLaserStatus.SetCurrent != _mainFrame.equipment.piLaser.CurrentPiLaserStatus.MaxCurrent) { string message = string.Empty; if (_mainFrame.equipment.piLaser.CurrentPiLaserStatus.EnableLdd == false) { message += "LDD가 닫혀있습니다. \r\n"; } if (_mainFrame.equipment.piLaser.CurrentPiLaserStatus.EnableShutter == false) { message += "Shutter가 닫혀있습니다. \r\n"; } if (_mainFrame.equipment.piLaser.CurrentPiLaserStatus.SetCurrent != _mainFrame.equipment.piLaser.CurrentPiLaserStatus.MaxCurrent) { message += $"Set current가 {_mainFrame.equipment.piLaser.CurrentPiLaserStatus.MaxCurrent}이 아닙니다. \r\n \r\n"; } if (MessageBox.Show(message + "진행 하시겠습니까?", "확인", MessageBoxButtons.YesNo) != DialogResult.Yes) { return; } } EquipmentLogManager.Instance.WriteButtonLog($"{this.Name} : {((Control)sender).Text}"); _mainFrame.equipment.ManualAttenuatorCalStart(); } else { MessageBox.Show("Sequence 대기 중이 아닙니다."); } } private void btn_Stop_Click(object sender, EventArgs e) { if (SA_LTT.Sequence.PmcSteps.AttenuatorCalStart <= _mainFrame.equipment.PmcStep && _mainFrame.equipment.PmcStep <= SA_LTT.Sequence.PmcSteps.AttenuatorCalEnd) { EquipmentLogManager.Instance.WriteButtonLog($"{this.Name} : {((Control)sender).Text}"); _mainFrame.equipment.AttenuatorCalStop(); } else { MessageBox.Show("Attenuator Cal 중이 아닙니다."); } } private void AttenuatorCalViewer_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; this.Hide(); } } }