using DIT.SharedMemory;
using System;
using System.Threading;
//210924 hslee
using System.IO;
using System.Text;
using log4net;
using log4net.Appender;
using log4net.Layout;
using log4net.Repository.Hierarchy;
using System.Collections.Generic;
namespace SHARP_CLAS_UI
{
public class Equipment : IDisposable
{
#region Enum
#endregion
#region Define
public static string Registry_Path = @"SOFTWARE\SHARP_CLAS";
private static object _objLock = new object(); //210923 hslee
///
/// Exception Log
///
private ILog Exception_Log = LogManager.GetLogger("Exception");
///
/// Exception Log Write
///
/// Method name of exception that occurred
/// exception
public void Write_Exception_Log(string message)
{
if (Exception_Log != null) Exception_Log.Debug($"{message}");
}
///
/// Panel Info Log
///
private ILog Panel_Info_Log = LogManager.GetLogger("Panel_Info");
///
/// Exception Log Write
///
/// Method name of exception that occurred
/// exception
public void Write_Panel_Info_Log(string message)
{
if (Panel_Info_Log != null) Panel_Info_Log.Debug($"{message}");
}
///
/// Tact Time Log
///
private ILog Tact_Time_Log = LogManager.GetLogger("Tact_Time");
///
/// Tact Time Log Write
///
/// Method name of exception that occurred
/// exception
public void Write_Tact_Time_Log(string message)
{
if (Tact_Time_Log != null) Tact_Time_Log.Debug($"{message}");
}
///
/// Tact Time Log
///
private ILog Scanner_Log = LogManager.GetLogger("Scanner");
///
/// Tact Time Log Write
///
/// Method name of exception that occurred
/// exception
public void Write_Scanner_Log(string message)
{
if (Scanner_Log != null) Scanner_Log.Debug($"{message}");
}
///
/// Panel Count Log
///
private ILog Panel_Count_Log = LogManager.GetLogger("Panel_Count");
///
/// Panel Count Log Write
///
/// Method name of exception that occurred
/// exception
public void Write_Panel_Count_Log(string message)
{
if (Panel_Count_Log != null) Panel_Count_Log.Debug($"{message}");
}
#endregion
#region Logger
///
/// Create excepton logger
///
private void Create_Exception_logger()
{
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
RollingFileAppender rollingAppender = new RollingFileAppender();
PatternLayout layout = new PatternLayout();
hierarchy.Configured = true;
rollingAppender.Name = "Exception_RoolingFile";
rollingAppender.LockingModel = new RollingFileAppender.MinimalLock();
rollingAppender.File = $@"D:\Logger\Exception\";
rollingAppender.AppendToFile = true;
rollingAppender.DatePattern = "yyyy\\\\MM\\\\'Exception'_dd'.log'";
rollingAppender.RollingStyle = RollingFileAppender.RollingMode.Composite;
rollingAppender.MaxSizeRollBackups = 10;
rollingAppender.MaximumFileSize = "100MB";
rollingAppender.StaticLogFileName = false;
rollingAppender.Encoding = Encoding.UTF8;
rollingAppender.PreserveLogFileNameExtension = true;
layout = new PatternLayout("%d{yyyy/MM/dd HH:mm:ss.fff}, %m%n");
layout.ActivateOptions();
rollingAppender.Layout = layout;
rollingAppender.ActivateOptions();
hierarchy.GetLogger("Exception");
ILog log = LogManager.GetLogger("Exception");
Logger l = (Logger)log.Logger;
l.Level = log4net.Core.Level.Debug;
l.AddAppender(rollingAppender);
Exception_Log = LogManager.GetLogger("Exception");
}
///
/// Create panel info logger
///
private void Create_Panel_Info_logger()
{
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
RollingFileAppender rollingAppender = new RollingFileAppender();
PatternLayout layout = new PatternLayout();
hierarchy.Configured = true;
rollingAppender.Name = "Panel_Info_RoolingFile";
rollingAppender.LockingModel = new RollingFileAppender.MinimalLock();
rollingAppender.File = $@"D:\Logger\Panel_Info\";
rollingAppender.AppendToFile = true;
rollingAppender.DatePattern = "yyyy\\\\MM\\\\'Panel_Info'_dd'.csv'";
rollingAppender.RollingStyle = RollingFileAppender.RollingMode.Composite;
rollingAppender.MaxSizeRollBackups = 10;
rollingAppender.MaximumFileSize = "100MB";
rollingAppender.StaticLogFileName = false;
rollingAppender.Encoding = Encoding.UTF8;
rollingAppender.PreserveLogFileNameExtension = true;
layout = new PatternLayout("%d{yyyy/MM/dd HH:mm:ss.fff}, %m%n");
layout.ActivateOptions();
rollingAppender.Layout = layout;
rollingAppender.ActivateOptions();
hierarchy.GetLogger("Panel_Info");
ILog log = LogManager.GetLogger("Panel_Info");
Logger l = (Logger)log.Logger;
l.Level = log4net.Core.Level.Debug;
l.AddAppender(rollingAppender);
Panel_Info_Log = LogManager.GetLogger("Panel_Info");
}
///
/// Create tact time logger
///
private void Create_Tact_Time_logger()
{
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
RollingFileAppender rollingAppender = new RollingFileAppender();
PatternLayout layout = new PatternLayout();
hierarchy.Configured = true;
rollingAppender.Name = "Tact_Time_RoolingFile";
rollingAppender.LockingModel = new RollingFileAppender.MinimalLock();
rollingAppender.File = $@"D:\Logger\Tact_Time\";
rollingAppender.AppendToFile = true;
rollingAppender.DatePattern = "yyyy\\\\MM\\\\'Tact_Time'_dd'.csv'";
rollingAppender.RollingStyle = RollingFileAppender.RollingMode.Composite;
rollingAppender.MaxSizeRollBackups = 10;
rollingAppender.MaximumFileSize = "100MB";
rollingAppender.StaticLogFileName = false;
rollingAppender.Encoding = Encoding.UTF8;
rollingAppender.PreserveLogFileNameExtension = true;
layout = new PatternLayout("%d{yyyy/MM/dd}, %d{HH:mm:ss.fff}, %m%n");
layout.ActivateOptions();
rollingAppender.Layout = layout;
rollingAppender.ActivateOptions();
hierarchy.GetLogger("Tact_Time");
ILog log = LogManager.GetLogger("Tact_Time");
Logger l = (Logger)log.Logger;
l.Level = log4net.Core.Level.Debug;
l.AddAppender(rollingAppender);
Tact_Time_Log = LogManager.GetLogger("Tact_Time");
}
///
/// Create Scanner logger
///
private void Create_Scanner_logger()
{
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
RollingFileAppender rollingAppender = new RollingFileAppender();
PatternLayout layout = new PatternLayout();
hierarchy.Configured = true;
rollingAppender.Name = "Scanner_RoolingFile";
rollingAppender.LockingModel = new RollingFileAppender.MinimalLock();
rollingAppender.File = $@"D:\Logger\Scanner\";
rollingAppender.AppendToFile = true;
rollingAppender.DatePattern = "yyyy\\\\MM\\\\'Scanner'_dd'.csv'";
rollingAppender.RollingStyle = RollingFileAppender.RollingMode.Composite;
rollingAppender.MaxSizeRollBackups = 10;
rollingAppender.MaximumFileSize = "100MB";
rollingAppender.StaticLogFileName = false;
rollingAppender.Encoding = Encoding.UTF8;
rollingAppender.PreserveLogFileNameExtension = true;
layout = new PatternLayout("%d{yyyy/MM/dd}, %d{HH:mm:ss.fff}, %m%n");
layout.ActivateOptions();
rollingAppender.Layout = layout;
rollingAppender.ActivateOptions();
hierarchy.GetLogger("Scanner");
ILog log = LogManager.GetLogger("Scanner");
Logger l = (Logger)log.Logger;
l.Level = log4net.Core.Level.Debug;
l.AddAppender(rollingAppender);
Scanner_Log = LogManager.GetLogger("Scanner");
}
///
/// Create Panel Count logger
///
private void Create_panel_count_logger()
{
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
RollingFileAppender rollingAppender = new RollingFileAppender();
PatternLayout layout = new PatternLayout();
hierarchy.Configured = true;
rollingAppender.Name = "Panel_count_RoolingFile";
rollingAppender.LockingModel = new RollingFileAppender.MinimalLock();
rollingAppender.File = $@"D:\Logger\Panel_Count\";
rollingAppender.AppendToFile = true;
rollingAppender.DatePattern = "yyyy\\\\MM\\\\'Panel_count'_dd'.csv'";
rollingAppender.RollingStyle = RollingFileAppender.RollingMode.Composite;
rollingAppender.MaxSizeRollBackups = 10;
rollingAppender.MaximumFileSize = "100MB";
rollingAppender.StaticLogFileName = false;
rollingAppender.Encoding = Encoding.UTF8;
rollingAppender.PreserveLogFileNameExtension = true;
layout = new PatternLayout("%d{yyyy/MM/dd}, %d{HH:mm:ss.fff}, %m%n");
layout.ActivateOptions();
rollingAppender.Layout = layout;
rollingAppender.ActivateOptions();
hierarchy.GetLogger("Panel_Count");
ILog log = LogManager.GetLogger("Panel_Count");
Logger l = (Logger)log.Logger;
l.Level = log4net.Core.Level.Debug;
l.AddAppender(rollingAppender);
Panel_Count_Log = LogManager.GetLogger("Panel_Count");
}
#endregion
#region Property
public int LoaderOutTrayCount
{
get
{
int trayCount;
object value;
sm.Get_Value(Process_Memory_Address.LD_Tray_Empty_Count, out value);
int.TryParse($"{value}", out trayCount);
return trayCount;
}
set
{
sm.Set_Value(Process_Memory_Address.LD_Tray_Empty_Count, value);
}
}
public int LoaderInTrayCount
{
get
{
int trayCount;
object value;
sm.Get_Value(Process_Memory_Address.LD_Tray_In_Count, out value);
int.TryParse($"{value}", out trayCount);
return trayCount;
}
set
{
sm.Set_Value(Process_Memory_Address.LD_Tray_In_Count, value);
}
}
public int UnloaderInTrayCount
{
get
{
int trayCount;
object value;
sm.Get_Value(Process_Memory_Address.ULD_Tray_Empty_Count, out value);
int.TryParse($"{value}", out trayCount);
return trayCount;
}
set
{
sm.Set_Value(Process_Memory_Address.ULD_Tray_Empty_Count, value);
}
}
public int UnloaderOkTrayCount
{
get
{
int trayCount;
object value;
sm.Get_Value(Process_Memory_Address.ULD_Tray_Ok_Count, out value);
int.TryParse($"{value}", out trayCount);
return trayCount;
}
set
{
sm.Set_Value(Process_Memory_Address.ULD_Tray_Ok_Count, value);
}
}
public int UnloaderNgTrayCount
{
get
{
int trayCount;
object value;
sm.Get_Value(Process_Memory_Address.ULD_Tray_Ng_Count, out value);
int.TryParse($"{value}", out trayCount);
return trayCount;
}
set
{
sm.Set_Value(Process_Memory_Address.ULD_Tray_Ng_Count, value);
}
}
public int WidthMeasurementCount
{
get
{
int count;
object value;
sm.Get_Value(Process_Memory_Address.Width_Measurement_Count, out value);
int.TryParse($"{value}", out count);
return count;
}
set
{
sm.Set_Value(Process_Memory_Address.Width_Measurement_Count, value);
}
}
public Main_Recipe Cur_Main_Recipe
{
get
{
object value;
if (sm.Get_Value(Process_Memory_Address.Main_Recipe_Name, out value))
{
return Main_Recipe_Manager.Instance.Get_Recipe(value.ToString());
}
else
{
return null;
}
}
}
public Parameter_Mode Mode
{
get
{
return Parameter_System_Manager.Instance.Get_Mode();
}
}
public Parameter_Setting Setting
{
get
{
return Parameter_System_Manager.Instance.Get_Setting();
}
}
public Parameter_Power Power_Parameter
{
get
{
return Parameter_Power_Manager.Instance.Get_Power();
}
}
public Equipment_Info equipment_info
{
get
{
return Equipment_Info_Manager.Instance.Get_Info();
}
}
public Panel_Count_Info panel_count_info
{
get
{
if(_panelCountInfo == null)
{
_panelCountInfo = Panel_Count_Info_Manager.Instance.Get_Panel_Count();
}
return _panelCountInfo;
}
}
public En_Film_Judge_Mode Film_Judge_Mode
{
get
{
return Mode.Film_Judge_Mode ? En_Film_Judge_Mode.Pre_Align : En_Film_Judge_Mode.Tray_In;
}
}
public bool LD_Stop { get; set; }
public bool Door_Opened
{
get
{
return sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_1) ||
sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_2) ||
sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_3) ||
sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_4) ||
sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_5) ||
sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_6) ||
sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_7) ||
sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_8) ||
sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_9) ||
sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_10);
}
}
public bool Auto_Mode
{
get
{
return sm.Get_Bit(Input_Memory_Address.Safety_Mode_SW_Auto);
}
}
public bool Teach_Mode
{
get
{
return sm.Get_Bit(Input_Memory_Address.Safety_Mode_SW_Teach);
}
}
public bool CleaningMode
{
get
{
return _cleaningMode;
}
}
public User_Info User
{
get
{
return _user;
}
set
{
_user = value.Clone();
}
}
#endregion
#region Field
public En_Equipment_Mode equip_mode { get; private set; }
public En_Equipment_Status_Code equip_status_code { get; private set; }
public En_Equipment_Status equip_status { get; private set; }
public En_Cim_Mode cim_mode { get; set; }
public bool IsDisposed { get; private set; }
public SharedMemory sm;
public Sharp_Board_Control Board_Control;
public BCR_Module LD_Tray_BCR;
public BCR_Module Cell_ID_Left_BCR;
public BCR_Module Cell_ID_Right_BCR;
public BCR_Module ULD_Tray_BCR;
public Power_Meter power_meter;
public Scanner scanner;
public CIM_Server cim_server;
public CIM_Client cim_client;
public Client_Align Align_vision;
public Client_AOI Aoi_vision;
public Sequence_Loader loader;
public Sequence_Before before;
public Sequence_Process process;
public Sequence_After after;
public Sequence_Unloader unloader;
private Thread Data_Update_Th;
private Thread Interlock_Check_Th;
private Thread Status_Update_Th;
private Thread Seq_Logic_Th;
private Thread Tower_Lamp_Th;
private Thread Auto_Plasma_Set;
private Thread Auto_Ion_Set;
private Thread Auto_Laser_Set;
private List units;
private bool _loaderResetButtonPush;
private bool _unloaderResetButtonPush;
private bool _keySwitchMode;
private bool _cleaningMode;
public bool Auto_Power_Bit;
private Panel_Count_Info _panelCountInfo;
private User_Info _user;
private SequenceTimer _modeChangeTime = new SequenceTimer();
private string _programVersion = "001.002.000";
#endregion
#region Construct
public Equipment()
{
IsDisposed = false;
sm = new SharedMemory("SHARP_CLAS", 10000, true);
sm.Open();
_user = new User_Info();
power_meter = new Power_Meter(this, "COM3");
power_meter.Open();
power_meter.HandShakingOn();
Create_Exception_logger();
Create_Panel_Info_logger();
Create_Tact_Time_logger();
Create_Scanner_logger();
Create_panel_count_logger();
_loaderResetButtonPush = false;
_unloaderResetButtonPush = false;
equip_mode = En_Equipment_Mode.Pause;
equip_status_code = En_Equipment_Status_Code.P1;
cim_mode = En_Cim_Mode.Offline;
Board_Control = new Sharp_Board_Control(this);
LD_Tray_BCR = new BCR_Module("126.100.100.101");
Cell_ID_Left_BCR = new BCR_Module("126.100.100.102");
Cell_ID_Right_BCR = new BCR_Module("126.100.100.103");
ULD_Tray_BCR = new BCR_Module("126.100.100.104");
scanner = new Scanner(this);
cim_server = new CIM_Server(this);
cim_server.Open();
cim_client = new CIM_Client(this);
Align_vision = new Client_Align(this, "126.100.100.11", 8119);
Aoi_vision = new Client_AOI(this, "126.100.100.12", 8119);
Align_vision.Connect();
Aoi_vision.Connect();
Unit_Init();
Write_Exception_Log("Program Start !");
_keySwitchMode = Board_Control.IO_manager.Get_Input(InputData.Safety_Mode_SW_Auto);
if(Cur_Main_Recipe != null)
{
if(Cur_Main_Recipe.process_info != null)
{
if(Cur_Main_Recipe.process_info.CTB_File_Path != null)
{
scanner.Initialize(Cur_Main_Recipe.process_info.CTB_File_Path);
}
}
}
_modeChangeTime.Start();
//210923 HSLEE
LoadTempGlassOutCnt();
Auto_Plasma_Set = new Thread(() => Set_Auto_Plasma());
Auto_Ion_Set = new Thread(() => Set_Auto_Ion());
Auto_Laser_Set = new Thread(() => Set_Auto_Laser());
Equipment_Info equip_info = equipment_info;
equip_info.Program_Version = _programVersion;
Equipment_Info_Manager.Instance.Save_Equipment_Info(equip_info);
Thread_Init();
Thread_Start();
}
#endregion
#region Base_Function
private void Unit_Init()
{
units = new List();
units.Clear();
loader = new Sequence_Loader(this);
before = new Sequence_Before(this);
process = new Sequence_Process(this);
after = new Sequence_After(this);
unloader = new Sequence_Unloader(this);
units.Add(loader.ConveyorIn);
units.Add(loader.LiftIn);
units.Add(loader.ConveyorOut);
units.Add(loader.LiftOut);
units.Add(loader.TrayTransfer);
units.Add(loader.Handler1);
units.Add(before.ReverseStage);
units.Add(before.PreAlignStage);
units.Add(before.Handler2);
units.Add(process.ablation_stage_1);
units.Add(process.ablation_stage_2);
units.Add(process.fine_align);
units.Add(process.ablation);
units.Add(process.plasma);
units.Add(after.Handler2);
units.Add(after.ReverseStage);
units.Add(after.AoiStage);
units.Add(unloader.Handler1);
units.Add(unloader.LiftIn);
units.Add(unloader.LiftOk);
units.Add(unloader.LiftNg);
units.Add(unloader.ConveyorIn);
units.Add(unloader.ConveyorOut);
units.Add(unloader.TrayTransfer);
}
private void Thread_Init()
{
Data_Update_Th = new Thread(Data_Update_Th_Set);
Seq_Logic_Th = new Thread(Seq_Logic_Th_Set);
Status_Update_Th = new Thread(Status_Update_Th_Set);
Interlock_Check_Th = new Thread(Interlock_Check_Th_Set);
Tower_Lamp_Th = new Thread(TowerLamp_Th_Set);
}
private void Thread_Start()
{
Data_Update_Th.Start();
Seq_Logic_Th.Start();
Status_Update_Th.Start();
Interlock_Check_Th.Start();
Tower_Lamp_Th.Start();
}
public void Dispose()
{
IsDisposed = true;
Board_Control.Dispose();
Align_vision.Dispose();
Aoi_vision.Dispose();
cim_client.Dispose();
cim_server.Close();
sm.Close();
}
#endregion
#region Thread_Function
private void Data_Update_Th_Set()
{
while (!IsDisposed)
{
Thread.Sleep(50);
DateTime dt = DateTime.Now;
Data_Update();
TimeSpan ts = (DateTime.Now - dt);
}
}
private void Data_Update()
{
try
{
if(_loaderResetButtonPush != sm.Get_Bit(Input_Memory_Address.LD_Muting_Reset_PUSH_BUTTON))
{
_loaderResetButtonPush = sm.Get_Bit(Input_Memory_Address.LD_Muting_Reset_PUSH_BUTTON);
if(_loaderResetButtonPush)
{
Set_Load_Tray_Buzzer(false);
Board_Control.IO_manager.Set_Output(OutputData.Buzzer_1_Relay, false);
if(cim_mode == En_Cim_Mode.Online)
{
if (Alarm_Manager.Instance.Alarm_Status == En_Alarm_Status.HEAVY)
{
Set_Equipment_Status_Code(En_Equipment_Status_Code.T3);
Set_Equipment_Status_Code(En_Equipment_Status_Code.W4);
}
}
Alarm_Manager.Instance.Alarm_Clear();
}
}
if(_unloaderResetButtonPush != sm.Get_Bit(Input_Memory_Address.ULD_Muting_Reset_PUSH_BUTTON))
{
_unloaderResetButtonPush = sm.Get_Bit(Input_Memory_Address.ULD_Muting_Reset_PUSH_BUTTON);
if (_unloaderResetButtonPush)
{
if (sm.Get_Bit(Input_Memory_Address.ULD_Ng_Out_Shuttle_Bwd_Sensor) && sm.Get_Bit(Input_Memory_Address.ULD_Ng_Port_Tray_Detect_Sensor))
{
Interlock_Manager.Add_Interlock_Msg("NG Port Tray Is Exist!", "Tray Remove Please.");
}
else
{
if (unloader.LiftNg.MotorZ.MotionComplete)
{
Set_Unload_Tray_Buzzer(false);
Board_Control.IO_manager.Set_Output(OutputData.Buzzer_1_Relay, false);
if (cim_mode == En_Cim_Mode.Online)
{
if (Alarm_Manager.Instance.Alarm_Status == En_Alarm_Status.HEAVY)
{
Set_Equipment_Status_Code(En_Equipment_Status_Code.T3);
Set_Equipment_Status_Code(En_Equipment_Status_Code.W4);
}
}
Alarm_Manager.Instance.Alarm_Clear();
unloader.LiftNg.Shuttle.Forward();
}
}
}
}
if (sm.Get_Bit(Output_Memory_Address.Safety_Mode_SW_Unlock))
{
if (_keySwitchMode != sm.Get_Bit(Input_Memory_Address.Safety_Mode_SW_Auto))
{
_modeChangeTime.Restart();
_keySwitchMode = sm.Get_Bit(Input_Memory_Address.Safety_Mode_SW_Auto);
Board_Control.IO_manager.Set_Output(OutputData.Safety_Mode_SW_Unlock, false);
}
}
//날짜별 panel count 초기화
if((panel_count_info.Day_Time.Year != DateTime.Now.Year) || (panel_count_info.Day_Time.DayOfYear != DateTime.Now.DayOfYear))
{
Write_Panel_Count_Log($"DAY, OK Count,{panel_count_info.Day_ULD_OK_Count},NG Count, {panel_count_info.Day_ULD_NG_Count}");
panel_count_info.Day_Time = DateTime.Now;
panel_count_info.Day_ULD_OK_Count = 0;
panel_count_info.Day_ULD_NG_Count = 0;
Panel_Count_Info_Manager.Instance.Save_Panel_Count_Info(panel_count_info);
}
//30분마다 panel count 초기화
double _minute = Math.Abs((DateTime.Now - panel_count_info.Minute_Time).TotalMinutes);
if ((_minute >= 5 && (DateTime.Now.Minute == 0 || DateTime.Now.Minute == 30)) || _minute > 60)
{
Write_Panel_Count_Log($"MINUTE, OK Count,{panel_count_info.Minute_ULD_OK_Count},NG Count, {panel_count_info.Minute_ULD_NG_Count}");
panel_count_info.Minute_Time = DateTime.Now;
panel_count_info.Minute_ULD_OK_Count = 0;
panel_count_info.Minute_ULD_NG_Count = 0;
Panel_Count_Info_Manager.Instance.Save_Panel_Count_Info(panel_count_info);
//Cim과 설비 시간 동기화.
if (cim_mode == En_Cim_Mode.Online)
{
Set_Cim_Mode(cim_mode);
}
}
}
catch (Exception)
{
}
}
private void Seq_Logic_Th_Set()
{
while (!IsDisposed)
{
Thread.Sleep(10);
DateTime dt = DateTime.Now;
if (!Mode.Auto_Power_Skip && equip_mode == En_Equipment_Mode.Auto && !process.ablation.Is_Power_Measure && Auto_Power_Bit && !loader.Panel_Exist && !before.Panel_Exist && !process.Panel_Exist && !after.Panel_Exist && !unloader.Panel_Exist)
{
if (process.ablation.Auto_Power_Start())
{
Auto_Power_Bit = false;
}
}
if (Auto_Plasma_Set.ThreadState != ThreadState.Running && Auto_Ion_Set.ThreadState != ThreadState.Running && Auto_Laser_Set.ThreadState != ThreadState.Running)
{
Seq_Logic();
}
TimeSpan ts = (DateTime.Now - dt);
}
}
private void Seq_Logic()
{
if (Is_Interlock()) return;
loader.Seq_Logic();
before.Seq_Logic();
process.Seq_Logic();
after.Seq_Logic();
unloader.Seq_Logic();
}
private void Status_Update_Th_Set()
{
while (!IsDisposed)
{
Thread.Sleep(10);
DateTime dt = DateTime.Now;
Status_Update();
TimeSpan ts = (DateTime.Now - dt);
}
}
private void Status_Update()
{
if (Alarm_Manager.Instance.Alarm_Status == En_Alarm_Status.HEAVY)
{
Set_Equipment_Status(En_Equipment_Status.Fault);
if (equip_mode == En_Equipment_Mode.Auto)
{
Set_Equipment_Mode(En_Equipment_Mode.Pause);
}
}
else
{
if (Auto_Mode)
{
Set_Equipment_Status(En_Equipment_Status.Nomal);
}
else
{
Set_Equipment_Status(En_Equipment_Status.Pm);
}
}
if(!Mode.Auto_Power_Skip && !process.ablation.Is_Power_Measure && ((DateTime.Now - Power_Parameter.Measure_Date).TotalHours > Power_Parameter.Measurement_Cycle_Hour))
{
Auto_Power_Bit = true;
}
}
private void Interlock_Check_Th_Set()
{
while (!IsDisposed)
{
Thread.Sleep(50);
DateTime dt = DateTime.Now;
Interlock_Check();
TimeSpan ts = (DateTime.Now - dt);
}
}
private void Interlock_Check()
{
try
{
DateTime dt = DateTime.Now;
if (sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_1)) Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0009_SAFETY_DOOR_1_OPEN);
if (sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_2)) Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0010_SAFETY_DOOR_2_OPEN);
if (sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_3)) Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0011_SAFETY_DOOR_3_OPEN);
if (sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_4)) Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0012_SAFETY_DOOR_4_OPEN);
if (sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_5)) Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0013_SAFETY_DOOR_5_OPEN);
if (sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_6)) Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0014_SAFETY_DOOR_6_OPEN);
if (sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_7)) Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0015_SAFETY_DOOR_7_OPEN);
if (sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_8)) Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0016_SAFETY_DOOR_8_OPEN);
if (sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_9)) Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0017_SAFETY_DOOR_9_OPEN);
if (sm.Get_Bit(Input_Memory_Address.Safety_Door_Open_10)) Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0018_SAFETY_DOOR_10_OPEN);
if (loader.ConveyorIn.MotorX.ContinuousMotion || loader.ConveyorOut.MotorX.ContinuousMotion)
{
if (!sm.Get_Bit(Input_Memory_Address.Loading_Light_Curtain_Det))
{
if(ConveyorInSteps.S0100_AGV_LOADING_START <= loader.ConveyorIn.Step && loader.ConveyorIn.Step <= ConveyorInSteps.S0999_AGV_LOADING_END)
{
}
else if(ConveyorOutSteps.S2000_AGV_UNLOADING_START <= loader.ConveyorOut.Step && loader.ConveyorOut.Step <= ConveyorOutSteps.S2999_AGV_UNLOADING_END)
{
}
else
{
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0052_LD_LIGHT_CURTAIN_ALARM);
}
}
}
if (unloader.ConveyorIn.MotorX.ContinuousMotion || unloader.ConveyorOut.MotorX.ContinuousMotion)
{
if (!sm.Get_Bit(Input_Memory_Address.UnLoading_Light_Curtain_Det))
{
if (ConveyorInSteps.S0100_AGV_LOADING_START <= unloader.ConveyorIn.Step && unloader.ConveyorIn.Step <= ConveyorInSteps.S0999_AGV_LOADING_END)
{
}
else if (ConveyorOutSteps.S2000_AGV_UNLOADING_START <= unloader.ConveyorOut.Step && unloader.ConveyorOut.Step <= ConveyorOutSteps.S2999_AGV_UNLOADING_END)
{
}
else
{
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0053_ULD_LIGHT_CURTAIN_ALARM);
}
}
}
if (!Align_vision.isConnected) Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0510_ALIGN_VISION_DISCONNECT);
if (!Aoi_vision.isConnected) Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0511_AOI_VISION_DISCONNECT);
if (!power_meter.isOpen && !Alarm_Manager.Instance.Occured_List.Exists(X => X.Code == En_Alarm_List.AL_0930_POWER_METER_DISCONNECTED))
{
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0930_POWER_METER_DISCONNECTED);
power_meter.Open();
power_meter.HandShakingOn();
}
if (equip_mode == En_Equipment_Mode.Auto && dt.Second % 10 == 0 && (loader.Panel_Exist && before.Panel_Exist && process.Panel_Exist && after.Panel_Exist && unloader.Panel_Exist) && !units.Exists(x => x.sequenceChangedTime.Minute < 10))
{
Interlock_Manager.Add_Interlock_Msg("Sequence is Stop", "Please check equipment.");
}
if (panel_count_info.CleaningCount > Setting.Cleaning_Count)
{
Alarm_Manager.Instance.Occurred(En_Alarm_List.AL_0970_CLEANING_TIME);
LD_Stop = true;
panel_count_info.CleaningCount = 0;
Panel_Count_Info_Manager.Instance.Save_Panel_Count_Info(panel_count_info);
}
}
catch(Exception e)
{
}
}
private void TowerLamp_Th_Set()
{
while (!this.IsDisposed)
{
TowerLamp_Status();
Thread.Sleep(500);
}
}
private void TowerLamp_Status()
{
if (Board_Control.BoardMode != MMCE_Test.NMCSDKLib.EcMstMode.eMM_RUN) return;
// Red : 설비 Err 및 운전 불가능 (점등), 설비 Err 및 운전 가능 (점멸), 설비 Err 無 (소등)
if (equip_status == En_Equipment_Status.Fault)
{
//점등.
Board_Control.IO_manager.Set_Output(OutputData.Tower_Lamp_R, true);
}
else
{
if (Alarm_Manager.Instance.Alarm_Status == En_Alarm_Status.LIGHT)
{
//점멸.
Board_Control.IO_manager.Set_Output(OutputData.Tower_Lamp_R, !Board_Control.IO_manager.Get_Output(OutputData.Tower_Lamp_R));
}
else if (Alarm_Manager.Instance.Alarm_Status == En_Alarm_Status.NONE)
{
//소등.
Board_Control.IO_manager.Set_Output(OutputData.Tower_Lamp_R, false);
}
}
// Yellow : 수동 운전 모드(점등), 자동 운전 모드 (소등)
if (equip_mode == En_Equipment_Mode.Auto)
{
//소등
Board_Control.IO_manager.Set_Output(OutputData.Tower_Lamp_Y, false);
}
else
{
//점등.
Board_Control.IO_manager.Set_Output(OutputData.Tower_Lamp_Y, true);
}
//Green : 동작중 (점등), 대기중(점멸) (Auto에서 LD쪽 Tray X, 설비 내부 Panel X), 정지중(소등)
if (equip_status == En_Equipment_Status.Nomal)
{
if(equip_mode == En_Equipment_Mode.Auto)
{
//점등.
Board_Control.IO_manager.Set_Output(OutputData.Tower_Lamp_G, true);
}
else if (equip_mode == En_Equipment_Mode.Manual)
{
//점등.
Board_Control.IO_manager.Set_Output(OutputData.Tower_Lamp_G, !Board_Control.IO_manager.Get_Output(OutputData.Tower_Lamp_G));
}
}
else if (equip_status == En_Equipment_Status.Fault || equip_mode != En_Equipment_Mode.Auto)
{
//소등.
Board_Control.IO_manager.Set_Output(OutputData.Tower_Lamp_G, false);
}
// Blue : 온라인상태 (점등), 오프라인(소등)
if (cim_mode == En_Cim_Mode.Online)
Board_Control.IO_manager.Set_Output(OutputData.Tower_Lamp_B, true);
else
Board_Control.IO_manager.Set_Output(OutputData.Tower_Lamp_B, false);
if(sm.Get_Bit(Input_Memory_Address.LD_Tray_In_Conveyor_In_Sensor) || sm.Get_Bit(Input_Memory_Address.LD_Tray_In_Conveyor_In_Complete_Sensor) || sm.Get_Bit(Input_Memory_Address.LD_Tray_In_Conveyor_Lift_In_Sensor) || sm.Get_Bit(Input_Memory_Address.LD_Tray_In_Conveyor_Lift_In_Complete_Sensor))
{
if(!sm.Get_Bit(Output_Memory_Address.LD_Tray_In_Muting_PILOT_Lamp))
Board_Control.IO_manager.Set_Output(OutputData.LD_Tray_In_Muting_PILOT_Lamp, true);
}
else
{
if (sm.Get_Bit(Output_Memory_Address.LD_Tray_In_Muting_PILOT_Lamp))
Board_Control.IO_manager.Set_Output(OutputData.LD_Tray_In_Muting_PILOT_Lamp, false);
}
if(sm.Get_Bit(Input_Memory_Address.LD_Tray_Out_Conveyor_In_Sensor) || sm.Get_Bit(Input_Memory_Address.LD_Tray_Out_Conveyor_In_Complete_Sensor) || sm.Get_Bit(Input_Memory_Address.LD_Tray_Out_Conveyor_Lift_in_Sensor) || sm.Get_Bit(Input_Memory_Address.LD_Tray_Out_Conveyor_Lift_in_Complete_Sensor))
{
if (!sm.Get_Bit(Output_Memory_Address.LD_Tray_Out_Muting_PILOT_Lamp))
Board_Control.IO_manager.Set_Output(OutputData.LD_Tray_Out_Muting_PILOT_Lamp, true);
}
else
{
if (sm.Get_Bit(Output_Memory_Address.LD_Tray_Out_Muting_PILOT_Lamp))
Board_Control.IO_manager.Set_Output(OutputData.LD_Tray_Out_Muting_PILOT_Lamp, false);
}
if(sm.Get_Bit(Input_Memory_Address.ULD_Empty_In_Conveyor_In_Sensor) || sm.Get_Bit(Input_Memory_Address.ULD_Empty_In_Conveyor_In_Complete_Sensor) || sm.Get_Bit(Input_Memory_Address.ULD_Empty_In_Conveyor_Lift_In_Sensor) || sm.Get_Bit(Input_Memory_Address.ULD_Empty_In_Conveyor_Lift_In_Complete_Sensor))
{
if (!sm.Get_Bit(Output_Memory_Address.ULD_Tray_In_Muting_PILOT_Lamp))
Board_Control.IO_manager.Set_Output(OutputData.ULD_Tray_In_Muting_PILOT_Lamp, true);
}
else
{
if (sm.Get_Bit(Output_Memory_Address.ULD_Tray_In_Muting_PILOT_Lamp))
Board_Control.IO_manager.Set_Output(OutputData.ULD_Tray_In_Muting_PILOT_Lamp, false);
}
if (sm.Get_Bit(Input_Memory_Address.ULD_Ok_Out_Conveyor_In_Sensor) || sm.Get_Bit(Input_Memory_Address.ULD_Ok_Out_Conveyor_Out_Sensor) || sm.Get_Bit(Input_Memory_Address.ULD_Ok_Out_Conveyor_Lift_In_Sensor) || sm.Get_Bit(Input_Memory_Address.ULD_Ok_Out_Conveyor_Lift_Out_Sensor) ||
sm.Get_Bit(Output_Memory_Address.ULD_Ng_Tray_Shuttle_Bwd_Sol_Valve) || sm.Get_Bit(Input_Memory_Address.ULD_Ng_Out_Shuttle_Bwd_Sensor))
{
if (!sm.Get_Bit(Output_Memory_Address.ULD_Tray_Out_Muting_PILOT_Lamp))
Board_Control.IO_manager.Set_Output(OutputData.ULD_Tray_Out_Muting_PILOT_Lamp, true);
}
else
{
if (sm.Get_Bit(Output_Memory_Address.ULD_Tray_Out_Muting_PILOT_Lamp))
Board_Control.IO_manager.Set_Output(OutputData.ULD_Tray_Out_Muting_PILOT_Lamp, false);
}
if(sm.Get_Bit(Input_Memory_Address.Laser_Active) && !sm.Get_Bit(Output_Memory_Address.LASER_LED_Electronic_Board))
{
Board_Control.IO_manager.Set_Output(OutputData.LASER_LED_Electronic_Board, true);
}
else if (!sm.Get_Bit(Input_Memory_Address.Laser_Active) && sm.Get_Bit(Output_Memory_Address.LASER_LED_Electronic_Board))
{
Board_Control.IO_manager.Set_Output(OutputData.LASER_LED_Electronic_Board, false);
}
}
private void Set_Auto_Plasma()
{
int step = 10;
bool process = true;
while(process)
{
switch(step)
{
case 10:
{
if(Board_Control.IO_manager.Get_Output(OutputData.Plasma_Blower))
{
step = 30;
}
else
{
step = 20;
}
break;
}
case 20:
{
if(Board_Control.IO_manager.Set_Output(OutputData.Plasma_Blower, true))
{
step = 10;
}
break;
}
case 30:
{
if(Board_Control.IO_manager.Get_Output(OutputData.Plasma_EXT_Interlock_Relay))
{
step = 50;
}
else
{
step = 40;
}
break;
}
case 40:
{
if(Board_Control.IO_manager.Set_Output(OutputData.Plasma_EXT_Interlock_Relay, true))
{
step = 30;
}
break;
}
case 50:
{
if(Board_Control.IO_manager.Get_Output(OutputData.Plasma_Mode_Relay))
{
step = 70;
}
else
{
step = 60;
}
break;
}
case 60:
{
if(Board_Control.IO_manager.Set_Output(OutputData.Plasma_Mode_Relay, true))
{
step = 50;
}
break;
}
case 70:
{
process = false;
break;
}
}
}
}
private void Set_Auto_Ion()
{
int step = 10;
bool process = true;
while (process)
{
switch (step)
{
case 10:
{
if (Board_Control.IO_manager.Get_Output(OutputData.LD_Ion_Bar_Sol_Valve))
{
step = 20;
}
else
{
Board_Control.IO_manager.Set_Output(OutputData.LD_Ion_Bar_Sol_Valve, true);
}
break;
}
case 20:
{
if (Board_Control.IO_manager.Get_Output(OutputData.Ablation_Ion_Bar_Sol_Valve))
{
step = 30;
}
else
{
Board_Control.IO_manager.Set_Output(OutputData.Ablation_Ion_Bar_Sol_Valve, true);
}
break;
}
case 30:
{
if (Board_Control.IO_manager.Get_Output(OutputData.Plasma_Ion_Bar_Sol_Valve))
{
step = 40;
}
else
{
Board_Control.IO_manager.Set_Output(OutputData.Plasma_Ion_Bar_Sol_Valve, true);
}
break;
}
case 40:
{
if (Board_Control.IO_manager.Get_Output(OutputData.ULD_Ion_Bar_Sol_Valve))
{
step = 50;
}
else
{
Board_Control.IO_manager.Set_Output(OutputData.ULD_Ion_Bar_Sol_Valve, true);
}
break;
}
case 50:
{
if (Board_Control.IO_manager.Get_Output(OutputData.LD_Ion_Bar_On_Relay))
{
step = 60;
}
else
{
Board_Control.IO_manager.Set_Output(OutputData.LD_Ion_Bar_On_Relay, true);
}
break;
}
case 60:
{
if (Board_Control.IO_manager.Get_Output(OutputData.Ablation_Ion_Bar_On_Relay))
{
step = 70;
}
else
{
Board_Control.IO_manager.Set_Output(OutputData.Ablation_Ion_Bar_On_Relay, true);
}
break;
}
case 70:
{
if (Board_Control.IO_manager.Get_Output(OutputData.Plasma_Ion_Bar_On_Relay))
{
step = 80;
}
else
{
Board_Control.IO_manager.Set_Output(OutputData.Plasma_Ion_Bar_On_Relay, true);
}
break;
}
case 80:
{
if (Board_Control.IO_manager.Get_Output(OutputData.ULD_Ion_Bar_On_Relay))
{
step = 90;
}
else
{
Board_Control.IO_manager.Set_Output(OutputData.ULD_Ion_Bar_On_Relay, true);
}
break;
}
case 90:
{
Set_DustCollector(true);
step = 100;
break;
}
case 100:
{
process = false;
break;
}
}
}
}
private void Set_Auto_Laser()
{
int step = 0;
bool process = true;
while (process)
{
switch (step)
{
case 0:
{
if(this.process.ablation.Step > AblationSteps.S0000_WAIT)
{
step = 10;
}
else if(scanner.Initialize(Cur_Main_Recipe.process_info.CTB_File_Path))
{
step = 5;
}
break;
}
case 5:
{
if(scanner.Home())
{
step = 6;
}
break;
}
case 6:
{
short x, y;
if(scanner.Get_Position(out x, out y))
{
if(x == 0 && y == 0)
{
step = 10;
}
}
break;
}
case 10:
{
if (Board_Control.IO_manager.Get_Output(OutputData.Laser_Interlock))
{
step = 20;
}
else
{
Board_Control.IO_manager.Set_Output(OutputData.Laser_Interlock, true);
}
break;
}
case 20:
{
if (Board_Control.IO_manager.Get_Output(OutputData.Laser_Shutter_Open))
{
step = 30;
}
else
{
Board_Control.IO_manager.Set_Output(OutputData.Laser_Shutter_Open, true);
}
break;
}
case 30:
{
if (Board_Control.IO_manager.Get_Output(OutputData.Laser_Shutter_Open_Sensor))
{
step = 40;
}
else
{
Board_Control.IO_manager.Set_Output(OutputData.Laser_Shutter_Open_Sensor, true);
}
break;
}
case 40:
{
process = false;
break;
}
}
}
}
public void Set_DustCollector(bool onOff)
{
Board_Control.IO_manager.Set_Output(OutputData.Dust_Collector_On, onOff);
}
#endregion
#region Set_Function
public void Set_Load_Tray_Buzzer(bool value)
{
Board_Control.IO_manager.Set_Output(OutputData.Buzzer_3_Relay, value);
}
public void Set_Unload_Tray_Buzzer(bool value)
{
Board_Control.IO_manager.Set_Output(OutputData.Buzzer_4_Relay, value);
}
public bool Is_Home_Complete
{
get
{
return loader.Is_Home_Complete && before.Is_Home_Complete && process.Is_Home_Complete && after.Is_Home_Complete && unloader.Is_Home_Complete;
}
}
public bool Set_Equipment_Mode(En_Equipment_Mode mode)
{
if (mode == equip_mode) return true;
if(mode == En_Equipment_Mode.Auto)
{
if (equip_mode == En_Equipment_Mode.Stop)
{
Interlock_Manager.Add_Interlock_Msg("Can't Change auto mode.", "You can change auto mode in pause mode or manual mode.");
return false;
}
else if (equip_mode == En_Equipment_Mode.Pause || equip_mode == En_Equipment_Mode.Manual)
{
if(!Auto_Mode)
{
Interlock_Manager.Add_Interlock_Msg("Can't Change auto mode.", "Could change Key to Auto.");
return false;
}
if(!Is_Home_Complete)
{
Interlock_Manager.Add_Interlock_Msg("Can't Change auto mode.", "Please Set Home.");
return false;
}
if (Cur_Main_Recipe == null || Cur_Main_Recipe.tray_info == null || Cur_Main_Recipe.vision_info == null || Cur_Main_Recipe.panel_type_info == null || Cur_Main_Recipe.process_info == null)
{
Interlock_Manager.Add_Interlock_Msg("Can't Change auto mode.", "Please check main recipe.");
return false;
}
if(units.Exists(X=> X.UnitMode != equip_mode))
{
Interlock_Manager.Add_Interlock_Msg("Can't Change auto mode.", "Other Unit is not same mode.");
return false;
}
Auto_Plasma_Set = new Thread(() => Set_Auto_Plasma());
Auto_Plasma_Set.Start();
Auto_Ion_Set = new Thread(() => Set_Auto_Ion());
Auto_Ion_Set.Start();
Auto_Laser_Set = new Thread(() => Set_Auto_Laser());
Auto_Laser_Set.Start();
equip_mode = mode;
units.ForEach(x => x.UnitMode = mode);
sm.Set_Value(Data_Interpretation_Memory_Address.Machine_Status, (int)En_Equipment_Mode.Auto); //210916 hslee
return true;
}
}
else if(mode == En_Equipment_Mode.Pause)
{
if(equip_mode == En_Equipment_Mode.Auto || equip_mode == En_Equipment_Mode.Manual)
{
equip_mode = mode;
}
else
{
equip_mode = mode;
units.ForEach(x => x.UnitMode = mode);
}
sm.Set_Value(Data_Interpretation_Memory_Address.Machine_Status, (int)En_Equipment_Mode.Pause); //210916 hslee
return true;
}
else if(mode == En_Equipment_Mode.Manual)
{
if (equip_mode == En_Equipment_Mode.Stop)
{
Interlock_Manager.Add_Interlock_Msg("Can't Change manual mode.", "You can change manual mode in pause mode.");
return false;
}
else if (equip_mode == En_Equipment_Mode.Pause)
{
if (!Auto_Mode)
{
Interlock_Manager.Add_Interlock_Msg("Can't Change manual mode.", "Could change Key to Auto.");
return false;
}
if (!Is_Home_Complete)
{
Interlock_Manager.Add_Interlock_Msg("Can't Change manual mode.", "Please Set Home.");
return false;
}
if (Cur_Main_Recipe == null || Cur_Main_Recipe.tray_info == null || Cur_Main_Recipe.vision_info == null || Cur_Main_Recipe.panel_type_info == null || Cur_Main_Recipe.process_info == null)
{
Interlock_Manager.Add_Interlock_Msg("Can't Change manual mode.", "Please check main recipe.");
return false;
}
if (units.Exists(X => X.UnitMode != equip_mode))
{
Interlock_Manager.Add_Interlock_Msg("Can't Change manual mode.", "Other Unit is not same mode.");
return false;
}
Auto_Plasma_Set = new Thread(() => Set_Auto_Plasma());
Auto_Plasma_Set.Start();
Auto_Ion_Set = new Thread(() => Set_Auto_Ion());
Auto_Ion_Set.Start();
Auto_Laser_Set = new Thread(() => Set_Auto_Laser());
Auto_Laser_Set.Start();
equip_mode = mode;
units.ForEach(x => x.UnitMode = mode);
sm.Set_Value(Data_Interpretation_Memory_Address.Machine_Status, (int)En_Equipment_Mode.Manual); //210916 hslee
return true;
}
}
else if(mode == En_Equipment_Mode.Stop)
{
if(equip_mode != En_Equipment_Mode.Pause)
{
return false;
}
Set_DustCollector(false);
equip_mode = mode;
units.ForEach(x => x.UnitMode = mode);
sm.Set_Value(Data_Interpretation_Memory_Address.Machine_Status, (int)En_Equipment_Mode.Stop); //210916 hslee
return true;
}
else if (mode == En_Equipment_Mode.Home)
{
if (equip_mode != En_Equipment_Mode.Stop)
{
return false;
}
equip_mode = mode;
units.ForEach(x => x.UnitMode = mode);
sm.Set_Value(Data_Interpretation_Memory_Address.Machine_Status, (int)En_Equipment_Mode.Home); //210916 hslee
return true;
}
return false;
}
public bool Set_Equipment_Status(En_Equipment_Status status)
{
equip_status = status;
return true;
}
public bool Set_Equipment_Status_Code(En_Equipment_Status_Code code)
{
if (cim_mode != En_Cim_Mode.Online)
{
return true;
}
if (equip_status_code != code)
{
equip_status_code = code;
return cim_client.Send_Equipment_Status("E1234567");
}
return true;
}
public void Set_Cim_Mode(En_Cim_Mode mode)
{
if(mode == En_Cim_Mode.Online)
{
cim_client.Send_On_Line("E1234567", true);
}
else
{
cim_client.Send_On_Line("E1234567", false);
}
}
public void Set_All_Door_Open(bool open)
{
if (!Teach_Mode || _modeChangeTime.Seconds < 3) return;
Board_Control.IO_manager.Set_Output(OutputData.Safety_Door_Open_1, open);
Board_Control.IO_manager.Set_Output(OutputData.Safety_Door_Open_2, open);
Board_Control.IO_manager.Set_Output(OutputData.Safety_Door_Open_3, open);
Board_Control.IO_manager.Set_Output(OutputData.Safety_Door_Open_4, open);
Board_Control.IO_manager.Set_Output(OutputData.Safety_Door_Open_5, open);
Board_Control.IO_manager.Set_Output(OutputData.Safety_Door_Open_6, open);
Board_Control.IO_manager.Set_Output(OutputData.Safety_Door_Open_7, open);
Board_Control.IO_manager.Set_Output(OutputData.Safety_Door_Open_8, open);
Board_Control.IO_manager.Set_Output(OutputData.Safety_Door_Open_9, open);
Board_Control.IO_manager.Set_Output(OutputData.Safety_Door_Open_10, open);
}
public void Set_Cleaning_Position(bool Cleaning)
{
try
{
if (Cur_Main_Recipe == null) return;
if (Cleaning)
{
/*
-> 가공 스테이지 언로더 위치로
-> ULD Handler #2와 Plasma를 B2 위치로
-> fine Camera랑 LD Handler #2로 B2 위치로
220608 추가 Ablation 0 위치로
*/
before.Handler2.Move_X_Ablation_Stage_2_Position();
process.fine_align.Move_Cleaning_Position();
process.ablation_stage_1.Move_Y_Unload_Position();
process.ablation_stage_2.Move_Y_Unload_Position();
process.plasma.Move_Cleaning_Position();
process.ablation.Move_Cleaning_Position();
after.Handler2.Move_X_AOI_Position();
if (after.ReverseStage.IsStayPosition)
{
after.Handler2.Move_Y_AOI_Position();
}
_cleaningMode = true;
}
else
{
before.Handler2.Move_X_Stay_Position();
process.ablation_stage_1.Move_Y_Load_Position();
process.ablation_stage_2.Move_Y_Load_Position();
process.ablation.Stage1WaitPositionMove();
after.Handler2.Move_X_Stay_Position();
after.Handler2.Move_Y_Stay_Position();
_cleaningMode = false;
}
}
catch(Exception e)
{
}
}
#endregion
#region Get_Function
public bool Is_Interlock()
{
bool check = false;
if (Board_Control.BoardMode != MMCE_Test.NMCSDKLib.EcMstMode.eMM_RUN)
{
Interlock_Manager.Add_Interlock_Msg("Logic working Interlock ", "Board Control is Not Run Mode.");
check = true;
}
if(Cur_Main_Recipe == null || Cur_Main_Recipe.tray_info == null || Cur_Main_Recipe.vision_info == null || Cur_Main_Recipe.panel_type_info == null || Cur_Main_Recipe.process_info == null)
{
Interlock_Manager.Add_Interlock_Msg("Logic working Interlock ", "Recipe is Not Applied.");
check = true;
}
if (equip_mode == En_Equipment_Mode.Auto)
{
if (Auto_Plasma_Set == null || Auto_Ion_Set == null || Auto_Laser_Set == null)
check = true;
else
{
if (Auto_Plasma_Set.ThreadState == ThreadState.Running || Auto_Ion_Set.ThreadState == ThreadState.Running || Auto_Laser_Set.ThreadState == ThreadState.Running)
check = true;
}
}
return check;
}
public bool Is_Exist()
{
if(units.Exists(x => x.IsExist == true))
{
return true;
}
else
{
return false;
}
}
public bool Is_Clean_Position_Eanble()
{
if (units.Exists(x => (x == unloader.TrayTransfer || x == unloader.ConveyorIn || x == unloader.ConveyorOut || x == loader.ConveyorIn || x == loader.ConveyorOut || x == loader.LiftIn || x == loader.LiftOut || x == unloader.LiftIn || x == unloader.LiftOk || x == unloader.LiftNg) ? false : x.IsExist))
{
return false;
}
else
{
return true;
}
}
#endregion
#region ETC_hslee
public void SaveTempGlassOutCnt()
{
string strData = "";
object value1, value2, value3;
string strFilename = @"C:\SHARP_CLAS\Config\GLASS_DATA\TempOutCnt.csv";
string strFilePath = @"C:\SHARP_CLAS\Config\GLASS_DATA\";
Monitor.Enter(_objLock);
try
{
if (!Directory.Exists(strFilePath))
{
Directory.CreateDirectory(strFilePath);
}
if (!File.Exists(strFilename))
{
FileStream stream = File.Create(strFilename);
stream.Close();
}
using (FileStream fs = new FileStream(strFilename, FileMode.Truncate, FileAccess.ReadWrite, FileShare.ReadWrite))
{
using (StreamWriter sw = new StreamWriter(fs, Encoding.Default))
{
sm.Get_Value(Process_Memory_Address.Tray_Info_Recipe_Name, out value1);
sm.Get_Value(Data_Interpretation_Memory_Address.OK_Out_Cnt, out value2);
sm.Get_Value(Data_Interpretation_Memory_Address.NG_Out_Cnt, out value3);
strData = string.Format("{0}, {1}, {2}", value1.ToString(), value2.ToString(), value3.ToString());
sw.WriteLine(strData);
}
}
}
catch (Exception ee)
{
}
Monitor.Exit(_objLock);
}
public void LoadTempGlassOutCnt()
{
string sr_line = "";
string strFilename = @"C:\SHARP_CLAS\Config\GLASS_DATA\TempOutCnt.csv";
object value;
try
{
if (File.Exists(strFilename))
{
using (StreamReader read = new StreamReader(strFilename))
{
sr_line = read.ReadLine();
string[] readData = sr_line.Split(new Char[] { ',' });
sm.Get_Value(Process_Memory_Address.Tray_Info_Recipe_Name, out value);
if (readData[0] != value.ToString())
{
//Recipe가 다른 경우 0으로 리셋
sm.Set_Value(Data_Interpretation_Memory_Address.OK_Out_Cnt, 0);
sm.Set_Value(Data_Interpretation_Memory_Address.NG_Out_Cnt, 0);
sm.Set_Bit(Data_Interpretation_Memory_Address.RecipeChanged, true);
}
else
{
sm.Set_Value(Data_Interpretation_Memory_Address.OK_Out_Cnt, Convert.ToInt32(readData[1]));
sm.Set_Value(Data_Interpretation_Memory_Address.NG_Out_Cnt, Convert.ToInt32(readData[2]));
}
read.Dispose();
}
}
else
{
sm.Set_Value(Data_Interpretation_Memory_Address.OK_Out_Cnt, 0);
sm.Set_Value(Data_Interpretation_Memory_Address.NG_Out_Cnt, 0);
sm.Set_Bit(Data_Interpretation_Memory_Address.RecipeChanged, true);
}
}
catch (Exception ee)
{
sm.Set_Value(Data_Interpretation_Memory_Address.OK_Out_Cnt, 0);
sm.Set_Value(Data_Interpretation_Memory_Address.NG_Out_Cnt, 0);
sm.Set_Bit(Data_Interpretation_Memory_Address.RecipeChanged, true);
}
}
#endregion
}
}