using SA_LTT; using SA_LTT.Module; 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; using System.Windows.Forms.DataVisualization.Charting; namespace SA_LTT_UI.Viewer { public partial class EnergyDropCheckViewer : Form { MainFrame _mainFrame; Thread t_UIUpdate; bool updateCheck; protected override CreateParams CreateParams { get { CreateParams MyCp = base.CreateParams; MyCp.ExStyle |= 0x02000000; return MyCp; } } public EnergyDropCheckViewer(MainFrame mainFrame) { InitializeComponent(); _mainFrame = mainFrame; InitializeChart(); _mainFrame.equipment.powerMeter.EnergyMeasured += PowerMeter_EnergyMeasured; t_UIUpdate = new Thread(UIUpdateTh); t_UIUpdate.Start(); } private void PowerMeter_EnergyMeasured(double energy) { if (_mainFrame.equipment.IsEnergyDropCheckRun == false) return; if (_mainFrame.equipment.PmcStep != Sequence.PmcSteps.EdcMeasurement) return; if (InvokeRequired) { BeginInvoke(new EnergyMeasuredEvent(PowerMeter_EnergyMeasured), energy); } else { Series Se_MeasurementPower = chart_EnergyMeasure.Series.FindByName("MeasurementPower"); int i = Se_MeasurementPower.Points.Count; double[] points = _mainFrame.equipment.powerMeter.MeasurementsEnergyPerUnitArea.ToArray(); for (; i < points.Length; i++) { double point = points[i]; if (point > chart_EnergyMeasure.ChartAreas[0].AxisY.Maximum) chart_EnergyMeasure.ChartAreas[0].AxisY.Maximum = point + (point * 0.1); if (point < chart_EnergyMeasure.ChartAreas[0].AxisY.Minimum) chart_EnergyMeasure.ChartAreas[0].AxisY.Minimum = point - (point * 0.1); Se_MeasurementPower.Points.AddXY(i, point); } tb_Count.Text = $"{Se_MeasurementPower.Points.Count}"; tb_Power.Text = $"{energy:F4}"; tb_Average.Text = $"{_mainFrame.equipment.powerMeter.MeasurementAverageEnergyPerUnitArea:F4}"; tb_Max.Text = $"{_mainFrame.equipment.powerMeter.MeasurementMaxEnergyPerUnitArea:F4}"; tb_Min.Text = $"{_mainFrame.equipment.powerMeter.MeasurementMinEnergyPerUnitArea:F4}"; } } private void InitializeChart() { chart_EnergyMeasure.Series.Clear(); chart_EnergyMeasure.ChartAreas[0].AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount; chart_EnergyMeasure.ChartAreas[0].AxisY.MajorGrid.Enabled = false; chart_EnergyMeasure.ChartAreas[0].AxisY.Maximum = -1; chart_EnergyMeasure.ChartAreas[0].AxisY.Minimum = 99; Series Se_LeakBeamPower = chart_EnergyMeasure.Series.Add("MeasurementPower"); Se_LeakBeamPower.ChartType = SeriesChartType.Line; Se_LeakBeamPower.Color = Color.LightGreen; Se_LeakBeamPower.MarkerSize = 1; } 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.EnergyDropCheckDate.ToString("yyyy-MM-dd HH:mm:ss"); DateTime energyDropCheckDateTime = _mainFrame.equipment.equipmentInfo.EnergyDropCheckDate.AddHours(_mainFrame.equipment.settingParameterManager.SettingParameter.EnergyDropCheckCycle); TimeSpan energyDropCheckDTime = (energyDropCheckDateTime - DateTime.Now); if (energyDropCheckDTime.TotalHours < 0) { tb_CalDTime.Text = $"-{-energyDropCheckDTime.Days} {-energyDropCheckDTime.Hours}:{-energyDropCheckDTime.Minutes}:{-energyDropCheckDTime.Seconds}"; } else { tb_CalDTime.Text = $"{energyDropCheckDTime.Days} {energyDropCheckDTime.Hours}:{energyDropCheckDTime.Minutes}:{energyDropCheckDTime.Seconds}"; } double rangeValue = _mainFrame.equipment.settingParameterManager.SettingParameter.EnergyDropCheckTargetEnergy * _mainFrame.equipment.settingParameterManager.SettingParameter.EnergyDropCheckErrorOccuredRange / 100; tb_TargetEnergyMax.Text = (_mainFrame.equipment.settingParameterManager.SettingParameter.EnergyDropCheckTargetEnergy + rangeValue).ToString("F4"); tb_TargetEnergyMin.Text = (_mainFrame.equipment.settingParameterManager.SettingParameter.EnergyDropCheckTargetEnergy - rangeValue).ToString("F4"); tb_TargetAngle.Text = _mainFrame.equipment.settingParameterManager.SettingParameter.EnergyDropCheckTargetAngle.ToString("F3"); UpdateSteps(); } catch (Exception e) { EquipmentLogManager.Instance.WriteExceptionLog(e.StackTrace); } finally { updateCheck = false; } } } private void UpdateSteps() { if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.EnergyDropCheckStart) { lb_PowerMeterInitialize.BackColor = Color.Green; lb_CenterPositionMove.BackColor = Color.Green; lb_PowerMeterPositionMove.BackColor = Color.Green; lb_AttenuatorSet.BackColor = Color.Green; lb_LaserOn.BackColor = Color.Green; lb_PowerMeasure.BackColor = Color.Green; lb_LaserOff.BackColor = Color.Green; lb_Complete.BackColor = Color.Green; } else if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.EdcPowerMeterInitialize) { lb_PowerMeterInitialize.BackColor = Color.Lime; lb_CenterPositionMove.BackColor = Color.Green; lb_PowerMeterPositionMove.BackColor = Color.Green; lb_AttenuatorSet.BackColor = Color.Green; lb_LaserOn.BackColor = Color.Green; lb_PowerMeasure.BackColor = Color.Green; lb_LaserOff.BackColor = Color.Green; lb_Complete.BackColor = Color.Green; InitializeChart(); } else if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.EdcMovePowerMeterPosition) { lb_PowerMeterInitialize.BackColor = Color.Lime; lb_CenterPositionMove.BackColor = Color.Lime; lb_PowerMeterPositionMove.BackColor = Color.Green; lb_AttenuatorSet.BackColor = Color.Green; lb_LaserOn.BackColor = Color.Green; lb_PowerMeasure.BackColor = Color.Green; lb_LaserOff.BackColor = Color.Green; lb_Complete.BackColor = Color.Green; } else if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.EdcAttenuatorSet) { lb_PowerMeterInitialize.BackColor = Color.Lime; lb_CenterPositionMove.BackColor = Color.Lime; lb_PowerMeterPositionMove.BackColor = Color.Lime; lb_AttenuatorSet.BackColor = Color.Green; lb_LaserOn.BackColor = Color.Green; lb_PowerMeasure.BackColor = Color.Green; lb_LaserOff.BackColor = Color.Green; lb_Complete.BackColor = Color.Green; } else if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.EdcLaserOn) { lb_PowerMeterInitialize.BackColor = Color.Lime; lb_CenterPositionMove.BackColor = Color.Lime; lb_PowerMeterPositionMove.BackColor = Color.Lime; lb_AttenuatorSet.BackColor = Color.Lime; lb_LaserOn.BackColor = Color.Green; lb_PowerMeasure.BackColor = Color.Green; lb_LaserOff.BackColor = Color.Green; lb_Complete.BackColor = Color.Green; } else if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.EdcMeasurementStart) { 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.Green; lb_Complete.BackColor = Color.Green; } else if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.EdcLaserOff) { 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.Green; } else if (_mainFrame.equipment.PmcStep <= Sequence.PmcSteps.EnergyDropCheckEnd) { 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 btn_Close_Click(object sender, EventArgs e) { 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.ManualEnergyDropCheckStart(); } else { MessageBox.Show("Sequence 대기 중이 아닙니다."); } } private void btn_Stop_Click(object sender, EventArgs e) { if (SA_LTT.Sequence.PmcSteps.EnergyDropCheckStart <= _mainFrame.equipment.PmcStep && _mainFrame.equipment.PmcStep <= SA_LTT.Sequence.PmcSteps.EnergyDropCheckEnd) { EquipmentLogManager.Instance.WriteButtonLog($"{this.Name} : {((Control)sender).Text}"); _mainFrame.equipment.EnergyDropCheckStop(); } else { MessageBox.Show("Energy drop check 중이 아닙니다."); } } private void EnergyDropCheckViewer_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; this.Hide(); } } }