using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Threading;
|
using System.Windows.Forms;
|
|
namespace SHARP_CLAS_UI.Screen
|
{
|
public partial class Form_Maintenance_Laser : Form
|
{
|
#region Enum
|
enum En_Manual_Measure
|
{
|
S0000_WAIT,
|
|
S1000_MANUAL_POWER_START,
|
S1100_POWER_METER_STATUS_CHECK,
|
S1110_MEASURE_MODE_SET_W,
|
S1120_MEASURE_MODE_SET_CHECK,
|
S1130_ZERO_SET,
|
S1150_STAY_POSITION_MOVE,
|
S1160_POSITION_CHECK,
|
|
S1210_SCANNER_POSITION_X_MOVE,
|
S1220_SCANNER_MOVE_WAIT,
|
S1230_SCANNER_POSITION_Z_MOVE,
|
S1240_SCANNER_MOVE_WAIT,
|
S1300_SCANNER_INIT,
|
S1310_POWER_SET,
|
S1320_LASER_ON,
|
S1330_LASER_ON_CHECK,
|
S1340_POWER_MEASUREMENT_START,
|
S1350_POWER_MEASUREMENT,
|
S1360_POWER_MEASUREMENT_END,
|
S1370_LASER_OFF,
|
S1380_LASER_OFF_CHECK,
|
|
S1999_MANUAL_POWER_END,
|
}
|
#endregion
|
|
#region Field
|
delegate void UI_Update_Delegate();
|
|
Form_Frame _Parent;
|
|
Thread UI_Update_Th;
|
Thread Measurement_Th;
|
|
bool update_check;
|
|
Parameter_Power power;
|
|
En_Manual_Measure Measure_Seq;
|
|
Time_Checker Measurement_Tact = new Time_Checker();
|
Time_Checker Measurement_Check = new Time_Checker();
|
|
Power_Meter power_meter;
|
|
List<double> lst_power = new List<double>();
|
|
double Measure_Time_Sec;
|
double Setting_Power;
|
|
double Last_Power;
|
#endregion
|
public Form_Maintenance_Laser(Form_Frame _Parent)
|
{
|
InitializeComponent();
|
this._Parent = _Parent;
|
power_meter = _Parent._equip.power_meter;
|
|
power = Parameter_Power_Manager.Instance.Get_Power();
|
ThreadInit();
|
}
|
|
#region Function
|
private void ThreadInit()
|
{
|
UI_Update_Th = new Thread(UI_Update_Th_Set);
|
UI_Update_Th.Start();
|
Measurement_Th = new Thread(Measurement_Th_Set);
|
Measurement_Th.Start();
|
}
|
|
private void UI_Update_Th_Set()
|
{
|
while (!this.IsDisposed)
|
{
|
Thread.Sleep(100);
|
|
if (!update_check)
|
{
|
update_check = true;
|
UI_Update();
|
}
|
}
|
}
|
|
private void UI_Update()
|
{
|
if (InvokeRequired)
|
{
|
BeginInvoke(new UI_Update_Delegate(UI_Update));
|
return;
|
}
|
else
|
{
|
try
|
{
|
Update_Setting();
|
Update_UI();
|
}
|
catch (Exception ex)
|
{
|
|
}
|
finally
|
{
|
update_check = false;
|
}
|
}
|
}
|
|
private void Update_Setting()
|
{
|
if (power == null) return;
|
|
Parameter_Power set = Parameter_Power_Manager.Instance.Get_Power();
|
//tb_Get_Taget_Power;
|
//tb_Get_Measurement_Cycle;
|
//tb_Get_Recipe_Margin_of_Error;
|
//tb_Get_Measure_Time;
|
//tb_Get_Target_Setting_Power;
|
//tb_Get_Target_Margin_of_Error;
|
//tb_Get_Power_Revision_Count;
|
//tb_Get_Manual_Taget_Power;
|
//tb_Get_Manual_Measure_Time;
|
|
tb_Get_Taget_Power.Text = power.Target_Power.ToString();
|
tb_Get_Measurement_Cycle.Text = power.Measurement_Cycle_Hour.ToString();
|
tb_Get_Recipe_Margin_of_Error.Text = power.Recipe_Margin_of_Error.ToString();
|
tb_Get_Measure_Time.Text = power.Measurement_Time_Sec.ToString();
|
tb_Get_Target_Setting_Power.Text = power.Target_Setting_Power.ToString();
|
tb_Get_Target_Setting_Frequency.Text = power.Target_Setting_Frequency.ToString();
|
tb_Get_Target_Margin_of_Error.Text = power.Target_Margin_of_Error.ToString();
|
tb_Get_Power_Revision_Count.Text = power.Power_Revision_Count.ToString();
|
|
tb_Get_Taget_Power.BackColor = set.Target_Power == power.Target_Power ? System.Drawing.Color.White : System.Drawing.Color.Red;
|
tb_Get_Measurement_Cycle.BackColor = set.Measurement_Cycle_Hour == power.Measurement_Cycle_Hour ? System.Drawing.Color.White : System.Drawing.Color.Red;
|
tb_Get_Recipe_Margin_of_Error.BackColor = set.Recipe_Margin_of_Error == power.Recipe_Margin_of_Error ? System.Drawing.Color.White : System.Drawing.Color.Red;
|
tb_Get_Measure_Time.BackColor = set.Measurement_Time_Sec == power.Measurement_Time_Sec ? System.Drawing.Color.White : System.Drawing.Color.Red;
|
tb_Get_Target_Setting_Power.BackColor = set.Target_Setting_Power == power.Target_Setting_Power ? System.Drawing.Color.White : System.Drawing.Color.Red;
|
tb_Get_Target_Setting_Frequency.BackColor = set.Target_Setting_Frequency == power.Target_Setting_Frequency ? System.Drawing.Color.White : System.Drawing.Color.Red;
|
tb_Get_Target_Margin_of_Error.BackColor = set.Target_Margin_of_Error == power.Target_Margin_of_Error ? System.Drawing.Color.White : System.Drawing.Color.Red;
|
tb_Get_Power_Revision_Count.BackColor = set.Power_Revision_Count == power.Power_Revision_Count ? System.Drawing.Color.White : System.Drawing.Color.Red;
|
|
}
|
|
private void Update_UI()
|
{
|
btn_Manual_Masure.Enabled = Measure_Seq == En_Manual_Measure.S0000_WAIT ? true : false;
|
lb_Laser_Status.BackColor = _Parent.sm.Get_Bit(Input_Memory_Address.Laser_Active) ? System.Drawing.Color.Lime : System.Drawing.Color.Green;
|
|
object value;
|
|
tb_Measure_Total_Time.Text = Measurement_Tact.Seconds.ToString();
|
|
if (Measure_Time_Sec - Measurement_Check.Seconds < 0)
|
{
|
tb_Measure_Time.Text = "0";
|
}
|
else
|
{
|
tb_Measure_Time.Text = (Measure_Time_Sec - Measurement_Check.Seconds).ToString();
|
}
|
|
if(lst_power.Count > 0)
|
{
|
tb_Power.Text = Last_Power.ToString();
|
tb_Count.Text = lst_power.Count.ToString();
|
tb_Average.Text = lst_power.Average().ToString();
|
tb_Max.Text = lst_power.Max().ToString();
|
tb_Min.Text = lst_power.Min().ToString();
|
}
|
else
|
{
|
tb_Power.Text = Last_Power.ToString();
|
tb_Count.Text = "0";
|
tb_Average.Text = "0";
|
tb_Max.Text = "0";
|
tb_Min.Text = "0";
|
}
|
}
|
|
private void Measurement_Th_Set()
|
{
|
while (!this.IsDisposed)
|
{
|
Thread.Sleep(100);
|
if(Measure_Seq != En_Manual_Measure.S0000_WAIT)
|
{
|
if(!Check_Interlock())
|
{
|
Seq_Manual_Power();
|
}
|
}
|
}
|
}
|
|
private void Seq_Manual_Power()
|
{
|
switch (Measure_Seq)
|
{
|
case En_Manual_Measure.S1000_MANUAL_POWER_START:
|
{
|
lb_Power_Meter_Init.BackColor = System.Drawing.Color.Lime;
|
lb_Position_Move.BackColor = System.Drawing.Color.Green;
|
lb_Scanner_Init.BackColor = System.Drawing.Color.Green;
|
lb_Laser_On.BackColor = System.Drawing.Color.Green;
|
lb_Power_Measure.BackColor = System.Drawing.Color.Green;
|
lb_Laser_Off.BackColor = System.Drawing.Color.Green;
|
lb_Measure_Complete.BackColor = System.Drawing.Color.Green;
|
lb_Laser_Power_Set.BackColor = System.Drawing.Color.Green;
|
Last_Power = 0;
|
lst_power.Clear();
|
Measurement_Tact.Start();
|
Measure_Seq = En_Manual_Measure.S1100_POWER_METER_STATUS_CHECK;
|
break;
|
}
|
case En_Manual_Measure.S1100_POWER_METER_STATUS_CHECK:
|
{
|
if (power_meter.Check_Power_Meter_Status())
|
{
|
Measure_Seq = En_Manual_Measure.S1110_MEASURE_MODE_SET_W;
|
}
|
else
|
{
|
Measure_Seq = En_Manual_Measure.S0000_WAIT;
|
}
|
break;
|
}
|
case En_Manual_Measure.S1110_MEASURE_MODE_SET_W:
|
{
|
power_meter.Set_Measurement_Mode_W();
|
Measure_Seq = En_Manual_Measure.S1120_MEASURE_MODE_SET_CHECK;
|
break;
|
}
|
case En_Manual_Measure.S1120_MEASURE_MODE_SET_CHECK:
|
{
|
if (power_meter.Check_Measurement_Mode_W())
|
{
|
Measure_Seq = En_Manual_Measure.S1130_ZERO_SET;
|
}
|
break;
|
}
|
case En_Manual_Measure.S1130_ZERO_SET:
|
{
|
power_meter.Set_Zero();
|
Measure_Seq = En_Manual_Measure.S1150_STAY_POSITION_MOVE;
|
break;
|
}
|
case En_Manual_Measure.S1150_STAY_POSITION_MOVE:
|
{
|
double position = _Parent._equip.process.ablation.Get_Scanner_Z_A1_Stay_Position();
|
|
if (_Parent._equip.process.ablation.MotorZ.Move_Absolute_Pos(position, 500))
|
{
|
Measure_Seq = En_Manual_Measure.S1160_POSITION_CHECK;
|
}
|
break;
|
}
|
case En_Manual_Measure.S1160_POSITION_CHECK:
|
{
|
double position = _Parent._equip.process.ablation.Get_Scanner_Z_A1_Stay_Position();
|
|
if (_Parent._equip.process.ablation.MotorZ.MotionComplete)
|
{
|
if (_Parent._equip.process.ablation.MotorZ.Is_Inposition(position, _Parent._equip.Setting.Inposition_Offset))
|
{
|
Measure_Seq = En_Manual_Measure.S1210_SCANNER_POSITION_X_MOVE;
|
}
|
else
|
{
|
Measure_Seq = En_Manual_Measure.S1150_STAY_POSITION_MOVE;
|
}
|
}
|
break;
|
}
|
case En_Manual_Measure.S1210_SCANNER_POSITION_X_MOVE:
|
{
|
if (_Parent._equip.process.ablation.Move_X_Power_Meter_Position())
|
{
|
lb_Position_Move.BackColor = System.Drawing.Color.Lime;
|
Measure_Seq = En_Manual_Measure.S1220_SCANNER_MOVE_WAIT;
|
}
|
break;
|
}
|
case En_Manual_Measure.S1220_SCANNER_MOVE_WAIT:
|
{
|
if (_Parent._equip.process.ablation.MotorX.MotionComplete)
|
{
|
if (_Parent._equip.process.ablation.Get_Is_Position_X_Power_Meter())
|
{
|
Measure_Seq = En_Manual_Measure.S1230_SCANNER_POSITION_Z_MOVE;
|
}
|
else
|
{
|
Measure_Seq = En_Manual_Measure.S1210_SCANNER_POSITION_X_MOVE;
|
}
|
}
|
break;
|
}
|
case En_Manual_Measure.S1230_SCANNER_POSITION_Z_MOVE:
|
{
|
if (_Parent._equip.process.ablation.Move_X_Power_Meter_Position())
|
{
|
Measure_Seq = En_Manual_Measure.S1240_SCANNER_MOVE_WAIT;
|
}
|
break;
|
}
|
case En_Manual_Measure.S1240_SCANNER_MOVE_WAIT:
|
{
|
if (_Parent._equip.process.ablation.MotorZ.MotionComplete)
|
{
|
if (_Parent._equip.process.ablation.Get_Is_Position_Z_Power_Meter())
|
{
|
Measure_Seq = En_Manual_Measure.S1300_SCANNER_INIT;
|
}
|
else
|
{
|
Measure_Seq = En_Manual_Measure.S1230_SCANNER_POSITION_Z_MOVE;
|
}
|
}
|
break;
|
}
|
case En_Manual_Measure.S1300_SCANNER_INIT:
|
{
|
if (_Parent._equip.Cur_Main_Recipe.process_info == null) return;
|
|
lb_Scanner_Init.BackColor = System.Drawing.Color.Lime;
|
|
if (_Parent._equip.scanner.Initialize(_Parent._equip.Cur_Main_Recipe.process_info.CTB_File_Path))
|
{
|
lb_Laser_Power_Set.BackColor = System.Drawing.Color.Lime;
|
Measure_Seq = En_Manual_Measure.S1310_POWER_SET;
|
}
|
else
|
{
|
//Interlock.
|
}
|
break;
|
}
|
case En_Manual_Measure.S1310_POWER_SET:
|
{
|
int frequency = _Parent._equip.Power_Parameter.Target_Setting_Frequency;
|
double power = Setting_Power;
|
|
if (_Parent._equip.scanner.Set_Power(frequency, power))
|
{
|
Measure_Seq = En_Manual_Measure.S1320_LASER_ON;
|
}
|
break;
|
}
|
case En_Manual_Measure.S1320_LASER_ON:
|
{
|
if (_Parent._equip.scanner.Set_Laser_On())
|
{
|
lb_Laser_On.BackColor = System.Drawing.Color.Lime;
|
Measure_Seq = En_Manual_Measure.S1330_LASER_ON_CHECK;
|
}
|
break;
|
}
|
case En_Manual_Measure.S1330_LASER_ON_CHECK:
|
{
|
if (_Parent._equip.sm.Get_Bit(Input_Memory_Address.Laser_Active))
|
{
|
Measurement_Check.Start();
|
Measure_Seq = En_Manual_Measure.S1340_POWER_MEASUREMENT_START;
|
}
|
break;
|
}
|
case En_Manual_Measure.S1340_POWER_MEASUREMENT_START:
|
{
|
if (Measurement_Check.Seconds < 5) return;
|
|
Measurement_Check.Start();
|
lb_Power_Measure.BackColor = System.Drawing.Color.Lime;
|
Measure_Seq = En_Manual_Measure.S1350_POWER_MEASUREMENT;
|
break;
|
}
|
case En_Manual_Measure.S1350_POWER_MEASUREMENT:
|
{
|
if (Measurement_Check.Seconds < Measure_Time_Sec)
|
{
|
Last_Power = power_meter.Read_Power();
|
lst_power.Add(Last_Power);
|
}
|
else
|
{
|
Measure_Seq = En_Manual_Measure.S1360_POWER_MEASUREMENT_END;
|
}
|
break;
|
}
|
case En_Manual_Measure.S1360_POWER_MEASUREMENT_END:
|
{
|
if(lst_power.Count == 0)
|
{
|
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0942_POWER_COUNT_IS_EMPTY);
|
}
|
|
Measurement_Check.Stop();
|
Measure_Seq = En_Manual_Measure.S1370_LASER_OFF;
|
break;
|
}
|
case En_Manual_Measure.S1370_LASER_OFF:
|
{
|
if (_Parent._equip.scanner.Set_Laser_Off())
|
{
|
lb_Laser_Off.BackColor = System.Drawing.Color.Lime;
|
Measure_Seq = En_Manual_Measure.S1380_LASER_OFF_CHECK;
|
}
|
break;
|
}
|
case En_Manual_Measure.S1380_LASER_OFF_CHECK:
|
{
|
if (!_Parent._equip.sm.Get_Bit(Input_Memory_Address.Laser_Active))
|
{
|
Measure_Seq = En_Manual_Measure.S1999_MANUAL_POWER_END;
|
}
|
break;
|
}
|
case En_Manual_Measure.S1999_MANUAL_POWER_END:
|
{
|
lb_Measure_Complete.BackColor = System.Drawing.Color.Lime;
|
Measurement_Tact.Stop();
|
Measure_Seq = En_Manual_Measure.S0000_WAIT;
|
break;
|
}
|
}
|
}
|
|
private bool Check_Interlock()
|
{
|
if (Measure_Seq < En_Manual_Measure.S1360_POWER_MEASUREMENT_END)
|
{
|
if (!power_meter.isOpen)
|
{
|
Measure_Seq = En_Manual_Measure.S1360_POWER_MEASUREMENT_END;
|
return true;
|
}
|
}
|
|
return false;
|
}
|
#endregion
|
|
private void btn_Set_Power_Click(object sender, EventArgs e)
|
{
|
double double_data = 0;
|
int int_data = 0;
|
|
if (btn_Set_Taget_Power == (Button)sender)
|
{
|
if(double.TryParse(tb_Set_Taget_Power.Text, out double_data))
|
{
|
power.Target_Power = double_data;
|
}
|
}
|
else if(btn_Set_Target_Setting_Frequency == (Button)sender)
|
{
|
if(int.TryParse(tb_Set_Target_Setting_Frequency.Text, out int_data))
|
{
|
power.Target_Setting_Frequency = int_data;
|
}
|
}
|
else if (btn_Set_Measurement_Cycle == (Button)sender)
|
{
|
if (int.TryParse(tb_Set_Measurement_Cycle.Text, out int_data))
|
{
|
power.Measurement_Cycle_Hour = int_data;
|
}
|
}
|
else if (btn_Set_Recipe_Margin_of_Error == (Button)sender)
|
{
|
if (double.TryParse(tb_Set_Recipe_Margin_of_Error.Text, out double_data))
|
{
|
power.Recipe_Margin_of_Error = double_data;
|
}
|
}
|
else if (btn_Set_Measure_Time == (Button)sender)
|
{
|
if (double.TryParse(tb_Set_Measure_Time.Text, out double_data))
|
{
|
power.Measurement_Time_Sec = double_data;
|
}
|
}
|
else if (btn_Set_Target_Setting_Power == (Button)sender)
|
{
|
if (double.TryParse(tb_Set_Target_Setting_Power.Text, out double_data))
|
{
|
power.Target_Setting_Power = double_data;
|
}
|
}
|
else if (btn_Set_Target_Margin_of_Error == (Button)sender)
|
{
|
if (double.TryParse(tb_Set_Target_Margin_of_Error.Text, out double_data))
|
{
|
power.Target_Margin_of_Error = double_data;
|
}
|
}
|
else if (btn_Set_Power_Revision_Count == (Button)sender)
|
{
|
if (int.TryParse(tb_Set_Power_Revision_Count.Text, out int_data))
|
{
|
power.Power_Revision_Count = int_data;
|
}
|
}
|
else if (btn_Set_Manual_Setting_Power == (Button)sender)
|
{
|
if (double.TryParse(tb_Set_Manual_Setting_Power.Text, out double_data))
|
{
|
if(double_data < 0)
|
{
|
double_data = 0;
|
}
|
|
tb_Get_Manual_Setting_Power.Text = double_data.ToString();
|
Setting_Power = double_data;
|
|
}
|
}
|
else if (btn_Set_Manual_Measure_Time == (Button)sender)
|
{
|
if (double.TryParse(tb_Set_Manual_Measure_Time.Text, out double_data))
|
{
|
if(double_data < 0)
|
{
|
double_data = 0;
|
}
|
|
tb_Get_Manual_Measure_Time.Text = double_data.ToString();
|
Measure_Time_Sec = double_data;
|
}
|
}
|
}
|
|
private void btn_Save_Click(object sender, EventArgs e)
|
{
|
Parameter_Power_Manager.Instance.Save_Parameter_Power(power);
|
}
|
|
private void btn_Reset_Click(object sender, EventArgs e)
|
{
|
power = Parameter_Power_Manager.Instance.Get_Power();
|
}
|
|
private void btn_Manual_Masure_Click(object sender, EventArgs e)
|
{
|
if (_Parent._equip.equip_mode == En_Equipment_Mode.Auto || _Parent._equip.equip_mode == En_Equipment_Mode.Home)
|
{
|
return;
|
}
|
|
if (Measure_Seq == En_Manual_Measure.S0000_WAIT)
|
{
|
Measure_Seq = En_Manual_Measure.S1000_MANUAL_POWER_START;
|
}
|
}
|
|
private void btn_Manual_Stop_Click(object sender, EventArgs e)
|
{
|
Measure_Seq = En_Manual_Measure.S1360_POWER_MEASUREMENT_END;
|
}
|
|
private void btn_Laser_Off_Click(object sender, EventArgs e)
|
{
|
_Parent._equip.scanner.Set_Laser_Off();
|
}
|
|
private void btn_HandShakeOn_Click(object sender, EventArgs e)
|
{
|
_Parent._equip.power_meter.HandShakingOn();
|
}
|
}
|
}
|