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;
}
}
}