using Emgu.CV; using Emgu.CV.Structure; using System; using System.ComponentModel; using System.Diagnostics; using System.Drawing; using System.Runtime.InteropServices; using System.Windows.Forms; using UIControl; using System.Linq; using AR; using System.Security.Permissions; using Microsoft.Owin.Hosting; using System.Collections.Generic; using Chilkat; using System.Threading.Tasks; namespace Project { public partial class FMain : Form { [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); Boolean camliveBusy = false; bool liveviewprocesson = false; Stopwatch watFps = new Stopwatch(); Stopwatch watFps0 = new Stopwatch(); Stopwatch watFps1 = new Stopwatch(); Stopwatch watFps2 = new Stopwatch(); 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(); 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(eVarBool.FG_DEBUG); PUB.flag.set(eVarBool.FG_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(); //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 (AR.SETTING.Data.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(eVarBool.FG_DEBUG); this.btDebug.Visible = debug; this.hmi1.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 == eSMStep.RUN) { UTIL.MsgE("동작 중에는 종료 할 수 없습니다."); e.Cancel = true; return; } if (PUB.sm.Step < eSMStep.CLOSING) { var rlt = UTIL.MsgQ(Lang.Q_EXIT); if (rlt != System.Windows.Forms.DialogResult.Yes) { e.Cancel = true; return; } _Close_Start(); } } void UpdateControl() { this.RtLog.DateFormat = "HH:mm:ss"; this.RtLog.BackColor = SystemColors.Window; this.RtLog.ColorList = new arCtl.sLogMessageColor[] { new arCtl.sLogMessageColor("BARCODE",Color.DarkMagenta), new arCtl.sLogMessageColor("ERR",Color.Red), new arCtl.sLogMessageColor("NORMAL", Color.Black), new arCtl.sLogMessageColor("WARN", Color.DarkMagenta), new arCtl.sLogMessageColor("ATT", Color.Tomato), new arCtl.sLogMessageColor("INFO", Color.MidnightBlue), new arCtl.sLogMessageColor("VIS", Color.Blue), new arCtl.sLogMessageColor("SM", Color.Indigo), new arCtl.sLogMessageColor("WATCH", Color.Indigo), }; var colname = new string[] { "RID", "SID", "QTY", "VNAME", "VLOT", "MFG", "PART" }; var row = 1; foreach (var col in colname) { listView21.SetText(row, 0, col); listView21.SetText(row, 2, col); listView21.SetText(row, 4, col); listView21.SetText(row, 1, string.Empty); listView21.SetText(row, 3, string.Empty); listView21.SetText(row, 5, string.Empty); row += 1; } listView21.SetText(row, 0, "SIZE"); listView21.SetText(row, 2, "SIZE"); row += 1; var row2 = row; foreach (var col in colname) { listView21.SetText(row2, 0, col); //listView21.SetText(row, 2, col); listView21.SetText(row2, 4, col); listView21.SetText(row2, 1, string.Empty); listView21.SetText(row2, 3, string.Empty); listView21.SetText(row2, 5, string.Empty); row2 += 1; } colname = new string[] { "DEG", "QR", "BCD", "REGEX", "", "", "" }; foreach (var col in colname) { listView21.SetText(row, 2, col); listView21.SetText(row, 3, string.Empty); row += 1; } TowerLamp.Enable = !AR.SETTING.Data.Disable_TowerLamp; if (VAR.BOOL[eVarBool.Use_Conveyor]) { hmi1.arVar_Port[0].MotorDir = true; hmi1.arVar_Port[2].MotorDir = true; } //키엔스2개사용여부에따른 ui변경 if (SETTING.Data.Keyence_IPR.isEmpty()) { keyenceviewR.Visible = false; keyenceviewF.Dock = DockStyle.Fill; } else { keyenceviewR.Visible = true; keyenceviewF.Dock = DockStyle.Right; } if (VAR.BOOL[eVarBool.Use_Conveyor]) { lbLock0.Visible = false; lbLock2.Visible = false; arLabel6.Text = "▲"; arLabel11.Text = "■"; arLabel74.Text = "▲"; arLabel76.Text = "■"; SETTING.Data.Disable_PortL = true; SETTING.Data.Disable_PortR = true; } else { lbLock0.Visible = true; lbLock2.Visible = true; arLabel6.Text = "▼"; arLabel11.Text = "▲"; arLabel74.Text = "▼"; arLabel76.Text = "▲"; SETTING.Data.Disable_PortL = false; SETTING.Data.Disable_PortR = false; } } void RefreshList() { //if (COMM.SETTING.Data.OnlineMode == false) return; if (this.InvokeRequired) { this.BeginInvoke(new MethodInvoker(RefreshList)); return; } VAR.TIME[eVarTime.REFRESHLIST] = DateTime.Now; try { var dtstr = DateTime.Now.ToShortDateString(); if (AR.SETTING.Data.OnlineMode) { try { this.ta.FillByLen7(this.dataSet1.Component_Reel_Result, dtstr, dtstr, AR.SETTING.Data.McName); } catch (Exception ex) { PUB.log.AddE($"DB History Request Error" + ex.Message); } } ListFormmatData(); var TS1 = VAR.TIME.RUN(eVarTime.REFRESHLIST); PUB.log.AddI(string.Format($"목록 새로 고침({0}건) {TS1.TotalSeconds:N1}s", dataSet1.Component_Reel_Result.Count)); ////Summary //listView1.Items.Clear(); //using (var ta = new DataSet1TableAdapters.ResultSummaryTableAdapter()) //{ // var dt = ta.GetData(dtstr, dtstr, AR.SETTING.Data.McName); // var sum_qty = 0; // var sum_kpc = 0.0; // foreach (DataSet1.ResultSummaryRow dr in dt) // { // var lv = this.listView1.Items.Add(dr.PARTNO); // lv.SubItems.Add(dr.VLOT); // lv.SubItems.Add($"{dr.QTY}"); // lv.SubItems.Add($"{dr.KPC}"); // sum_qty += dr.QTY; // sum_kpc += dr.KPC; // } // if (sum_qty > 0) // { // var lvsum = this.listView1.Items.Add("TOTAL"); // lvsum.SubItems.Add(""); // lvsum.SubItems.Add($"{sum_qty}"); // lvsum.SubItems.Add($"{sum_kpc}"); // lvsum.BackColor = Color.LightGray; // } //} //TS1 = VAR.TIME.RUN(eVarTime.REFRESHLIST); //PUB.log.AddI($"요약{TS1.TotalSeconds:N1}s"); } catch (Exception ex) { PUB.log.AddE("목록 새로고침 실패:" + ex.Message); } } void ListFormmatData() { if (this.InvokeRequired) { this.BeginInvoke(new MethodInvoker(ListFormmatData)); return; } PUB.log.Add($"ListFormmatData"); arDatagridView1.SuspendLayout(); foreach (DataGridViewRow item in this.arDatagridView1.Rows) { var drv = item.DataBoundItem as System.Data.DataRowView; var dr = drv.Row as DataSet1.Component_Reel_ResultRow; if (dr.REMARK.StartsWith("(BYPASS")) { item.DefaultCellStyle.BackColor = Color.LightSkyBlue; } else { if (dr.LOC == "L") item.DefaultCellStyle.BackColor = Color.FromArgb(220, 220, 220); else item.DefaultCellStyle.BackColor = Color.FromArgb(250, 250, 250); } if (dr.REMARK.StartsWith("(BYPASS")) item.DefaultCellStyle.ForeColor = Color.Black; else if (dr.PRNATTACH == false) item.DefaultCellStyle.ForeColor = Color.FromArgb(0xfe, 0x2a, 0x00); else if (dr.PRNVALID == false) item.DefaultCellStyle.ForeColor = Color.FromArgb(0x1f, 0x3b, 0x34); else item.DefaultCellStyle.ForeColor = Color.Black; } arDatagridView1.ResumeLayout(); } private void __Load(object sender, EventArgs e) { this.Text = Application.ProductName + " ver " + Application.ProductVersion + " " + Application.CompanyName; PUB.init(); //public initialize VAR.BOOL[eVarBool.Use_Conveyor] = PUB.uSetting.useConv; groupBox3.Text = $"모델정보({AR.SETTING.Data.McName})"; UpdateControl(); PUB.log.RaiseMsg += Log_RaiseMsg; PUB.logKeyence.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("프로그램 초기화", Color.White, Color.White, Color.Tomato, Color.Black); //피커 상태초기화 foreach (var item in this.hmi1.arVar_Picker) item.Clear(); //포트 상태 초기화 foreach (var item in this.hmi1.arVar_Port) item.Clear(); PUB.flag.set(eVarBool.FG_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; PUB.BarcodeFix = new arDev.RS232("B"); PUB.BarcodeFix.Terminal = arDev.RS232.eTerminal.LF; PUB.BarcodeFix.ReceiveData += BarcodeFix_ReceiveData; var portinfo = AR.SETTING.Data.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("디버깅포트 열기 실패(" + AR.SETTING.Data.Serial_Remocon + ")"); else PUB.log.Add("디버깅포트 열기 성공(" + AR.SETTING.Data.Serial_Remocon + ")"); PUB.log.Add("상태머신 시작"); PUB.sm.SetMsgOptOff(); //모든 메세지출력을 해제한다. (이벤트는 동작함) PUB.sm.Running += SM_Loop; PUB.sm.SPS += SM_SPS; //###################################################### //########## 아래 이벤트는 _11_SM_Events.cs 파일에 정의됨 //###################################################### PUB.sm.StepChanged += SM_StepChanged; PUB.sm.Message += SM_Message; PUB.sm.InitControl += SM_InitControl; PUB.sm.StepStarted += SM_StepStarted; PUB.sm.StepCompleted += SM_StepCompleted; PUB.sm.StateProgress += SM_StateProgress; PUB.sm.Start(); //Fag 값 변화 //PUB.flag.ValueChanged += Flag_ValueChanged; VAR.BOOL.ValueChanged += Flag_ValueChanged; //ILock 값 변화 for (int i = 0; i < PUB.iLock.Length; i++) PUB.iLock[i].ValueChanged += Lock_ValueChanged; //ILock 값 변화 PUB.iLockPRL.ValueChanged += Lock_ValueChanged; PUB.iLockPRR.ValueChanged += Lock_ValueChanged; PUB.iLockVS0.ValueChanged += Lock_ValueChanged; PUB.iLockVS1.ValueChanged += Lock_ValueChanged; PUB.iLockVS2.ValueChanged += Lock_ValueChanged; PUB.iLockCVL.ValueChanged += Lock_ValueChanged; PUB.iLockCVR.ValueChanged += Lock_ValueChanged; hmi1.ClearMenu(); hmi1.Message += loader1_Message; hmi1.IConClick += loader1_IConClick; hmi1.ButtonClick += Loader1_ButtonClick; PUB.plc = new AR.MemoryMap.Client(SETTING.Data.swplc_name, SETTING.Data.swplc_size); PUB.plc.ValueChanged += Plc_ValueChanged; PUB.plc.Start(); //연결체크용 쓰레드 var thStart = new System.Threading.ThreadStart(bwDeviceConnection); thConnection = new System.Threading.Thread(thStart); thConnection.IsBackground = true; thConnection.Start(); VAR.I32[eVarInt32.Front_Laser_Cleaning] += 1; //조이스틱 설정 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 (AR.SETTING.Data.Jostick_pid != 0 && AR.SETTING.Data.Jostick_vid != 0) { PUB.log.Add($"Joystick Connect VID:{AR.SETTING.Data.Jostick_vid},PID:{AR.SETTING.Data.Jostick_pid}"); PUB.joystick.Connect(AR.SETTING.Data.Jostick_vid, AR.SETTING.Data.Jostick_pid); } //키엔스연결 if (SETTING.Data.Keyence_IPF.isEmpty() == false) { PUB.keyenceF = new Device.KeyenceBarcode(AR.SETTING.Data.Keyence_IPF); PUB.keyenceF.Tag = "F"; PUB.keyenceF.Connect(); PUB.keyenceF.BarcodeRecv += Keyence_BarcodeRecv; PUB.keyenceF.ImageRecv += Keyence_ImageRecv; } if (SETTING.Data.Keyence_IPR.isEmpty() == false) { PUB.keyenceR = new Device.KeyenceBarcode(AR.SETTING.Data.Keyence_IPR); PUB.keyenceR.Tag = "R"; PUB.keyenceR.Connect(); PUB.keyenceR.BarcodeRecv += Keyence_BarcodeRecv; PUB.keyenceR.ImageRecv += Keyence_ImageRecv; } tmDisplay.Start(); //start Display PUB.AddSystemLog(Application.ProductVersion, "SCREEN", "Message"); PUB.log.Add("Program Start"); if (SETTING.Data.OnlineMode) PUB.CheckNRegister3(Application.ProductName, "chi", Application.ProductVersion); if (SETTING.Data.EnableDebugMode) { btDebug.Visible = true; PUB.flag.set(eVarBool.FG_DEBUG, true, "FMAIN_STARTUP"); // menu_logform(); } //swplc 프로그램 실행 var swplcfile = UTIL.MakePath("swplc", "swplc.exe"); if (System.IO.File.Exists(swplcfile)) { UTIL.RunProcess(swplcfile); } RefreshList(); UpdateControl(); PUB.flag.set(eVarBool.FG_ENABLE_LEFT, !AR.SETTING.Data.Disable_Left, "LOAD"); PUB.flag.set(eVarBool.FG_ENABLE_RIGHT, !AR.SETTING.Data.Disable_Right, "LOAD"); this.Show(); this.Activate(); Amkor.RestfulService.Message += RestfulService_Message; } private void RestfulService_Message(object sender, Amkor.RestfulService.MessageEventArgs e) { if (e.isError) PUB.log.AddE($"restful log : {e.Message}"); else PUB.log.AddI($"restful log : {e.Message}"); } private void Plc_ValueChanged(object sender, AR.MemoryMap.Core.monitorvalueargs e) { // } private void BarcodeFix_ReceiveData(object sender, arDev.RS232.ReceiveDataEventArgs e) { var data = e.StrValue.Replace("\r", "").Replace("\n", ""); bool findregex = false; PUB.log.Add($"고정바코드수신\n{data}"); var cnt = BarcodeRegExProcess( PUB.Result.BCDPattern, PUB.Result.BCDIgnorePattern, PUB.Result.ItemDataC.VisionData, string.Empty, data, out bool IgnoreBarcode, out findregex); if (IgnoreBarcode) PUB.log.AddE("무시바코드 입니다"); else if (cnt.Item1 == 0) PUB.log.AddAT("(수동)바코드 적용값 없음"); else PUB.log.Add($"(수동)바코드적용수:{cnt.Item1}"); //다른모델에서 패턴이가능한것을 찾는다 if ((cnt?.Item1 ?? 0) == 0) { var patterns = PUB.GetPatterns("%", false); PUB.log.Add("=============="); cnt = BarcodeRegExProcess(patterns, new System.Collections.Generic.List(), null, string.Empty, data, out bool igBarcode, out findregex); if (cnt.Item1 > 0) { PUB.log.AddI("아래 바코드와 호환됩니다"); foreach (var item in cnt.Item2) { PUB.log.Add($"모델:{item}"); } //데이터가 1건이고 현재 모델과 이름이 다르면 추천한다 if (cnt.Item2.Count == 1 && AR.SETTING.Data.Enable_AutoChangeModelbyHandBarcode) { var modelname = cnt.Item2[0].Split('|')[0]; if (PUB.Result.isSetvModel && modelname.Equals(PUB.Result.vModel.Title)) { //동일바코드라서 추가 작업 없음 } else { if (PUB.mdm.dataSet.OPModel.Where(t => t.Title.Equals(modelname)).Any()) { PUB.log.Add($"모델자동전환(고정바코드)"); PUB.SelectModelV(modelname); } } } } } } void loader1_Message(object sender, HMI.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) { if (Message.Contains("ignore")) return; if (Message.StartsWith("1:")) return; if (Message.StartsWith("11:")) return; this.RtLog.AddMsg(LogTime, TypeStr, Message); } private void LogWS_RaiseMsg(DateTime LogTime, string TypeStr, string Message) { this.RtLog.AddMsg(LogTime, TypeStr, Message); } delegate void SelectModelHandler(string modelName, bool bUploadConfig); //void UpLoadBarcodeConfigR() //{ // if (PUB.keyenceR == null || PUB.keyenceR.IsConnect == false) // { // PUB.log.AddAT($"바코드R가 연결되지 않아 설정 파일을 업로드하지 않습니다. 신규 작업 시작시 해당 정보는 재 전송 됩니다. 좌측하단의 바코드 연결을 확인 후 모델을 선택하시면 이 오류가 발생되지 않습니다"); // return; // } // //바코드설정파일 입력 // var mv = PUB.Result.vModel; // var configfilename = mv.Title; // if (configfilename.isEmpty()) configfilename = mv.Title; // if (configfilename.EndsWith("R") == false) configfilename += "R"; // var jobcode = VAR.STR[eVarString.JOB_TYPE]; // if (jobcode.isEmpty() == false) configfilename += $"_{jobcode}"; // if (configfilename.ToLower().EndsWith("ptc") == false) configfilename += ".ptc"; // var configpath = System.IO.Path.Combine(UTIL.CurrentPath, "Model", configfilename); // var configfi = new System.IO.FileInfo(configpath); // if (configfi.Exists == false) // { // PUB.log.AddAT($"바코드R 설정파일({configfi.Name})이 없습니다"); // } // else // { // try // { // //접속되어잇ㅇ츠면 끈다 // if (PUB.keyenceR.IsConnect) PUB.keyenceR.Trigger(false); // var ftp = new arUtil.FTPClient.FTPClient(); // ftp.Host = COMM.SETTING.Data.Keyence_IPR; // ftp.Port = 21; // var UPFileName = @"\CONFIG\CONFIG.PTC"; // var upOk = ftp.Upload(UPFileName, configfi.FullName); // if (upOk == false) PUB.log.AddE("바코드R 설정파일 업로드 실패"); // else PUB.log.AddI($"바코드R 설정파일 업로드 완료({configfi.FullName})"); // if (PUB.keyenceR.IsConnect) PUB.keyenceR.Trigger(true); // } // catch (Exception ex) // { // PUB.log.AddE($"바코드R FTP전송 실패:{ex.Message}"); // } // } //} /// /// soft reset value & use /// void UpdateSoftLimit() { PUB.log.Add("모션 SOFT-LIMIT 설정"); for (int i = 0; i < PUB.mot.DeviceCount; i++) { if (PUB.system_mot.UseAxis(i) == false) { PUB.mot.SetUse(i, false); } else { PUB.mot.SetUse(i, true); if (PUB.system_mot.SWLimit(i) > 0) PUB.mot.SetSoftLimit((short)i, true, PUB.system_mot.SWLimit(i), -9999); else PUB.mot.SetSoftLimit((short)i, false, 0, 0); } } } void Func_sw_initialize() { PUB.Result.ResetButtonDownTime = DateTime.Now; if (PUB.sm.Step == eSMStep.RUN) { PUB.popup.setMessage("SYSTEM INNITIALIZE\n" + "동작중에는 [초기화]를 실행할 수 없습니다\n" + "방법 #1 => [중지] 버튼을 이용하여 시스템을 정지 후 다시 시도\n" + "방법 #2 => [수동실행] 모드로 전환 후 다시 시도"); } else if ( PUB.sm.getNewStep != eSMStep.HOME_FULL && PUB.sm.Step != eSMStep.HOME_FULL) { PUB.log.Add("시스템상태를 RESET으로 전환 합니다"); PUB.AddSystemLog(Application.ProductVersion, "MAIN", "SYSTEM RESET"); PUB.sm.SetNewStep(eSMStep.HOME_FULL); } else PUB.log.AddAT("RESET 중이므로 RESET 버튼을 무시 합니다."); } /// /// 작업시작전 작업에대한 선택 /// void Func_start_job_select() { if (this.InvokeRequired) { this.BeginInvoke(new MethodInvoker(Func_start_job_select), null); } else { //로그창 지우기 if (this.RtLog.InvokeRequired) RtLog.BeginInvoke(new Action(() => { RtLog.Clear(); })); else this.RtLog.Clear(); //PUB.popup.needClose = true; //PUB.flag.set(eVarBool.RUN_INIT, false, "FN_JOBSELECT"); //PUB.ClearRunStep(0); //PUB.ClearRunStep(1); if (DIO.GetIOInput(eDIName.PICKER_SAFE) == false) { PUB.Result.SetResultMessage(eResult.OPERATION, eECode.NEED_JOBCANCEL, eNextStep.ERROR); return; } var sb = new System.Text.StringBuilder(); if (PUB.mot.IsInit == false) sb.AppendLine("▶ 모션 보드가 초기화 되지 않았습니다.\n문의 바랍니다"); if (PUB.dio.IsInit == false) sb.AppendLine("▶ I/O 보드가 초기화 되지 않았습니다.\n문의 바랍니다"); if (DIO.GetIOOutput(eDOName.SOL_AIR) == false) sb.AppendLine("▶ AIR 출력 안됨(전면의 AIR버튼을 누르세요)"); if (DIO.GetIOInput(eDIName.AIR_DETECT) == false) sb.AppendLine("▶ AIR 감지 안됨(AIR 입력 및 출력상태를 확인하세요)"); if (PUB.mot.HasHomeSetOff == true) sb.AppendLine("▶ 홈 검색이 완료되지 않은 축이 있습니다(장치초기화를 먼저 실행 하세요)"); if (sb.Length > 0) { PUB.Result.SetResultMessage(eResult.HARDWARE, eECode.MESSAGE_ERROR, eNextStep.ERROR, sb.ToString()); return; } //작업형태를 선택하게 한다 Form f; f = new Dialog.fSelectJob(); if (f.ShowDialog() == DialogResult.OK) { PUB.sm.SetNewStep(eSMStep.RUN); } else { PUB.log.AddAT("작업 시작전 선택화면에서 사용자가 취소함"); } } } Dialog.fSystem_Setting frmSysParam = null; Dialog.fSystem_MotParameter frmSysMotParam = 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.fSystem_Setting(); 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(); } } void CheckFreeSpace() { try { double freeSpaceRate_ = 0; var path = PUB.getSavePath(out freeSpaceRate_); if (path.StartsWith("\\")) { hmi1.arFreespace = 0.0; } else { hmi1.arFreespace = freeSpaceRate_;// if (freeSpaceRate_ < AR.SETTING.Data.AutoDeleteThreshold) { PUB.flag.set(eVarBool.FG_MINSPACE, true, "CheckFreeSpace"); hmi1.arLowDiskSpace = true; } else { PUB.flag.set(eVarBool.FG_MINSPACE, false, "CheckFreeSpace"); hmi1.arLowDiskSpace = false; } } } catch (Exception ex) { hmi1.arFreespace = 0.0; PUB.log.AddE("check free space : " + ex.Message); } } private void demoRunToolStripMenuItem_Click(object sender, EventArgs e) { var item = new Class.JobData(0) { }; SaveData_EE(item, "L", "TEST", "debug"); } 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); _BUTTON_START(); } private void arLabel4_Click_1(object sender, EventArgs e) { PUB.log.Add("User Click : Stop", false); _BUTTON_STOP(); } private void btReset_Click(object sender, EventArgs e) { PUB.log.Add("User Click : Reset", false); _BUTTON_RESET(); } 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 arLabel10_Click_1(object sender, EventArgs e) { if (PUB.sm.isRunning == true) { UTIL.MsgE(Lang.CAN_NOT_RUN_AUTOMODE); return; } this.Close(); } private void button7_Click(object sender, EventArgs e) { if (PUB.flag.get(eVarBool.FG_INIT_MOTIO) == false) { UTIL.MsgE("모션이 초기화 되지 않았습니다\n잠시 후 다시 시도하세요"); return; } var cur = DIO.GetIOOutput(eDOName.ROOMLIGHT); DIO.SetRoomLight(!cur, true); } Dialog.fHistory fhist = null; private void button3_Click(object sender, EventArgs e) { if (fhist == null || fhist.IsDisposed) fhist = new Dialog.fHistory(); fhist.Show(); fhist.Activate(); if (fhist.WindowState == FormWindowState.Minimized) fhist.WindowState = FormWindowState.Maximized; //f.Show(); //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) { } private void button5_Click(object sender, EventArgs e) { } private void button6_Click(object sender, EventArgs e) { } private void arLabel13_Click(object sender, EventArgs e) { UTIL.ScreenCapture(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height, new Point(0, 0)); } void menu_cancel() { if (PUB.flag.get(eVarBool.FG_INIT_MOTIO) == false) { UTIL.MsgE("모션이 초기화 되지 않았습니다\n잠시 후 다시 시도하세요"); return; } var msg = new System.Text.StringBuilder(); if (PUB.mot.HasHomeSetOff) { msg.AppendLine("! 장치 초기화가 완료되지 않은 상태입니다\n! 장치초기화를 실행 하세요"); } if (PUB.sm.isRunning == true) { msg.AppendLine("! " + Lang.CAN_NOT_RUN_AUTOMODE); } ////if (PUB.sm.Step == eSMStep.PAUSE) ////{ //// msg.AppendLine("! RESET을 누른 후 다시 시도하세요"); ////} if (DIO.IsEmergencyOn() == true) { msg.AppendLine("! 비상정지를 해제하세요"); } if (DIO.isSaftyDoorF() == false) { msg.AppendLine("!전면 도어가 열려 있습니다"); } if (DIO.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(eVarBool.FG_USERSTEP, false, "Run_MotionPositionReset"); PUB.log.AddAT("배출 및 원점이동 시작"); PUB.AddSystemLog(Application.ProductVersion, "MAIN", "작업취소"); PUB.sm.SetNewStep(eSMStep.HOME_QUICK);//실행모드로 변경 } private void arLabel14_Click(object sender, EventArgs e) { if (PUB.flag.get(eVarBool.FG_INIT_MOTIO) == false) { UTIL.MsgE("모션이 초기화 되지 않았습니다\n잠시 후 다시 시도하세요"); return; } var msg = new System.Text.StringBuilder(); if (PUB.sm.isRunning == true) msg.AppendLine("*" + Lang.CAN_NOT_RUN_AUTOMODE); if (DIO.GetIOOutput(eDOName.SOL_AIR) == false) msg.AppendLine("* 전면의 AIR버튼을 눌러서 AIR를 공급하세요"); //if (DIO.GetIOOutput(eDOName.SOL_AIR) && DIO.GetIOInput(eDIName.AIR_DETECT) == false) // msg.AppendLine("* AIR 감지 안됨, AIR 공급상태를 확인 하세요"); if (DIO.GetIOInput(eDIName.L_PICK_BW) == false) { msg.AppendLine("* 왼쪽 프린터 피커가 후진상태가 아닙니다."); } if (DIO.GetIOInput(eDIName.R_PICK_BW) == false) { msg.AppendLine("* 오른쪽 프린터 피커가 후진상태가 아닙니다."); } if (AR.SETTING.Data.Enable_PickerCylinder) { if (DIO.GetIOInput(eDIName.L_CYLUP) == false) { msg.AppendLine("* 왼쪽 프린터 피커 실린더가 UP상태가 아닙니다."); } if (DIO.GetIOInput(eDIName.R_CYLUP) == false) { msg.AppendLine("* 오른쪽 프린터 피커 실린더가 UP상태가 아닙니다."); } } if (DIO.IsEmergencyOn() == true) msg.AppendLine("* 비상정지 상태일때에는 움직일 수 없습니다."); if (PUB.sm.Step == 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.sm.isRunning == true) { UTIL.MsgE(Lang.CAN_NOT_RUN_AUTOMODE); return; } fSetting f = new fSetting(); var popmsg = PUB.popup.Visible; if (f.ShowDialog() == DialogResult.OK) { DIO.InitDIOSensitive(); //핀정의 파일 업데이트 DIO.Pin.SetInputData(PUB.mdm.dataSet.InputDescription); DIO.Pin.SetOutputData(PUB.mdm.dataSet.OutputDescription); if (AR.SETTING.Data.Disable_RoomLight == true) DIO.SetRoomLight(false); if (AR.SETTING.Data.Disable_TowerLamp == true) { DIO.SetTwGrn(false); DIO.SetTwRed(false); DIO.SetTwYel(false); } if (AR.SETTING.Data.Serial_Remocon.isEmpty() == false) { var portinfo = AR.SETTING.Data.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); } } groupBox3.Text = $"모델정보({PUB.MCCode}/{AR.SETTING.Data.McName})"; //프린터설정 - 201223 //PUB.PrinterL.printerName = COMM.SETTING.Data.PrintLeftName; //PUB.PrinterR.printerName = COMM.SETTING.Data.PrintRightName; UpdateControl(); } if (popmsg) PUB.popup.Visible = true; } private void arLabel12_Click(object sender, EventArgs e) { string file = System.IO.Path.Combine(UTIL.CurrentPath, "Manual", "Manual.pdf");// "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) { } private void 맵데이터보기ToolStripMenuItem_Click(object sender, EventArgs e) { } private void 저장폴더열기ToolStripMenuItem_Click(object sender, EventArgs e) { } private void 캡처ToolStripMenuItem1_Click(object sender, EventArgs e) { } private void 저장ToolStripMenuItem_Click(object sender, EventArgs e) { } private void btDebug_Click(object sender, EventArgs e) { arCtl.arLabel ctl = sender as arCtl.arLabel; this.cmDebug.Show(this, new Point(100, 100)); } private void sMResetToolStripMenuItem_Click(object sender, EventArgs e) { if (PUB.sm.isRunning == true) { UTIL.MsgE(Lang.CAN_NOT_RUN_AUTOMODE); return; } if (PUB.sm.Step != 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(eSMStep.IDLE, true); PUB.flag.set(eVarBool.FG_USERSTEP, false, "sMResetToolStripMenuItem_Click"); } private void dIOMonitorToolStripMenuItem_Click(object sender, EventArgs e) { var c = Amkor.RestfulService.Allocation_Unique_ReelID_AmkorSTD("2000", "4", "A", out string error); } private void refreshControklToolStripMenuItem_Click(object sender, EventArgs e) { this.hmi1.RemakeRect(); UpdateControl(); PUB.Result.DTSidConvertEmptyList.Clear(); PUB.Result.DTSidConvertMultiList.Clear(); PUB.Result.DTSidConvert.Clear(); PUB.Result.DTSidConvert.AcceptChanges(); if (PUB.Result.ItemDataC.VisionData != null) PUB.Result.ItemDataC.VisionData.barcodelist.Clear(); } void loader1_IConClick(object sender, UIControl.HMI.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, }; hmi1.AddMenu(newmenu); } else if (e.item.Tag == "emg") { btMReset.PerformClick(); } else if (e.item.Tag == "debug") { PUB.flag.set(eVarBool.FG_DEBUG, !PUB.flag.get(eVarBool.FG_DEBUG), ""); ShowDebugMenu(); } } private void Loader1_ButtonClick(object sender, UIControl.HMI.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") { DIO.SetAIR(true); PUB.log.Add("사용자 air on"); } else { DIO.SetAIR(false); PUB.log.Add("사용자 air off"); } break; } } //마지막메뉴를 제거한다 hmi1.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 }; hmi1.AddMenu(newmenu); } private void debugModeToolStripMenuItem_Click(object sender, EventArgs e) { this.hmi1.arDebugMode = !this.hmi1.arDebugMode; this.hmi1.Invalidate(); } private void countToolStripMenuItem_Click(object sender, EventArgs e) { var f = new Dialog.fDebug(); f.TopMost = true; f.Show(); } #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) { hmi1.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); } } 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 작업선택화면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) { } private void pictureBox1_Click(object sender, EventArgs e) { if (PUB.flag.get(eVarBool.FG_DEBUG) == true) { PUB.flag.set(eVarBool.FG_DEBUG, false, "개발중"); } else { PUB.flag.set(eVarBool.FG_DEBUG, true, "개발중"); } ShowDebugMenu(); } private void cmCam_Opening(object sender, CancelEventArgs e) { if (PUB.sm.Step < 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); } } } //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 livetaskToolStripMenuItem_Click(object sender, EventArgs e) //{ // //SetVisionTask(); // //PUB.flag.set(eVarBool.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); } private void keyenceTrigOnToolStripMenuItem_Click(object sender, EventArgs e) { PUB.keyenceF.Trigger(true); //Keyence_Trigger(true); PUB.keyenceR.Trigger(true); //Keyence_Trigger(true); } private void keyenceTrigOffToolStripMenuItem_Click(object sender, EventArgs e) { PUB.keyenceF.Trigger(false); //Keyence_Trigger(false); PUB.keyenceR.Trigger(false); //Keyence_Trigger(false); } private void keyenceSaveImageToolStripMenuItem_Click(object sender, EventArgs e) { var fn = System.IO.Path.Combine(UTIL.CurrentPath, "Images", "keyence.bmp"); SaveImage(fn); } void menu_barcodeconfirm() { //이미지저장한다. if (PUB.sm.Step != eSMStep.RUN && PUB.sm.Step != eSMStep.PAUSE && PUB.sm.Step != eSMStep.WAITSTART) { var tempfilF = System.IO.Path.Combine(UTIL.CurrentPath, "Temp", "keyenceF.bmp"); var tempfilR = System.IO.Path.Combine(UTIL.CurrentPath, "Temp", "keyenceR.bmp"); var fiF = new System.IO.FileInfo(tempfilF); var fiR = new System.IO.FileInfo(tempfilR); if (fiF.Directory.Exists == false) fiF.Directory.Create(); if (fiR.Directory.Exists == false) fiR.Directory.Create(); var nimagF = PUB.keyenceF.SaveImage(fiF.FullName); var nimagR = false; if (PUB.keyenceR != null) nimagR = PUB.keyenceR.SaveImage(fiR.FullName); ///this.pictureBox1.Image = nimag; if (nimagF && nimagR) { //nimag.Save(fi.FullName, System.Drawing.Imaging.ImageFormat.Bmp); PUB.Result.ItemDataC.VisionData.SetImage( new Mat(fiF.FullName, Emgu.CV.CvEnum.ImreadModes.Grayscale), new Mat(fiR.FullName, Emgu.CV.CvEnum.ImreadModes.Grayscale)); } else if (nimagF) { PUB.Result.ItemDataC.VisionData.SetImage(new Mat(fiF.FullName, Emgu.CV.CvEnum.ImreadModes.Grayscale)); } else PUB.log.AddE($"키엔스 이미지 수집 실패"); } var f = new Dialog.fLoaderInfo(PUB.Result.ItemDataC.VisionData.bcdMessage); f.ShowDialog(); } private void lbSize1_Click(object sender, EventArgs e) { } 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.sm.isRunning) { UTIL.MsgE("동작중에는 카트교환을 할 수 없습니다\n'STOP' 버튼을 누른 후 다시 시도하세요"); return; } bool curMag = DIO.GetIOOutput(eDOName.CART_MAG0); bool curLim = DIO.GetIOInput(eDIName.PORTL_LIM_DN); if (index == 1) { curMag = DIO.GetIOOutput(eDOName.CART_MAG1); curLim = DIO.GetIOInput(eDIName.PORTC_LIM_DN); } else if (index == 2) { curMag = DIO.GetIOOutput(eDOName.CART_MAG2); curLim = DIO.GetIOInput(eDIName.PORTR_LIM_DN); } // cur = Util_DO.GetIOOutput(eDOName.CART_MAG0); if (curMag == false) { PUB.log.Add($"MAGNET{index} ON by USER"); DIO.SetPortMagnet(index, true); //켜는건 바로 할 수 있게 한다 } else { if (curLim == false) { UTIL.MsgE("포트를 모두 내린 후 다시 시도하세요"); DIO.SetPortMotor(index, eMotDir.CCW, true, "카트교환"); //포트를 자동으로 내려준다 return; } DIO.SetPortMagnet(index, false); PUB.log.Add($"MAGNET{index} OFF by USER"); } } private void arDatagridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) { // } private void arLabel6_Click(object sender, EventArgs e) { //포트내림 if (PUB.sm.isRunning) { UTIL.MsgE("동작중에는 사용할 수 없습니다"); return; } var index = int.Parse((sender as arCtl.arLabel).Tag.ToString()); if (VAR.BOOL[eVarBool.Use_Conveyor] && (index == 0 || index == 2)) { if (index == 0) DIO.SetOutput(eDOName.LEFT_CONV, true); if (index == 2) DIO.SetOutput(eDOName.RIGHT_CONV, true); } else { if (DIO.GetPortMotorRun(index) == true) DIO.SetPortMotor(index, eMotDir.CW, false, "UI"); else { if (UTIL.MsgQ("포트를 내릴까요?") == DialogResult.Yes) DIO.SetPortMotor(index, eMotDir.CCW, true, "UI포트내림"); } } } private void arLabel11_Click_1(object sender, EventArgs e) { //포트올림 if (PUB.sm.isRunning) { UTIL.MsgE("동작중에는 사용할 수 없습니다"); return; } var index = int.Parse((sender as arCtl.arLabel).Tag.ToString()); if (VAR.BOOL[eVarBool.Use_Conveyor] && (index == 0 || index == 2)) { if (index == 0) DIO.SetOutput(eDOName.LEFT_CONV, false); if (index == 2) DIO.SetOutput(eDOName.RIGHT_CONV, false); } else { if (DIO.GetPortMotorRun(index) == true) DIO.SetPortMotor(index, eMotDir.CCW, false, "UI"); else { if (UTIL.MsgQ("포트를 올릴까요?") == DialogResult.Yes) DIO.SetPortMotor(index, eMotDir.CW, true, "UI"); } } } private void jObEndToolStripMenuItem_Click(object sender, EventArgs e) { if (PUB.flag.get(eVarBool.FG_INIT_MOTIO) == false) { UTIL.MsgE("모션이 초기화 되지 않았습니다\n잠시 후 다시 시도하세요"); return; } ShowSummary(); } private void button3_Click_4(object sender, EventArgs e) { } private void jOBStartToolStripMenuItem_Click(object sender, EventArgs e) { var f = new Dialog.fSelectJob(); f.ShowDialog(); } private void button1_Click_1(object sender, EventArgs e) { } private void button2_Click_1(object sender, EventArgs e) { } private void visionProcess0ToolStripMenuItem_Click(object sender, EventArgs e) { WS_Send(eWorkPort.Left, PUB.wsL, Guid.NewGuid().ToString(), "STATUS", ""); } private void visionProcess1ToolStripMenuItem_Click(object sender, EventArgs e) { WS_Send(eWorkPort.Right, PUB.wsR, Guid.NewGuid().ToString(), "STATUS", ""); } private void customerRuleToolStripMenuItem_Click(object sender, EventArgs e) { } private void toolStripButton13_Click(object sender, EventArgs e) { menu_cancel(); } private void toolStripButton15_Click(object sender, EventArgs e) { menu_barcodeconfirm(); } private void btLogViewer_Click(object sender, EventArgs e) { var exename = UTIL.MakePath("LogView.exe"); if (System.IO.File.Exists(exename) == false) { UTIL.MsgE("로그 뷰어 파일이 없습니다\n문의 주세요(T8567)"); return; } UTIL.RunProcess(exename); } private void toolStripButton16_Click(object sender, EventArgs e) { var file = UTIL.ScreenCapture(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height, new Point(0, 0), false); var f = new Dialog.fMailReport("", file, "", AR.SETTING.Data.Bugreport_mail); f.ShowDialog(); } private void 새로고침ToolStripMenuItem_Click_1(object sender, EventArgs e) { RefreshList(); } private void systemParameterMotorToolStripMenuItem_Click(object sender, EventArgs e) { if (frmSysMotParam == null || frmSysMotParam.IsDisposed || frmSysMotParam.Disposing) { if (frmSysMotParam != null) frmSysMotParam.FormClosed -= frmSysParam_FormClosed; frmSysMotParam = new Dialog.fSystem_MotParameter(); frmSysMotParam.FormClosed += frmSysParam_FormClosed; } frmSysMotParam.Show(); frmSysMotParam.Activate(); if (frmSysMotParam.WindowState == FormWindowState.Minimized) frmSysMotParam.WindowState = FormWindowState.Normal; } private void speedLimitToolStripMenuItem_Click(object sender, EventArgs e) { AR.SETTING.Data.Enable_SpeedLimit = !AR.SETTING.Data.Enable_SpeedLimit; } private void triggerOnToolStripMenuItem_Click(object sender, EventArgs e) { PUB.keyenceF.Trigger(true); PUB.keyenceR.Trigger(true); } private void triggerOffToolStripMenuItem_Click(object sender, EventArgs e) { PUB.keyenceF.Trigger(false); PUB.keyenceR.Trigger(false); } private void 빠른실행ToolStripMenuItem_Click(object sender, EventArgs e) { if (PUB.flag.get(eVarBool.FG_INIT_MOTIO) == false) { UTIL.MsgE("모션이 초기화 되지 않았습니다\n잠시 후 다시 시도하세요"); return; } if (PUB.sm.isRunning == true) { UTIL.MsgE(Lang.CAN_NOT_RUN_AUTOMODE); return; } var f = new Dialog.Quick_Control(); f.StartPosition = FormStartPosition.CenterScreen; f.Show(); } private void 관리ToolStripMenuItem_Click_1(object sender, EventArgs e) { if (PUB.sm.isRunning) { UTIL.MsgE("동작중에는 사용할 수 없습니다"); return; } if (PUB.flag.get(eVarBool.FG_MOVE_PICKER)) { UTIL.MsgE("해당 창이 열려 있습니다"); } else { var f = new Dialog.fPickerMove(); f.ShowDialog(); //홈이 안잡혀있고, 센서가 중앙에 있다면 초기화를 묻는다 if (PUB.mot.HasHomeSetOff == true && DIO.GetIOInput(eDIName.PICKER_SAFE)) { btMReset.PerformClick(); } RefreshList(); } } private void regExTestToolStripMenuItem_Click(object sender, EventArgs e) { var f = new Dialog.RegExTest(); f.ShowDialog(); } private void toolStripMenuItem11_Click(object sender, EventArgs e) { UTIL.RunExplorer(UTIL.CurrentPath); } private void toolStripMenuItem13_Click(object sender, EventArgs e) { PUB.LogFlush(); var fi = new System.IO.FileInfo(PUB.log.FileName); UTIL.RunExplorer(fi.Directory.FullName); } private void toolStripMenuItem14_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 toolStripMenuItem15_Click(object sender, EventArgs e) { var basepath = AR.SETTING.Data.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(AR.SETTING.Data.Path_Data, "History")); } private void bcdRegProcessClearToolStripMenuItem_Click(object sender, EventArgs e) { PUB.Result.BCDPattern.Clear(); PUB.Result.BCDIgnorePattern.Clear(); if (PUB.Result.ItemDataC.VisionData == null) return; lock (PUB.Result.ItemDataC.VisionData.barcodelist) { foreach (var item in PUB.Result.ItemDataC.VisionData.barcodelist) { item.Value.RegExConfirm = false; } } } private void 바코드룰ToolStripMenuItem_Click(object sender, EventArgs e) { using (var f = new Dialog.RegExRule()) f.ShowDialog(); } async private void 모델선택ToolStripMenuItem_Click(object sender, EventArgs e) { if (PUB.sm.isRunning == true) { UTIL.MsgE(Lang.CAN_NOT_RUN_AUTOMODE); return; } var f = new Model_Operation(); if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK) { if (SETTING.Data.SystemBypass) { UTIL.MsgI("환경설정에서 BYPASS 가 활성화 되었습니다\n" + "선택된 모델과 상관없이 장비는 BYPASS 로 동작 합니다\n" + "[SYSTEM BYPASS]\n" + "1. 카메라 기능이 OFF 됩니다\n" + "2. 프린터 기능이 OFF 됩니다"); } if (f.Value != "") { var ok = PUB.SelectModelV(f.Value); var motionmode = VAR.BOOL[eVarBool.Use_Conveyor] ? "Conveyor" : "Default"; PUB.SelectModelM(motionmode); UpdateControl(); if (VAR.BOOL[eVarBool.Use_Conveyor]) { var dlg = UTIL.MsgQ("다른 장비도 모델을 변경 할까요?"); if (dlg == DialogResult.Yes) { List urls = new List(); var conv = VAR.BOOL[eVarBool.Use_Conveyor] ? "1" : "0"; if (SETTING.Data.McName == "R1") { urls.Add($"{SETTING.Data.WebAPI_R2}/ctrl/model/Set/{f.Value}|{conv}"); urls.Add($"{SETTING.Data.WebAPI_R3}/ctrl/model/Set/{f.Value}|{conv}"); } else if (SETTING.Data.McName == "R2") { urls.Add($"{SETTING.Data.WebAPI_R1}/ctrl/model/Set/{f.Value}|{conv}"); urls.Add($"{SETTING.Data.WebAPI_R3}/ctrl/model/Set/{f.Value}|{conv}"); } else if (SETTING.Data.McName == "R3") { urls.Add($"{SETTING.Data.WebAPI_R1}/ctrl/model/Set/{f.Value}|{conv}"); urls.Add($"{SETTING.Data.WebAPI_R2}/ctrl/model/Set/{f.Value}|{conv}"); } await System.Threading.Tasks.Task.Run(() => { if (urls.Any()) { foreach (var url in urls) { PUB.log.AddI($"자동모델설정:{url}"); var rlt = UTIL.GetStrfromurl(url, out bool iserr, 3000); if (iserr) { PUB.log.Add($"모델설정실패:" + rlt); } } } }); } } } } f.Dispose(); } private void displayVARToolStripMenuItem_Click(object sender, EventArgs e) { var f = new Dialog.fVAR(); f.TopMost = true; f.Show(); } private void sID정보ToolStripMenuItem_Click(object sender, EventArgs e) { } private void listView21_Click(object sender, EventArgs e) { } private void lbMsg_Click(object sender, EventArgs e) { //reset 기능 PUB.Result.ItemDataC.VisionData.Clear("USER UI CLICK", true); PUB.flag.set(eVarBool.FG_END_VISIONL, false, "USER UI CLICK"); } private void 프린트룰ToolStripMenuItem_Click(object sender, EventArgs e) { var f = new Dialog.RegExPrintRule(); f.ShowDialog(); } private void tRIGONToolStripMenuItem_Click(object sender, EventArgs e) { PUB.keyenceF.Trigger(true); PUB.keyenceR.Trigger(true); } private void tRIGOFFToolStripMenuItem_Click(object sender, EventArgs e) { PUB.keyenceF.Trigger(false); PUB.keyenceR.Trigger(false); } private void getImageToolStripMenuItem1_Click(object sender, EventArgs e) { } private void toolStripMenuItem17_Click(object sender, EventArgs e) { // var curimageF = PUB.keyenceF.GetImage(); PUB.keyenceF.UpdateBitmap((Bitmap)curimageF, (Bitmap)this.keyenceviewF.Image); var curimageR = PUB.keyenceR.GetImage(); PUB.keyenceR.UpdateBitmap((Bitmap)curimageR, (Bitmap)this.keyenceviewR.Image); } private void triggerOnToolStripMenuItem1_Click(object sender, EventArgs e) { PUB.keyenceF.Trigger(true); PUB.keyenceR.Trigger(true); } private void triggerOffToolStripMenuItem1_Click(object sender, EventArgs e) { PUB.keyenceF.Trigger(false); PUB.keyenceR.Trigger(false); } private void connectToolStripMenuItem_Click(object sender, EventArgs e) { if (PUB.keyenceF != null) { PUB.keyenceF.Connect(); PUB.flag.set(eVarBool.FG_KEYENCE_OFFF, false, "USER"); } if (PUB.keyenceR != null) { PUB.keyenceR.Connect(); PUB.flag.set(eVarBool.FG_KEYENCE_OFFR, false, "USER"); } } private void disConnectToolStripMenuItem_Click(object sender, EventArgs e) { if (PUB.keyenceF != null) { PUB.keyenceF.Disconnect(); PUB.flag.set(eVarBool.FG_KEYENCE_OFFF, true, "USER"); } if (PUB.keyenceR != null) { PUB.keyenceR.Disconnect(); PUB.flag.set(eVarBool.FG_KEYENCE_OFFR, true, "USER"); } } private void tmLiveView_Tick(object sender, EventArgs e) { //tmLiveView.Stop(); //if (PUB.sm.Step >= eSMStep.IDLE && PUB.keyence != null && PUB.keyence.IsConnect) //{ // if (PUB.keyence.IsTriggerOn) // { // PUB.keyence.UpdateKeyenceImage(ref pictureBox1); // } //} //tmLiveView.Start(); } private void resetToolStripMenuItem_Click(object sender, EventArgs e) { PUB.keyenceF.Reset(); PUB.keyenceR.Reset(); } private void webManagerToolStripMenuItem_Click(object sender, EventArgs e) { UTIL.RunExplorer("http://" + AR.SETTING.Data.Keyence_IPF); UTIL.RunExplorer("http://" + AR.SETTING.Data.Keyence_IPR); } private void toolStripMenuItem23_Click(object sender, EventArgs e) { if (PUB.flag.get(eVarBool.FG_INIT_MOTIO) == false) { UTIL.MsgE("모션이 초기화 되지 않았습니다\n잠시 후 다시 시도하세요"); return; } if (PUB.sm.isRunning == true) { UTIL.MsgE(Lang.CAN_NOT_RUN_AUTOMODE); return; } var f = new Model_Motion(); if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK) { if (f.Value != "") { PUB.SelectModelM(f.Value); } } } private void motionEmulatorToolStripMenuItem_Click(object sender, EventArgs e) { needShowSummary = true; } private void 연결ToolStripMenuItem_Click(object sender, EventArgs e) { if (PUB.wsL != null && PUB.wsL.Connected) { UTIL.MsgI("현재 프로그램이 연결되어 있습니다"); return; } //카메라 l실행 if (AR.SETTING.Data.CameraLFile.isEmpty() == true) { UTIL.MsgE("바코드 프로그램 파일명이 지정되지 않았습니다", true); return; } var fi = new System.IO.FileInfo(AR.SETTING.Data.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 toolStripMenuItem21_Click(object sender, EventArgs e) { PUB.flag.set(eVarBool.FG_PRC_VISIONL, true, "USER"); PUB.flag.set(eVarBool.FG_END_VISIONL, false, "USER"); WS_Send(eWorkPort.Left, PUB.wsL, PUB.Result.ItemDataL.guid, "TRIG", PUB.Result.ItemDataL.VisionData.PrintQRData); } private void toolStripMenuItem23_Click_1(object sender, EventArgs e) { } private void toolStripMenuItem24_Click(object sender, EventArgs e) { WS_Send(eWorkPort.Left, PUB.wsL, string.Empty, "OFF", string.Empty); } private void toolStripMenuItem25_Click(object sender, EventArgs e) { } private void postDataToolStripMenuItem_Click(object sender, EventArgs e) { var f = new Dialog.Debug.fSendInboutData(); f.ShowDialog(); } private void manualPrintToolStripMenuItem_Click(object sender, EventArgs e) { var f = new Dialog.fManualPrint0(); f.ShowDialog(); } private void arDatagridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { } private void toolStripButton6_ButtonClick(object sender, EventArgs e) { if (PUB.flag.get(eVarBool.FG_INIT_MOTIO) == false) { UTIL.MsgE("모션이 초기화 되지 않았습니다\n잠시 후 다시 시도하세요"); return; } //show io panerl var f = new Dialog.fIOMonitor(); f.ShowDialog(); f.Dispose(); } private void sWPLCToolStripMenuItem_Click(object sender, EventArgs e) { var f = new Dialog.fswPLC(); f.Show(); } private void apiCheckToolStripMenuItem_Click(object sender, EventArgs e) { PUB.UpdateSIDInfoByECS().Wait(); } private void barcodeTestToolStripMenuItem_Click(object sender, EventArgs e) { var bcd = "21PMULTILAYER CHIP INDUCTORS,P110-50933-01R5,1T5015326894,1J083476968109,16D20230908,14D20250821,Q20000,1PMHQ0402PSA1N5BT000"; //var d = UTIL.InputBox("barcode input", bcd); PUB.Result.ItemDataC.VisionData.barcodelist.Clear(); PUB.Result.ItemDataC.VisionData.barcodelist.TryAdd(bcd, new Class.KeyenceBarcodeData { barcodeSymbol = "2", Data = bcd, }); //BarcodeFix_ReceiveData(null, new arDev.RS232.ReceiveDataEventArgs(System.Text.Encoding.Default.GetBytes(d.Item2))); } private void toolStripMenuItem28_Click(object sender, EventArgs e) { PUB.flag.set(eVarBool.FG_PRC_VISIONR, true, "USER"); PUB.flag.set(eVarBool.FG_END_VISIONR, false, "USER"); WS_Send(eWorkPort.Right, PUB.wsR, PUB.Result.ItemDataR.guid, "TRIG", PUB.Result.ItemDataR.VisionData.PrintQRData); } private void toolStripMenuItem30_Click(object sender, EventArgs e) { WS_Send(eWorkPort.Right, PUB.wsR, string.Empty, "OFF", string.Empty); } private void 프로그램열기ToolStripMenuItem_Click(object sender, EventArgs e) { var fn = AR.SETTING.Data.Sidinfofilename; if (fn.isEmpty()) fn = @"d:\amkor\sidinfo\update.exe"; var fi = new System.IO.FileInfo(fn); if (fi.Exists == false) { PUB.log.AddE($"No Sid info file:{fn}"); return; ; } //var file = @"d:\amkor\sidinfo\update.exe " + COMM.SETTING.Data.McName;// System.IO.Path.Combine(Util.CurrentPath, "Module", "SidInfo", "amkor.exe"); UTIL.RunProcess(fi.FullName); } async private void 인바운드데이터업데이트ToolStripMenuItem_Click(object sender, EventArgs e) { var rlt = await PUB.UpdateSIDInfoByECS(); if (rlt.Item1 == false) { PUB.log.AddE($"인바운드 자료 업데이트 실패" + rlt.Item2); } else PUB.log.AddI($"인바운드 자료 업데이트 성공"); } private void hmi1_ZoneItemClick(object sender, HMI.ZoneItemClickEventargs e) { var buttontag = e.item.Tag; var buttonidx = e.item.index; //컨베이어모드에서는 클릭시 버퍼를 초기화한다. var cv = VAR.BOOL[eVarBool.Use_Conveyor]; if (cv && buttontag.StartsWith("PORT")) { //클릭시 버퍼수량 제거 if (buttonidx == 0) VAR.I32[eVarInt32.LEFT_ITEM_COUNT] = 0; else if (buttonidx == 2) VAR.I32[eVarInt32.RIGT_ITEM_COUNT] = 0; PUB.log.AddAT($"사용자 버퍼 제거 {buttontag}:{buttonidx}"); } } private void testToolStripMenuItem1_Click(object sender, EventArgs e) { } private void apiCheck2activeLiToolStripMenuItem_Click(object sender, EventArgs e) { var sidlist = PUB.GetECSActiveSIDList(); var ta = new DataSet1TableAdapters.QueriesTableAdapter(); foreach (var item in sidlist) { var cnt = ta.GetIBResultCountBySIDBatch(DateTime.Now.AddHours(-6), item.Item1, item.Item2); PUB.log.Add($"sid:{item.Item1},batch:{item.Item2},active:{item.Item3},cnt:{cnt}"); } } private void sendMailToolStripMenuItem_Click(object sender, EventArgs e) { } private void toolStripButton1_Click(object sender, EventArgs e) { using (var f = new Dialog.fManualPrint()) f.ShowDialog(); } } }