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
|
/// <summary>
|
/// 그래프 스레드
|
/// </summary>
|
private Thread graphThread;
|
|
/// <summary>
|
/// Bitmap 정의
|
/// </summary>
|
int bitmapWidth;
|
int bitmapHeight;
|
Bitmap bitmap;
|
|
int bitmapWidth1;
|
int bitmapHeight1;
|
Bitmap bitmap1;
|
|
/// <summary>
|
/// 그래픽 컬러
|
/// </summary>
|
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
|
|
/// <summary>
|
/// 설정값 정의
|
/// </summary>
|
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 "축 구동버튼"
|
|
/// <summary>
|
/// 저장위치 이동
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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);
|
}
|
|
/// <summary>
|
/// 위치 설정 버튼
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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();
|
}
|
|
/// <summary>
|
/// Servo On/Off 버튼
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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);
|
}
|
|
/// <summary>
|
/// 전체 Home 버튼
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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);
|
|
}
|
|
/// <summary>
|
/// 전체 정지 버튼
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
|
|
/// <summary>
|
/// 절대이동 버튼
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
///
|
|
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("선택위치로 이동할 수 없습니다");
|
}
|
}
|
|
/// <summary>
|
/// + 방향 상대이동 버튼
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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("선택위치로 이동할 수 없습니다");
|
}
|
}
|
|
/// <summary>
|
/// - 방향 상대이동 버튼
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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("선택위치로 이동할 수 없습니다");
|
}
|
|
}
|
|
/// <summary>
|
/// 현재 이동중인 축 정지 (선택된 축)
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
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 "축 구동 함수"
|
|
/// <summary>
|
/// 저장위치 이동함수
|
/// </summary>
|
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;
|
}
|
}
|
}
|