- UIControl 프로젝트 구조 변경 (CapCleaningControl → Sub/UIControl) - arAjinextek 라이브러리 통합 및 구조 개선 - 새로운 arAjinextek_Union 프로젝트 추가 - 솔루션 파일에 README.md 추가 - QR 모드에서 WMS RCV 태그 인식 기능 강화 - 데이터베이스 스키마 업데이트 및 관련 클래스 수정 - 프린터 및 바코드 장치 연동 로직 개선 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
2261 lines
79 KiB
C#
2261 lines
79 KiB
C#
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<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 (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
|
|
{
|
|
var ta = new DataSet1TableAdapters.K4EE_Component_Reel_ResultTableAdapter();
|
|
ta.FillByLen7(this.dataSet1.K4EE_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.K4EE_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.K4EE_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();
|
|
}
|
|
|
|
|
|
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<Class.RegexPattern>(), 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}");
|
|
// }
|
|
// }
|
|
//}
|
|
|
|
/// <summary>
|
|
/// soft reset value & use
|
|
/// </summary>
|
|
void UpdateSoftLimit()
|
|
{
|
|
PUB.log.Add("모션 SOFT-LIMIT 설정");
|
|
|
|
for (short 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 버튼을 무시 합니다.");
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 작업시작전 작업에대한 선택
|
|
/// </summary>
|
|
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 sid = UTIL.InputBox("input sid");
|
|
if (sid.Item1 == false || sid.Item2.isEmpty()) return;
|
|
var c = PUB.MakeNewREELID(sid.Item2);// 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 AR.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<String> urls = new List<string>();
|
|
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.UpdateSIDInfo().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 = UTIL.MakePath("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.UpdateSIDInfo();
|
|
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 toolStripButton1_Click(object sender, EventArgs e)
|
|
{
|
|
using (var f = new Dialog.fManualPrint())
|
|
f.ShowDialog();
|
|
}
|
|
}
|
|
} |