using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Text.RegularExpressions; using System.Threading; using System.IO; using System.Net.NetworkInformation; using SA_LTT.Module; using padDLL; using SA_LTT; namespace SA_LTT_UI.Screen { public partial class ScreenMotionMaintenance : UserControl { ////Stage #1 //const int iXNum = 2; //const int iYNum = 1; //const int iTNum = 3; //const int iSNum = 5; ////Stage #2 //const int iXNum2 = 7; //const int iYNum2 = 6; //const int iTNum2 = 8; //const int iSNum2 = 10; //------- private enum List_Index { NO = 0, EnumNo, Axis_Name, Pos_Name, Axis, PosIndex, Position, Speed, Accel, } private enum eThread { _UpdateScreen, _ThreadUmac, _Axis_S_Home, _Axis_All_Home1, _Axis_All_Home2, enMax, } Thread[] ArrThread = new Thread[(int)eThread.enMax]; private int m_nSelect_RowIndex = -1; private int m_nSelectAxis_Index = -1; private int m_nSelectPos_Index = -1; MainFrame _mainFrame; object updateUIlock = new object(); bool updateUIlockcheck = false; delegate void UpdateScreenDelegate(); delegate void SlowScreenDelegate(); bool[] m_bOldAxisStatus = new bool[6]; protected override CreateParams CreateParams { get { CreateParams MyCp = base.CreateParams; MyCp.ExStyle |= 0x02000000; return MyCp; } } public ScreenMotionMaintenance(MainFrame mainFrame) { InitializeComponent(); _mainFrame = mainFrame; for (int i = 0; i < m_bOldAxisStatus.Length; i++) m_bOldAxisStatus[i] = false; //그리드 초기화 InitView(); //UMAC 축 설정 //UmacSetValue(); //thread ThreadInit(); ThreadStart(); // //acc 등 파라미터값은 Stage #1, #2 각 축에 동일하게 적용 //------------------------------------- //Stage #1 // // PLC Program Bug (왜 여기에서 이걸 설정하지??) //_parentForm._UmacCtrl.MoveS_Acc(Convert.ToInt16(_IoMemory.ReadIo(eSystemParam.Func_Stage_MOV_S_Accel))); //_parentForm._UmacCtrl.MoveT_Acc(Convert.ToInt16(_IoMemory.ReadIo(eSystemParam.Func_Stage_MOV_T_Accel))); //_parentForm._UmacCtrl.MoveXY_Acc(Convert.ToInt16(_IoMemory.ReadIo(eSystemParam.Func_Stage_MOV_X_Accel))); //_parentForm._UmacCtrl.MoveXY_SetSpeed(Convert.ToDouble(_IoMemory.ReadIo(eSystemParam.Stage_XY_MOV_Spd))); //_parentForm._UmacCtrl.MoveT_SetSpeed(1); //// ////Stage #2 //// ////todo. LYW 추가 //_parentForm._UmacCtrl.MoveS_Acc2(Convert.ToInt16(_IoMemory.ReadIo(eSystemParam.Func_Stage_MOV_S_Accel))); //_parentForm._UmacCtrl.MoveT_Acc2(Convert.ToInt16(_IoMemory.ReadIo(eSystemParam.Func_Stage_MOV_T_Accel))); //_parentForm._UmacCtrl.MoveXY_Acc2(Convert.ToInt16(_IoMemory.ReadIo(eSystemParam.Func_Stage_MOV_X_Accel))); //_parentForm._UmacCtrl.MoveXY_SetSpeed2(Convert.ToDouble(_IoMemory.ReadIo(eSystemParam.Stage_XY_MOV_Spd))); //_parentForm._UmacCtrl.MoveT_SetSpeed2(1); } //*************************************************************************************** // 초기화 //*************************************************************************************** #region "Initialize" //private void UmacSetValue() //{ // try // { // _parentForm._UmacCtrl.XAxisNum = iXNum; // _parentForm._UmacCtrl.YAxisNum = iYNum; // _parentForm._UmacCtrl.TAxisNum = iTNum; // _parentForm._UmacCtrl.SAxisNum = iSNum; //Shutter // //todo. LYW 추가 // _parentForm._UmacCtrl.XAxisNum2 = iXNum2; // _parentForm._UmacCtrl.YAxisNum2 = iYNum2; // _parentForm._UmacCtrl.TAxisNum2 = iTNum2; // } // catch (Exception ee) // { // _parentForm.WriteToDebugLog("Screen_PMC_Manual : UmacSetValue::" + ee.ToString()); // } //} private void InitView() { ImageList dumImgList = new ImageList(); dumImgList.ImageSize = new System.Drawing.Size(1, 20); //리스트 뷰 라인 간격 조절용(높이) ListView_AxisPosList.SmallImageList = dumImgList; ListView_AxisPosList.Items.Clear(); int nCnt = 0; int nPosIndex = 0; bool[] bRecipeLoad = new bool[2]; string[] strRecipeName = new string[2]; //bRecipeLoad[0] = LoadTeachDataFromRecipe(true, out strRecipeName[0]); //bRecipeLoad[1] = LoadTeachDataFromRecipe(false, out strRecipeName[1]); for (int nIndex = 0; nIndex < _mainFrame.equipment.powerPmac.m_AxisAllList.Count; nIndex++) { for (nPosIndex = 0; nPosIndex < _mainFrame.equipment.powerPmac.m_AxisAllList[nIndex].TeachList.Count; nPosIndex++) { nCnt++; ListViewItem _Item = ListView_AxisPosList.Items.Add(nCnt.ToString("000")); //No _Item.SubItems.Add(_mainFrame.equipment.powerPmac.m_AxisAllList[nIndex].EnumAxisNo.ToString()); //EnumNo _Item.SubItems.Add(_mainFrame.equipment.powerPmac.m_AxisAllList[nIndex].Name); //축 이름 _Item.SubItems.Add(_mainFrame.equipment.powerPmac.m_AxisAllList[nIndex].TeachList[nPosIndex].Name.ToString()); //포지션 이름 _Item.SubItems.Add(_mainFrame.equipment.powerPmac.m_AxisAllList[nIndex].AxisNo.ToString()); //AxisNo _Item.SubItems.Add(string.Format("{0}", nPosIndex + 1)); //인덱스 _Item.SubItems.Add(_mainFrame.equipment.powerPmac.m_AxisAllList[nIndex].TeachList[nPosIndex].Position.ToString()); //위치 _Item.SubItems.Add(_mainFrame.equipment.powerPmac.m_AxisAllList[nIndex].TeachList[nPosIndex].Speed.ToString()); //속도 _Item.SubItems.Add(_mainFrame.equipment.powerPmac.m_AxisAllList[nIndex].TeachList[nPosIndex].Accel.ToString()); //가속 } } } #endregion //*************************************************************************************** // Functions //*************************************************************************************** #region "Functions (PMC 시퀀스 제외)" private bool CheckSelectAxisPos() { bool bRtn = false; if (m_nSelectAxis_Index >= 0 && m_nSelectPos_Index >= 0 && m_nSelect_RowIndex >= 0) { bRtn = true; } return bRtn; } #endregion //*************************************************************************************** // Thread //*************************************************************************************** // #region "Thread" //상태 업데이트 추가 //Stage1Info() //Stage2Info() private void ThreadInit() { ArrThread[(int)eThread._UpdateScreen] = new Thread(ProcUpdateScreen); // _ThreadClass[(int)eThread._Axis_S_Home] = new eThreadClass(200, false, S_Axis_Home); //_ThreadClass[(int)eThread._Axis_All_Home1] = new eThreadClass(200, false, All_Axis_Home1); //_ThreadClass[(int)eThread._Axis_All_Home2] = new eThreadClass(200, false, All_Axis_Home2); //Test Proce MOve // _ThreadClass[(int)eThread._PMC_ManualProc] = new eThreadClass(200, false, ProcMoveMelting); // _ThreadClass[(int)eThread._Purge_Proc] = new eThreadClass(200, false, ProcPurge); // _parentForm.EventThreadStop += new EventThreadStop(this.ThreadClose); } private void ThreadStart() { if (!_mainFrame.m_bSimulationMode) { ArrThread[(int)eThread._UpdateScreen].Start(); } } private void ProcUpdateScreen() { while (_mainFrame.IsDisposed == false) { try { Thread.Sleep(500); if (this.Visible) UpdateScreen(); } catch (Exception ex) { EquipmentLogManager.Instance.WriteExceptionLog(ex.StackTrace + "\r\n" + ex.Message); } } } private void UpdateScreen() { try { if (InvokeRequired) { lock (updateUIlock) { if (updateUIlockcheck) Monitor.Wait(updateUIlock); else updateUIlockcheck = true; } BeginInvoke(new UpdateScreenDelegate(UpdateScreen)); return; } lock (updateUIlock) { try { if(this.Visible) { MotorInfo(); DisplaySelectedAxisInfo(); GR200Update(); } } finally { Monitor.Pulse(updateUIlock); updateUIlockcheck = false; } } } catch (Exception ex) { EquipmentLogManager.Instance.WriteExceptionLog(ex.StackTrace + "\r\n" + ex.Message); } } #endregion //*************************************************************************************** // 시퀀스 //*************************************************************************************** #region "PMC #1, PMC #2 Sequence" #endregion //*************************************************************************************** // 버튼 등 이벤트 //*************************************************************************************** #region "Button / Key Pad Event" //---------------------------------------------------------------------------------------- // //선택된 포지션의 현재 정보 // //Position private void Set_Select_PosVal_Click(object sender, EventArgs e) { var nPad = new NumericPad(); nPad.Setup("-100", "2000"); //범위 변경해야 함 nPad.ShowDialog(); if (nPad.DialogResult != DialogResult.OK) return; //_parentForm.WriteToBtnLog("Screen_PMC_Maint : Set_Select_PosVal_Click"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "Set_Select_PosVal_Click"); //Button LogDB Set_Select_PosVal.Text = nPad.GetValue(); ChangePosition(); SaveServoData(); _mainFrame.equipment.powerPmac.LoadMotorData(); } private void ChangePosition() { //_parentForm.WriteToBtnLog("Screen_PMC_Maint : Set_Select_PosVal_TextChanged"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "Set_Select_PosVal_TextChanged"); //Button LogDB //공유메모리에 전달 // //Grid에서 위치값 update //저장 // if (CheckSelectAxisPos() == false) { Set_Select_PosVal.Text = ""; //_parentForm.WriteToBtnLog("Screen_PMC_Maint : Set_Select_PosVal.Text = NULL"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "Set_Select_PosVal.Text = NULL"); //Button LogDB return; } string strTag = Set_Select_PosVal.Tag as string; if (strTag == "POSITION") { EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Position {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name} {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Name} {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Position} -> {Set_Select_PosVal.Text}"); _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Position = Convert.ToDouble(Set_Select_PosVal.Text); ListView_AxisPosList.Items[m_nSelect_RowIndex].SubItems[(int)List_Index.Position].Text = Set_Select_PosVal.Text; //SaveServoData(); } else if (strTag == "SPEED") { EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Speed {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name} {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Name} {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Speed} -> {Set_Select_SpeedVal.Text}"); _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Speed = Convert.ToDouble(Set_Select_SpeedVal.Text); ListView_AxisPosList.Items[m_nSelect_RowIndex].SubItems[(int)List_Index.Speed].Text = Set_Select_SpeedVal.Text; //SaveServoData(); } else if (strTag == "ACCEL") { EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Accel {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name} {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Name} {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Accel} -> {Set_Select_AccelVal.Text}"); _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Accel = Convert.ToDouble(Set_Select_AccelVal.Text); ListView_AxisPosList.Items[m_nSelect_RowIndex].SubItems[(int)List_Index.Accel].Text = Set_Select_AccelVal.Text; //SaveServoData(); } } //Speed private void Set_Select_SpeedVal_Click(object sender, EventArgs e) { var nPad = new NumericPad(); nPad.Setup("0", "1000"); //범위 변경해야 함 nPad.ShowDialog(); if (nPad.DialogResult != DialogResult.OK) return; //_parentForm.WriteToBtnLog("Screen_PMC_Maint : Set_Select_SpeedVal_Click"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "Set_Select_SpeedVal_Click"); //Button LogDB Set_Select_SpeedVal.Text = nPad.GetValue(); ChangeSpeed(); SaveServoData(); } private void ChangeSpeed() { //_parentForm.WriteToBtnLog("Screen_PMC_Maint : Set_Select_SpeedVal_TextChanged"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "Set_Select_SpeedVal_TextChanged"); //Button LogDB //공유메모리에 전달 // //Grid에서 위치값 update //저장 // if (CheckSelectAxisPos() == false) { Set_Select_SpeedVal.Text = ""; //_parentForm.WriteToBtnLog("Screen_PMC_Maint : Set_Select_SpeedVal.Text = NULL"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "Set_Select_SpeedVal.Text = NULL"); //Button LogDB return; } string strTag = Set_Select_SpeedVal.Tag as string; if (strTag == "POSITION") { _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Position = Convert.ToDouble(Set_Select_PosVal.Text); ListView_AxisPosList.Items[m_nSelect_RowIndex].SubItems[(int)List_Index.Position].Text = Set_Select_PosVal.Text; //SaveServoData(); } else if (strTag == "SPEED") { _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Speed = Convert.ToDouble(Set_Select_SpeedVal.Text); ListView_AxisPosList.Items[m_nSelect_RowIndex].SubItems[(int)List_Index.Speed].Text = Set_Select_SpeedVal.Text; //SaveServoData(); } else if (strTag == "ACCEL") { _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Accel = Convert.ToDouble(Set_Select_AccelVal.Text); ListView_AxisPosList.Items[m_nSelect_RowIndex].SubItems[(int)List_Index.Accel].Text = Set_Select_AccelVal.Text; //SaveServoData(); } } //Accel private void Set_Select_AccelVal_Click(object sender, EventArgs e) { var nPad = new NumericPad(); nPad.Setup("0", "1000"); //범위 변경해야 함 nPad.ShowDialog(); if (nPad.DialogResult != DialogResult.OK) return; //_parentForm.WriteToBtnLog("Screen_PMC_Maint : Set_Select_AccelVal_Click"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "Set_Select_AccelVal_Click"); //Button LogDB Set_Select_AccelVal.Text = nPad.GetValue(); ChangeAccel(); SaveServoData(); } private void ChangeAccel() { //_parentForm.WriteToBtnLog("Screen_PMC_Maint : Set_Select_AccelVal_TextChanged"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "Set_Select_AccelVal_TextChanged"); //Button LogDB //공유메모리에 전달 // //Grid에서 위치값 update //저장 // if (CheckSelectAxisPos() == false) { Set_Select_AccelVal.Text = ""; //_parentForm.WriteToBtnLog("Screen_PMC_Maint : Set_Select_AccelVal.Text = NULL"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "Set_Select_AccelVal.Text = NULL"); //Button LogDB return; } string strTag = Set_Select_AccelVal.Tag as string; if (strTag == "POSITION") { _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Position = Convert.ToDouble(Set_Select_PosVal.Text); ListView_AxisPosList.Items[m_nSelect_RowIndex].SubItems[(int)List_Index.Position].Text = Set_Select_PosVal.Text; //SaveServoData(); } else if (strTag == "SPEED") { _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Speed = Convert.ToDouble(Set_Select_SpeedVal.Text); ListView_AxisPosList.Items[m_nSelect_RowIndex].SubItems[(int)List_Index.Speed].Text = Set_Select_SpeedVal.Text; //SaveServoData(); } else if (strTag == "ACCEL") { _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Accel = Convert.ToDouble(Set_Select_AccelVal.Text); ListView_AxisPosList.Items[m_nSelect_RowIndex].SubItems[(int)List_Index.Accel].Text = Set_Select_AccelVal.Text; //SaveServoData(); } } private void SaveServoData() { _mainFrame.equipment.powerPmac.SaveMotorData(); } //---------------------------------------------------------------------------------------- // //조그 위치 이동 // //속도 private void Set_Control_Speed_Click(object sender, EventArgs e) { var nPad = new NumericPad(); nPad.Setup("0", "1000"); //범위 변경해야 함 nPad.ShowDialog(); if (nPad.DialogResult != DialogResult.OK) return; //_parentForm.WriteToBtnLog("Screen_PMC_Maint : Set_Control_Speed_Click"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "Set_Control_Speed_Click"); //Button LogDB Set_Control_Speed.Text = nPad.GetValue(); } private void Set_Control_Speed_TextChanged(object sender, EventArgs e) { //_parentForm.WriteToBtnLog("Screen_PMC_Maint : Set_Control_Speed_TextChanged"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "Set_Control_Speed_TextChanged"); //Button LogDB //공유메모리에 전달 (이동 속도) // //Grid에서 위치값 update } //위치 private void Set_Control_Pos_Click(object sender, EventArgs e) { var nPad = new NumericPad(); nPad.Setup("-2000", "2000"); //범위 변경해야 함 nPad.ShowDialog(); if (nPad.DialogResult != DialogResult.OK) return; //_parentForm.WriteToBtnLog("Screen_PMC_Maint : Set_Control_Pos_Click"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "Set_Control_Pos_Click"); //Button LogDB Set_Control_Pos.Text = nPad.GetValue(); } private void Set_Control_Pos_TextChanged(object sender, EventArgs e) { //_parentForm.WriteToBtnLog("Screen_PMC_Maint : Set_Control_Pos_TextChanged"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "Set_Control_Pos_TextChanged"); //Button LogDB //공유메모리에 전달 (이동 속도) // //Grid에서 위치값 update } //Stage #1 public void All_Axis_Home1() { //try //{ // if (bATT_n_Robot_Home == false) // ATT_n_Robot_Home(); //todo. LYW 분리 // bool _bServoCheck_S, _bServoCheck_X, _bServoCheck_Y, _bServoCheck_T; // //var ioPad = new DigitalIoPad(); // //ioPad.Setup(PadItem.NoYes, "All Axis Homing?"); // //ioPad.ShowDialog(); // //if (ioPad.DialogResult != DialogResult.OK) return; // //if (ioPad.GetValue() == "YES") // //{ // // Set Home Speed // _parentForm._UmacCtrl.Home_SetSpeed(UmacAxis.S_Axis, Convert.ToDouble(_IoMemory.ReadIo(eSystemParam.Stage_S_Home_Spd))); // _parentForm._UmacCtrl.Home_SetSpeed(UmacAxis.Y_Axis, Convert.ToDouble(_IoMemory.ReadIo(eSystemParam.Stage_Y_Home_Spd))); // _parentForm._UmacCtrl.Home_SetSpeed(UmacAxis.X_Axis, Convert.ToDouble(_IoMemory.ReadIo(eSystemParam.Stage_X_Home_Spd))); // _parentForm._UmacCtrl.Home_SetSpeed(UmacAxis.T_Axis, 1); // _bServoCheck_S = _parentForm._UmacCtrl.GetAxisStatus(UmacAxis.S_Axis, AxisStatus.ServoStatus); // if (!_bServoCheck_S) _parentForm._UmacCtrl.Amp_Enable(UmacAxis.S_Axis, true); // _bServoCheck_X = _parentForm._UmacCtrl.GetAxisStatus(UmacAxis.X_Axis, AxisStatus.ServoStatus); // if (!_bServoCheck_X) _parentForm._UmacCtrl.Amp_Enable(UmacAxis.X_Axis, true); // _bServoCheck_Y = _parentForm._UmacCtrl.GetAxisStatus(UmacAxis.Y_Axis, AxisStatus.ServoStatus); // if (!_bServoCheck_Y) _parentForm._UmacCtrl.Amp_Enable(UmacAxis.Y_Axis, true); // _bServoCheck_T = _parentForm._UmacCtrl.GetAxisStatus(UmacAxis.T_Axis, AxisStatus.ServoStatus); // if (!_bServoCheck_T) _parentForm._UmacCtrl.Amp_Enable(UmacAxis.T_Axis, true); // _parentForm._UmacCtrl.Home_SetSpeed(UmacAxis.S_Axis, Convert.ToDouble(_IoMemory.ReadIo(eSystemParam.Stage_S_Home_Spd))); // _parentForm._UmacCtrl.Home_Start(UmacAxis.S_Axis, true); // if (!HomeWaitMove(UmacAxis.S_Axis, 1000, 120000)) // { // _parentForm.MSGShow("S-Axis Home Time Out"); // this._parentForm._Main_Screen._SelfChkWork.MotionAlarm[3] = true; // return; // } // if (_parentForm._UmacCtrl.Home_Status(UmacAxis.S_Axis)) // { // //210831 hslee // _parentForm._MotionFunc.MoveSToClosePos(false); // //_parentForm._UmacCtrl.MoveS_SetPos(Convert.ToDouble(_IoMemory.ReadIo(eUserParam.Stage_S_Close_Pos))); // //_parentForm._UmacCtrl.MoveS_Run(); // } // Thread.Sleep(50); // _parentForm._UmacCtrl.Home_Start(UmacAxis.Y_Axis, true); // if (!HomeWaitMove(UmacAxis.Y_Axis, 1000, 120000)) { _parentForm.MSGShow("Y-Axis Home Time Out"); _parentForm._UmacCtrl.MoveXYTStop(); this._parentForm._Main_Screen._SelfChkWork.MotionAlarm[1] = true; return; } // Thread.Sleep(50); // _parentForm._UmacCtrl.Home_Start(UmacAxis.T_Axis, true); // if (!HomeWaitMove(UmacAxis.T_Axis, 1000, 120000)) { _parentForm.MSGShow("T-Axis Home Time Out"); _parentForm._UmacCtrl.MoveXYTStop(); this._parentForm._Main_Screen._SelfChkWork.MotionAlarm[2] = true; return; } // Thread.Sleep(50); // _parentForm._UmacCtrl.Home_Start(UmacAxis.X_Axis, true); // if (!HomeWaitMove(UmacAxis.X_Axis, 1000, 120000)) { _parentForm.MSGShow("X-Axis Home Time Out"); _parentForm._UmacCtrl.MoveXYTStop(); this._parentForm._Main_Screen._SelfChkWork.MotionAlarm[0] = true; return; } // _parentForm._TriggerBoard.Set_Reset_EncoderCounter(); // _parentForm.MSGShow("All Axis Home Complete"); //} //catch (Exception ee) //{ // _parentForm.WriteToDebugLog("Screen_PMC_Manual : All_Axis_Home ::" + ee.ToString()); //} } //Stage #2 public void All_Axis_Home2() { //try //{ // if(bATT_n_Robot_Home == false) // ATT_n_Robot_Home(); //todo. LYW 분리 // bool _bServoCheck_S, _bServoCheck_X, _bServoCheck_Y, _bServoCheck_T; // //var ioPad = new DigitalIoPad(); // //ioPad.Setup(PadItem.NoYes, "All Axis Homing?"); // //ioPad.ShowDialog(); // //if (ioPad.DialogResult != DialogResult.OK) return; // //if (ioPad.GetValue() == "YES") // //{ // // Set Home Speed // //_parentForm._UmacCtrl.Home_SetSpeed(Axis.S_Axis2, Convert.ToDouble(_IoMemory.ReadIo(eSystemParam.Stage_S_Home_Spd))); // _parentForm._UmacCtrl.Home_SetSpeed(UmacAxis.Y_Axis2, Convert.ToDouble(_IoMemory.ReadIo(eSystemParam.Stage_Y_Home_Spd))); // _parentForm._UmacCtrl.Home_SetSpeed(UmacAxis.X_Axis2, Convert.ToDouble(_IoMemory.ReadIo(eSystemParam.Stage_X_Home_Spd))); // _parentForm._UmacCtrl.Home_SetSpeed(UmacAxis.T_Axis2, 1); // //_bServoCheck_S = Convert.ToBoolean(_IoMemory.ReadIo(eModule_Motion_Info.S_ServeSts)); // //if (!_bServoCheck_S) _parentForm._UmacCtrl.Amp_Enable(Axis.S_Axis2, true); // _bServoCheck_X = _parentForm._UmacCtrl.GetAxisStatus(UmacAxis.X_Axis2, AxisStatus.ServoStatus); // if (!_bServoCheck_X) _parentForm._UmacCtrl.Amp_Enable(UmacAxis.X_Axis2, true); // _bServoCheck_Y = _parentForm._UmacCtrl.GetAxisStatus(UmacAxis.Y_Axis2, AxisStatus.ServoStatus); // if (!_bServoCheck_Y) _parentForm._UmacCtrl.Amp_Enable(UmacAxis.Y_Axis2, true); // _bServoCheck_T = _parentForm._UmacCtrl.GetAxisStatus(UmacAxis.T_Axis2, AxisStatus.ServoStatus); // if (!_bServoCheck_T) _parentForm._UmacCtrl.Amp_Enable(UmacAxis.T_Axis2, true); // //_parentForm._UmacCtrl.Home_SetSpeed(Axis.S_Axis2, Convert.ToDouble(_IoMemory.ReadIo(eSystemParam.Stage_S_Home_Spd))); // //_parentForm._UmacCtrl.Home_Start(Axis.S_Axis2, true); // //if (!HomeWaitMove(Axis.S_Axis, 1000, 120000)) // //{ // // _parentForm.MSGShow("S-Axis Home Time Out"); // // this._parentForm._Main_Screen._SelfChkWork.MotionAlarm[3] = true; // // return; // //} // //if (_parentForm._UmacCtrl.Home_Status(Axis.S_Axis)) // //{ // // _parentForm._UmacCtrl.MoveS_SetPos(Convert.ToDouble(_IoMemory.ReadIo(eUserParam.Stage_S_Close_Pos))); // // _parentForm._UmacCtrl.MoveS_Run(); // //} // Thread.Sleep(50); // _parentForm._UmacCtrl.Home_Start(UmacAxis.Y_Axis2, true); // if (!HomeWaitMove(UmacAxis.Y_Axis2, 1000, 120000)) { _parentForm.MSGShow("Y-Axis2 Home Time Out"); _parentForm._MotionFunc.MoveAllStop(); this._parentForm._Main_Screen._SelfChkWork.MotionAlarm[1] = true; return; } // Thread.Sleep(50); // _parentForm._UmacCtrl.Home_Start(UmacAxis.T_Axis2, true); // if (!HomeWaitMove(UmacAxis.T_Axis2, 1000, 120000)) { _parentForm.MSGShow("T-Axis2 Home Time Out"); _parentForm._MotionFunc.MoveAllStop(); this._parentForm._Main_Screen._SelfChkWork.MotionAlarm[2] = true; return; } // Thread.Sleep(50); // _parentForm._UmacCtrl.Home_Start(UmacAxis.X_Axis2, true); // if (!HomeWaitMove(UmacAxis.X_Axis2, 1000, 120000)) { _parentForm.MSGShow("X-Axis2 Home Time Out"); _parentForm._MotionFunc.MoveAllStop(); this._parentForm._Main_Screen._SelfChkWork.MotionAlarm[0] = true; return; } // _parentForm._TriggerBoard.Set_Reset_EncoderCounter(); // _parentForm.MSGShow("All Axis2 Home Complete"); //} //catch (Exception ee) //{ // _parentForm.WriteToDebugLog("Screen_Maint_Manual : All_Axis2_Home ::" + ee.ToString()); //} } #endregion #region "전체 모터 조작" //CMB #1 - 전체 모터 servo on private void BtnAllServoON_Click(object sender, EventArgs e) { AllServoON(); } //CMB #1 - 전체 모터 servo off private void BtnAllServoOFF_Click(object sender, EventArgs e) { AllServoOFF(); } //CMB #1 - 전체 모터 home private void BtnAllHome_Click(object sender, EventArgs e) { All_Home1(); } //CMB #1 - 전체 모터 stop private void BtnAllStop_Click(object sender, EventArgs e) { All_Stop(); } private void AllServoON() { var ioPad = new DigitalIoPad(); ioPad.Setup(PadItem.NoYes, "ALL SERVO ON?"); ioPad.ShowDialog(); if (ioPad.DialogResult != DialogResult.OK) return; if (ioPad.GetValue() != "YES") return; //_parentForm.WriteToBtnLog("Screen_PMC_Maintenance : btnAllServoON1_Click"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "btnAllServoON1_Click"); //Button LogDB try { EquipmentLogManager.Instance.WriteButtonLog($"{this.Name} : All Servo on"); _mainFrame.equipment.powerPmac.ServoOnOff(PmacAxis.X_Axis, true); _mainFrame.equipment.powerPmac.ServoOnOff(PmacAxis.Y_Axis, true); _mainFrame.equipment.powerPmac.ServoOnOff(PmacAxis.T_Axis, true); //_parentForm._UmacCtrl.Amp_Enable(Axis.S_Axis, true);//??? } catch (Exception ex) { EquipmentLogManager.Instance.WriteExceptionLog(ex.StackTrace + "\r\n" + ex.Message); } } private void AllServoOFF() { var ioPad = new DigitalIoPad(); ioPad.Setup(PadItem.NoYes, "ALL SERVO OFF?"); ioPad.ShowDialog(); if (ioPad.DialogResult != DialogResult.OK) return; if (ioPad.GetValue() != "YES") return; EquipmentLogManager.Instance.WriteButtonLog($"{this.Name} : All servo off"); //_parentForm.WriteToBtnLog("Screen_PMC_Maintenance : btnAllServoOFF1_Click"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "btnAllServoOFF1_Click"); //Button LogDB try { _mainFrame.equipment.powerPmac.ServoOnOff(PmacAxis.X_Axis, false); _mainFrame.equipment.powerPmac.ServoOnOff(PmacAxis.Y_Axis, false); _mainFrame.equipment.powerPmac.ServoOnOff(PmacAxis.T_Axis, false); //_parentForm._UmacCtrl.Amp_Enable(Axis.S_Axis, false); } catch (Exception ex) { EquipmentLogManager.Instance.WriteExceptionLog(ex.StackTrace + "\r\n" + ex.Message); } } private void All_Home1() { //var ioPad = new DigitalIoPad(); //ioPad.Setup(PadItem.NoYes, "Do you want to start all axis's initial job?"); //ioPad.ShowDialog(); //if (ioPad.DialogResult != DialogResult.OK) return; //if (ioPad.GetValue() != "YES") return; ////_parentForm.WriteToBtnLog("Screen_PMC_Manual : btnAllHome_Click"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "btnAllHome1_Click"); //Button LogDB //if (_parentForm._AlarmMgr.ScanAlarmRegistered(Alarm_List.AL_STAGE_CDA_PRESS_HIGH) || _parentForm._AlarmMgr.ScanAlarmRegistered(Alarm_List.AL_STAGE_CDA_PRESS_LOW)) //{ _parentForm.MSGShow("Check Stage CDA Alarm !!"); return; } //if (_parentForm._IO_Dual_Screen.Get_PMC_DO(PMC_DOUT.X1_AXIS_DYNAMIC_BRAKE_OFF) == false) // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.X1_AXIS_DYNAMIC_BRAKE_OFF, true); //if (_parentForm._IO_Dual_Screen.Get_PMC_DO(PMC_DOUT.Y1_AXIS_DYNAMIC_BRAKE_OFF) == false) // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.Y1_AXIS_DYNAMIC_BRAKE_OFF, true); //_ThreadClass[(int)eThread._Axis_All_Home1].Start(); EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : All home"); } private void All_Stop() { var ioPad = new DigitalIoPad(); ioPad.Setup(PadItem.NoYes, "ALL STOP?"); ioPad.ShowDialog(); if (ioPad.DialogResult != DialogResult.OK) return; if (ioPad.GetValue() != "YES") return; //_parentForm.WriteToBtnLog("Screen_PMC_Maintenance : btnAllServoOFF1_Click"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "btnAllServoOFF1_Click"); //Button LogDB try { EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : All stop"); _mainFrame.equipment.powerPmac.MoveStop(PmacAxis.X_Axis); _mainFrame.equipment.powerPmac.MoveStop(PmacAxis.Y_Axis); _mainFrame.equipment.powerPmac.MoveStop(PmacAxis.T_Axis); //_parentForm._UmacCtrl.Amp_Enable(Axis.S_Axis, false); } catch (Exception ex) { EquipmentLogManager.Instance.WriteExceptionLog(ex.StackTrace + "\r\n" + ex.Message); } } private void All_Home2() { //var ioPad = new DigitalIoPad(); //ioPad.Setup(PadItem.NoYes, "Do you want to start all axis's initial job?"); //ioPad.ShowDialog(); //if (ioPad.DialogResult != DialogResult.OK) return; //if (ioPad.GetValue() != "YES") return; ////_parentForm.WriteToBtnLog("Screen_PMC_Manual : btnAllHome_Click"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "btnAllHome2_Click"); //Button LogDB //if (_parentForm._AlarmMgr.ScanAlarmRegistered(Alarm_List.AL_STAGE_CDA_PRESS_HIGH) || _parentForm._AlarmMgr.ScanAlarmRegistered(Alarm_List.AL_STAGE_CDA_PRESS_LOW)) //{ _parentForm.MSGShow("Check Stage CDA Alarm !!"); return; } //if (_parentForm._IO_Dual_Screen.Get_PMC_DO(PMC_DOUT.X2_AXIS_DYNAMIC_BRAKE_OFF) == false) // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.X2_AXIS_DYNAMIC_BRAKE_OFF, true); //if (_parentForm._IO_Dual_Screen.Get_PMC_DO(PMC_DOUT.Y2_AXIS_DYNAMIC_BRAKE_OFF) == false) // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.Y2_AXIS_DYNAMIC_BRAKE_OFF, true); //_ThreadClass[(int)eThread._Axis_All_Home2].Start(); } private void All_Stop2() { } //------------------------------------------------ //CMB #2 - 전체 모터 servo on private void BtnAllServoON2_Click(object sender, EventArgs e) { //AllServoON_Stage2(); } //CMB #2 - 전체 모터 servo off private void BtnAllServoOFF2_Click(object sender, EventArgs e) { //AllServoOFF_Stage2(); } //CMB #2 - 전체 모터 home private void BtnAllHome2_Click(object sender, EventArgs e) { } //CMB #2 - 전체 모터 stop private void BtnAllStop2_Click(object sender, EventArgs e) { } #endregion //*************************************************************************************** // Stage I/O 정보 표시 (그래픽 처리) //*************************************************************************************** //GDI+ #region Field /// /// 그래프 스레드 /// private Thread graphThread; /// /// Bitmap 정의 /// int bitmapWidth; int bitmapHeight; Bitmap bitmap; int bitmapWidth1; int bitmapHeight1; Bitmap bitmap1; /// /// 그래픽 컬러 /// SolidBrush _brush_Empty = new SolidBrush(Color.White); //Idle SolidBrush _brush_Lime = new SolidBrush(Color.Lime); //OK SolidBrush _brush_Limit = new SolidBrush(Color.LightCoral); //Alarm, Error, Limit SolidBrush _brush_Alarm = new SolidBrush(Color.Red); //Alarm, Error, Limit SolidBrush _brush_Complete = new SolidBrush(Color.LightGreen); //OK /// /// 설정값 정의 /// private int nTextSize = 7; //Text size private string nStr = "";//bar index private int nBarW = 65;//bar size W private int nBarH = 16;//bar size H private int nOffset;//bar 간 상하간격 private int nStartX = 1;//bar 뿌리는 시작위치 private int[] nShift = { 0, 65 + 4, 130 + 6, 195 + 8 }; private int i = 1; string[] Index_X1 = new string[] { "X1 Limit +", "X1 Limit -", "X1 Home", "X1 Inpos", "X1 Alarm", "X1 Error", "X1 AmpFault", "X1 Servo", "0", "0" }; string[] Index_Y1 = new string[] { "Y1 Limit +", "Y1 Limit -", "Y1 Home", "Y1 Inpos", "Y1 Alarm", "Y1 Error", "Y1 AmpFault", "Y1 Servo", "0", "0" }; string[] Index_T1 = new string[] { "T1 Limit +", "T1 Limit -", "T1 Home", "T1 Inpos", "T1 Alarm", "T1 Error", "T1 AmpFault", "T1 Servo", "0", "0" }; string[] Index_S1 = new string[] { "S1 Limit +", "S1 Limit -", "S1 Home", "S1 Inpos", "S1 Alarm", "S1 Error", "S1 AmpFault", "S1 Servo", "0", "0" }; string[] Index_X2 = new string[] { "X2 Limit +", "X2 Limit -", "X2 Home", "X2 Inpos", "X2 Alarm", "X2 Error", "X2 AmpFault", "X2 Servo", "0", "0" }; string[] Index_Y2 = new string[] { "Y2 Limit +", "Y2 Limit -", "Y2 Home", "Y2 Inpos", "Y2 Alarm", "Y2 Error", "Y2 AmpFault", "Y2 Servo", "0", "0" }; string[] Index_T2 = new string[] { "T2 Limit +", "T2 Limit -", "T2 Home", "T2 Inpos", "T2 Alarm", "T2 Error", "T2 AmpFault", "T2 Servo", "0", "0" }; string[] Index_S2 = new string[] { "S2 Limit +", "S2 Limit -", "S2 Home", "S2 Inpos", "S2 Alarm", "S2 Error", "S2 AmpFault", "S2 Servo", "0", "0" }; #endregion "---------------" #region "Stage Information 그래픽 처리" Graphics _graphics_Stage1; Graphics _graphics_Stage2; private void DisplayStageInfo() { try { //if (!_parentForm._IO_Dual_Screen.Get_PMC_DI(PMC_DIN.Y1_MOTOR_OVERTEMP)) //{ // _parentForm.AddAlarm(Alarm_List.AL_STAGE_Y1_AXIS_OVERTEMP); // _parentForm._Main_Screen.ProcPause(); // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.SHUTTER_OPN_1, false); // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.SHUTTER_OPN_2, false); // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.SHUTTER_OPN_3, false); // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.SHUTTER_OPN_4, false); //} //if (!_parentForm._IO_Dual_Screen.Get_PMC_DI(PMC_DIN.Y2_MOTOR_OVERTEMP)) //{ // _parentForm.AddAlarm(Alarm_List.AL_STAGE_Y2_AXIS_OVERTEMP); // _parentForm._Main_Screen.ProcPause(); // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.SHUTTER_OPN_1, false); // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.SHUTTER_OPN_2, false); // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.SHUTTER_OPN_3, false); // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.SHUTTER_OPN_4, false); //} //if (!_parentForm._IO_Dual_Screen.Get_PMC_DI(PMC_DIN.X1_MOTOR_OVERTEMP)) //{ // _parentForm.AddAlarm(Alarm_List.AL_STAGE_X1_AXIS_OVERTEMP); // _parentForm._Main_Screen.ProcPause(); // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.SHUTTER_OPN_1, false); // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.SHUTTER_OPN_2, false); // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.SHUTTER_OPN_3, false); // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.SHUTTER_OPN_4, false); //} //if (!_parentForm._IO_Dual_Screen.Get_PMC_DI(PMC_DIN.X2_MOTOR_OVERTEMP)) //{ // _parentForm.AddAlarm(Alarm_List.AL_STAGE_X2_AXIS_OVERTEMP); //X2 alarm 추가 // _parentForm._Main_Screen.ProcPause(); // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.SHUTTER_OPN_1, false); // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.SHUTTER_OPN_2, false); // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.SHUTTER_OPN_3, false); // _parentForm._IO_Dual_Screen.Set_PMC_IoBit(PMC_DOUT.SHUTTER_OPN_4, false); //} } catch (Exception ex) { EquipmentLogManager.Instance.WriteExceptionLog(ex.StackTrace + "\r\n" + ex.Message); } } private double[] m_dOldPos = new double[(int)PmacAxis.enMax]; private double[] m_dOldSpeed = new double[(int)PmacAxis.enMax]; private bool[,] m_bOldStatus = new bool[(int)PmacAxis.enMax, 6]; private void MotorInfo() { try { Label[] lblPos = { lblPos1, lblPos2, lblPos3 }; Label[] lblVel = { lblVel1, lblVel2, lblVel3 }; Label[] lblServo = { lblServo1, lblServo2, lblServo3 }; Label[] lblPLimit = { lblPLimit1, lblPLimit2, lblPLimit3 }; Label[] lblNLimit = { lblNLimit1, lblNLimit2, lblNLimit3 }; Label[] lblFault = { lblFault1, lblFault2, lblFault3 }; Label[] lblInPos = { lblInPos1, lblInPos2, lblInPos3 }; Label[] lblHomeComplete = { lblHomeComp1, lblHomeComp2, lblHomeComp3 }; int nCnt = 0; for(int i = 0; i < (int)PmacAxis.enMax; i++) { nCnt = 0; //Pos if(m_dOldPos[i] != _mainFrame.equipment.powerPmac.GetAxisActualPos((PmacAxis)i)) { m_dOldPos[i] = _mainFrame.equipment.powerPmac.GetAxisActualPos((PmacAxis)i); lblPos[i].Text = m_dOldPos[i].ToString(); } //Vel if (m_dOldSpeed[i] != _mainFrame.equipment.powerPmac.GetAxisActualSpeed((PmacAxis)i)) { m_dOldSpeed[i] = _mainFrame.equipment.powerPmac.GetAxisActualSpeed((PmacAxis)i); lblVel[i].Text = m_dOldSpeed[i].ToString(); } //Servo if (m_bOldStatus[i, nCnt] != _mainFrame.equipment.powerPmac.GetAxisStatus((PmacAxis)i, AxisStatus.ServoOn)) { m_bOldStatus[i, nCnt] = _mainFrame.equipment.powerPmac.GetAxisStatus((PmacAxis)i, AxisStatus.ServoOn); if(m_bOldStatus[i, nCnt]) lblServo[i].BackColor = Color.Green; else lblServo[i].BackColor = Color.Transparent; } nCnt++; //PLIMIT if (m_bOldStatus[i, nCnt] != _mainFrame.equipment.powerPmac.GetAxisStatus((PmacAxis)i, AxisStatus.PLimit_HW)) { m_bOldStatus[i, nCnt] = _mainFrame.equipment.powerPmac.GetAxisStatus((PmacAxis)i, AxisStatus.PLimit_HW); if (m_bOldStatus[i, nCnt]) lblPLimit[i].BackColor = Color.Red; else lblPLimit[i].BackColor = Color.Transparent; } nCnt++; //NLIMIT if (m_bOldStatus[i, nCnt] != _mainFrame.equipment.powerPmac.GetAxisStatus((PmacAxis)i, AxisStatus.NLimit_HW)) { m_bOldStatus[i, nCnt] = _mainFrame.equipment.powerPmac.GetAxisStatus((PmacAxis)i, AxisStatus.NLimit_HW); if (m_bOldStatus[i, nCnt]) lblNLimit[i].BackColor = Color.Red; else lblNLimit[i].BackColor = Color.Transparent; } nCnt++; //FAULT if (m_bOldStatus[i, nCnt] != _mainFrame.equipment.powerPmac.GetAxisStatus((PmacAxis)i, AxisStatus.AmpFault)) { m_bOldStatus[i, nCnt] = _mainFrame.equipment.powerPmac.GetAxisStatus((PmacAxis)i, AxisStatus.AmpFault); if (m_bOldStatus[i, nCnt]) lblFault[i].BackColor = Color.Red; else lblFault[i].BackColor = Color.Transparent; } nCnt++; //INPOS if (m_bOldStatus[i, nCnt] != _mainFrame.equipment.powerPmac.GetAxisStatus((PmacAxis)i, AxisStatus.InPos)) { m_bOldStatus[i, nCnt] = _mainFrame.equipment.powerPmac.GetAxisStatus((PmacAxis)i, AxisStatus.InPos); if (m_bOldStatus[i, nCnt]) lblInPos[i].BackColor = Color.Green; else lblInPos[i].BackColor = Color.Transparent; } nCnt++; //HOME COMP if (m_bOldStatus[i, nCnt] != _mainFrame.equipment.powerPmac.GetAxisStatus((PmacAxis)i, AxisStatus.HomeComplete)) { m_bOldStatus[i, nCnt] = _mainFrame.equipment.powerPmac.GetAxisStatus((PmacAxis)i, AxisStatus.HomeComplete); if (m_bOldStatus[i, nCnt]) lblHomeComplete[i].BackColor = Color.Green; else lblHomeComplete[i].BackColor = Color.Transparent; } nCnt++; } } catch (Exception ex) { EquipmentLogManager.Instance.WriteExceptionLog(ex.StackTrace + "\r\n" + ex.Message); } } private void DisplaySelectedAxisInfo() { bool[] bTemp = new bool[6]; for (int i = 0; i < bTemp.Length; i++) bTemp[i] = false; if (CheckSelectAxisPos() == false) { return; } //tbCurPos.Text = _IoMemory.ReadIo((eModule_Motion_Info)((int)eModule_Motion_Info.Y_CurPos + m_nSelectAxis_Index)); //tbCurSpeed.Text = _IoMemory.ReadIo((eModule_Motion_Info)((int)eModule_Motion_Info.Y_CurSpd + m_nSelectAxis_Index)); tbCurPos.Text = _mainFrame.equipment.powerPmac.GetAxisActualPos(PmacAxis.Y_Axis + m_nSelectAxis_Index).ToString("F4"); tbCurSpeed.Text = _mainFrame.equipment.powerPmac.GetAxisActualSpeed(PmacAxis.Y_Axis + m_nSelectAxis_Index).ToString("F4"); //Servo bTemp[0] = _mainFrame.equipment.powerPmac.GetAxisStatus(PmacAxis.Y_Axis + m_nSelectAxis_Index, AxisStatus.ServoOn); //PlusLimit bTemp[1] = _mainFrame.equipment.powerPmac.GetAxisStatus(PmacAxis.Y_Axis + m_nSelectAxis_Index, AxisStatus.PLimit_HW); //MinusLimit bTemp[2] = _mainFrame.equipment.powerPmac.GetAxisStatus(PmacAxis.Y_Axis + m_nSelectAxis_Index, AxisStatus.NLimit_HW); //Fault //Alarm bTemp[3] = _mainFrame.equipment.powerPmac.GetAxisStatus(PmacAxis.Y_Axis + m_nSelectAxis_Index, AxisStatus.AmpFault); //In Position bTemp[4] = _mainFrame.equipment.powerPmac.GetAxisStatus(PmacAxis.Y_Axis + m_nSelectAxis_Index, AxisStatus.InPos); //Home bTemp[5] = _mainFrame.equipment.powerPmac.GetAxisStatus(PmacAxis.Y_Axis + m_nSelectAxis_Index, AxisStatus.HomeComplete); //LED int nCnt = 0; //Servo if (m_bOldAxisStatus[nCnt] != bTemp[nCnt]) { if (bTemp[nCnt]) Label_LED_ServoOn.BackColor = Color.Green; else Label_LED_ServoOn.BackColor = Color.White; m_bOldAxisStatus[nCnt] = bTemp[nCnt]; } nCnt++; //PlusLimit if (m_bOldAxisStatus[nCnt] != bTemp[nCnt]) { if (bTemp[nCnt]) Label_LED_PlusLimit.BackColor = Color.Red; else Label_LED_PlusLimit.BackColor = Color.White; m_bOldAxisStatus[nCnt] = bTemp[nCnt]; } nCnt++; //MinusLimit if (m_bOldAxisStatus[nCnt] != bTemp[nCnt]) { if (bTemp[nCnt]) Label_LED_MinusLimit.BackColor = Color.Red; else Label_LED_MinusLimit.BackColor = Color.White; m_bOldAxisStatus[nCnt] = bTemp[nCnt]; } nCnt++; //Fault if (m_bOldAxisStatus[nCnt] != bTemp[nCnt]) { if (bTemp[nCnt]) Label_LED_FlowingError.BackColor = Color.Red; else Label_LED_FlowingError.BackColor = Color.White; m_bOldAxisStatus[nCnt] = bTemp[nCnt]; } nCnt++; //InPosition if (m_bOldAxisStatus[nCnt] != bTemp[nCnt]) { if (bTemp[nCnt]) Label_LED_InPos.BackColor = Color.Green; else Label_LED_InPos.BackColor = Color.White; m_bOldAxisStatus[nCnt] = bTemp[nCnt]; } nCnt++; //Home if (m_bOldAxisStatus[nCnt] != bTemp[nCnt]) { if (bTemp[nCnt]) Label_LED_Home.BackColor = Color.Green; else Label_LED_Home.BackColor = Color.White; m_bOldAxisStatus[nCnt] = bTemp[nCnt]; } nCnt++; } private void GR200Update() { tb_MainCDAPressure.Text = _mainFrame.equipment.gr200.MainCDAPressure.ToString(); tb_MainVacuumPressure.Text = _mainFrame.equipment.gr200.MainVacuumPressure.ToString(); tb_N2PTPPressure.Text = _mainFrame.equipment.gr200.N2PTPressure.ToString(); tb_MainCDAFlow.Text = _mainFrame.equipment.gr200.MainCDAFlow.ToString(); tb_ChamberVacuumPressure.Text = _mainFrame.equipment.gr200.ChamberVacuumPressure.ToString(); } #endregion "---------------" //*************************************************************************************** // ListView Event //*************************************************************************************** #region "ListView Event" private void ListView_AxisPosList_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) { e.DrawDefault = true; } private void ListView_AxisPosList_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) { ListView _ListView = sender as ListView; int nIndex = e.ItemIndex; int nColumn = e.ColumnIndex; //if (e.SubItem.Bounds.Width == e.SubItem.Bounds.Right) //{ // e.DrawDefault = true; // return; //} if (nColumn == 0)//e.SubItem.Bounds.Width == e.SubItem.Bounds.Right) { e.DrawDefault = true; return; } if (nIndex > -1) { //int nAxis = int.Parse(e.SubItem.Text.ToString()); int nAxis = int.Parse(_ListView.Items[nIndex].SubItems[(int)List_Index.EnumNo].Text); #region Select 색 변경. Graphics g = e.Graphics; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.Default; g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SystemDefault; //사용할 브러쉬 선언 SolidBrush backBrush = null; SolidBrush foreBrush = null; //선택된 항목이 아닌경우 일반적으로 브러쉬 생성 if ((e.ItemState & ListViewItemStates.Focused) == 0) { backBrush = new SolidBrush(SystemColors.Window); foreBrush = new SolidBrush(SystemColors.WindowText); } else {//선택된 항목의 경우는 선택된 항목인 경우 브러쉬 생성 backBrush = new SolidBrush(SystemColors.Highlight); foreBrush = new SolidBrush(SystemColors.HighlightText); } //강조 인덱스가 설정 된 경우 if (nAxis % 3 == 1) { if (foreBrush != null) foreBrush.Dispose(); if (e.Item.Selected == true) //|| (e.ItemState & ListViewItemStates.Focused) == ListViewItemStates.Focused) {//선택된 항목의 경우 브러쉬 생성 backBrush = new SolidBrush(Color.LightGreen);//Color.Lime foreBrush = new SolidBrush(Color.Blue); } else {//포커스가 아닌 놈은 선택 색으로 텍스트 브러쉬를 생성 backBrush = new SolidBrush(Color.LightGreen);//Color.Lime foreBrush = new SolidBrush(SystemColors.WindowText); } } else if (nAxis % 3 == 2) { if (foreBrush != null) foreBrush.Dispose(); if (e.Item.Selected == true) //|| (e.ItemState & ListViewItemStates.Focused) == ListViewItemStates.Focused) {//선택된 항목의 경우 브러쉬 생성 backBrush = new SolidBrush(Color.LightBlue);//Color.DeepSkyBlue foreBrush = new SolidBrush(Color.Blue); } else {//포커스가 아닌 놈은 선택 색으로 텍스트 브러쉬를 생성 backBrush = new SolidBrush(Color.LightBlue);//Color.DeepSkyBlue foreBrush = new SolidBrush(SystemColors.WindowText); } } else { if (foreBrush != null) foreBrush.Dispose(); if (e.Item.Selected == true) //|| (e.ItemState & ListViewItemStates.Focused) == ListViewItemStates.Focused) {//선택된 항목의 경우 브러쉬 생성 backBrush = new SolidBrush(Color.LightYellow);//Color.Gold foreBrush = new SolidBrush(Color.Blue); } else {//포커스가 아닌 놈은 선택 색으로 텍스트 브러쉬를 생성 backBrush = new SolidBrush(Color.LightYellow);//Color.Gold foreBrush = new SolidBrush(SystemColors.WindowText); } } //배경색 채우기 g.FillRectangle(backBrush, e.SubItem.Bounds.X, e.SubItem.Bounds.Y, e.SubItem.Bounds.Width, e.SubItem.Bounds.Height); //아이템 텍스트 Draw 가운데 정렬. Rectangle drawRect = new Rectangle(e.SubItem.Bounds.X, e.SubItem.Bounds.Y, e.SubItem.Bounds.Width, e.SubItem.Bounds.Height); StringFormat stringFormat = new StringFormat(); stringFormat.Alignment = StringAlignment.Center; stringFormat.LineAlignment = StringAlignment.Center; g.DrawString(e.SubItem.Text, _ListView.Font, foreBrush, drawRect, stringFormat); //리소스 해제 if (backBrush != null) backBrush.Dispose(); if (foreBrush != null) foreBrush.Dispose(); #endregion } else { e.DrawDefault = true; } } private void ListView_AxisPosList_SelectedIndexChanged(object sender, EventArgs e) { ListView listView = sender as ListView; if (listView.SelectedItems.Count <= 0) return; int nIndex = listView.SelectedItems[0].Index; if (nIndex < 0) return; Label_CurrentInfo_AxisName.Text = listView.Items[nIndex].SubItems[(int)List_Index.Axis_Name].Text; //Label_CurrentInfo_AxisName.Text = listView.Items[nIndex].SubItems[2].Text; Label_Select_Axis_PosName.Text = Label_CurrentInfo_PositionName.Text = listView.Items[nIndex].SubItems[(int)List_Index.Pos_Name].Text; Label_CurrentInfo_AxisNo.Text = listView.Items[nIndex].SubItems[(int)List_Index.Axis].Text; Label_CurrentInfo_PosIndex.Text = listView.Items[nIndex].SubItems[(int)List_Index.PosIndex].Text; Label_Select_Axis_PosVal.Text = Set_Select_PosVal.Text = listView.Items[nIndex].SubItems[(int)List_Index.Position].Text; Set_Select_SpeedVal.Text = listView.Items[nIndex].SubItems[(int)List_Index.Speed].Text; Set_Select_AccelVal.Text = listView.Items[nIndex].SubItems[(int)List_Index.Accel].Text; try { if (ListView_AxisPosList.SelectedItems.Count > 0) m_nSelect_RowIndex = ListView_AxisPosList.SelectedItems[0].Index; m_nSelectAxis_Index = int.Parse(listView.Items[nIndex].SubItems[(int)List_Index.EnumNo].Text); m_nSelectPos_Index = int.Parse(Label_CurrentInfo_PosIndex.Text) - 1; } catch { m_nSelect_RowIndex = -1; m_nSelectAxis_Index = -1; m_nSelectPos_Index = -1; } } #endregion #region "JOG" //+ 방향 private void Btn_Jog_CW_MouseDown(object sender, MouseEventArgs e) { try { if (!JogMoveInterlockCheck(true, false)) return; //_parentForm.WriteToBtnLog("Screen_PMC_Manual : btnYJogM_MouseDown"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "btnJogP_MouseDown"); //Button LogDB //_parentForm._frmPmc.EXTShutterCLS(); //if (_parentForm._AlarmMgr.ScanAlarmRegistered(Alarm_List.AL_STAGE_CDA_PRESS_HIGH) || _parentForm._AlarmMgr.ScanAlarmRegistered(Alarm_List.AL_STAGE_CDA_PRESS_LOW)) //{ _parentForm.MSGShow("Check Stage CDA Alarm !!"); return; } //210831 hslee //_parentForm._MotionFunc.MoveSToClosePos(false); //축 번호에 따라 구분하여 적용 - 수정필요 //if (!_parentForm._frmPmc.ChkGateCLS(0)) return; //if (!_parentForm._frmPmc.ChkGateCLS(1)) return; // //210817 hslee //정말 싫어하는 방법이지만 이번엔 쓰자 //pmac EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Positiove Jog {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name} Speed {Set_Control_Speed.Text}"); _mainFrame.equipment.powerPmac.MoveJog((PmacAxis)m_nSelectAxis_Index, Convert.ToDouble(Set_Control_Speed.Text), MotionDirection.Plus); } catch (Exception ex) { EquipmentLogManager.Instance.WriteExceptionLog(ex.StackTrace + "\r\n" + ex.Message); } } private void Btn_Jog_CW_MouseUp(object sender, MouseEventArgs e) { try { //if (!JogMoveInterlockCheck(true, true)) // return; //PMac EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Stop {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name}"); _mainFrame.equipment.powerPmac.MoveStop((PmacAxis)m_nSelectAxis_Index); } catch (Exception ex) { EquipmentLogManager.Instance.WriteExceptionLog(ex.StackTrace + "\r\n" + ex.Message); } } //-방향 private void Btn_Jog_CCW_MouseDown(object sender, MouseEventArgs e) { try { if (!JogMoveInterlockCheck(true, false)) return; //_parentForm.WriteToBtnLog("Screen_PMC_Manual : btnYJogM_MouseDown"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "btnJogM_MouseDown"); //Button LogDB //_parentForm._IOFunc.SolExtAllShutterOpenClose(false, false); //if (_parentForm._AlarmMgr.ScanAlarmRegistered(Alarm_List.AL_STAGE_CDA_PRESS_HIGH) || _parentForm._AlarmMgr.ScanAlarmRegistered(Alarm_List.AL_STAGE_CDA_PRESS_LOW)) //{ _parentForm.MSGShow("Check Stage CDA Alarm !!"); return; } //210831 hslee // _parentForm._MotionFunc.MoveSToClosePos(false); //축 번호에 따라 구분하여 적용 - 수정필요 //if (!_parentForm._frmPmc.ChkGateCLS(0)) return; //if (!_parentForm._frmPmc.ChkGateCLS(1)) return; // //PMac EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Negative Jog {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name} Speed {Set_Control_Speed.Text}"); _mainFrame.equipment.powerPmac.MoveJog((PmacAxis)m_nSelectAxis_Index, Convert.ToDouble(Set_Control_Speed.Text), MotionDirection.Minus); } catch (Exception ex) { EquipmentLogManager.Instance.WriteExceptionLog(ex.StackTrace + "\r\n" + ex.Message); } } private void Btn_Jog_CCW_MouseUp(object sender, MouseEventArgs e) { try { //if (!JogMoveInterlockCheck(true, true)) // return; //PMac EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Stop {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name}"); _mainFrame.equipment.powerPmac.MoveStop((PmacAxis)m_nSelectAxis_Index); } catch (Exception ex) { EquipmentLogManager.Instance.WriteExceptionLog(ex.StackTrace + "\r\n" + ex.Message); } } #endregion #region "축 구동버튼" /// /// 저장위치 이동 /// /// /// private void Btn_PositionMove_Click(object sender, EventArgs e) { //선택된 인덱스 체크 if (!CheckSelectAxisPos()) return; //조그 UI 인터락체크 //if (!JogMoveInterlockCheck()) // return; //이동 double dPos = _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Position; double dSpeed = _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Speed; double dAcc = _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Accel; EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Position Move {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name} Position {dPos}, Speed {dSpeed}, Accel {dAcc}"); MoveAbs(m_nSelectAxis_Index, dPos, dSpeed, dAcc); } /// /// 위치 설정 버튼 /// /// /// private void Btn_PositionSet_Click(object sender, EventArgs e) { bool[] bRecipeLoad = new bool[2]; bool[] bRecipeSave = { false, false }; string[] strRecipeName = new string[2]; if (MessageBox.Show("선택한 위치를 저장하시겠습니까?", "확인", MessageBoxButtons.YesNo) != DialogResult.Yes) { return; } _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Position = Convert.ToDouble(tbCurPos.Text); //20210917 ListView_AxisPosList.Items[m_nSelect_RowIndex].SubItems[6].Text = _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Position.ToString(); //위치 Set_Select_PosVal.Text = _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Position.ToString(); EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Set Position {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name} {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Name} Position {tbCurPos.Text}"); SaveServoData(); // InitView(); } /// /// Servo On/Off 버튼 /// /// /// private void Btn_ServoOnOff_Click(object sender, EventArgs e) { string strMsg = ""; bool bCurStatus = _mainFrame.equipment.powerPmac.GetAxisStatus(PmacAxis.Y_Axis + m_nSelectAxis_Index, AxisStatus.ServoOn);/*_IoMemory.ReadIoBool(eModule_Motion_Info.Y_ServeSts + m_nSelectAxis_Index);*/ if (bCurStatus) strMsg = "선택 축 Servo를 Off 하시겠습니까?"; else strMsg = "선택 축 Servo를 On 하시겠습니까?"; if (MessageBox.Show(strMsg, "확인", MessageBoxButtons.YesNo) != DialogResult.Yes) { return; } if(bCurStatus) { EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Position {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name} Servo Off"); } else { EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Position {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name} Servo On"); } _mainFrame.equipment.powerPmac.ServoOnOff((PmacAxis)m_nSelectAxis_Index, !bCurStatus); } /// /// 전체 Home 버튼 /// /// /// private void Btn_Home_Click(object sender, EventArgs e) { //인터락 추가필요 if (!CheckSelectAxisPos()) { MessageBox.Show("축 선택이 되어있지 않습니다.", "Warning"); return; } //Home Start double dSpeed = 0.0; //인터락은 알아서... //switch(m_nSelectAxis_Index) //{ // case (int)UmacAxis.X_Axis: // case (int)UmacAxis.Y_Axis: // case (int)UmacAxis.T_Axis: // if(!CheckChamberGateClose(true)) // { // MessageBox.Show("Chamber Gate가 닫혀있지 않습니다", "Warning"); // return; // } // break; // case (int)UmacAxis.X_Axis2: // case (int)UmacAxis.Y_Axis2: // case (int)UmacAxis.T_Axis2: // if (!CheckChamberGateClose(false)) // { // MessageBox.Show("Chamber2 Gate가 닫혀있지 않습니다", "Warning"); // return; // } // break; // default: // break; //} //PMAC //속도설정 안함! //dSpeed = _mainFrame.equipment.powerPmac.GetAxisHommingSpeed((PmacAxis)m_nSelectAxis_Index); //_parentForm._UmacCtrl.Home_SetSpeed((PmacAxis)m_nSelectAxis_Index, dSpeed); EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Home {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name}"); _mainFrame.equipment.powerPmac.StartHomming((PmacAxis)m_nSelectAxis_Index); } /// /// 전체 정지 버튼 /// /// /// /// /// 절대이동 버튼 /// /// /// /// private bool JogMoveInterlockCheck(bool bJogMoveFlag, bool bMsgFlag) { if (!CheckSelectAxisPos()) { if (bMsgFlag) MessageBox.Show("축 선택이 되어있지 않습니다.", "Warning"); return false; } if (!bJogMoveFlag) { if (Set_Control_Pos.Text == "" || Set_Control_Pos == null) { if (bMsgFlag) MessageBox.Show("위치가 입력되어있지 않습니다.", "Warning"); return false; } if (Set_Control_Acc.Text == "" || Set_Control_Acc == null) { if (bMsgFlag) MessageBox.Show("가속도가 입력되어있지 않습니다.", "Warning"); return false; } } if (Set_Control_Speed.Text == "" || Set_Control_Speed == null) { if (bMsgFlag) MessageBox.Show("속도가 입력되어있지 않습니다.", "Warning"); return false; } //쓰려면 쓰자! //if (!CheckChamberGateClose(true)) //{ // MessageBox.Show("Chamber Gate가 닫혀있지 않습니다", "Warning"); // return false; //} return true; } private void Btn_Move_Abs_Click(object sender, EventArgs e) { //조그 UI 인터락체크 if (!JogMoveInterlockCheck(false, true)) return; //이동 double dPos = Convert.ToDouble(Set_Control_Pos.Text); double dSpeed = Convert.ToDouble(Set_Control_Speed.Text); double dAcc = Convert.ToDouble(Set_Control_Acc.Text); EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Abs {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name} Position {dPos}, Speed {dSpeed}, Accel {dAcc}"); if (!MoveAbs(m_nSelectAxis_Index, dPos, dSpeed, dAcc)) { MessageBox.Show("선택위치로 이동할 수 없습니다"); } } /// /// + 방향 상대이동 버튼 /// /// /// private void Btn_Move_Rel_CW_Click(object sender, EventArgs e) { //조그 UI 인터락체크 if (!JogMoveInterlockCheck(false, true)) return; //이동 double dPos = Convert.ToDouble(Set_Control_Pos.Text); double dSpeed = Convert.ToDouble(Set_Control_Speed.Text); double dAcc = Convert.ToDouble(Set_Control_Acc.Text); EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Rel {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name} Position {dPos}, Speed {dSpeed}, Accel {dAcc}"); if (!MoveRel(m_nSelectAxis_Index, dPos, dSpeed, dAcc)) { MessageBox.Show("선택위치로 이동할 수 없습니다"); } } /// /// - 방향 상대이동 버튼 /// /// /// private void Btn_Move_Rel_CCW_Click(object sender, EventArgs e) { //선택된 인덱스 체크 if (!CheckSelectAxisPos()) return; //조그 UI 인터락체크 if (!JogMoveInterlockCheck(false, true)) return; //이동 double dPos = Convert.ToDouble(Set_Control_Pos.Text) * -1; double dSpeed = Convert.ToDouble(Set_Control_Speed.Text); double dAcc = Convert.ToDouble(Set_Control_Acc.Text); EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Rel {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name} Position {dPos}, Speed {dSpeed}, Accel {dAcc}"); if (!MoveRel(m_nSelectAxis_Index, dPos, dSpeed, dAcc)) { MessageBox.Show("선택위치로 이동할 수 없습니다"); } } /// /// 현재 이동중인 축 정지 (선택된 축) /// /// /// private void Btn_Jog_Stop_Click(object sender, EventArgs e) { //선택된 인덱스 체크 if (!CheckSelectAxisPos()) return; EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Stop {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name}"); _mainFrame.equipment.powerPmac.MoveStop((PmacAxis)m_nSelectAxis_Index); } #endregion #region "축 구동 함수" /// /// 저장위치 이동함수 /// private void PositionMove() { //선택된 인덱스 체크 if (CheckSelectAxisPos() == false) { return; } if (MessageBox.Show("선택한 위치로 이동 하시겠습니까?", "확인", MessageBoxButtons.YesNo) != DialogResult.Yes) { return; } double dPos = _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Position; double dSpeed = _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Speed; double dAcc = _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].TeachList[m_nSelectPos_Index].Accel; bool bRet = _mainFrame.equipment.powerPmac.MoveAbs((PmacAxis)m_nSelectAxis_Index, dPos, dSpeed, dAcc); // //로그 저장 // if (!bRet) { MessageBox.Show("충돌 위험이 있거나, 현재 위치 및 속도 설정이 잘못 되었습니다. 변경 바랍니다.", "경고"); return; } } private bool MoveAbs(int nAxis, double dPos, double dSpeed, double dAcc) { string strMsg = ""; //확인 strMsg = string.Format("{0}를 {1}로 절대 이동 하시겠습니까?", _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name, dPos); if (MessageBox.Show(strMsg, "확인", MessageBoxButtons.YesNo) != DialogResult.Yes) { return true; } bool bRet; //PMac bRet = _mainFrame.equipment.powerPmac.MoveAbs((PmacAxis)m_nSelectAxis_Index, dPos, dSpeed, dAcc); // //로그 저장 // //if (!bRet) //{ // MessageBox.Show("충돌 위험이 있거나, 현재 위치 및 속도 설정이 잘못 되었습니다. 변경 바랍니다.", "경고"); // return false; //} return bRet; } private bool MoveRel(int nAxis, double dPos, double dSpeed, double dAcc) { string strMsg = ""; //확인 strMsg = string.Format("{0}를 {1}만큼 상대 이동 하시겠습니까?", _mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name, Set_Control_Pos.Text); if (MessageBox.Show(strMsg, "확인", MessageBoxButtons.YesNo) != DialogResult.Yes) { return true; } bool bRet; //정말 싫어하는 방법이지만 이번엔 쓰자 //Umac bRet = _mainFrame.equipment.powerPmac.MoveRel((PmacAxis)m_nSelectAxis_Index, dPos, dSpeed, dAcc); // //로그 저장 // if (!bRet) { //MessageBox.Show("충돌 위험이 있거나, 현재 위치 및 속도 설정이 잘못 되었습니다. 변경 바랍니다.", "경고"); return false; } return bRet; } #endregion private void Set_Control_Acc_TextChanged(object sender, EventArgs e) { //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "Set_Control_Acc_TextChanged"); //Button LogDB } private void Set_Control_Acc_Click(object sender, EventArgs e) { var nPad = new NumericPad(); nPad.Setup("0", "1000"); //범위 변경해야 함 nPad.ShowDialog(); if (nPad.DialogResult != DialogResult.OK) return; //_parentForm.WriteToBtnLog("Screen_PMC_Maint : Set_Control_Speed_Click"); //_parentForm._DB_Screen.NM_Menu_Btn_LogDB(_parentForm.UserID, "Screen_PMC_Maint", "Set_Control_Acc_Click"); //Button LogDB Set_Control_Acc.Text = nPad.GetValue(); } private void btnReset_Click(object sender, EventArgs e) { if (!CheckSelectAxisPos()) { MessageBox.Show("축 선택이 되어있지 않습니다.", "Warning"); return; } EquipmentLogManager.Instance.WriteButtonLog($"ScreenMotionMaintenance : Reset {_mainFrame.equipment.powerPmac.m_AxisAllList[m_nSelectAxis_Index].Name}"); _mainFrame.equipment.powerPmac.ClearErrorAll(); } private bool CheckChamberGateClose(bool bCh1) { return false; //나중에 살리자 //if (bCh1) //{ // if (!_parentForm._IOFunc.IsChamber1GateOpenClose(false)) // return false; //} //else //{ // if (!_parentForm._IOFunc.IsChamber2GateOpenClose(false)) // return false; //} //return true; } private void Screen_SubPmc_Maintenance_VisibleChanged(object sender, EventArgs e) { InitView(); } private void btn_ScannerView_Click(object sender, EventArgs e) { EquipmentLogManager.Instance.WriteButtonLog($"{this.Name} : {((Control)sender).Text}"); _mainFrame.scannerViewer.Show(); _mainFrame.scannerViewer.WindowState = FormWindowState.Normal; _mainFrame.scannerViewer.TopMost = true; _mainFrame.scannerViewer.TopMost = false; } private void btn_Attenuator_Click(object sender, EventArgs e) { EquipmentLogManager.Instance.WriteButtonLog($"{this.Name} : {((Control)sender).Text}"); _mainFrame.attenuatorViewer.Show(); _mainFrame.attenuatorViewer.WindowState = FormWindowState.Normal; _mainFrame.attenuatorViewer.TopMost = true; _mainFrame.attenuatorViewer.TopMost = false; } private void btn_Robot_Click(object sender, EventArgs e) { EquipmentLogManager.Instance.WriteButtonLog($"{this.Name} : {((Control)sender).Text}"); _mainFrame.robotViewer.Show(); _mainFrame.robotViewer.WindowState = FormWindowState.Normal; _mainFrame.robotViewer.TopMost = true; _mainFrame.robotViewer.TopMost = false; } private void btn_PreAlign_Click(object sender, EventArgs e) { EquipmentLogManager.Instance.WriteButtonLog($"{this.Name} : {((Control)sender).Text}"); _mainFrame.preAignViewer.Show(); _mainFrame.preAignViewer.WindowState = FormWindowState.Normal; _mainFrame.preAignViewer.TopMost = true; _mainFrame.preAignViewer.TopMost = false; } private void btn_PiLaserView_Click(object sender, EventArgs e) { EquipmentLogManager.Instance.WriteButtonLog($"{this.Name} : {((Control)sender).Text}"); _mainFrame.piLaserViewer.Show(); _mainFrame.piLaserViewer.WindowState = FormWindowState.Normal; _mainFrame.piLaserViewer.TopMost = true; _mainFrame.piLaserViewer.TopMost = false; } private void btn_PowerMeterView_Click(object sender, EventArgs e) { EquipmentLogManager.Instance.WriteButtonLog($"{this.Name} : {((Control)sender).Text}"); _mainFrame.powermeterViewer.Show(); _mainFrame.powermeterViewer.WindowState = FormWindowState.Normal; _mainFrame.powermeterViewer.TopMost = true; _mainFrame.powermeterViewer.TopMost = false; } private void btn_ChillerView_Click(object sender, EventArgs e) { EquipmentLogManager.Instance.WriteButtonLog($"{this.Name} : {((Control)sender).Text}"); _mainFrame.chillerViewer.Show(); _mainFrame.chillerViewer.WindowState = FormWindowState.Normal; _mainFrame.chillerViewer.TopMost = true; _mainFrame.chillerViewer.TopMost = false; } private void btn_VisionView_Click(object sender, EventArgs e) { EquipmentLogManager.Instance.WriteButtonLog($"{this.Name} : {((Control)sender).Text}"); _mainFrame.visionViewer.Show(); _mainFrame.visionViewer.WindowState = FormWindowState.Normal; _mainFrame.visionViewer.TopMost = true; _mainFrame.visionViewer.TopMost = false; } } }