Files
ATV_STDLabelAttach/Handler/Project_form2/fMain.cs
2025-07-17 16:11:46 +09:00

2748 lines
74 KiB
C#

using Emgu.CV;
using Emgu.CV.Structure;
using Euresys.Open_eVision_2_11;
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using UIControl;
namespace Project
{
public partial class fMain : Form
{
string[] = new string[] { "↙", "↓", "↘", "←", "→", "↖", "↑", "↗" };
//Label[] lbs_p0 = null;
//Label[] lbs_p1 = null;
//Label[] lbs_p2 = null;
//Label[] lbs_a0 = null;
//Label[] lbs_a1 = null;
//Label[] lbs_a2 = null;
Boolean bRunConnection = true;
System.Threading.Thread thConnection; //연결체크
byte ConnectSeq = 0;
DateTime AirOffStart = DateTime.Parse("1982-11-23");
DateTime EmergencyTime = DateTime.Now;
Dialog.fLog logForm = null;
public fMain()
{
InitializeComponent();
Pub.initCore();
AddLiveviewControl();
ivs = new arCtl.ImageBox[] { iv0, null, iv2 };
this.KeyDown += (s1, e1) =>
{
if (e1.KeyCode == Keys.Escape) this.Close();
else if (e1.KeyCode == Keys.F1 && e1.Control && e1.Shift)
{
Boolean debug = Pub.flag.get(eFlag.DEBUG);
Pub.flag.set(eFlag.DEBUG, !debug, "FMAIN_SECRETKEY");
ShowDebugMenu();
}
else if (e1.KeyCode == Keys.F2 && e1.Control && e1.Shift) menu_logform();
else if (e1.KeyCode == Keys.F5) btStart.PerformClick();
else if (e1.KeyCode == Keys.F8) btJobCancle.PerformClick();
else if (e1.KeyCode == Keys.F9) btStart.PerformClick();
if (DateTime.Now > Pub.LastInputTime) Pub.LastInputTime = DateTime.Now;
};
//dotList = new List<arCtl.arLabel>();
//dotList.AddRange(new arCtl.arLabel[] { lbDot1, lbDot2, lbDot3, lbDot4, lbDot5, lbDot6, lbDot7, lbDot8, lbDot9, lbDot10 });
this.MouseMove += (s1, e1) => { if (DateTime.Now > Pub.LastInputTime) Pub.LastInputTime = DateTime.Now; };
this.FormClosing += __Closing;
if (Pub.setting.FullScreen) this.WindowState = FormWindowState.Maximized;
else this.Size = new Size(1280, 1024);
//this.lbTitle.MouseMove += LbTitle_MouseMove;
//this.lbTitle.MouseUp += LbTitle_MouseUp;
//this.lbTitle.MouseDown += LbTitle_MouseDown;
//this.lbTitle.DoubleClick += LbTitle_DoubleClick;
}
void ShowDebugMenu()
{
Boolean debug = Pub.flag.get(eFlag.DEBUG);
this.btDebug.Visible = debug;
this.loader1.arDebugMode = debug;
//this.rtStatusMessage.Visible = debug;
//this.panel1.Visible = debug;
}
private void __Closing(object sender, FormClosingEventArgs e)
{
Pub.popup.needClose = true;
if (Pub.sm.Step == StateMachine.eSMStep.RUN)
{
Util.MsgE("동작 중에는 종료 할 수 없습니다.");
e.Cancel = true;
return;
}
if (Pub.sm.Step < StateMachine.eSMStep.CLOSING)
{
var rlt = Util.MsgQ(Lang.Q_EXIT);
if (rlt != System.Windows.Forms.DialogResult.Yes)
{
e.Cancel = true;
return;
}
_Close_Start();
}
}
void UpdateLogTextColor()
{
this.logTextBox1.ColorList = new arCtl.sLogMessageColor[] {
new arCtl.sLogMessageColor("BARCODE",Color.Magenta),
new arCtl.sLogMessageColor("ERR",Color.Red),
new arCtl.sLogMessageColor("NORMAL", Color.WhiteSmoke),
new arCtl.sLogMessageColor("WARN", Color.Tomato),
new arCtl.sLogMessageColor("INFO", Color.SkyBlue),
new arCtl.sLogMessageColor("VIS", Color.Blue),
};
}
void RefreshList()
{
if (Pub.setting.OnlineMode == false) return;
if (this.InvokeRequired)
{
this.BeginInvoke(new MethodInvoker(RefreshList));
return;
}
try
{
var dtstr = DateTime.Now.ToShortDateString();
if(Pub.setting.STDLabelFormat7) this.ta.FillByLen7(this.dataSet1.Component_Reel_Result, dtstr, dtstr);
else this.ta.Fill(this.dataSet1.Component_Reel_Result, dtstr, dtstr);
foreach (DataGridViewRow item in this.arDatagridView1.Rows)
{
var vloc = item.Cells["dvc_loc"].Value;
var sloc = vloc == null ? string.Empty : vloc.ToString();
if (sloc == "L")
item.DefaultCellStyle.BackColor = Color.FromArgb(220, 220, 220);
else
item.DefaultCellStyle.BackColor = Color.FromArgb(250, 250, 250);
}
Pub.log.AddI(string.Format("목록 새로 고침({0}건)", dataSet1.Component_Reel_Result.Count));
}
catch (Exception ex)
{
Pub.log.AddE("목록 새로고침 실패:" + ex.Message);
}
}
private void __Load(object sender, EventArgs e)
{
this.Text = Application.ProductName + " ver " + Application.ProductVersion;
Pub.init(); //public initialize
UpdateLogTextColor();
Pub.log.RaiseMsg += Log_RaiseMsg;
Pub.logWS.RaiseMsg += LogWS_RaiseMsg;
//위치 레이아웃 off한다.
//this.pPosL.Visible = false;
//this.pPosC.Visible = false;
//this.pPosR.Visible = false;
this.Show();
// sbDevice.Text = "";
SetStatusMessage(0, "프로그램 초기화", Color.White, Color.White, Color.Tomato, Color.Black);
//피커 상태초기화
foreach (var item in this.loader1.arVar_Picker)
item.Clear();
//포트 상태 초기화
foreach (var item in this.loader1.arVar_Port)
item.Clear();
Pub.flag.set(eFlag.DEBUG, true, "개발중");
ShowDebugMenu();
////'Application.DoEvents();
//setting dio events
Pub.dio.IOValueChanged += Dio_IOValueChanged;
Pub.dio.Message += dio_IOMessage;
//setting mot events
Pub.mot.Message += mot_Message;
Pub.mot.HomeStatusChanged += mot_HomeStatusChanged;
Pub.mot.AxisMoveValidateCheck += mot_AxisMoveValidateCheck;
Pub.mot.PositionChanged += Mot_PositionChanged;
Pub.mot.StatusChanged += mot_StatusChanged;
Pub.mot.EndStatusChanged += Mot_EndStatusChanged;
//remote control
Pub.remocon = new arDev.RS232("R");
Pub.remocon.Terminal = arDev.RS232.eTerminal.LF;
//Pub.remocon.ReceiveData += remocon_ReceiveData;
var portinfo = Pub.setting.Serial_Remocon.Split(':');
Pub.remocon.PortName = portinfo[0];
if (portinfo.Length > 1) Pub.remocon.BaudRate = int.Parse(portinfo[1]);
else Pub.remocon.BaudRate = 9600;
if (Pub.remocon.Open() == false) Pub.log.AddAT("디버깅포트 열기 실패(" + Pub.setting.Serial_Remocon + ")");
else Pub.log.Add("디버깅포트 열기 성공(" + Pub.setting.Serial_Remocon + ")");
//clear
ClearBarcode();
Pub.sm.SetMsgOptOff(); //모든 메세지출력을 해제한다. (이벤트는 동작함)
Pub.log.Add("State Machine Start");
Pub.sm.StepChanged += sm_StepChanged;
Pub.sm.Message += sm_Message;
Pub.sm.Running += sm_Running;
Pub.sm.SPS += sm_SPS;
Pub.sm.Start();
//Fag 값 변화
Pub.flag.ValueChanged += Flag_ValueChanged;
//ILock 값 변화
Pub.LockPKT.ValueChanged += Lock_ValueChanged;
Pub.LockPKX.ValueChanged += Lock_ValueChanged;
Pub.LockPKZ.ValueChanged += Lock_ValueChanged;
Pub.LockPLM.ValueChanged += Lock_ValueChanged;
Pub.LockPLZ.ValueChanged += Lock_ValueChanged;
Pub.LockPRL.ValueChanged += Lock_ValueChanged;
Pub.LockPRM.ValueChanged += Lock_ValueChanged;
Pub.LockPRR.ValueChanged += Lock_ValueChanged;
Pub.LockPRZ.ValueChanged += Lock_ValueChanged;
Pub.LockVS0.ValueChanged += Lock_ValueChanged;
Pub.LockVS1.ValueChanged += Lock_ValueChanged;
Pub.LockVS2.ValueChanged += Lock_ValueChanged;
loader1.ClearMenu();
loader1.Message += loader1_Message;
loader1.IConClick += loader1_IConClick;
loader1.ButtonClick += Loader1_ButtonClick;
UpdateUnloderInfo();
///데이터버퍼(히스토리)
//Pub.Result.JObHistory.PropertyChanged += JOBHistory_PropertyChanged;
//연결체크용 쓰레드
var thStart = new System.Threading.ThreadStart(bwDeviceConnection);
thConnection = new System.Threading.Thread(thStart);
thConnection.IsBackground = false;
thConnection.Start();
//조이스틱 설정
Pub.joystick = new arDev.Joystick.JoystickRaw();
Pub.joystick.Changed += Joystick_Changed;
Pub.joystick.Connected += Joystick_Connected;
Pub.joystick.Disconnected += Joystick_Disconnected;
Pub.joystick.InputChanged += Joystick_InputChanged;
if (Pub.setting.Jostick_pid != 0 && Pub.setting.Jostick_vid != 0)
{
Pub.log.Add($"Joystick Connect VID:{Pub.setting.Jostick_vid},PID:{Pub.setting.Jostick_pid}");
Pub.joystick.Connect(Pub.setting.Jostick_vid, Pub.setting.Jostick_pid);
}
//키엔스연결
InitBarcode();
tmDisplay.Start(); //start Display
Pub.AddSystemLog(Application.ProductVersion, "SCREEN", "Message");
Pub.log.Add("Program Start");
if (Pub.setting.OnlineMode)
Pub.CheckNRegister3(Application.ProductName, "chi", Application.ProductVersion);
if (Pub.setting.EnableDebugMode)
{
btDebug.Visible = true;
Pub.flag.set(eFlag.DEBUG, true, "FMAIN_STARTUP");
// menu_logform();
}
RefreshList();
}
//private void DispImage(int vIdx)
//{
// Int32 bitsPerPixel = 0;
// Int32 stride = 0;
// PixelFormat pixelFormat = PixelFormat.Format8bppIndexed;
// //color
// bitsPerPixel = 8;
// stride = (Int32)((_width[vIdx] * bitsPerPixel + 7) / 8);
// using (var bitmap = new Bitmap(_width[vIdx], _height[vIdx], stride, pixelFormat, _pImage[vIdx]))
// {
// SetGrayscalePalette(bitmap);
// ivs[vIdx].Image = bitmap;
// }
//}
//void JOBHistory_PropertyChanged(object sender, PropertyChangedEventArgs e)
//{
// if (this.InvokeRequired)
// {
// var p = new PropertyChangedEventArgs(e.PropertyName);
// this.BeginInvoke(new PropertyChangedEventHandler(JOBHistory_PropertyChanged), new object[] { sender, p });
// return;
// }
// if (e.PropertyName.ToUpper() == "ADD")
// Pub.log.Add(string.Format("JOB HISTORY CNT:{0},PROPERTY:{1}", Pub.Result.JObHistory.Count, e.PropertyName));
// var pname = e.PropertyName.Split(':');
// if (pname[0].ToLower() == "add")
// {
// var item = Pub.Result.JObHistory.Get(pname[1]);
// addListItem(item);
// }
// else if (pname[0].ToLower() == "remove")
// {
// //삭제
// var guid = pname[1]; //이 아이템을 제거해준다.
// this.lvJOB.Items.RemoveByKey(guid);
// }
// else if (pname[0].ToLower() == "clear")
// {
// this.lvJOB.Items.Clear();
// }
// else if (pname[0].ToLower() == "set")
// {
// var dr = Pub.Result.JObHistory.Get(pname[1]);
// UpdateListItem(dr);
// }
//}
//void addListItem(Class.JobData item)
//{
// var lv = this.lvJOB.Items.Add(item.guid, item.No.ToString(), 0);
// lv.SubItems.Add(item.VisionData.MatchValidation ? "O" : "X");
// lv.SubItems.Add(item.JobStart.ToString("HH:mm:ss"));
// lv.SubItems.Add(item.VisionData.RID);
// lv.SubItems.Add(item.VisionData.SID);
// lv.SubItems.Add(item.VisionData.VLOT);
// lv.SubItems.Add(item.VisionData.QTY.ToString());
// lv.SubItems.Add(item.PortPos);
// lv.SubItems.Add(item.PrintPos);
// lv.SubItems.Add(item.VisionData.Angle.ToString());
// lv.SubItems.Add(item.VisionData.ZPL.isEmpty() ? "--" : "O");
// lv.SubItems.Add(item.Message);
// var visstr = string.Format("{2}",
// item.VisionData.STime,
// item.VisionData.ETime,
// item.VisionData.RunTime.TotalMilliseconds);
// lv.SubItems.Add(visstr);
// lv.SubItems.Add(item.VisionData.QRInputRaw);
// lv.SubItems.Add(item.VisionData.QROutRaw);
// lv.SubItems.Add(item.VisionData.ZPL);
// lv.Tag = item.guid;
// Color fColor, bColor;
// Pub.GetJobColor(item.error, lv.BackColor, out fColor, out bColor);
// lv.BackColor = bColor;
// lv.ForeColor = fColor;
// lv.EnsureVisible();
//}
//void UpdateListItem(Class.JobData item)
//{
// //해당아이템을 찾아서 값을 변경 해준다
// var items = this.lvJOB.Items.Find(item.guid, false);
// if (items != null && items.Length > 0)
// {
// foreach (var lv in items)
// {
// int idx = 0;
// lv.SubItems[idx++].Text = item.No.ToString();//
// lv.SubItems[idx++].Text = item.VisionData.MatchValidation ? "O" : "X";
// lv.SubItems[idx++].Text = item.JobStart.ToString("HH:mm:ss") + "(" + item.JobRun.TotalSeconds.ToString("N0") + ")";
// lv.SubItems[idx++].Text = item.VisionData.RID;
// lv.SubItems[idx++].Text = item.VisionData.SID;
// lv.SubItems[idx++].Text = item.VisionData.VLOT;
// lv.SubItems[idx++].Text = item.VisionData.QTY.ToString();
// lv.SubItems[idx++].Text = item.PortPos;
// lv.SubItems[idx++].Text = item.PrintPos;
// lv.SubItems[idx++].Text = item.VisionData.Angle.ToString();
// lv.SubItems[idx++].Text = item.VisionData.ZPL.isEmpty() ? "--" : "O";
// lv.SubItems[idx++].Text = item.Message;
// var visstr = string.Format("{2}",
// item.VisionData.STime,
// item.VisionData.ETime,
// item.VisionData.RunTime.TotalMilliseconds);
// lv.SubItems[idx++].Text = visstr;
// lv.SubItems[idx++].Text = item.VisionData.QRInputRaw;
// lv.SubItems[idx++].Text = item.VisionData.QROutRaw;
// lv.SubItems[idx++].Text = item.VisionData.ZPL;
// Color fColor, bColor;
// Pub.GetJobColor(item.error, lv.BackColor, out fColor, out bColor);
// lv.BackColor = bColor;
// lv.ForeColor = fColor;
// }
// }
//}
void loader1_Message(object sender, Loader.MessageArgs e)
{
//로더에서 발생한 메세지
if (e.isError) Pub.log.AddE(e.Message);
else Pub.log.Add(e.Message);
}
private void Log_RaiseMsg(DateTime LogTime, string TypeStr, string Message)
{
this.logTextBox1.AddMsg(LogTime, TypeStr, Message);
}
private void LogWS_RaiseMsg(DateTime LogTime, string TypeStr, string Message)
{
this.logTextBox1.AddMsg(LogTime, TypeStr, Message);
}
void bwDeviceConnection()
{
while (bRunConnection)
{
if (ConnectSeq == 0)
{
var tscam = DateTime.Now - CameraConTimeL;
if (tscam.TotalSeconds > 7)
{
//if (Pub.setting.EnableExtVision)
if (Pub.wsL == null || Pub.wsL.Connected == false)
{
if (Pub.setting.Log_CameraConn)
Pub.log.Add($"카메라 접속 시도{Pub.setting.HostIPL}:{Pub.setting.HostPortL}");
if (Pub.wsL != null)
{
DetachCameraEventL(); //이벤트 종료
Pub.wsL.Dispose();
}
Pub.wsL = new WatsonWebsocket.WatsonWsClient(Pub.setting.HostIPL, Pub.setting.HostPortL, false);
AttachCameraEventL();
Pub.wsL.Start();
CameraConTimeL = DateTime.Now;
}
else
{
//연결이 되어있다면 상태값을 요청한다
if(Pub.flag.get(eFlag.RDY_CAMERA_L)==false)
{
WS_Send(0, Pub.wsL, Guid.NewGuid().ToString(), "STATUS");
CameraConTimeL = DateTime.Now.AddSeconds(-4);
}
}
}
ConnectSeq += 1;
}
else if (ConnectSeq == 1)
{
var tscam = DateTime.Now - CameraConTimeR;
if (tscam.TotalSeconds > 7)
{
//if (Pub.setting.EnableExtVision)
if (Pub.wsR == null || Pub.wsR.Connected == false)
{
if (Pub.setting.Log_CameraConn)
Pub.log.Add($"카메라 접속 시도{Pub.setting.HostIPR}:{Pub.setting.HostPortR}");
if (Pub.wsR != null)
{
DetachCameraEventR(); //이벤트 종료
Pub.wsR.Dispose();
}
Pub.wsR = new WatsonWebsocket.WatsonWsClient(Pub.setting.HostIPR, Pub.setting.HostPortR, false);
AttachCameraEventR();
Pub.wsR.Start();
CameraConTimeR = DateTime.Now;
}
else
{
//연결이 되어있다면 상태값을 요청한다
if (Pub.flag.get(eFlag.RDY_CAMERA_R) == false)
{
WS_Send(1, Pub.wsR, Guid.NewGuid().ToString(), "STATUS");
CameraConTimeR = DateTime.Now.AddSeconds(-4);
}
}
}
ConnectSeq = 0;
}
System.Threading.Thread.Sleep(2000);
//Console.WriteLine(DateTime.Now.ToString("mm:ss.fff") + " update loop");
}
}
delegate void SelectModelHandler(string modelName);
void SelectModelM(string modelName)
{
if (this.InvokeRequired)
{
this.Invoke(new SelectModelHandler(SelectModelM), new object[] { modelName });
return;
}
//초기화
Pub.Result.mModel.ReadValue(modelName);
if (Pub.Result.mModel.isSet)
{
Pub.log.AddAT("모션모델선택완료 : " + Pub.Result.mModel.Title);
//사용한 모델이름을 저장함
if (Pub.uSetting.LastModelM != Pub.Result.mModel.Title)
{
Pub.uSetting.LastModelM = Pub.Result.mModel.Title;
Pub.uSetting.Save();
}
}
else
{
Pub.log.AddE("모션모델선택실패(없는모델명:" + modelName + ")");
}
}
void SelectModelV(string modelName)
{
//
if (this.InvokeRequired)
{
this.Invoke(new SelectModelHandler(SelectModelV), new object[] { modelName });
return;
}
//초기화
Pub.Result.vModel.Title = string.Empty;
var modelVision = Pub.mdm.GetDataV(modelName);
if (modelVision != null)
{
var mv = Pub.Result.vModel;
mv.ReadValue(modelVision); //Util.CopyData(model, Pub.Result.vModel);
Pub.log.AddAT("모델선택완료 : " + mv.Title);
//선택한 모델을 저장함
if (Pub.uSetting.LastModelV != mv.Title)
{
Pub.uSetting.LastModelV = mv.Title;
Pub.uSetting.Save();
}
if (mv.UnitCount.X == 0) mv.UnitCount.Offset(1, 0);
if (mv.UnitCount.Y == 0) mv.UnitCount.Offset(0, 1);
if (mv.VisionCount.X == 0) mv.VisionCount.Offset(mv.UnitCount.X, 0);
if (mv.VisionCount.Y == 0) mv.VisionCount.Offset(0, mv.UnitCount.Y);
if (mv.DotFontSize == 0) mv.DotFontSize = 10;
}
else
{
Pub.log.AddE("모델선택실패(없는모델명:" + modelName + ")");
}
}
void UpdateSoftLimit()
{
Pub.log.Add("update UpdateSoftLimit");
//181219 softlimit
//double softLimit = 0;
//Boolean armForward = Util_DO.GetIOInput(eDIName.F_CHECK_ARM_FWD);
//if (Pub.Result.Model.waferSize.StartsWith("8"))
//{
// if (armForward) softLimit = Pub.system.SWLimit8A;
// else softLimit = Pub.system.SWLimit8;
// if (softLimit != 0)
// {
// Pub.mot.SetSoftLimit(0, true, softLimit, -softLimit);
// Pub.log.AddI(string.Format("(8') Y-Axis Soft Limit : {0}mm", softLimit));
// }
// else
// {
// Pub.mot.SetSoftLimit(0, false, 0, 0);
// Pub.log.AddI(string.Format("(8') Y-Axis Soft Limit - Off"));
// }
//}
//else if (Pub.Result.Model.waferSize.StartsWith("12"))
//{
// if (armForward) softLimit = Pub.system.SWLimit12A;
// else softLimit = Pub.system.SWLimit12;
// if (softLimit != 0)
// {
// Pub.mot.SetSoftLimit(0, true, softLimit, -softLimit);
// Pub.log.AddI(string.Format("(12') Y-Axis Soft Limit : {0}mm", softLimit));
// }
// else
// {
// Pub.mot.SetSoftLimit(0, false, 0, 0);
// Pub.log.AddI(string.Format("(12') Y-Axis Soft Limit - Off"));
// }
//}
}
void ColorChange(arCtl.arLabel contorls, bool value, Color tColor, Boolean isBG = true)
{
if (isBG)
{
if (value == true)
{
if (contorls.BackColor != tColor) contorls.BackColor = tColor;
}
else
{
if (contorls.BackColor != Color.Gray) contorls.BackColor = Color.Gray;
}
}
else
{
if (value == true)
{
if (contorls.ForeColor != tColor) contorls.ForeColor = tColor;
}
else
{
if (contorls.ForeColor != Color.Gray) contorls.ForeColor = Color.Gray;
}
}
}
void ColorChange2(arCtl.arLabel contorls, bool value, Color tColor)
{
if (value == true)
{
if (contorls.BackColor2 != tColor) contorls.BackColor2 = tColor;
}
else
{
if (contorls.BackColor2 != Color.Gray) contorls.BackColor2 = Color.Gray;
}
}
void ColorChange(arCtl.arLabel contorls, bool value, Color tColor, Color fColor, Boolean isBG = true)
{
if (isBG)
{
if (value == true)
{
if (contorls.BackColor != tColor) contorls.BackColor = tColor;
}
else
{
if (contorls.BackColor != fColor) contorls.BackColor = fColor;
}
}
else
{
if (value == true)
{
if (contorls.ForeColor != tColor) contorls.ForeColor = tColor;
}
else
{
if (contorls.ForeColor != fColor) contorls.ForeColor = fColor;
}
}
}
void func_sw_initialize()
{
Pub.Result.ResetButtonDownTime = DateTime.Now;
if (Pub.sm.Step == StateMachine.eSMStep.RUN)
{
Pub.popup.setMessage("SYSTEM INNITIALIZE\n" +
"동작중에는 [초기화]를 실행할 수 없습니다\n" +
"방법 #1 => [중지] 버튼을 이용하여 시스템을 정지 후 다시 시도\n" +
"방법 #2 => [수동실행] 모드로 전환 후 다시 시도");
}
else if (
Pub.sm.getNewStep != StateMachine.eSMStep.RESET &&
Pub.sm.Step != StateMachine.eSMStep.RESET)
{
Pub.log.Add("시스템상태를 RESET으로 전환 합니다");
Pub.AddSystemLog(Application.ProductVersion, "MAIN", "SYSTEM RESET");
Pub.sm.setNewStep(StateMachine.eSMStep.RESET);
}
else Pub.log.AddAT("RESET 중이므로 RESET 버튼을 무시 합니다.");
}
void func_sw_errorclear()
{
//RESET 버튼 눌렸을때 공통 처리 사항
Util_DO.SetBuzzer(false); //buzzer off
if (Pub.popup.Visible)
Pub.popup.needClose = true;
if (
loader1.Scean == Loader.eScean.xmove)
loader1.Scean = UIControl.Loader.eScean.Nomal;
//팝업메세지가 제거가능한 메세지라면 없앤다.
if (loader1.HasPopupMenu && loader1.PopupMenuRequireInput == false)
loader1.DelMenu();
//알람클리어작업(모션에 오류가 있는 경우에만)
if (Pub.mot.IsInit && Pub.mot.hasServoAlarm)
{
Pub.mot.SetAlarmClearOn();
System.Threading.Thread.Sleep(200);
Pub.mot.SetAlarmClearOff();
}
//자재가 없고, 센서도 반응안하는데. 진공이 되어잇으면 off한다
if (Util_DO.isVacOKL() == 0 && Pub.flag.get(eFlag.PK_ITEMON) == false && Util_DO.GetIOOutput(eDOName.PICK_VAC1) == false)
Util_DO.SetPickerVac(false, true);
//중단, 오류 모드일때에는 이 리셋이 의미가 있다.
if (Pub.sm.Step == StateMachine.eSMStep.RUN)
{
Pub.log.Add("동작중에는 [RESET] 버튼이 동작하지 않습니다");
}
else if (Pub.sm.Step == StateMachine.eSMStep.PAUSE || Pub.sm.Step == StateMachine.eSMStep.OVERLOAD)
{
//시작대기상태로 전환(대기상태일때 시작키를 누르면 실행 됨)
Pub.sm.setNewStep(StateMachine.eSMStep.WAITSTART);
Pub.log.AddAT("Reset Clear System Resume & Pause ON");
}
else if (Pub.sm.Step == StateMachine.eSMStep.EMERGENCY)
{
Pub.popup.setMessage("EMERGENCY RESET\n" +
"[비상정지] 상태에는 [시스템초기화] 를 실행 해야 합니다\n" +
"상단메뉴 [초기화] 를 실행하세요");
Pub.log.Add("RESET버튼으로 인해 EMG 상황에서 IDLE전환");
Pub.sm.setNewStep(StateMachine.eSMStep.IDLE);
}
else if (Pub.sm.Step == StateMachine.eSMStep.ERROR)
{
Pub.log.Add("RESET버튼으로 인해 ERR 상황에서 IDLE전환");
Pub.sm.setNewStep(StateMachine.eSMStep.IDLE);
}
else if (Pub.sm.Step == StateMachine.eSMStep.WAITSTART)
{
//시작대기중일때에도 아무 처리안함
//Pub.log.Add("시작버튼대기중에는 [RESET] 버튼이 동작하지 않습니다");
}
else if (Pub.sm.Step == StateMachine.eSMStep.IDLE)
{
//Pub.log.Add("대기중에는 [RESET] 버튼이 동작하지 않습니다");
}
else
{
//Pub.log.AddE("정의되지 않은 상태에서의 REST 키 버튼 입력 - 대기상태로 전환합니다");
Pub.sm.setNewStep(StateMachine.eSMStep.IDLE);
}
}
/// <summary>
/// 작업시작전 작업에대한 선택
/// </summary>
void fucn_start_job_select()
{
if (this.InvokeRequired)
{
this.BeginInvoke(new MethodInvoker(fucn_start_job_select), null);
}
else
{
//로그창 지우기
if (this.logTextBox1.InvokeRequired) logTextBox1.BeginInvoke(new Action(() => { logTextBox1.Clear(); }));
else this.logTextBox1.Clear();
Pub.popup.needClose = true;
//Pub.flag.set(eFlag.RUN_INIT, false, "FN_JOBSELECT");
Pub.ClearRunStep(0);
Pub.ClearRunStep(1);
if (Pub.mot.IsInit == false)
{
Pub.log.AddE("모션 보드가 초기화 되지 않았습니다.\n문의 바랍니다");
return;
}
else if (Pub.dio.IsInit == false)
{
Pub.log.AddE("I/O 보드가 초기화 되지 않았습니다.\n문의 바랍니다");
return;
}
else if (Pub.mot.hasHomeSetOff == true)
{
Pub.log.AddE("홈 검색이 완료되지 않은 축이 있습니다.\n장치초기화를 먼저 실행 하세요");
return;
}
//작업형태를 선택하게 한다
var f = new Dialog.fSelectJob();
if (f.ShowDialog() == DialogResult.OK)
{
UpdateUnloderInfo();
LoadSeqSIDHistory();
Pub.sm.setNewStep(StateMachine.eSMStep.RUN);
}
else
{
Pub.log.AddAT("작업 시작전 선택화면에서 사용자가 취소함");
}
}
}
/// <summary>
/// 입력차수에 따른 릴 수량 목록을 가져온다
/// </summary>
void LoadSeqSIDHistory()
{
//해당 차수의 전체 sidhistory 를 가져와야한다
//System.Diagnostics.Stopwatch wat = new Stopwatch();
//wat.Restart();
//Pub.Result.SIDHistory.Clear();
//var SIDHistoryFiles = Pub.dbmSidHistory.Getfiles(Pub.Result.JobSeqDate, Pub.Result.JobSeqNo);
//var DT = Pub.dbmSidHistory.GetDatas(SIDHistoryFiles);
//Pub.Result.SIDHistory.Merge(DT);
//Pub.Result.SIDHistory.AcceptChanges();
//wat.Stop();
//Pub.log.AddI(string.Format("SID 불러오기시간:{0}ms,Cnt:{1}", wat.ElapsedMilliseconds, Pub.Result.SIDHistory.Count));
}
void func_sw_start()
{
if (Pub.sm.Step == StateMachine.eSMStep.RUN)
{
//아무것도 하지 않는다
Pub.log.Add("동작중에는 START 버튼이 사용되지 않습니다");
}
else if (Pub.sm.Step == StateMachine.eSMStep.IDLE) //일반대기상태
{
if (Util_DO.isVacOKL() > 0)
{
Util_DO.SetBuzzer(true);
Pub.popup.setMessage("PICKER ITEM DETECT\nPICKER 에서 아이템이 감지되었습니다\n[작업취소] 를 눌러서 아이템을 DROP 한 후 제거해주세요.");
return;
}
else if (Util_DO.getCartSize(1) == eCartSize.None)
{
Util_DO.SetBuzzer(true);
Pub.popup.setMessage("로더에 카트가 장착되지 않았습니다");
return;
}
else if (Util_DO.GetIOInput(eDIName.PORT1_LIM_DN) == true && Util_DO.GetIOInput(eDIName.PORT1_DET_UP) == true)
{
//하단리밋과, 자재감지가 동시에 들어오면 overload 이다
Util_DO.SetBuzzer(true);
Pub.popup.setMessage("로더에 너무 많은 릴이 적재 되어 있습니다\n" +
"하단 리밋 센서와 상단 릴 감지 센서가 동시에 확인 됩니다");
return;
}
//else if (Util_DO.getCartSize(0) == eCartSize.None && Util_DO.getCartSize(2) == eCartSize.None)
//{
// Util_DO.SetBuzzer(true);
// Pub.popup.setMessage("언로더에 카트가 장착되지 않았습니다");
// return;
//}
fucn_start_job_select();
}
else if (Pub.sm.Step == StateMachine.eSMStep.WAITSTART) //시작대기상태
{
Util_DO.SetRoomLight(false);
//새로시작하면 포트 얼라인을 해제 해준다
Pub.flag.set(eFlag.RDY_PORT_PL, false, "SW_START");
Pub.flag.set(eFlag.RDY_PORT_PC, false, "SW_START");
Pub.flag.set(eFlag.RDY_PORT_PR, false, "SW_START");
//얼라인 상태를 모두 초기화 한다
//loader1.arVar_Port.ToList().ForEach(t => t.AlignOK = 0);
//언로더 체크작업은 항상 다시 시작한다
if (Pub.Result.UnloaderSeq > 1) Pub.Result.UnloaderSeq = 1;
//팝업메세지가 사라지도록 한다
Pub.popup.needClose = true;
Pub.sm.setNewStep(StateMachine.eSMStep.RUN);
Pub.log.Add("[사용자 일시정지] 해제 => 작업이 계속됩니다");
}
else
{
string msg = "SYSTEM {0}\n[RESET] 버튼을 누른 후 다시 시도하세요";
msg = string.Format(msg, Pub.sm.Step);
Pub.popup.setMessage(msg);
}
}
void func_sw_stop()
{
//매거진 투입모터 멈춤
if (Util_DO.GetIOOutput(eDOName.PORT0_MOT_RUN)) Util_DO.SetPortMotor(0, eMotDir.CW, false, "Button Stop");
if (Util_DO.GetIOOutput(eDOName.PORT1_MOT_RUN)) Util_DO.SetPortMotor(1, eMotDir.CW, false, "Button Stop");
if (Util_DO.GetIOOutput(eDOName.PORT2_MOT_RUN)) Util_DO.SetPortMotor(2, eMotDir.CW, false, "Button Stop");
//자재가 없고, 센서도 반응안하는데. 진공이 되어잇으면 off한다
if (Util_DO.isVacOKL() == 0 && Pub.flag.get(eFlag.PK_ITEMON) == false && Util_DO.GetIOOutput(eDOName.PICK_VAC1) == true)
Util_DO.SetPickerVac(false, true);
//조명켜기
if (Pub.setting.Disable_RoomLight == false)
Util_DO.SetRoomLight(true);
//모든 모터도 멈춘다
if (Pub.mot.hasMoving) Pub.mot.MoveStopAll("Stop Button");
if (Pub.sm.Step == StateMachine.eSMStep.RUN)
{
//일시중지상태로 전환한다
Pub.Result.SetResultMessage(eResult.OPERATION, eECode.USER_STOP, eNextStep.pause);
Pub.log.Add("[사용자 일시정지]");
}
else if (Pub.sm.Step == StateMachine.eSMStep.HOME) //홈진행중에는 대기상태로 전환
{
Pub.ClearRunStep(0);
Pub.ClearRunStep(1);
Pub.sm.setNewStep(StateMachine.eSMStep.IDLE);
}
//로그 기록
Pub.LogFlush();
}
void ClearBarcode()
{
//Pub.Result.Clear();
//Pub.log.AddI("Clear Barcode");
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
if (Pub.isRunning)
{
//실 동작중이면 사용하지 못하게 함
Pub.popup.setMessage("MAPCHECK ERROR\n" +
"동작중에는 [맵확인] 기능을 사용할 수 없습니다\n" +
"[STOP] 으로 일시정지 후 다시 시도하세요");
return;
}
}
Dialog.SystemParameter frmSysParam = null;
private void systemParameterToolStripMenuItem_Click(object sender, EventArgs e)
{
if (frmSysParam == null || frmSysParam.IsDisposed || frmSysParam.Disposing)
{
if (frmSysParam != null) frmSysParam.FormClosed -= frmSysParam_FormClosed;
frmSysParam = new Dialog.SystemParameter();
frmSysParam.FormClosed += frmSysParam_FormClosed;
}
frmSysParam.Show();
frmSysParam.Activate();
if (frmSysParam.WindowState == FormWindowState.Minimized)
frmSysParam.WindowState = FormWindowState.Normal;
}
void frmSysParam_FormClosed(object sender, FormClosedEventArgs e)
{
var f = sender as Form;
if (f.DialogResult == System.Windows.Forms.DialogResult.OK)
{
UpdateSoftLimit();
}
}
private void buzzerTestToolStripMenuItem_Click(object sender, EventArgs e)
{
Util_DO.SetBuzzer(true);
}
void CheckFreeSpace()
{
try
{
double freeSpaceRate_ = 0;
var path = Pub.getSavePath(out freeSpaceRate_);
if (path.StartsWith("\\"))
{
loader1.arFreespace = 0.0;
}
else
{
loader1.arFreespace = freeSpaceRate_;//
if (freeSpaceRate_ < Pub.setting.AutoDeleteThreshold)
{
Pub.flag.set(eFlag.MINSPACE, true, "CheckFreeSpace");
loader1.arLowDiskSpace = true;
}
else
{
Pub.flag.set(eFlag.MINSPACE, false, "CheckFreeSpace");
loader1.arLowDiskSpace = false;
}
}
}
catch (Exception ex)
{
loader1.arFreespace = 0.0;
Pub.log.AddE("check free space : " + ex.Message);
}
}
private void demoRunToolStripMenuItem_Click(object sender, EventArgs e)
{
Pub.Result.JobEndTime = DateTime.Now;
}
private void arLabel2_Click_1(object sender, EventArgs e)
{
var ctl = sender as arCtl.arLabel;
if (ctl.Enabled == false) return;
Pub.log.Add("User Click : Start", false);
func_sw_start();
}
private void arLabel4_Click_1(object sender, EventArgs e)
{
Pub.log.Add("User Click : Stop", false);
func_sw_stop();
}
private void openMapFileToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog od = new OpenFileDialog();
if (od.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;
}
void mapV_DragDrop(object sender, DragEventArgs e)
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false);
if (files == null || files.Length < 1) return;
}
void mapV_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.All;
}
Color getStatecolor(string State)
{
if (State == "U") return Color.DimGray;
else if (State == "I") return Color.SkyBlue;
else if (State == "O") return Color.Yellow;
else return Color.Tomato;
}
private void sbReset_Click(object sender, EventArgs e)
{
func_sw_errorclear();
}
private void btReset_Click(object sender, EventArgs e)
{
Pub.log.Add("User Click : Reset", false);
func_sw_errorclear();
}
private void setZValidToolStripMenuItem_Click(object sender, EventArgs e)
{
Pub.mot.isHomeSet[(int)eAxis.Z_THETA] = true;
Pub.log.Add("user set z-home set on");
}
private void toolStripButton4_Click(object sender, EventArgs e)
{
Util_DO.ToggleRoomLight();
}
private void gridviewTestToolStripMenuItem_Click(object sender, EventArgs e)
{
var task = new System.Threading.Tasks.Task(new Action(() =>
{
Random rnd = new Random();
var startTime = DateTime.Now;
while ((DateTime.Now - startTime).TotalSeconds <= 180)
{
}
}));
task.Start();
}
private void errorToolStripMenuItem_Click(object sender, EventArgs e)
{
Pub.popup.setMessage("error\berror message");
}
private void informationToolStripMenuItem_Click(object sender, EventArgs e)
{
Pub.popup.setMessage("info\ninformation message", MessageWindow.eWindowType.information);
}
private void attentionToolStripMenuItem_Click(object sender, EventArgs e)
{
Pub.popup.setMessage("attention\nattention message", MessageWindow.eWindowType.attention);
}
private void showDevInfo()
{
Util.MsgI("개발 : K4-장비기술팀 1파트\n" +
"설치 : 2020-01-17\n" +
"H/W : 임현 (Hyeon.Im@amkor.co.kr, T.8549)\n" +
"S/W : 김치균 (Chikyun.kim@amkor.co.kr, T.8567)");
}
private void btHistory_ButtonClick(object sender, EventArgs e)
{
var file = System.IO.Path.Combine(Util.CurrentPath, "ResultView.exe");
if (System.IO.File.Exists(file) == false)
{
Pub.popup.setMessage("Result Viewer Error\n결과보기 파일이 존재하지 않습니다\n개발자에 문의 주세요(T.8567)\nFile : " + file);
return;
}
Util.RunProcess(file);
}
private void toolStripButton9_Click(object sender, EventArgs e)
{
var file = System.IO.Path.Combine(Util.CurrentPath, "LogView.exe");
if (System.IO.File.Exists(file) == false)
{
Pub.popup.setMessage("Log Viewer Error\n로그보기 파일이 존재하지 않습니다\n개발자에 문의 주세요(T.8567)\nFile : " + file);
return;
}
Util.RunProcess(file, Pub.log.BaseDirectory + " ERROR");
}
private void toolStripMenuItem3_Click(object sender, EventArgs e)
{
}
private void toolStripMenuItem6_Click(object sender, EventArgs e)
{
//save image
var sd = new SaveFileDialog();
sd.Filter = "jpeg(*.jpg)|*.jpg";
if (sd.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;
//this.orgImage.Save(sd.FileName);
Util.RunExplorer(sd.FileName);
}
private void initializeToolStripMenuItem_Click(object sender, EventArgs e)
{
if (Pub.isRunning)
{
Pub.popup.setMessage("AUTORUN MODE\n자동 실행중에는 실행 할 수 없습니다");
return;
}
Pub.ClearRunStep(0);
Pub.ClearRunStep(1);
Pub.flag.set(eFlag.UserStepCheck, true, "initializeToolStripMenuItem_Click");
//Pub.preStep = Pub.sm.Step;
//if (Pub.preStep == StateMachine.eSMStep.PAUSE) Pub.preStep = StateMachine.eSMStep.RUN;
//수작업으로 이동 제한값을 초기화해준다. (안그러면 모션 이동으로인한 오류 발생함)
for (int i = 0; i < 6; i++)
Pub.Result.PreventMotionPosition[i] = Pub.mot.LastMoveCmdPos[i];
var ctl = sender as ToolStripMenuItem;
if (ctl.Tag == null) return;
var tagstr = ctl.Tag.ToString();
eRunStep newstep = eRunStep.NOTSET;
switch (tagstr)
{
case "0":
newstep = eRunStep.STARTCHKSW;
break;
case "1":
newstep = eRunStep.STARTCHKHW;
break;
case "2":
newstep = eRunStep.INITIALHW;
break;
case "3":
newstep = eRunStep.PORTLOAD;
break;
case "10":
Pub.flag.set(eFlag.UserStepCheck, true, "initializeToolStripMenuItem_Click");
newstep = eRunStep.BEGINPICK;
break;
case "11": //prev Camera Position move
newstep = eRunStep.BEGINPICK;
break;
case "12": //next Camera Position move
newstep = eRunStep.BEGINPICK;
break;
}
Pub.setNewRunStep(0, newstep);
Pub.sm.setNewStep(StateMachine.eSMStep.RUN);
}
private void setHomeSetToolStripMenuItem_Click(object sender, EventArgs e)
{
for (int i = 0; i < 6; i++)
{
Pub.mot.isHomeSet[i] = true;
Pub.mot.HomeSetTime[i] = DateTime.Now;
Pub.mot.HomeResult[i] = arDev.AzinAxt.AXT_MOTION_HOME_RESULT.HOME_SUCCESS;
Pub.log.AddAT("manual home set");
}
}
void menu_logform()
{
if (logForm == null || logForm.IsDisposed == true || logForm.Disposing == true)
logForm = new Dialog.fLog();
if (logForm.WindowState == FormWindowState.Minimized) logForm.WindowState = FormWindowState.Normal;
logForm.Show();
}
private void toolStripMenuItem9_Click(object sender, EventArgs e)
{
menu_logform();
}
private void tsMenu_Paint(object sender, PaintEventArgs e)
{
var c2 = Color.FromArgb(40, 40, 40);
var c1 = Color.FromArgb(80, 80, 80);
//c1 = Color.Gold;
//c2 = Color.DarkOrange;
var br = new System.Drawing.Drawing2D.LinearGradientBrush(e.ClipRectangle,
c1, c2,
System.Drawing.Drawing2D.LinearGradientMode.Vertical);
e.Graphics.FillRectangle(br, e.ClipRectangle);
br.Dispose();
}
//#region "Mouse Form Move"
//private Boolean fMove = false;
//private Point MDownPos;
//private void LbTitle_DoubleClick(object sender, EventArgs e)
//{
// if (this.WindowState == FormWindowState.Maximized) this.WindowState = FormWindowState.Normal;
// else this.WindowState = FormWindowState.Maximized;
// //this.loader1.RemakeRect();
//}
//private void LbTitle_MouseMove(object sender, MouseEventArgs e)
//{
// if (fMove)
// {
// Point offset = new Point(e.X - MDownPos.X, e.Y - MDownPos.Y);
// this.Left += offset.X;
// this.Top += offset.Y;
// offset = new Point(0, 0);
// }
//}
//private void LbTitle_MouseUp(object sender, MouseEventArgs e)
//{
// fMove = false;
//}
//private void LbTitle_MouseDown(object sender, MouseEventArgs e)
//{
// MDownPos = new Point(e.X, e.Y);
// fMove = true;
//}
//#endregion
private void button2_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
}
private void button1_Click(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Maximized)
this.WindowState = FormWindowState.Normal;
else
this.WindowState = FormWindowState.Maximized;
}
private void tbClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
var path = System.IO.Path.Combine(
Pub.setting.Path_Data, "Count",
DateTime.Now.Year.ToString("0000"));
if (System.IO.Directory.Exists(path))
Util.RunExplorer(path);
else
Util.RunExplorer(System.IO.Path.Combine(Pub.setting.Path_Data, "Count"));
}
private void arLabel4_Click(object sender, EventArgs e)
{
Pub.log.Add("user motion alarm clear");
Pub.mot.SetAlarmClearOn();
System.Threading.Thread.Sleep(500);
Pub.mot.SetAlarmClearOff();
}
private void arLabel10_Click_1(object sender, EventArgs e)
{
if (Pub.isRunning == true)
{
Util.MsgE(Lang.CAN_NOT_RUN_AUTOMODE);
return;
}
this.Close();
}
private void button7_Click(object sender, EventArgs e)
{
if (Pub.flag.get(eFlag.INIT_MOTIO) == false)
{
Util.MsgE("모션이 초기화 되지 않았습니다\n잠시 후 다시 시도하세요");
return;
}
var cur = Util_DO.GetIOOutput(eDOName.LAMPON1);
Util_DO.SetRoomLight(!cur);
}
private void button3_Click(object sender, EventArgs e)
{
var file = System.IO.Path.Combine(Util.CurrentPath, "ResultView", "ResultView.exe");
if (System.IO.File.Exists(file) == false)
{
Pub.popup.setMessage("Result Viewer Error\n결과보기 파일이 존재하지 않습니다\n개발자에 문의 주세요(T.8567)\nFile : " + file);
return;
}
Util.RunProcess(file);
}
private void button4_Click(object sender, EventArgs e)
{
if (Pub.flag.get(eFlag.INIT_MOTIO) == false)
{
Util.MsgE("모션이 초기화 되지 않았습니다\n잠시 후 다시 시도하세요");
return;
}
if (Pub.isRunning == true)
{
Util.MsgE(Lang.CAN_NOT_RUN_AUTOMODE);
return;
}
var f = new fModelM();
if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
if (f.Value != "")
{
SelectModelM(f.Value);
}
}
}
private void button5_Click(object sender, EventArgs e)
{
if (Pub.isRunning == true)
{
Util.MsgE(Lang.CAN_NOT_RUN_AUTOMODE);
return;
}
var f = new fModelV();
if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
if (f.Value != "")
{
SelectModelV(f.Value);
}
}
f.Dispose();
}
private void button6_Click(object sender, EventArgs e)
{
if (Pub.flag.get(eFlag.INIT_MOTIO) == false)
{
Util.MsgE("모션이 초기화 되지 않았습니다\n잠시 후 다시 시도하세요");
return;
}
//show io panerl
var f = new Dialog.fIOMonitor();
f.ShowDialog();
f.Dispose();
}
private void arLabel8_Click(object sender, EventArgs e)
{
}
private void button9_Click(object sender, EventArgs e)
{
}
private void arLabel13_Click(object sender, EventArgs e)
{
Util.ScreenCaptrue(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height, new Point(0, 0));
}
private void button8_Click(object sender, EventArgs e)
{
if (Pub.flag.get(eFlag.INIT_MOTIO) == false)
{
Util.MsgE("모션이 초기화 되지 않았습니다\n잠시 후 다시 시도하세요");
return;
}
var msg = new System.Text.StringBuilder();
if (Pub.mot.hasHomeSetOff)
{
msg.AppendLine("! 장치 초기화가 완료되지 않은 상태입니다\n! 장치초기화를 실행 하세요");
}
if (Pub.isRunning == true)
{
msg.AppendLine("! " + Lang.CAN_NOT_RUN_AUTOMODE);
}
if (Pub.sm.Step == StateMachine.eSMStep.PAUSE)
{
msg.AppendLine("! RESET을 누른 후 다시 시도하세요");
}
if (Util_DO.isEmergencyOn() == true)
{
msg.AppendLine("! 비상정지를 해제하세요");
}
if (Util_DO.isSaftyDoorF() == false)
{
msg.AppendLine("!전면 도어가 열려 있습니다");
}
if (Util_DO.isSaftyDoorR() == false)
{
msg.AppendLine("!후면 도어가 열려 있습니다");
}
if (msg.Length > 0)
{
Util.MsgE(msg.ToString());
Pub.log.AddE(msg.ToString());
return;
}
msg.Clear();
msg.AppendLine("Q. 작업을 취소하고 모션의 위치 초기화를 실행하시겠습니까?");
var dlgresult = Util.MsgQ(msg.ToString());
if (dlgresult != System.Windows.Forms.DialogResult.Yes) return;
Pub.log.Add("User Click : tray out & clear position", false);
Run_MotionPositionReset();
}
void Run_MotionPositionReset()
{
Pub.flag.set(eFlag.UserStepCheck, false, "Run_MotionPositionReset");
Pub.log.AddAT("배출 및 원점이동 시작");
Pub.updateRunStepSeq(0, 1);
Pub.AddSystemLog(Application.ProductVersion, "MAIN", "작업취소");
Pub.sm.setNewStep(StateMachine.eSMStep.POSITION_RESET);//실행모드로 변경
}
private void arLabel14_Click(object sender, EventArgs e)
{
if (Pub.flag.get(eFlag.INIT_MOTIO) == false)
{
Util.MsgE("모션이 초기화 되지 않았습니다\n잠시 후 다시 시도하세요");
return;
}
var msg = new System.Text.StringBuilder();
if (Pub.isRunning == true)
msg.AppendLine("*" + Lang.CAN_NOT_RUN_AUTOMODE);
if (Util_DO.isEmergencyOn() == true)
msg.AppendLine("* 비상정지 상태일때에는 움직일 수 없습니다.");
if (Pub.sm.Step == StateMachine.eSMStep.RUN)
msg.AppendLine("* 동작중에는 초기화할 수 없습니다");
if (msg.Length > 0)
{
Util.MsgE(msg.ToString());
return;
}
//CMenuButton btYes = new CMenuButton
//{
// Text = "초기화",
// Tag = "yes",
// BackColor = Color.Tomato,
// OverColor = Color.Gold
//};
//CMenuButton btNo = new CMenuButton("취소", "NO");
//var menu = new CMenu("모션의 홈 및 상태 초기화를 실행하시겠습니까?", "장치 초기화", "init", eMsgIcon.Alert, btYes, btNo);
//loader1.AddMenu(menu);
msg.Clear();
msg.AppendLine("모션의 홈 및 상태의 초기화를 실행하시겠습니까?");
var dlgresult = Util.MsgQ(msg.ToString());
if (dlgresult != System.Windows.Forms.DialogResult.Yes) return;
Pub.log.Add("User Click : initialize", false);
func_sw_initialize();
}
private void arLabel11_Click(object sender, EventArgs e)
{
if (Pub.isRunning == true)
{
Util.MsgE(Lang.CAN_NOT_RUN_AUTOMODE);
return;
}
fSetting f = new fSetting();
var popmsg = Pub.popup.Visible;
if (f.ShowDialog() == DialogResult.OK)
{
UpdateUnloderInfo();
Pub.initDIOSensitive();
if (Pub.setting.Disable_RoomLight == true)
Util_DO.SetRoomLight(false);
if (Pub.setting.Disable_TowerLamp == true)
{
Util_DO.SetTwGrn(false);
Util_DO.SetTwRed(false);
Util_DO.SetTwYel(false);
}
if (Pub.setting.Serial_Remocon.isEmpty() == false)
{
var portinfo = Pub.setting.Serial_Remocon.Split(':');
var portName = portinfo[0];
int baud = 9600;
if (portinfo.Length > 1) baud = int.Parse(portinfo[1]);
if (Pub.remocon.PortName != portName)
{
Pub.remocon.Close();
Pub.remocon.PortName = portName;
Pub.remocon.BaudRate = baud;
if (Pub.remocon.Open() == false)
Pub.log.AddE("Remote Control Port Open Error : " + Pub.remocon.errorMessage);
}
}
//프린터설정 - 201223
Pub.PrinterL.printerName = Pub.setting.PrintLeftName;
Pub.PrinterR.printerName = Pub.setting.PrintRightName;
//if (Pub.setting.Disable_Axis1) Pub.mot.SetSVON(0, false);
//if (Pub.setting.Disable_Axis0) Pub.mot.SetSVON(1, false);
//if (Pub.setting.Disable_Axis2) Pub.mot.SetSVON(2, false);
//if (Pub.setting.Disable_Axis3) Pub.mot.SetSVON(3, false);
//if (Pub.setting.Disable_Axis4) Pub.mot.SetSVON(4, false);
//if (Pub.setting.Disable_Axis5) Pub.mot.SetSVON(5, false);
//if (Pub.setting.Disable_Axis6) Pub.mot.SetSVON(6, false);
}
if (popmsg) Pub.popup.Visible = true;
Pub.ApplyZplCode();
}
private void arLabel12_Click(object sender, EventArgs e)
{
string file = System.IO.Path.Combine(Util.CurrentPath, "Manual", "index.htm");// "manual.pdf");
if (System.IO.File.Exists(file) == false)
{
Util.MsgE("사용설명서 파일이 존재하지 않습니다\n" +
"문의 : T8567 (장비기술 1파트)\n" +
"파일명 : " + file);
return;
}
Util.RunExplorer(file);
}
private void arLabel16_Click(object sender, EventArgs e)
{
arCtl.arLabel ctl = sender as arCtl.arLabel;
this.cmOpenDir.Show(ctl, new Point((int)(ctl.Width / 1.5), (int)(ctl.Height / 1.5)));
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
Util.RunExplorer(Util.CurrentPath);
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
Pub.LogFlush();
var fi = new System.IO.FileInfo(Pub.log.FileName);
Util.RunExplorer(fi.Directory.FullName);
}
private void ToolStripMenuItem1_Click(object sender, EventArgs e)
{
string savefile = System.IO.Path.Combine(Util.CurrentPath, "ScreenShot", DateTime.Now.ToString("yyyyMMddHHmmss") + ".png");
var grpath = new System.IO.FileInfo(savefile);
Util.RunExplorer(grpath.Directory.FullName);
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
var basepath = Pub.setting.GetPathData();
var path = System.IO.Path.Combine(
basepath, "History",
DateTime.Now.Year.ToString("0000"),
DateTime.Now.Month.ToString("00"),
DateTime.Now.Day.ToString("00"));
if (System.IO.Directory.Exists(path))
Util.RunExplorer(path);
else
Util.RunExplorer(System.IO.Path.Combine(Pub.setting.Path_Data, "History"));
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
var basepath = Pub.setting.GetPathData();
var path = System.IO.Path.Combine(
basepath, "Images",
DateTime.Now.Year.ToString("0000"),
DateTime.Now.Month.ToString("00"),
DateTime.Now.Day.ToString("00"));
if (System.IO.Directory.Exists(path))
Util.RunExplorer(path);
else
Util.RunExplorer(System.IO.Path.Combine(Pub.setting.Path_Data, "History"));
}
private void btDebug_Click(object sender, EventArgs e)
{
arCtl.arLabel ctl = sender as arCtl.arLabel;
this.cmDebug.Show(ctl, new Point((int)(ctl.Width / 1.5), (int)(ctl.Height / 1.5)));
}
private void moveToZeroToolStripMenuItem_Click(object sender, EventArgs e)
{
//var dlg = Util.MsgQ("모션의 위치 초기화를 실행하시겠습니까?");
//if (dlg != System.Windows.Forms.DialogResult.Yes) return;
//// return;
//if (Pub.sm.Step == StateMachine.eSMStep.RUN)
//{
// Pub.popup.setMessage("SYSTEM INNITIALIZE\n" +
// "동작중에는 [원점이동]을 실행할 수 없습니다\n" +
// "방법 #1 => [중지] 버튼을 이용하여 시스템을 정지 후 다시 시도");
//}
//else if ( Pub.sm.getNewStep != StateMachine.eSMStep.QHOME && Pub.sm.Step != StateMachine.eSMStep.QHOME)
//{
// Pub.log.Add("시스템상태를 Q-HOME으로 전환 합니다");
// Pub.sm.setNewStep(StateMachine.eSMStep.QHOME);
//}
//else Pub.log.AddAT("Q-HOME 중이므로 Q-HOME 기능을 무시 합니다");
}
Control FindContextSender(object sender)
{
var menuitem = sender as ToolStripMenuItem;
if (menuitem != null)
{
var menu = menuitem.Owner as ContextMenuStrip;
if (menu != null)
{
var selectedControl = menu.SourceControl;
return selectedControl;
}
}
return null;
}
private void lbTitleBS_Click(object sender, EventArgs e)
{
}
private void lbTitleFS_Click(object sender, EventArgs e)
{
}
private void sMResetToolStripMenuItem_Click(object sender, EventArgs e)
{
if (Pub.isRunning == true)
{
Util.MsgE(Lang.CAN_NOT_RUN_AUTOMODE);
return;
}
if (Pub.sm.Step != StateMachine.eSMStep.IDLE)
{
var dlg = Util.MsgQ(
"프로그램 상태를 초기화 하시겠습니까?\n\n" +
"진행 중인 사항은 모두 취소 됩니다.\n" +
"필요한 경우 [시스템초기화] 가 필요할 수 있습니다");
if (dlg != System.Windows.Forms.DialogResult.Yes) return;
}
else Pub.log.AddAT("대기상태일때에는 초기화 할 수 없습니다");
Pub.log.Add("User Click : initialize", false);
Pub.sm.setNewStep(StateMachine.eSMStep.IDLE, true);
Pub.flag.set(eFlag.UserStepCheck, false, "sMResetToolStripMenuItem_Click");
}
private void exceptionTestToolStripMenuItem_Click(object sender, EventArgs e)
{
int a = 0;
int b = 1;
var c = b / a;
}
private void motionEmulatorToolStripMenuItem_Click(object sender, EventArgs e)
{
var f = new Dialog.fEmulator(Pub.mot, 7, 64, 64);
Pub.mot.Emulator(f.devM);
Pub.dio.Emulator(f.devIO);
f.Show();
}
private void dIOEmulatorToolStripMenuItem_Click(object sender, EventArgs e)
{
var f = new arDev.AzinAxt.Emulator.fEmulatorIO(64);
Pub.dio.Emulator(f.devIO);
f.Show();
Console.WriteLine("emulator on");
}
private void dIOMonitorToolStripMenuItem_Click(object sender, EventArgs e)
{
Pub.dio.ShowMonitor();
}
private void refreshControklToolStripMenuItem_Click(object sender, EventArgs e)
{
this.loader1.RemakeRect();
UpdateLogTextColor();
}
private void button3_Click_1(object sender, EventArgs e)
{
if (Pub.isRunning)
{
Pub.popup.setMessage("동작중에는 사용 불가");
return;
}
if (Pub.sm.Step == StateMachine.eSMStep.PAUSE)
{
Util.MsgI("현재 중단 상태입니다.\n중단 메세지를 확인 하시고 RESET을 누른 후 다시 시도하세요");
return;
}
}
private void normalToolStripMenuItem_Click(object sender, EventArgs e)
{
loader1.Scean = UIControl.Loader.eScean.Nomal;
}
private void motorHomeToolStripMenuItem_Click(object sender, EventArgs e)
{
loader1.Scean = UIControl.Loader.eScean.MotHome;
}
void UpdateUnloderInfo()
{
}
private void toolStripMenuItem6_Click_1(object sender, EventArgs e)
{
var menu = sender as ToolStripMenuItem;
var port = ushort.Parse(menu.Text);
}
private void btJobEnd_Click(object sender, EventArgs e)
{
}
private void testToolStripMenuItem_Click(object sender, EventArgs e)
{
//var newdr = new Class.JobData(0);
//newdr.JobStart = Pub.Result.JobStartTime;
//newdr.JobEnd = Pub.Result.JobEndTime;
//newdr.No = Pub.Result.JObHistory.Count + 1;
//newdr.error = Class.JobData.ErrorCode.None;
//newdr.Message = "임시데이터";
//newdr.VisionData = new Class.VisionData();
//Pub.Result.JObHistory.Add(newdr);
}
void loader1_IConClick(object sender, UIControl.Loader.IconClickEventargs e)
{
//throw new NotImplementedException();
Pub.log.Add("Loader Icon Click : " + e.item.Tag.ToString());
if (e.item.Tag == "air")
{
var buttonOk = new CMenuButton("ON", "1");
var buttonNo = new CMenuButton("OFF", "0");
var newmenu = new CMenu("AIR 공급 상태를 변경 합니다", "AIR CONTROL", "air", eMsgIcon.Error, buttonOk, buttonNo)
{
BorderColor = Color.Gray,
};
loader1.AddMenu(newmenu);
}
else if (e.item.Tag == "emg")
{
btMReset.PerformClick();
}
else if (e.item.Tag == "debug")
{
Pub.flag.set(eFlag.DEBUG, !Pub.flag.get(eFlag.DEBUG), "");
ShowDebugMenu();
}
}
private void Loader1_ButtonClick(object sender, UIControl.Loader.MenuItemClickEventargs e)
{
//버튼이 눌렸으므로 해당 메뉴는 소거해준다
Pub.log.Add("Menu Button Click : " + e.item.Tag);
if (e.item.menutag == null)
{
//이곳은 메뉴가 아닌 일반 버튼이다
if (e.item.Tag == "INPUTL")
{
}
return;
}
else
{
switch (e.item.menutag)
{
case "init":
if (e.item.Tag == "yes")
{
Pub.log.Add("User Click : initialize", false);
func_sw_initialize();
}
break;
case "sample":
if (e.item.Tag == "1")
Pub.log.Add("ok 버튼 클릭");
else
Pub.log.Add("no 버튼 클릭");
break;
case "air":
if (e.item.Tag == "1")
{
Util_DO.SetAIR(true);
Pub.log.Add("사용자 air on");
}
else
{
Util_DO.SetAIR(false);
Pub.log.Add("사용자 air off");
}
break;
}
}
//마지막메뉴를 제거한다
loader1.DelMenu();
}
private void sampleToolStripMenuItem_Click(object sender, EventArgs e)
{
var buttonOk = new CMenuButton("OK", "1");
var buttonNo = new CMenuButton("CANCLE", "0");
var newmenu = new CMenu("body str", "title", "sample", eMsgIcon.Error, buttonOk, buttonNo)
{
BorderColor = Color.Gray
};
loader1.AddMenu(newmenu);
}
private void debugModeToolStripMenuItem_Click(object sender, EventArgs e)
{
this.loader1.arDebugMode = !this.loader1.arDebugMode;
this.loader1.Invalidate();
}
private void lvJOB_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(26, 26, 26)), e.Bounds);
e.Graphics.DrawRect(e.Bounds, Color.FromArgb(64, 64, 64), 1);
e.Graphics.DrawString(e.Header.Text, e.Font, new SolidBrush(Color.FromArgb(200, 200, 200)), e.Bounds, new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
}
private void lvJOB_DrawItem(object sender, DrawListViewItemEventArgs e)
{
e.DrawDefault = true;
}
private void lvJOB_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
e.DrawDefault = true;
}
private void addJobItemToolStripMenuItem_Click(object sender, EventArgs e)
{
//Pub.Result.JObHistory.Add(new Class.JobData
//{
// JobEnd = DateTime.Now,
// JobStart = DateTime.Now,
// VisionData = new Class.VisionData
// {
// VLOT = "LOT",
// RID = "rid",
// SID = "sid",
// FileNameL = string.Empty,
// FileNameU = string.Empty,
// Angle = 10,
// Complete = true,
// MANU = "manu",
// MFGDATE = "1982-11",
// QTY = "998",
// Ready = false,
// STime = DateTime.Now,
// ETime = DateTime.Now,
// GTime = DateTime.Now
// }
//});
}
private void countToolStripMenuItem_Click(object sender, EventArgs e)
{
var f = new Dialog.fDebug();
f.TopMost = true;
f.Show();
}
[DllImport("user32")]
public static extern Boolean ShowWindow(IntPtr hWnd, Int32 nCmdShow);
[DllImport("user32.dll")]
private static extern int SetActiveWindow(int hwnd);
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
private void button5_Click_1(object sender, EventArgs e)
{
var path = @"D:\Amkor\ReelMInput\update.exe";
var prc = Util.CheckExistProcess("ReelMInput");
if (prc == null)
{
Util.RunProcess(path);
}
else
{
SetForegroundWindow(prc.MainWindowHandle);
}
}
#region "System Parameter"
#region "Motion Parameter"
private void axis0ToolStripMenuItem_Click(object sender, EventArgs e)
{
Pub.mot.ShowParameter(0);
}
private void axis1ToolStripMenuItem_Click(object sender, EventArgs e)
{
Pub.mot.ShowParameter(1);
}
private void axis2ToolStripMenuItem_Click(object sender, EventArgs e)
{
Pub.mot.ShowParameter(2);
}
private void axis3ToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void axis4ToolStripMenuItem_Click(object sender, EventArgs e)
{
}
#endregion
private void clearToolStripMenuItem1_Click(object sender, EventArgs e)
{
loader1.ClearMenu();
}
#endregion
private void processListToolStripMenuItem_Click(object sender, EventArgs e)
{
Pub.log.Add("process list");
foreach (var prc in System.Diagnostics.Process.GetProcesses())
{
if (prc.ProcessName.StartsWith("svchost")) continue;
if (prc.ProcessName.Contains(".host")) continue;
Pub.log.Add(prc.ProcessName);
}
}
Boolean camliveBusy = false;
Stopwatch watFps = new Stopwatch();
Stopwatch watFps0 = new Stopwatch();
Stopwatch watFps1 = new Stopwatch();
Stopwatch watFps2 = new Stopwatch();
Control GetContextOwnerControl(object sender)
{
var menuitem = sender as ToolStripMenuItem;
if (menuitem != null)
{
var menu = menuitem.Owner as ContextMenuStrip;
if (menu != null)
{
return menu.SourceControl;
}
}
return null;
}
private void arLabel3_Click(object sender, EventArgs e)
{
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
var f = new Dialog.fDataBufferSIDRef();
f.TopMost = true;
f.Show();
}
private void button3_Click_2(object sender, EventArgs e)
{
if (Pub.flag.get(eFlag.INIT_MOTIO) == false)
{
Util.MsgE("모션이 초기화 되지 않았습니다\n잠시 후 다시 시도하세요");
return;
}
if (Pub.isRunning == true)
{
Util.MsgE(Lang.CAN_NOT_RUN_AUTOMODE);
return;
}
//if (mDebug.Visible == false && Pub.dio.IsInit == false)
//{
// Pub.popup.setMessage("DIGITAL IN/OUT MODULE\n" +
// "오류로 인해 해당 장치가 초기화되지 않았습니다\n" +
// "Ezconfig AXT 프로그램으로 H/W를 점검하세요");
// return;
//}
var f = new Dialog.QuickControl();
f.StartPosition = FormStartPosition.CenterScreen;
f.Show();
}
private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
}
private void pictureBox1_Click(object sender, EventArgs e)
{
if (Pub.flag.get(eFlag.DEBUG) == true)
{
Pub.flag.set(eFlag.DEBUG, false, "개발중");
}
else
{
Pub.flag.set(eFlag.DEBUG, true, "개발중");
}
ShowDebugMenu();
}
private void cmCam_Opening(object sender, CancelEventArgs e)
{
if (Pub.sm.Step < StateMachine.eSMStep.IDLE)
cmCam.Enabled = false;
else
cmCam.Enabled = true;
}
private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
var selectContorol = GetContextOwnerControl(sender);
if (selectContorol == null) return;
var selectedtag = selectContorol.Tag.ToString();
var vidx = int.Parse(selectedtag);
SaveFileDialog sd = new SaveFileDialog();
sd.Filter = "bitmap|*.bmp";
sd.FileName = $"vision{vidx}.bmp";
if (sd.ShowDialog() == DialogResult.OK)
{
if (vidx == 1)
{
SaveImage(sd.FileName);
}
else
{
if (this.OrgImage[vidx].Ptr == IntPtr.Zero)
{
Util.MsgE("이미지가 없습니다");
return;
}
this.OrgBitmap[vidx].Save(sd.FileName);
}
}
}
private void saveImage2ToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog sd = new SaveFileDialog();
sd.Filter = "bitmap|*.bmp";
sd.FileName = "vision1.bmp";
if (sd.ShowDialog() == DialogResult.OK)
{
//for (int i = 0; i < 3; i++)
this.OrgBitmap[1].Save(sd.FileName);
}
}
private void saveImage3ToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog sd = new SaveFileDialog();
sd.Filter = "bitmap|*.bmp";
sd.FileName = "vision2.bmp";
if (sd.ShowDialog() == DialogResult.OK)
{
//for (int i = 0; i < 3; i++)
this.OrgBitmap[2].Save(sd.FileName);
}
}
private void sbVisTitle0_Click(object sender, EventArgs e)
{
iv0.ZoomFit();
iv0.Invalidate();
}
private void sbVisTitle1_Click(object sender, EventArgs e)
{
//키엔스로부터 다운로드 받아서 처리해야함
var tempfile = System.IO.Path.Combine(Util.CurrentPath, "Temp", "Keyence", DateTime.Now.ToString("HHmmss_fff") + ".bmp");
var fi = new System.IO.FileInfo(tempfile);
if (fi.Directory.Exists == false) fi.Directory.Create();
this.iv1Keyence.DownloadRecentImage(fi.FullName);
}
private void sbVisTitle2_Click(object sender, EventArgs e)
{
iv2.ZoomFit();
iv2.Invalidate();
}
//private void arLabel1_Click(object sender, EventArgs e)
//{
//}
private void readBarcodeToolStripMenuItem_Click(object sender, EventArgs e)
{
//var selectContorol = GetContextOwnerControl(sender);
//if (selectContorol == null) return;
//var selectedtag = selectContorol.Tag.ToString();
//var vidx = int.Parse(selectedtag);
////선택된 아엩ㅇ믈 찾아야한다
//if (Pub.sm.Step == StateMachine.eSMStep.IDLE || Pub.flag.get(eFlag.MOVE_PICKER) || Pub.sm.Step == StateMachine.eSMStep.HOME)
//{
// string message;
// var data = Util_Vision.DetectQR_eVision(this.OrgImage[vidx], out message);
// if (message.isEmpty() == false)
// Pub.log.AddAT($"Vision {vidx} Message={message}");
// if (vidx == 0) { Util_Vision.DisplayQRData(data, Rectangle.Empty, iv0); }
// if (vidx == 1) { Util_Vision.DisplayQRData(data, Rectangle.Empty, null); }
// if (vidx == 2) { Util_Vision.DisplayQRData(data, Rectangle.Empty, iv2); }
//}
//else Util.MsgE("대기 상태일때 바코드 읽기가 가능합니다");
}
private void livetaskToolStripMenuItem_Click(object sender, EventArgs e)
{
SetVisionTask();
//Pub.flag.set(eFlag.LIVIEWVIEW0, true, "");
}
private void zoomFitToolStripMenuItem_Click(object sender, EventArgs e)
{
var selectContorol = GetContextOwnerControl(sender);
if (selectContorol == null) return;
var selectedtag = selectContorol.Tag.ToString();
var vidx = int.Parse(selectedtag);
if (vidx == 0) iv0.ZoomFit();
// if (vidx == 1) iv1.ZoomFit();
if (vidx == 2) iv2.ZoomFit();
}
private void keyenceTrigOnToolStripMenuItem_Click(object sender, EventArgs e)
{
Trigger(true);
}
private void keyenceTrigOffToolStripMenuItem_Click(object sender, EventArgs e)
{
Trigger(false);
}
private void keyenceSaveImageToolStripMenuItem_Click(object sender, EventArgs e)
{
var fn = System.IO.Path.Combine(Util.CurrentPath, "Images", "keyence.bmp");
SaveImage(fn);
}
private void arLabel29_Click(object sender, EventArgs e)
{
}
private void arLabel20_Click(object sender, EventArgs e)
{
}
private void button3_Click_3(object sender, EventArgs e)
{
if (Pub.sm.Step == StateMachine.eSMStep.RUN)
{
Pub.log.AddE("동작 중에는 사용할 수 없습니다");
return;
}
Util_DO.SetPortMotor(1, eMotDir.CCW, true, "하강");
}
private void button4_Click_1(object sender, EventArgs e)
{
//이미지저장한다.
if (Pub.sm.Step != StateMachine.eSMStep.RUN && Pub.sm.Step != StateMachine.eSMStep.PAUSE && Pub.sm.Step != StateMachine.eSMStep.WAITSTART)
{
var tempfil = System.IO.Path.Combine(Util.CurrentPath, "Temp", "keyence.bmp");
var fi = new System.IO.FileInfo(tempfil);
if (fi.Directory.Exists == false) fi.Directory.Create();
this.iv1Keyence.DownloadRecentImage(fi.FullName);
Pub.Result.ItemData[1].VisionData.SetImage(new Image<Gray, byte>(fi.FullName));
}
var f = new Dialog.fLoaderInfo(Pub.Result.ItemData[1].VisionData.bcdMessage);
f.ShowDialog();
}
private void lbSize1_Click(object sender, EventArgs e)
{
//reset 기능
Pub.Result.ItemData[1].VisionData.Clear("USER UI CLICK", true);
Pub.flag.set(eFlag.END_VISION1, false, "USER UI CLICK");
}
bool liveviewprocesson = false;
private void liveViewProcessOnOffToolStripMenuItem_Click(object sender, EventArgs e)
{
liveviewprocesson = !liveviewprocesson;
}
private void lbLock2_Click(object sender, EventArgs e)
{
var ctl = sender as arCtl.arLabel;
var index = int.Parse(ctl.Tag.ToString());
// bool cur = false;
if (Pub.isRunning)
{
Util.MsgE("동작중에는 카트교환을 할 수 없습니다\n'STOP' 버튼을 누른 후 다시 시도하세요");
return;
}
bool curMag = Util_DO.GetIOOutput(eDOName.CART_MAG0);
bool curLim = Util_DO.GetIOInput(eDIName.PORT0_LIM_DN);
if (index == 1)
{
curMag = Util_DO.GetIOOutput(eDOName.CART_MAG1);
curLim = Util_DO.GetIOInput(eDIName.PORT1_LIM_DN);
}
else if (index == 2)
{
curMag = Util_DO.GetIOOutput(eDOName.CART_MAG2);
curLim = Util_DO.GetIOInput(eDIName.PORT2_LIM_DN);
}
// cur = Util_DO.GetIOOutput(eDOName.CART_MAG0);
if (curMag == false)
{
Pub.log.Add($"MAGNET{index} ON by USER");
Util_DO.SetPortMagnet(index, true); //켜는건 바로 할 수 있게 한다
}
else
{
if (curLim == false)
{
Util.MsgE("포트를 모두 내린 후 다시 시도하세요");
Util_DO.SetPortMotor(index, eMotDir.CCW, true, "카트교환"); //포트를 자동으로 내려준다
return;
}
Util_DO.SetPortMagnet(index, false);
Pub.log.Add($"MAGNET{index} OFF by USER");
}
}
private void arLabel75_Click(object sender, EventArgs e)
{
//왼쪽검증취소
if (Pub.sm.Step <= StateMachine.eSMStep.IDLE)
{
Util.MsgE("동작 중에만 처리 가능합니다");
return;
}
if (Pub.flag.get(eFlag.RDY_VISION0) == false)
{
Util.MsgE("비젼 확인 중이 아닙니다");
return;
}
Pub.Result.ItemData[0].VisionData.ValidSkipbyUser = true;
Pub.log.AddE("사용자가 왼쪽 QR검증 기능을 SKIP했습니다");
}
private void arLabel73_Click(object sender, EventArgs e)
{
//오른쪽검증취소
if (Pub.sm.Step <= StateMachine.eSMStep.IDLE)
{
Util.MsgE("동작 중에만 처리 가능합니다");
return;
}
if (Pub.flag.get(eFlag.RDY_VISION0) == false)
{
Util.MsgE("비젼 확인 중이 아닙니다");
return;
}
Pub.Result.ItemData[2].VisionData.ValidSkipbyUser = true;
Pub.log.AddE("사용자가 오른쪽 QR검증 기능을 SKIP했습니다");
}
private void arLabel74_Click(object sender, EventArgs e)
{
//왼쪽재출력
if (Pub.sm.Step == StateMachine.eSMStep.PAUSE)
{
Util.MsgE("일시중지 상태입니다 'RESET'키를 누른 후 다시 시도하세요");
return;
}
if (Pub.sm.Step != StateMachine.eSMStep.WAITSTART)
{
Util.MsgE("작업시작대기 상태일때에만 사용이 가능합니다");
return;
}
Pub.flag.set(eFlag.OK_PRINTL, false, "MOY_PY");
Pub.flag.set(eFlag.RUN_PRINTL, true, "MOY_PY");
Pub.flag.set(eFlag.SET_DATA_PORT0, true, "MOT_PX");
Pub.flag.set(eFlag.PORTL_ITEMON, true, "item_pickoff"); //포트에 놓았다
loader1.arVar_Port[0].AlignReset();
}
private void arLabel77_Click(object sender, EventArgs e)
{
//우측재출력
}
private void arDatagridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
//
}
private void arLabel6_Click(object sender, EventArgs e)
{
//포트내림
if (Pub.isRunning)
{
Util.MsgE("동작중에는 사용할 수 없습니다");
return;
}
var index = int.Parse((sender as arCtl.arLabel).Tag.ToString());
if (Util_DO.GetPortMotorRun(index) == true) Util_DO.SetPortMotor(index, eMotDir.CW, false, "UI");
else
{
if (Util.MsgQ("포트를 내릴까요?") == DialogResult.Yes)
Util_DO.SetPortMotor(index, eMotDir.CCW, true, "UI포트내림");
}
}
private void arLabel11_Click_1(object sender, EventArgs e)
{
//포트올림
if (Pub.isRunning)
{
Util.MsgE("동작중에는 사용할 수 없습니다");
return;
}
var index = int.Parse((sender as arCtl.arLabel).Tag.ToString());
if (Util_DO.GetPortMotorRun(index) == true) Util_DO.SetPortMotor(index, eMotDir.CCW, false, "UI");
else
{
if (Util.MsgQ("포트를 올릴까요?") == DialogResult.Yes)
Util_DO.SetPortMotor(index, eMotDir.CW, true, "UI");
}
}
private void arLabel64_Click(object sender, EventArgs e)
{
menu_logform();
}
private void ToolStripMenuItem_Click(object sender, EventArgs e)
{
RefreshList();
}
private void toolStripButton1_Click_1(object sender, EventArgs e)
{
RefreshList();
}
private void jObEndToolStripMenuItem_Click(object sender, EventArgs e)
{
if (Pub.flag.get(eFlag.INIT_MOTIO) == false)
{
Util.MsgE("모션이 초기화 되지 않았습니다\n잠시 후 다시 시도하세요");
return;
}
ShowSummaryForm();
}
private void button3_Click_4(object sender, EventArgs e)
{
if (Pub.isRunning)
{
Util.MsgE("동작중에는 사용할 수 없습니다");
return;
}
if (Pub.flag.get(eFlag.MOVE_PICKER))
{
Util.MsgE("해당 창이 열려 있습니다");
}
else
{
var f = new Dialog.fPickerMove();
f.ShowDialog();
//홈이 안잡혀있고, 센서가 중앙에 있다면 초기화를 묻는다
if (Pub.mot.hasHomeSetOff == true && Util_DO.GetIOInput(eDIName.PICKER_SAFE))
{
btMReset.PerformClick();
}
RefreshList();
}
}
private void jOBStartToolStripMenuItem_Click(object sender, EventArgs e)
{
var f = new Dialog.fSelectJob();
f.ShowDialog();
}
private void panel41_Paint(object sender, PaintEventArgs e)
{
}
private void panel42_Paint(object sender, PaintEventArgs e)
{
}
private void visionTrigger0ToolStripMenuItem_Click(object sender, EventArgs e)
{
//모든 큐를 제거한다.
lock (BarcodeQueL)
{
while (BarcodeQueL.IsEmpty == false)
BarcodeQueL.TryDequeue(out string msg);
Pub.log.Add($"[0]큐제거 완료");
}
if (Pub.Result == null || Pub.Result.ItemData[0] == null)
{
Pub.flag.set(eFlag.RDY_VISION0, true, "USER");
Pub.flag.set(eFlag.PRC_VISION0, false, "user");
WS_Send(0, Pub.wsL, Guid.NewGuid().ToString(), "BCDIN");
}
else
{
Pub.flag.set(eFlag.RDY_VISION0, true, "USER");
Pub.flag.set(eFlag.PRC_VISION2, false, "user");
WS_Send(0, Pub.wsL, Pub.Result.ItemData[0].guid, "BCDIN");
}
}
private void visionTrigger1ToolStripMenuItem_Click(object sender, EventArgs e)
{
//모든 큐를 제거한다.
lock (BarcodeQueR)
{
while (BarcodeQueR.IsEmpty == false)
BarcodeQueR.TryDequeue(out string msg);
Pub.log.Add($"[1]큐제거 완료");
}
if (Pub.Result == null || Pub.Result.ItemData[2] == null)
{
Pub.flag.set(eFlag.RDY_VISION2, true, "USER");
WS_Send(1, Pub.wsR, Guid.NewGuid().ToString(), "BCDIN");
}
else
{
Pub.flag.set(eFlag.RDY_VISION2, true, "USER");
WS_Send(1, Pub.wsR, Pub.Result.ItemData[2].guid, "BCDIN");
}
}
public enum CmdShow
{
Hide,
Normal,
Minimized,
Maximized,
NoActivate,
Show,
Minimize,
MinimizeNoActive,
NA,
Restore,
Default,
ForceMinimize
}
private void button1_Click_1(object sender, EventArgs e)
{
if (Pub.wsL != null && Pub.wsL.Connected)
{
Util.MsgI("현재 프로그램이 연결되어 있습니다");
return;
}
//카메라 l실행
if (Pub.setting.CameraLFile.isEmpty() == true)
{
Util.MsgE("바코드 프로그램 파일명이 지정되지 않았습니다", true);
return;
}
var fi = new System.IO.FileInfo(Pub.setting.CameraLFile);
if (fi.Exists == false)
{
Util.MsgE("비젼 프로그램 파일이 존재하지 않습니다\n" + fi.FullName);
return;
}
//var prc = null;// Util.CheckExistProcess("CrevisQRCode");
//if (prc == null)
{
//Util.MsgI("바코드 프로그램을 새로 실행 했습니다\n잠시만 기다리면 실행 됩니다");
Util.RunProcess(fi.FullName);
}
//else
//{
// SetActiveWindow((int)prc.MainWindowHandle);
// SetForegroundWindow(prc.MainWindowHandle);
// ShowWindow(prc.MainWindowHandle, (int)CmdShow.Normal);
//}
}
private void button2_Click_1(object sender, EventArgs e)
{
if (Pub.wsR != null && Pub.wsR.Connected)
{
Util.MsgI("현재 프로그램이 연결되어 있습니다");
return;
}
//카메라 l실행
if (Pub.setting.CameraRFile.isEmpty() == true)
{
Util.MsgE("바코드 프로그램 파일명이 지정되지 않았습니다", true);
return;
}
var fi = new System.IO.FileInfo(Pub.setting.CameraRFile);
if (fi.Exists == false)
{
Util.MsgE("비젼 프로그램 파일이 존재하지 않습니다\n" + fi.FullName);
return;
}
//var prc = null;// Util.CheckExistProcess("CrevisQRCode");
//if (prc == null)
{
//Util.MsgI("바코드 프로그램을 새로 실행 했습니다\n잠시만 기다리면 실행 됩니다");
Util.RunProcess(fi.FullName);
}
//else
//{
// SetActiveWindow((int)prc.MainWindowHandle);
// SetForegroundWindow(prc.MainWindowHandle);
// ShowWindow(prc.MainWindowHandle, (int)CmdShow.Normal);
//}
}
private void visionProcess0ToolStripMenuItem_Click(object sender, EventArgs e)
{
WS_Send(0, Pub.wsL, Guid.NewGuid().ToString(), "STATUS");
}
private void visionProcess1ToolStripMenuItem_Click(object sender, EventArgs e)
{
WS_Send(1, Pub.wsR, Guid.NewGuid().ToString(), "STATUS");
}
private void customerRuleToolStripMenuItem_Click(object sender, EventArgs e)
{
}
}
}