Compare commits

...

2 Commits

Author SHA1 Message Date
atvstdla
dc66158497 Add QRValidation project to repository
- Added QRValidation vision control system
- Includes CapCleaningControl UI components
- WebSocket-based barcode validation system
- Support for Crevis PLC integration
- Test projects for PLC emulator, motion, IO panel, and Modbus

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-02 11:38:38 +09:00
atvstdla
3eac3927f8 QR validation and WMS info processing improvements
- Enhanced QR vision trigger logging with detailed command/data output
- Added JSON data extraction for barcode processing
- Improved WMS info query with data completeness check
- Updated SID information form with trust flags for user inputs
- Added auto-resize columns and UI improvements to SID selection dialog
- Fixed barcode data processing to handle JSON wrapped responses
- Added pick retry reset and timing control on form close

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-02 11:36:48 +09:00
203 changed files with 27371 additions and 156 deletions

View File

@@ -92,6 +92,8 @@
this.chkInfoApplyCust = new System.Windows.Forms.CheckBox();
this.chkInfoApplyPart = new System.Windows.Forms.CheckBox();
this.grpApplyWMSinfo = new System.Windows.Forms.GroupBox();
this.checkBox2 = new System.Windows.Forms.CheckBox();
this.checkBox1 = new System.Windows.Forms.CheckBox();
this.checkBox36 = new System.Windows.Forms.CheckBox();
this.chkWMSApplyBatch = new System.Windows.Forms.CheckBox();
this.label22 = new System.Windows.Forms.Label();
@@ -110,8 +112,6 @@
this.btCancle = new arCtl.arLabel();
this.dataSet11 = new Project.DataSet1();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.checkBox1 = new System.Windows.Forms.CheckBox();
this.checkBox2 = new System.Windows.Forms.CheckBox();
this.panel2.SuspendLayout();
this.panel5.SuspendLayout();
this.tabControl1.SuspendLayout();
@@ -992,6 +992,30 @@
this.grpApplyWMSinfo.TabStop = false;
this.grpApplyWMSinfo.Text = "WMS Information Application";
//
// checkBox2
//
this.checkBox2.AutoSize = true;
this.checkBox2.ForeColor = System.Drawing.Color.Black;
this.checkBox2.Location = new System.Drawing.Point(431, 24);
this.checkBox2.Name = "checkBox2";
this.checkBox2.Size = new System.Drawing.Size(92, 23);
this.checkBox2.TabIndex = 39;
this.checkBox2.Tag = "13";
this.checkBox2.Text = "MFG Date";
this.checkBox2.UseVisualStyleBackColor = true;
//
// checkBox1
//
this.checkBox1.AutoSize = true;
this.checkBox1.ForeColor = System.Drawing.Color.Blue;
this.checkBox1.Location = new System.Drawing.Point(379, 50);
this.checkBox1.Name = "checkBox1";
this.checkBox1.Size = new System.Drawing.Size(92, 23);
this.checkBox1.TabIndex = 38;
this.checkBox1.Tag = "12";
this.checkBox1.Text = "MFG Date";
this.checkBox1.UseVisualStyleBackColor = true;
//
// checkBox36
//
this.checkBox36.AutoSize = true;
@@ -1249,30 +1273,6 @@
this.dataSet11.DataSetName = "DataSet1";
this.dataSet11.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema;
//
// checkBox1
//
this.checkBox1.AutoSize = true;
this.checkBox1.ForeColor = System.Drawing.Color.Blue;
this.checkBox1.Location = new System.Drawing.Point(379, 50);
this.checkBox1.Name = "checkBox1";
this.checkBox1.Size = new System.Drawing.Size(92, 23);
this.checkBox1.TabIndex = 38;
this.checkBox1.Tag = "12";
this.checkBox1.Text = "MFG Date";
this.checkBox1.UseVisualStyleBackColor = true;
//
// checkBox2
//
this.checkBox2.AutoSize = true;
this.checkBox2.ForeColor = System.Drawing.Color.Black;
this.checkBox2.Location = new System.Drawing.Point(431, 24);
this.checkBox2.Name = "checkBox2";
this.checkBox2.Size = new System.Drawing.Size(92, 23);
this.checkBox2.TabIndex = 39;
this.checkBox2.Tag = "13";
this.checkBox2.Text = "MFG Date";
this.checkBox2.UseVisualStyleBackColor = true;
//
// fSelectJob
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 17F);

View File

@@ -30,7 +30,7 @@
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fSelectSIDInformation));
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
this.tbSID = new System.Windows.Forms.TextBox();
this.tbLot = new System.Windows.Forms.TextBox();
this.tbMFG = new System.Windows.Forms.TextBox();
@@ -50,6 +50,8 @@
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.lbExecuteSQL = new System.Windows.Forms.ToolStripStatusLabel();
this.bn = new System.Windows.Forms.BindingNavigator(this.components);
this.bs = new System.Windows.Forms.BindingSource(this.components);
this.dsWMS = new Project.dsWMS();
this.bindingNavigatorCountItem = new System.Windows.Forms.ToolStripLabel();
this.bindingNavigatorMoveFirstItem = new System.Windows.Forms.ToolStripButton();
this.bindingNavigatorMovePreviousItem = new System.Windows.Forms.ToolStripButton();
@@ -60,13 +62,6 @@
this.bindingNavigatorMoveLastItem = new System.Windows.Forms.ToolStripButton();
this.bindingNavigatorSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.dv1 = new System.Windows.Forms.DataGridView();
this.panDv = new System.Windows.Forms.Panel();
this.btOK = new System.Windows.Forms.Button();
this.panel3 = new System.Windows.Forms.Panel();
this.bs = new System.Windows.Forms.BindingSource(this.components);
this.dsWMS = new Project.dsWMS();
this.ta = new Project.dsWMSTableAdapters.VW_GET_MAX_QTY_VENDOR_LOTTableAdapter();
this.tam = new Project.dsWMSTableAdapters.TableAdapterManager();
this.idxDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.sIDDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewButtonColumn();
this.pARTNODataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
@@ -76,14 +71,19 @@
this.vENDORLOTDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.mFGDATEDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.qTYDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn();
this.panDv = new System.Windows.Forms.Panel();
this.btOK = new System.Windows.Forms.Button();
this.panel3 = new System.Windows.Forms.Panel();
this.ta = new Project.dsWMSTableAdapters.VW_GET_MAX_QTY_VENDOR_LOTTableAdapter();
this.tam = new Project.dsWMSTableAdapters.TableAdapterManager();
this.statusStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.bn)).BeginInit();
this.bn.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.bs)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dsWMS)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dv1)).BeginInit();
this.panDv.SuspendLayout();
this.panel3.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.bs)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dsWMS)).BeginInit();
this.SuspendLayout();
//
// tbSID
@@ -314,10 +314,20 @@
this.bn.TabIndex = 12;
this.bn.Text = "bindingNavigator1";
//
// bs
//
this.bs.DataMember = "VW_GET_MAX_QTY_VENDOR_LOT";
this.bs.DataSource = this.dsWMS;
//
// dsWMS
//
this.dsWMS.DataSetName = "dsWMS";
this.dsWMS.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema;
//
// bindingNavigatorCountItem
//
this.bindingNavigatorCountItem.Name = "bindingNavigatorCountItem";
this.bindingNavigatorCountItem.Size = new System.Drawing.Size(27, 22);
this.bindingNavigatorCountItem.Size = new System.Drawing.Size(26, 22);
this.bindingNavigatorCountItem.Text = "/{0}";
this.bindingNavigatorCountItem.ToolTipText = "Total item count";
//
@@ -400,14 +410,15 @@
this.mFGDATEDataGridViewTextBoxColumn,
this.qTYDataGridViewTextBoxColumn});
this.dv1.DataSource = this.bs;
dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window;
dataGridViewCellStyle1.Font = new System.Drawing.Font("맑은 고딕", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.ControlText;
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
this.dv1.DefaultCellStyle = dataGridViewCellStyle1;
dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window;
dataGridViewCellStyle2.Font = new System.Drawing.Font("맑은 고딕", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText;
dataGridViewCellStyle2.Padding = new System.Windows.Forms.Padding(0, 3, 0, 3);
dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
this.dv1.DefaultCellStyle = dataGridViewCellStyle2;
this.dv1.Dock = System.Windows.Forms.DockStyle.Fill;
this.dv1.Location = new System.Drawing.Point(0, 0);
this.dv1.Name = "dv1";
@@ -417,75 +428,6 @@
this.dv1.TabIndex = 35;
this.dv1.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.vW_GET_MAX_QTY_VENDOR_LOTDataGridView_CellClick);
//
// panDv
//
this.panDv.Controls.Add(this.dv1);
this.panDv.Controls.Add(this.bn);
this.panDv.Dock = System.Windows.Forms.DockStyle.Fill;
this.panDv.Location = new System.Drawing.Point(0, 157);
this.panDv.Name = "panDv";
this.panDv.Size = new System.Drawing.Size(1031, 405);
this.panDv.TabIndex = 36;
//
// btOK
//
this.btOK.BackColor = System.Drawing.Color.DarkSeaGreen;
this.btOK.Dock = System.Windows.Forms.DockStyle.Right;
this.btOK.Font = new System.Drawing.Font("맑은 고딕", 26.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.btOK.Location = new System.Drawing.Point(791, 10);
this.btOK.Name = "btOK";
this.btOK.Size = new System.Drawing.Size(230, 137);
this.btOK.TabIndex = 4;
this.btOK.Text = "SAVE";
this.btOK.UseVisualStyleBackColor = false;
this.btOK.Click += new System.EventHandler(this.btOK_Click);
//
// panel3
//
this.panel3.Controls.Add(this.btOK);
this.panel3.Controls.Add(this.button5);
this.panel3.Controls.Add(this.button4);
this.panel3.Controls.Add(this.linkLabel7);
this.panel3.Controls.Add(this.tbVName);
this.panel3.Controls.Add(this.linkLabel5);
this.panel3.Controls.Add(this.linkLabel6);
this.panel3.Controls.Add(this.tbSID);
this.panel3.Controls.Add(this.linkLabel8);
this.panel3.Controls.Add(this.TbCustCode);
this.panel3.Controls.Add(this.tbBatch);
this.panel3.Controls.Add(this.linkLabel3);
this.panel3.Controls.Add(this.tbLot);
this.panel3.Controls.Add(this.lnkBatch);
this.panel3.Controls.Add(this.tbPart);
this.panel3.Controls.Add(this.tbMFG);
this.panel3.Controls.Add(this.linkLabel2);
this.panel3.Dock = System.Windows.Forms.DockStyle.Top;
this.panel3.Location = new System.Drawing.Point(0, 0);
this.panel3.Name = "panel3";
this.panel3.Padding = new System.Windows.Forms.Padding(0, 10, 10, 10);
this.panel3.Size = new System.Drawing.Size(1031, 157);
this.panel3.TabIndex = 37;
//
// bs
//
this.bs.DataMember = "VW_GET_MAX_QTY_VENDOR_LOT";
this.bs.DataSource = this.dsWMS;
//
// dsWMS
//
this.dsWMS.DataSetName = "dsWMS";
this.dsWMS.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema;
//
// ta
//
this.ta.ClearBeforeFill = true;
//
// tam
//
this.tam.BackupDataSetBeforeUpdate = false;
this.tam.Connection = null;
this.tam.UpdateOrder = Project.dsWMSTableAdapters.TableAdapterManager.UpdateOrderOption.InsertUpdateDelete;
//
// idxDataGridViewTextBoxColumn
//
this.idxDataGridViewTextBoxColumn.DataPropertyName = "idx";
@@ -551,6 +493,65 @@
this.qTYDataGridViewTextBoxColumn.Name = "qTYDataGridViewTextBoxColumn";
this.qTYDataGridViewTextBoxColumn.ReadOnly = true;
//
// panDv
//
this.panDv.Controls.Add(this.dv1);
this.panDv.Controls.Add(this.bn);
this.panDv.Dock = System.Windows.Forms.DockStyle.Fill;
this.panDv.Location = new System.Drawing.Point(0, 157);
this.panDv.Name = "panDv";
this.panDv.Size = new System.Drawing.Size(1031, 405);
this.panDv.TabIndex = 36;
//
// btOK
//
this.btOK.BackColor = System.Drawing.Color.DarkSeaGreen;
this.btOK.Dock = System.Windows.Forms.DockStyle.Right;
this.btOK.Font = new System.Drawing.Font("맑은 고딕", 26.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.btOK.Location = new System.Drawing.Point(791, 10);
this.btOK.Name = "btOK";
this.btOK.Size = new System.Drawing.Size(230, 137);
this.btOK.TabIndex = 4;
this.btOK.Text = "SAVE";
this.btOK.UseVisualStyleBackColor = false;
this.btOK.Click += new System.EventHandler(this.btOK_Click);
//
// panel3
//
this.panel3.Controls.Add(this.btOK);
this.panel3.Controls.Add(this.button5);
this.panel3.Controls.Add(this.button4);
this.panel3.Controls.Add(this.linkLabel7);
this.panel3.Controls.Add(this.tbVName);
this.panel3.Controls.Add(this.linkLabel5);
this.panel3.Controls.Add(this.linkLabel6);
this.panel3.Controls.Add(this.tbSID);
this.panel3.Controls.Add(this.linkLabel8);
this.panel3.Controls.Add(this.TbCustCode);
this.panel3.Controls.Add(this.tbBatch);
this.panel3.Controls.Add(this.linkLabel3);
this.panel3.Controls.Add(this.tbLot);
this.panel3.Controls.Add(this.lnkBatch);
this.panel3.Controls.Add(this.tbPart);
this.panel3.Controls.Add(this.tbMFG);
this.panel3.Controls.Add(this.linkLabel2);
this.panel3.Dock = System.Windows.Forms.DockStyle.Top;
this.panel3.Location = new System.Drawing.Point(0, 0);
this.panel3.Name = "panel3";
this.panel3.Padding = new System.Windows.Forms.Padding(0, 10, 10, 10);
this.panel3.Size = new System.Drawing.Size(1031, 157);
this.panel3.TabIndex = 37;
//
// ta
//
this.ta.ClearBeforeFill = true;
//
// tam
//
this.tam.BackupDataSetBeforeUpdate = false;
this.tam.Connection = null;
this.tam.UpdateOrder = Project.dsWMSTableAdapters.TableAdapterManager.UpdateOrderOption.InsertUpdateDelete;
//
// fSelectSIDInformation
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
@@ -565,18 +566,19 @@
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Multi SID Information";
this.Load += new System.EventHandler(this.fLoaderInfo_Load);
this.Shown += new System.EventHandler(this.fSelectSIDInformation_Shown);
this.statusStrip1.ResumeLayout(false);
this.statusStrip1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.bn)).EndInit();
this.bn.ResumeLayout(false);
this.bn.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.bs)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dsWMS)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dv1)).EndInit();
this.panDv.ResumeLayout(false);
this.panDv.PerformLayout();
this.panel3.ResumeLayout(false);
this.panel3.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.bs)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dsWMS)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();

View File

@@ -34,9 +34,12 @@ namespace Project.Dialog
private void FLoaderInfo_FormClosed(object sender, FormClosedEventArgs e)
{
AR.VAR.I32[AR.eVarInt32.PickOnRetry] = 0;
VAR.TIME[eVarTime.KEYENCEWAIT] = DateTime.Now;
VAR.BOOL[eVarBool.FG_WAIT_INFOSELECT] = false;
PUB.Result.ItemDataC.VisionData.PropertyChanged -= VisionData_PropertyChanged;
////사용자가 정보를 정확히 입력하지 않고 닫았다
//if (PUB.Result.ItemDataC.VisionData.Confirm == false)
//{
@@ -114,7 +117,6 @@ namespace Project.Dialog
tbPart.Text = item.VisionData.PARTNO;
TbCustCode.Text = item.VisionData.CUSTCODE;
tbBatch.Text = item.VisionData.BATCH;
selectInput(this.tbSID);
@@ -369,12 +371,36 @@ namespace Project.Dialog
itemC.VisionData.SID0 = itemC.VisionData.SID;
//값이있는것들만 기록해준다.
if (tbSID.Text.isEmpty() == false) itemC.VisionData.SID = tbSID.Text.Trim();
if (tbBatch.Text.isEmpty() == false) itemC.VisionData.BATCH = tbBatch.Text.Trim();
if (tbLot.Text.isEmpty() == false) itemC.VisionData.VLOT = tbLot.Text.Trim();
if (tbMFG.Text.isEmpty() == false) itemC.VisionData.MFGDATE = tbMFG.Text.Trim();
if (tbVName.Text.isEmpty() == false) itemC.VisionData.VNAME = tbVName.Text.Trim();
if (tbPart.Text.isEmpty() == false) itemC.VisionData.PARTNO = tbPart.Text.Trim();
if (tbSID.Text.isEmpty() == false)
{
itemC.VisionData.SID = tbSID.Text.Trim();
itemC.VisionData.SID_Trust = true;
}
if (tbBatch.Text.isEmpty() == false)
{
itemC.VisionData.BATCH = tbBatch.Text.Trim();
}
if (tbLot.Text.isEmpty() == false)
{
itemC.VisionData.VLOT = tbLot.Text.Trim();
itemC.VisionData.VLOT_Trust = true;
}
if (tbMFG.Text.isEmpty() == false)
{
itemC.VisionData.MFGDATE = tbMFG.Text.Trim();
itemC.VisionData.MFGDATE_Trust = true;
}
if (tbVName.Text.isEmpty() == false)
{
itemC.VisionData.VNAME = tbVName.Text.Trim();
itemC.VisionData.VNAME_Trust = true;
}
if (tbPart.Text.isEmpty() == false)
{
itemC.VisionData.PARTNO = tbPart.Text.Trim();
itemC.VisionData.PARTNO_Trust = true;
}
this.TopMost = topmost;
this.Close();
@@ -883,5 +909,10 @@ namespace Project.Dialog
ValueUpdate(tbMFG, dr.MFG_DATE, "MFG_DATE");
ValueUpdate(tbBatch, dr.BATCH_NO, "BATCH_NO");
}
private void fSelectSIDInformation_Shown(object sender, EventArgs e)
{
this.dv1.AutoResizeColumns();
}
}
}

View File

@@ -170,6 +170,9 @@
8l/FYwIYQ4UGBWBgAAC+0b+zuQxOnAAAAABJRU5ErkJggg==
</value>
</data>
<metadata name="dsWMS.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>364, 17</value>
</metadata>
<metadata name="ta.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>525, 17</value>
</metadata>

View File

@@ -50,7 +50,7 @@ namespace Project
{
//카메라 트리거 전송
var sendok = WS_Send(target, WS, item.guid, "TRIG", item.VisionData.PrintQRData);
PUB.log.Add($"Barcode trigger transmission ({target}) = {sendok}");
PUB.log.Add($"Send QR Vision trigger ({target}) = {sendok} CMD=TRIG,DATA={item.VisionData.PrintQRData}");
if(sendok==false) //230512 전송실패시 오류로 한다
{
PUB.Result.SetResultMessage(eResult.HARDWARE, eECode.VISION_TRIGERROR, eNextStep.PAUSE);

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text.RegularExpressions;
using Newtonsoft.Json.Linq;
namespace Project
{
@@ -23,8 +24,24 @@ namespace Project
foreach (var datas in qrdatas)
{
// JSON 구조에서 "data" 필드 추출
string barcodeData = datas;
try
{
var jobj = JObject.Parse(datas);
if (jobj["data"] != null)
{
barcodeData = jobj["data"].ToString();
}
}
catch
{
// JSON 파싱 실패 시 원본 데이터 사용
barcodeData = datas;
}
//원본자료를 체크한다
if (datas.Equals(idata.VisionData.PrintQRData))
if (barcodeData.Equals(idata.VisionData.PrintQRData))
{
//인쇄한 자료와 동일한 자료이다
FindData = true;
@@ -39,10 +56,10 @@ namespace Project
foreach (var pt in pats)
{
var regx = new Regex(pt.Pattern, RegexOptions.IgnoreCase, new TimeSpan(0, 0, 10));
if (regx.IsMatch(datas)) //패턴이 일치하다면 이것만 사용한다
if (regx.IsMatch(barcodeData)) //패턴이 일치하다면 이것만 사용한다
{
//find data
var matchs = regx.Matches(datas);
var matchs = regx.Matches(barcodeData);
foreach (System.Text.RegularExpressions.Match mat in matchs)
{
foreach (var matchdata in pt.Groups)
@@ -81,30 +98,6 @@ namespace Project
}
}
}
//var bcdData = new StdLabelPrint.CAmkorSTDBarcode(datas);
//PUB.Result.ItemData[vIdx].VisionData.QTY2 = bcdData.QTY.ToString();
//PUB.Result.ItemData[vIdx].VisionData.RID2 = bcdData.RID;
//PUB.Result.ItemData[vIdx].VisionData.SID2 = bcdData.SID;
//PUB.Result.ItemData[vIdx].VisionData.VLOT2 = bcdData.VLOT;
//PUB.Result.ItemData[vIdx].VisionData.VNAME2 = bcdData.VENDERNAME;
//PUB.Result.ItemData[vIdx].VisionData.MFGDATE2 = bcdData.MFGDate;//.ToString("yyyyMMdd");
//PUB.Result.ItemData[vIdx].VisionData.PARTNO2 = bcdData.PARTNO;
//PUB.Result.ItemData[vIdx].VisionData.Ready = true;
////Pub.Result.ItemData[vIdx].VisionData.ETime = DateTime.Now;
////Pub.Result.ItemData[vIdx].VisionData.Angle = 5;
//PUB.Result.ItemData[vIdx].VisionData.Complete = true;
//PUB.log.Add("BARCODE", $"{vIdx}바코드 읽기 성공 ID:{bcdData.RID},QTY:{bcdData.QTY}");
////데이터를 읽었으며, 검증기능이 켜져있다면 검증을한다
//if (FindData) break;
}
}

View File

@@ -43,7 +43,7 @@ namespace Project
//[WMS] SID정보테이블에서 정보 추출(프린트정보는 없음)
//[WMS] 에서 중복검색되면 팝업을 해야하므로 이것을 먼저 처리한다.
if (VAR.BOOL[eVarBool.Opt_ApplyWMSInfo] && (CompleteCheck || itemC.VisionData.BarcodeTouched == true))
if (VAR.BOOL[eVarBool.Opt_ApplyWMSInfo] && (CompleteCheck || itemC.VisionData.BarcodeTouched == true))
{
var rlt_FindWMD = BCDProcess_FindWMSInfo(itemC);
if (rlt_FindWMD.NewBarcodeUpdated) NewBarcodeUpdated = true;
@@ -316,8 +316,25 @@ namespace Project
if (vdata.MFGDATE_Trust && vdata.MFGDATE.isEmpty() == false) wheres.Add($"MFG_DATE = '{vdata.MFGDATE}'");
else Apply = false;
}
//데이터가 완성되었다면 처리하지 않는다.
bool DataOK = true;
foreach (var data in fields)
{
var column = data.ToLower();
if (DataOK && column.Equals("sid") && (vdata.SID.isEmpty() || vdata.SID_Trust == false)) DataOK = false;
else if (DataOK && column.Equals("part_no") && (vdata.PARTNO.isEmpty() || vdata.PARTNO_Trust)) DataOK = false;
else if (DataOK && column.Equals("mfg_data") && (vdata.MFGDATE.isEmpty() || vdata.MFGDATE_Trust)) DataOK = false;
else if (DataOK && column.Equals("vendor_nm") && (vdata.VNAME.isEmpty() || vdata.VNAME_Trust)) DataOK = false;
else if (DataOK && column.Equals("batch_no") && (vdata.BATCH.isEmpty())) DataOK = false;
else if (DataOK && column.Equals("qty") && (vdata.QTY.isEmpty() || vdata.QTY_Trust)) DataOK = false;
else if (DataOK && column.Equals("cust_code") && (vdata.CUSTCODE.isEmpty())) DataOK = false;
else if (DataOK && column.Equals("vendor_lot") && (vdata.VLOT.isEmpty() || vdata.VLOT_Trust)) DataOK = false;
if (DataOK == false) break;
}
//if query data . no error
if (Apply && fields.Count > 0 && wheres.Count > 0)
if (DataOK == false && Apply && fields.Count > 0 && wheres.Count > 0)
{
var TableName = "VW_GET_MAX_QTY_VENDOR_LOT";
var whereState = " where " + string.Join(" and ", wheres);
@@ -330,7 +347,7 @@ namespace Project
var cntvalue = (DBHelper.ExecuteScalar(SQLC)?.ToString() ?? "0").toInt();
if (cntvalue > 1)
{
VAR.STR[eVarString.MULTISID_QUERY] = $"select {selectFields} from {TableName} WITH(NOLOCK) {whereState}";
VAR.STR[eVarString.MULTISID_QUERY] = $"select * from {TableName} WITH(NOLOCK) {whereState}";
VAR.STR[eVarString.MULTISID_FIELDS] = selectFields;
rlt = EResultKeyence.MultiSID;
}

View File

@@ -2222,7 +2222,7 @@ namespace Project
//If multiple information exists, it should be handled with selection screen
VAR.STR[eVarString.MULTISID_QUERY] = $"select {selectFields} from {TableName} WITH(NOLOCK) {whereState}";
VAR.STR[eVarString.MULTISID_QUERY] = $"select * from {TableName} WITH(NOLOCK) {whereState}";
VAR.STR[eVarString.MULTISID_FIELDS] = selectFields;
PUB.Result.ItemDataC.VisionData.CUSTCODE = VAR.STR[eVarString.JOB_CUSTOMER_CODE];

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
namespace UIControl
{
public class CIcon
{
public string Text { get; set; }
public string Tag { get; set; }
public RectangleF Rect { get; set; }
public Boolean Focus { get; set; }
public Boolean Select { get; set; }
public CIcon() : this(string.Empty, RectangleF.Empty) { }
public CIcon(string tag,RectangleF rect)
{
Text = string.Empty;
Tag = tag;
Rect = rect;
}
public float X { get { return Rect.X; } }
public float Y { get { return Rect.Y; } }
public float W { get { return Rect.Width; } }
public float H { get { return Rect.Height; } }
}
}

View File

@@ -0,0 +1,208 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace UIControl
{
[Serializable]
public class CItem
{
public Boolean Active { get; set; }
public Boolean PLCWriteNo { get; set; }
public Boolean PLCWriteSize { get; set; }
public Boolean Delete { get; set; }
/// <summary>
/// 어떠한 포트에서 픽업 되었는지
/// </summary>
public int iPort { get; set; }
/// <summary>
/// 출력 포트
/// </summary>
public int oPort { get; set; }
public Boolean ExistError { get; set; }
/// <summary>
/// 배출여부
/// </summary>
public int ErrorOut { get; set; }
/// <summary>
/// 크기는 어떠한지(7 or 13)
/// </summary>
public string Size { get; set; }
/// <summary>
/// 존번호 0~10
/// </summary>
public int ZoneIndex { get; set; }
/// <summary>
/// 피커에의해서 드랍된 시간
/// </summary>
public DateTime DropTime { get; set; }
/// <summary>
/// 차수별 일련번호
/// </summary>
public UInt16 Seq { get; set; }
public DateTime BarcodeStart { get; set; }
public DateTime BarcodeEnd { get; set; }
/// <summary>
/// 바코드 처리가 완료디었는가?
/// 종료일자가 설정되면 처리완료로 합니다.
/// 201028
/// </summary>
public Boolean BarcodeProcess
{
get
{
if (BarcodeEnd.Year == 1982) return false;
else if (BarcodeEnd <= BarcodeStart) return false;
else return true;
}
}
public DateTime PlcStartTime { get; set; }
public DateTime PlcEndTime { get; set; }
public DateTime ZoneIntime { get; set; }
/// <summary>
/// 컨베이어에 들어온 시간
/// 피커에서 드랍되면 dropTime 과 동일하며, 외부에서 들어오면 센서가 최초 감지한 시간이 된다
/// </summary>
public DateTime InTime { get; set; }
public DateTime OutTime { get; set; }
public Rectangle Rect { get; set; }
/// <summary>
/// jobhistory에 연결되는 데이터 키
/// </summary>
public string JGUID { get; set; }
/// <summary>
/// 바코드 데이터와 연결되는 키값
/// </summary>
public string BGUID { get; set; }
public string RID { get; set; }
public string SID { get; set; }
public string VLOT { get; set; }
public string BarcodeRaw { get; set; }
public string BarcodeMsg { get; set; }
public Boolean Processing { get; set; }
public Boolean Complete { get; set; }
public string GUID { get; private set; }
public int Qty { get; set; }
public int QtyAcc { get; set; }
public int QtyMax { get; set; }
public List<string> UnloaderMsg { get; set; }
/// <summary>
/// 바코드의 완료여부, timeout 혻은 설정 되었을때 적용
/// </summary>
public Boolean BarcodeDone { get; set; }
public Boolean hasBarcode
{
get
{
return !string.IsNullOrEmpty(RID);
}
}
/// <summary>
/// 지정한 문자가 포함되어잇다면 true 반환
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
public Boolean CheckMessage(string msg)
{
if (UnloaderMsg == null || UnloaderMsg.Count < 1) return false;
foreach (var item in UnloaderMsg)
if (item.Contains(msg)) return true;
return false;
}
public void AddMessage(string msg)
{
if (this.UnloaderMsg.Contains(msg) == false)
UnloaderMsg.Add(msg);
}
public void ClearMessage()
{
this.UnloaderMsg.Clear();
}
public CItem()
{
ExistError = false;
Active = true;
Complete = false;
PLCWriteNo = false;
PLCWriteSize = false;
Qty = 0;
QtyAcc = 0; //200913 누계
QtyMax = 0; //200913 최대값
UnloaderMsg = new List<string>();
ErrorOut = 0;
this.GUID = Guid.NewGuid().ToString();
BGUID = string.Empty;
JGUID = string.Empty;
VLOT = string.Empty;
Seq = 0;
SID = string.Empty;
BarcodeRaw = string.Empty;
BarcodeMsg = string.Empty;
RID = string.Empty;
Rect = Rectangle.Empty;
Delete = false;
Processing = false;
DropTime = DateTime.Parse("1982-11-23");
BarcodeStart = DateTime.Parse("1982-11-23");
BarcodeEnd = DateTime.Parse("1982-11-23");
PlcStartTime = DateTime.Parse("1982-11-23");
PlcEndTime = DateTime.Parse("1982-11-23");
InTime = DateTime.Parse("1982-11-23");
OutTime = DateTime.Parse("1982-11-23");
ZoneIntime = DateTime.Parse("1982-11-23");
ZoneIndex = -1;
oPort = -1;
iPort = -1;
Size = string.Empty;
}
public CItem Clone()
{
var item = new CItem();
item.Qty = Qty;
item.Seq = Seq;//0;
item.SID = SID;// string.Empty;
item.VLOT = VLOT;
item.BarcodeRaw = BarcodeRaw;//string.Empty;
item.BarcodeMsg = BarcodeMsg;//string.Empty;
item.RID = RID;//string.Empty;
item.Rect = Rect;//Rectangle.Empty;
item.Delete = Delete;//DropTime;//;
item.ExistError = ExistError;
item.DropTime = DropTime;// DateTime.Parse("1982-11-23");
item.BarcodeStart = BarcodeStart;// DateTime.Parse("1982-11-23");
item.BarcodeEnd = BarcodeEnd;//DropTime;//.Parse("1982-11-23");
item.PlcStartTime = PlcStartTime;//DateTime.Parse("1982-11-23");
item.PlcEndTime = PlcEndTime;// DateTime.Parse("1982-11-23");
item.InTime = InTime;//DropTime;//.Parse("1982-11-23");
item.OutTime = OutTime;//DateTime.Parse("1982-11-23");
item.ZoneIntime = ZoneIntime;//DateTime.Parse("1982-11-23");
item.ZoneIndex = ZoneIndex;
item.oPort = oPort;
item.iPort = iPort;
item.Size = Size;
return item;
}
}
}

View File

@@ -0,0 +1,84 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace UIControl
{
[Serializable]
public class CMenuButton
{
public eButtonType Shape { get; set; }
public string Text { get; set; }
public string Tag { get; set; }
public Rectangle Rect { get; set; }
public Color BackColor { get; set; }
public Color ForeColor { get; set; }
public Color OverColor { get; set; }
public Color BorderColor { get; set; }
public byte BorderSize { get; set; }
public Font Font { get; set; }
public CMenuButton() : this(string.Empty, string.Empty) { }
public CMenuButton(string text, string tag)
{
Font = null;
BorderColor = Color.Black;
BorderSize = 5;
Shape = eButtonType.Rectangle;
this.Text = text;
this.Tag = tag;
BackColor = Color.White;
OverColor = Color.Gold;
ForeColor = Color.Black;
text = "Button";
}
public string menutag { get; set; }
}
[Serializable]
public class CMenu
{
public string Title { get; set; }
public string Text { get; set; }
public string Tag { get; set; }
public RectangleF Rect { get; set; }
public Boolean Focus { get; set; }
public Boolean Select { get; set; }
public eMsgIcon Icon { get; set; }
public CMenuButton[] buttons { get; set; }
public Font Font { get; set; }
public Color BackColor { get; set; }
public Color ForeColor { get; set; }
public Color BorderColor { get; set; }
/// <summary>
/// 반드시 사용자의 허가를 받아야 넘어갈 수 있는 메뉴
/// </summary>
public Boolean RequireInput { get; set; }
public CMenu() : this("Contents", "Title", "tag", eMsgIcon.Info, null) { }
public CMenu(string text_, string title_, string tag_, eMsgIcon icon_, params CMenuButton[] buttons_)
{
this.Tag = tag_;
this.Title = title_;
this.Text = text_;
this.Icon = icon_;
this.buttons = buttons_;
this.Font = new Font("맑은 고딕", 15, FontStyle.Bold);
BackColor = Color.White;
ForeColor = Color.Black;
BorderColor = Color.Orange;
RequireInput = false;
}
public float X { get { return Rect.X; } }
public float Y { get { return Rect.Y; } }
public float W { get { return Rect.Width; } }
public float H { get { return Rect.Height; } }
}
}

View File

@@ -0,0 +1,86 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
namespace UIControl
{
public class CPicker
{
/// <summary>
/// 릴의 크기가 들어있음 (7 or 13)
/// </summary>
public string ReelSize { get; set; }
/// <summary>
/// 릴이 있는 경우 해당 릴이 어느 포트에서 왔는지의 번호
/// </summary>
public short PortIndex { get; set; }
/// <summary>
/// 현재 작업이 프론트 포트의 작업인가? (portindex 값을 가지고 판단함)
/// </summary>
public Boolean isFrontJob
{
get
{
if (PortIndex <= 1) return true;
else return false;
}
}
public Boolean Overload { get; set; }
/// <summary>
/// VAC센서의 값을 가지고 있음, 현재 릴이 감지되었는가?
/// </summary>
public Boolean isReelDetect
{
get
{
return VacDetect.Where(t => t == true).Count() > 0;
}
}
/// <summary>
/// PICK후 60mm위치에서 미리 확인한 감지 상태값
/// 이값을 가지고 도중에 떨궜을 상황을 감지한다
/// </summary>
public Boolean PreCheckItemOn { get; set; }
public Boolean HasRealItemOn { get; set; }
public Boolean ItemOn { get; set; }
public Boolean[] VacDetect { get; set; }
public Boolean[] VacOutput { get; set; }
public CPicker()
{
this.Overload = false;
ReelSize = "7";
PortIndex = -1;
HasRealItemOn = false;
PreCheckItemOn = false;
}
public void Clear()
{
this.Overload = false;
ItemOn = false;
ReelSize = "--";
PortIndex = -1;
if(VacDetect != null && VacDetect.Length > 0)
{
for (int i = 0; i < VacDetect.Length; i++)
VacDetect[i] = false;
}
if (VacOutput != null && VacOutput.Length > 0)
{
for (int i = 0; i < VacOutput.Length; i++)
VacOutput[i] = false;
}
}
}
}

View File

@@ -0,0 +1,334 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
namespace UIControl
{
public class CPort
{
public Boolean Safty1Err { get; set; }
public Boolean Safty2Err { get; set; }
public Boolean SaftyErr { get { return Safty1Err || Safty2Err; } }
public Boolean MotorRun { get; set; }
public Boolean MotorDir { get; set; }
public int arrowIndex { get; set; }
public Boolean LimitUpper { get; set; }
public Boolean LimitLower { get; set; }
public Boolean OverLoad
{
get
{
return LimitLower && DetectUp;
}
}
public byte AlignOK { get; set; }
public Boolean Ready { get; set; }
public Boolean DetectUp { get; set; } //상단에 있는 자재 감지 센서
public Boolean DetectDn { get; set; } //하단에 있는 자재 감지 센서
// public List<CItem> Items { get; set; }
/// <summary>
/// 7인치 13인치의 크기 정보를 표시한다
/// </summary>
public string title { get; set; }
public int reelNo { get; set; }
/// <summary>
/// 차수별 릴 작업 수량이 표시됨
/// </summary>
public int reelCount { get; set; }
public int errorCount { get; set; }
public System.Drawing.Color bgColor { get; set; }
private Boolean _enable = false;
public Color fgColor { get; set; }
public Color fgColorCount { get; set; }
public Rectangle rect_title { get; set; }
public RectangleF Rect { get; set; }
public Rectangle rect_count { get; set; }
public int AnimationStepPort { get; set; }
/// <summary>
/// 0:notcart , 1:ready, 2:full
/// </summary>
public ushort State { get; set; }
public Boolean Enable
{
get { return _enable; }
set
{
_enable = value;
this.bgColor = value ? Color.Lime : Color.FromArgb(43, 43, 43);
this.fgColor = value ? Color.White : Color.DimGray;
}
}
public CPort()
{
Ready = false;
Enable = false;
rect_title = Rectangle.Empty;
rect_count = Rectangle.Empty;
Rect = RectangleF.Empty;
reelNo = -1;
arrowIndex = 2;
reelCount = 0;
fgColor = Color.Black;
Clear();
AlignOK = 0;
AnimationStepPort = 9;
//Items.Clear();
}
//public void ClearItem()
//{
// Items.Clear();
//}
public void Clear()
{
Enable = true;
Safty1Err = false;
Safty2Err = false;
MotorRun = false;
MotorDir = false;
LimitUpper = false;
LimitLower = false;
reelNo = 0;
reelCount = 0;
DetectUp = false;
DetectDn = false;
}
public void Display(Graphics g, Font fCnt, Font fMsg, Boolean InputMode,Boolean InputActive)
{
if (Enable == false)
{
g.DrawLine(Pens.DimGray, Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
g.DrawLine(Pens.DimGray, Rect.Right, Rect.Top, Rect.Left, Rect.Bottom);
}
//모터사용시 화살표
eDirection DirL = MotorDir == false ? eDirection.TopToBottom : eDirection.BottomToTop;
if (MotorRun) UIControl.Common.Draw_Arrow(g, Rect, DirL, arrowIndex, AnimationStepPort, Color.Gold, fMsg);
//글자표시 (크기 및 작업 수량)
var sf = new StringFormat
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center,
};
//리밋영역표시(상/하)
var limitSizeH = (int)(Rect.Height * 0.2);
if (OverLoad == true)//과적
{
g.FillRectangle(Brushes.Red, Rect);
if (InputMode)
{
using (Font f = new Font("맑은 고딕", 20, FontStyle.Bold))
{
g.DrawString("적재초과",
f,
new SolidBrush(fgColor), Rect, sf);
}
}
else
{
g.DrawString("OVER\nLOAD", fMsg, new SolidBrush(fgColor), Rect, sf);
}
}
else
{
//입력모드에서는 별도 처리를 한다
if (InputMode)
{
if(InputActive)
{
using (Font f = new Font("맑은 고딕", 20, FontStyle.Bold))
{
var msg = "투입준비";
g.FillRectangle(new SolidBrush(Color.FromArgb(100, Color.Black)), Rect);
g.DrawString(msg, f, new SolidBrush(fgColor), Rect, sf);
}
}
else
{
using (Font f = new Font("맑은 고딕", 20, FontStyle.Bold))
{
var msg = "--";
g.FillRectangle(new SolidBrush(Color.FromArgb(100, Color.Black)), Rect);
g.DrawString(msg, f, new SolidBrush(fgColor), Rect, sf);
}
}
}
else
{
if (errorCount > 5)
{
g.FillRectangle(new SolidBrush(Color.FromArgb(250, Color.Gold)), Rect);
}
else
{
g.FillRectangle(new SolidBrush(Color.FromArgb(150, Color.Black)), Rect);
}
if (errorCount > 0)
{
if (errorCount > 05)
{
g.DrawString(reelCount.ToString() + "\n(ERROR)", fCnt, new SolidBrush(Color.Red), Rect, sf);
}
else g.DrawString(reelCount.ToString() + "\nE:" + errorCount.ToString(), fCnt, new SolidBrush(Color.Red), Rect, sf);
}
else
{
g.DrawString(reelCount.ToString(), fCnt, new SolidBrush(fgColor), Rect, sf);
}
}
}
//데두리표시 ( 비활성 회색, 활성 감지 : 라임, 미감지 흰색)
Color borderL = Enable ? (LimitUpper ? Color.Red : (LimitLower ? Color.Blue : (DetectUp ? Color.Lime : Color.White))) : Color.DimGray;
if (OverLoad) borderL = Color.White;
int bordersize = (InputMode ? 10 : 7);//ortL.enable ? 7 : 1;
if (OverLoad == false)
{
var fontsize = InputMode ? 9 : 9;
using (Font fnt = new Font("Consolas", fontsize, FontStyle.Bold))
{
//상단 리밋은 상단에
if (LimitUpper)
{
var msgLU = "+ LIMIT";
var fsize = g.MeasureString(msgLU, fnt);
var msgW = fsize.Width * 1.5f;
var msgH = fsize.Height * 1.5f;
if (msgW > this.Rect.Width * 0.70f) msgW = this.Rect.Width * 0.7f;
var RectMsgL = new RectangleF(
Rect.Left + (Rect.Width - msgW) / 2.0f,
Rect.Top - msgH - bordersize / 2.0f + 1,
msgW, msgH);
g.FillRectangle(new SolidBrush(Color.FromArgb(250, Color.Red)), RectMsgL);
// g.DrawRectangle(Pens.Black, RectMsgL);
g.DrawString(msgLU, fnt, Color.White, RectMsgL);
}
//아이템 감지신호는 상단 아래쪽으로
if (Ready)
{
var msgLU = "PORT READY";
var fsize = g.MeasureString(msgLU, fnt);
var msgW = fsize.Width * 1.5f;
var msgH = fsize.Height * 1.5f;
if (msgW > this.Rect.Width * 0.70f) msgW = this.Rect.Width * 0.7f;
var RectMsgL = new RectangleF(
Rect.Left + (Rect.Width - msgW) / 2.0f,
Rect.Top + bordersize / 2.0f - 1,
msgW, msgH);
g.FillRectangle(new SolidBrush(Color.FromArgb(250, Color.Lime)), RectMsgL);
// g.DrawRectangle(Pens.Black, RectMsgL);
g.DrawString(msgLU, fnt, Color.Black, RectMsgL);
}
//하단 리밋은 하단에표시
if (LimitLower)
{
var msgLU = "- LIMIT";
var fsize = g.MeasureString(msgLU, fnt);
var msgW = fsize.Width * 1.5f;
var msgH = fsize.Height * 1.5f;
if (msgW > this.Rect.Width * 0.70f) msgW = this.Rect.Width * 0.7f;
var RectMsgL = new RectangleF(
Rect.Left + (Rect.Width - msgW) / 2.0f,
Rect.Bottom + bordersize / 2.0f - 1,
msgW, msgH);
g.FillRectangle(new SolidBrush(Color.FromArgb(250, Color.Blue)), RectMsgL);
//g.DrawString(msgLU, fnt, Brushes.White, RectMsgL, sf);
g.DrawString(msgLU, fnt, Color.White, RectMsgL);
}
//아이템 감지
if (DetectUp)
{
var msgLU = "ITEM DETECT";
var fsize = g.MeasureString(msgLU, fnt);
var msgW = fsize.Width * 1.5f;
var msgH = fsize.Height * 1.5f;
if (msgW > this.Rect.Width * 0.70f) msgW = this.Rect.Width * 0.7f;
var RectMsgL = new RectangleF(
Rect.Left + (Rect.Width - msgW) / 2.0f,
Rect.Bottom - msgH - bordersize / 2.0f + 1,
msgW, msgH);
g.FillRectangle(new SolidBrush(Color.FromArgb(250, Color.Lime)), RectMsgL);
//g.DrawRectangle(Pens.Black, RectMsgL);
g.DrawString(msgLU, fnt, Color.Black, RectMsgL);
}
//안전 오류는 중앙에
if (SaftyErr && InputMode == false)
{
var msgS = "SAFTY ERROR";
var fsize = g.MeasureString(msgS, fMsg);
var msgW = fsize.Width * 1.5f;
var msgH = fsize.Height * 1.5f;
if (msgW > this.Rect.Width * 0.80f) msgW = this.Rect.Width * 0.8f;
var RectMsgL = new RectangleF(
Rect.Left + (Rect.Width - msgW) / 2.0f,
Rect.Top + (Rect.Height - msgH) / 2.0f,
msgW, msgH);
g.FillRectangle(new SolidBrush(Color.FromArgb(240, Color.Khaki)), RectMsgL);
g.DrawRectangle(Pens.Black, RectMsgL);
g.DrawString(msgS, fMsg, Color.Maroon, RectMsgL);
}
}
}
//테두리가 리밋영역을 감추도록 그린다
g.DrawRectangle(new Pen(borderL, bordersize), Rect.Left, Rect.Top, Rect.Width, Rect.Height);
sf.Dispose();
}
}
}

View File

@@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace UIControl
{
public partial class Unloader
{
public class CPortData
{
/// <summary>
/// sid
/// </summary>
public string sid { get; set; }
/// <summary>
/// 현재진행된 수량
/// </summary>
public int qty { get; set; }
public string towername { get; set; }
/// <summary>
/// 전체기준수량
/// </summary>
public int kpc { get; set; }
public CPortData(string sid, int qty, int kpc,string tower_)
{
this.sid = sid;
this.qty = qty;
this.kpc = kpc;
this.Active = true;
this.towername = tower_;
}
public CPortData(string sid,string towr) : this(sid, 0, 0,towr) { }
public Boolean Active { get; set; }
}
}
}

View File

@@ -0,0 +1,73 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
namespace UIControl
{
public partial class Unloader
{
public class CPort
{
public int SortKey { get; set; }
public int portNo { get; set; }
public string portName { get; set; }
public int idx { get; set; }
[Browsable(false)]
public Rectangle rect_title { get; set; }
[Browsable(false)]
public Rectangle rect { get; set; }
[Browsable(false)]
public Rectangle rect_count { get; set; }
[Browsable(false)]
public Rectangle rect_signL { get; set; }
[Browsable(false)]
public Rectangle rect_signR { get; set; }
public List<CPortData> reelSID;
public int cartSize { get; set; }
public ushort cartState { get; set; }
public Boolean SIDUpdate { get; set; }
/// <summary>
/// 이값은 PLC에서 읽은 값이다
/// </summary>
public int reelCount { get; set; }
public int reelCountPLC { get; set; }
public string Mode { get; set; }
public CPort()
{
SortKey = 0;
idx = -1;
Mode = "AUTO";// ePortMode.Auto;
rect_title = Rectangle.Empty;
rect = Rectangle.Empty;
rect_count = Rectangle.Empty;
rect_signL = Rectangle.Empty;
rect_signR = Rectangle.Empty;
reelSID = new List<CPortData>();
cartSize = 0;
cartState = 0;
Clear();
SIDUpdate = true;
}
public void Clear()
{
reelSID.Clear();// = new string[0];// string.Empty;
reelCount = 0;
reelCountPLC = 0;
//기존에 있었는데 지웠다면 업데이트해야함
if (reelSID.Count > 0) SIDUpdate = true;
}
}
}
}

View File

@@ -0,0 +1,126 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
namespace UIControl
{
public static class Common
{
public static void Draw_Arrow(Graphics g, RectangleF rect, eDirection dir, int arrowindex, int animstep, Color basecolor,Font f )
{
//컨베어 RUN 표시기 표시
var paddingX = rect.Height * 0.15f; //상하단에 이만큼의 여백을 준다
var paddingY = rect.Height * 0.15f;
var sigHeight = rect.Height - (paddingX * 2.0f);
var sigWidth = rect.Width / animstep;
if (dir == eDirection.BottomToTop || dir == eDirection.TopToBottom)
{
paddingX = rect.Width * 0.15f;
paddingY = rect.Height / 10.0f;
sigWidth = rect.Width - (paddingX * 2.0f);
sigHeight = rect.Height / 4.5f;
}
List<PointF> pts = new List<PointF>();
//사각영역을 표시해준다.
//if (dir == eDirection.LeftToRight || dir == eDirection.RightToLeft)
//{
// var rect2width = rect.Width / animstep;
// for (int i = 0; i < animstep; i++)
// {
// var rect2 = new RectangleF(rect.X + i * rect2width, rect.Y, rect2width, rect.Height);
// g.DrawRectangle(new Pen(Color.FromArgb(100, Color.Gray)), rect2.Left, rect2.Top, rect2.Width, rect2.Height);
// g.DrawString(i.ToString(), this.Font, Brushes.White, rect2.Left, rect2.Top);
// }
//}
//else
//{
// var rect2width = rect.Height / animstep;
// for (int i = 0; i < animstep; i++)
// {
// var rect2 = new RectangleF(rect.X, rect.Y + i * rect2width, rect.Width, rect2width);
// g.DrawRectangle(new Pen(Color.FromArgb(100, Color.Gray)), rect2.Left, rect2.Top, rect2.Width, rect2.Height);
// g.DrawString(i.ToString(), this.Font, Brushes.White, rect2.Left, rect2.Top);
// }
//}
var bX = rect.X + paddingX;
var bY = rect.Y + paddingY;
if (dir == eDirection.LeftToRight)
{
var gridSize = rect.Width / animstep;
pts.Add(new PointF(rect.X + paddingX + (arrowindex * sigWidth), rect.Y + paddingX));
pts.Add(new PointF(rect.X + paddingX + (arrowindex * sigWidth) + sigWidth, rect.Y + paddingX));
pts.Add(new PointF(rect.X + paddingX + (arrowindex * sigWidth) + sigWidth * 2.0f, rect.Y + paddingX + sigHeight / 2.0f));
pts.Add(new PointF(rect.X + paddingX + (arrowindex * sigWidth) + sigWidth, rect.Y + paddingX + sigHeight));
pts.Add(new PointF(rect.X + paddingX + (arrowindex * sigWidth), rect.Y + paddingX + sigHeight));
pts.Add(new PointF(rect.X + paddingX + (arrowindex * sigWidth) + sigWidth, rect.Y + paddingX + sigHeight / 2.0f));
}
else if (dir == eDirection.RightToLeft)
{
var gridSize = rect.Width / animstep;
paddingY = rect.Height * 0.1f; //상,하 여백을 10%크기로 한다
sigHeight = rect.Height - paddingY * 2.0f;
bX = rect.X + ((animstep - 1) - arrowindex) * gridSize;
bY = rect.Y + paddingY;
pts.Add(new PointF(bX, bY));
pts.Add(new PointF(bX - gridSize, bY + sigHeight / 2.0f));
pts.Add(new PointF(bX, bY + sigHeight));
pts.Add(new PointF(bX + gridSize, bY + sigHeight));
pts.Add(new PointF(bX, bY + sigHeight / 2.0f));
pts.Add(new PointF(bX + gridSize, bY));
}
else if (dir == eDirection.TopToBottom)
{
var gridSize = rect.Height / animstep;
paddingX = rect.Width * 0.2f; //상,하 여백을 10%크기로 한다
sigWidth = rect.Width - paddingX * 2.0f;
bX = rect.X + paddingX;
bY = rect.Y + (arrowindex + 1) * gridSize;
pts.Add(new PointF(bX, bY));
pts.Add(new PointF(bX + (sigWidth / 2.0f), bY + gridSize));
pts.Add(new PointF(bX + sigWidth, bY));
pts.Add(new PointF(bX + sigWidth, bY - gridSize));
pts.Add(new PointF(bX + (sigWidth / 2.0f), bY));
pts.Add(new PointF(bX, bY - gridSize));
}
else if (dir == eDirection.BottomToTop)
{
var gridSize = rect.Height / animstep;
paddingX = rect.Width * 0.2f; //상,하 여백을 10%크기로 한다
sigWidth = rect.Width - paddingX * 2.0f;
bX = rect.X + paddingX;
bY = rect.Y + ((animstep - 1) - arrowindex) * gridSize;
pts.Add(new PointF(bX, bY));
pts.Add(new PointF(bX + (sigWidth / 2.0f), bY - gridSize));
pts.Add(new PointF(bX + sigWidth, bY));
pts.Add(new PointF(bX + sigWidth, bY + gridSize));
pts.Add(new PointF(bX + (sigWidth / 2.0f), bY));
pts.Add(new PointF(bX, bY + gridSize));
}
if (pts.Count > 0)
{
g.FillPolygon(new SolidBrush(Color.FromArgb(10, basecolor)), pts.ToArray());
g.DrawPolygon(new Pen(Color.FromArgb(100, basecolor)), pts.ToArray());
}
//g.DrawString(arrowindex.ToString(), f, Brushes.Yellow, rect.Left, rect.Top - 20);
}
}
}

View File

@@ -0,0 +1,41 @@
namespace UIControl
{
partial class CtlMotor
{
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
/// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// CtlMotor
//
this.ResumeLayout(false);
}
#endregion
}
}

View File

@@ -0,0 +1,79 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace UIControl
{
public partial class CtlMotor : Control
{
public int Length { get; set; }
public Boolean Pin_Run { get; set; }
public Boolean Pin_DirCW { get; set; }
public Boolean Pin_Max { get; set; }
public Boolean Pin_Min { get; set; }
[Browsable(true)]
public new string Text { get; set; }
[Browsable(true)]
public new Font Font { get; set; }
public CtlMotor()
{
InitializeComponent();
Length = 100;
this.Size = new Size(80, 80);
this.MaximumSize = new Size(80, 80);
this.MinimumSize = new Size(40, 40);
if (this.Font == null) this.Font = new Font("맑은 고딕", 10);
if (this.Text == null) this.Text = string.Empty;
}
int anim = 0;
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
pe.Graphics.DrawRect(DisplayRectangle, Color.Gray, 2);
var rect = new Rectangle(DisplayRectangle.Left + 2, DisplayRectangle.Top + 2, 10, 10);
var rect2 = new Rectangle(DisplayRectangle.Right - 2 - 10, DisplayRectangle.Top + 2, 10, 10);
if (this.Pin_Run)
{
if (this.Pin_DirCW)
{
if (anim % 2 == 0)
pe.Graphics.FillEllipse(Brushes.Lime, rect2);
else
pe.Graphics.FillEllipse(Brushes.Yellow, rect2);
pe.Graphics.DrawEllipse(Pens.Black, rect2);
}
else
{
if (anim % 2 == 0)
pe.Graphics.FillEllipse(Brushes.Lime, rect);
else
pe.Graphics.FillEllipse(Brushes.Blue, rect);
pe.Graphics.DrawEllipse(Pens.Black, rect);
}
}
else
{
pe.Graphics.FillEllipse(Brushes.Red, rect);
pe.Graphics.DrawEllipse(Pens.Black, rect);
}
if (string.IsNullOrEmpty(Text) == false)
{
pe.Graphics.DrawString(Text,
this.Font,
Brushes.Black,
DisplayRectangle,
new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
}
anim += 1;
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
</root>

View File

@@ -0,0 +1,36 @@
namespace UIControl
{
partial class CtlSensor
{
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
/// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}

View File

@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace UIControl
{
public partial class CtlSensor : Control
{
string text_ = string.Empty;
Font font_ = new Font("맑은 고딕", 10);
[Browsable(true)]
public new string Text { get { return text_; } set { text_ = value; this.Invalidate(); } }
[Browsable(true)]
public new Font Font { get { return font_; } set { font_ = value; this.Invalidate(); } }
public Color ColorOn { get; set; }
public Color ColorOff { get; set; }
public Boolean Value { get; set; }
public CtlSensor()
{
InitializeComponent();
this.MaximumSize = new Size(80, 80);
this.MinimumSize = new Size(40, 40);
this.ColorOn = Color.Lime;
this.ColorOff = Color.DimGray;
//if (this.Font == null) this.Font = new Font("맑은 고딕", 10);
//if (this.Text == null) this.Text = string.Empty;
Value = false;
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
// pe.Graphics.DrawRect( this.DisplayRectangle,Color.Gray,2);
var rect = new Rectangle(this.DisplayRectangle.Left + 1, DisplayRectangle.Top + 1, DisplayRectangle.Width - 2, DisplayRectangle.Height - 2);
if (Value) pe.Graphics.FillEllipse(new SolidBrush(ColorOn), rect);
else pe.Graphics.FillEllipse(new SolidBrush(ColorOff), rect);
pe.Graphics.DrawEllipse(Pens.Black, rect);
if (string.IsNullOrEmpty(Text) == false)
{
pe.Graphics.DrawString(Text,
this.Font,
Brushes.Black,
DisplayRectangle,
new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
}
}
}
}

View File

@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace UIControl
{
public enum eMsgIcon
{
None,
Info,
Alert,
Error,
Help
}
public enum eButtonType
{
Rectangle = 0,
Circle,
}
public enum eDirection
{
LeftToRight,
RightToLeft,
BottomToTop,
TopToBottom
}
public partial class Loader
{
enum eAxis : byte
{
Y_P = 0,
Z_F,
Z_R,
X_F,
X_R,
}
public enum eScean : byte
{
Nomal = 0,
MotHome,
Input,
}
}
}

View File

@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace UIControl
{
public partial class Loader
{
public class MessageArgs : EventArgs
{
public string Message { get; set; }
public Boolean isError { get; set; }
public MessageArgs(string m, Boolean err)
{
this.Message = m;
this.isError = err;
}
}
public event EventHandler<MessageArgs> Message;
}
}

View File

@@ -0,0 +1,38 @@
namespace UIControl
{
partial class Loader
{
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
/// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
}
#endregion
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
// 이러한 특성 값을 변경하세요.
[assembly: AssemblyTitle("CapCleaningControl")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CapCleaningControl")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
[assembly: ComVisible(false)]
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
[assembly: Guid("9264cd2e-7cf8-4237-a69f-dcda984e0613")]
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 버전
//
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
// 기본값으로 할 수 있습니다.
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,243 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다.
// 런타임 버전:4.0.30319.42000
//
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
// 이러한 변경 내용이 손실됩니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace UIControl.Properties {
using System;
/// <summary>
/// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
/// </summary>
// 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
// 클래스에서 자동으로 생성되었습니다.
// 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을
// 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("UIControl.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을
/// 재정의합니다.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap air {
get {
object obj = ResourceManager.GetObject("air", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap alert {
get {
object obj = ResourceManager.GetObject("alert", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap bcd {
get {
object obj = ResourceManager.GetObject("bcd", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap bg_blue {
get {
object obj = ResourceManager.GetObject("bg_blue", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap bg_red {
get {
object obj = ResourceManager.GetObject("bg_red", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap debug {
get {
object obj = ResourceManager.GetObject("debug", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap debug40 {
get {
object obj = ResourceManager.GetObject("debug40", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap emg {
get {
object obj = ResourceManager.GetObject("emg", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap erase {
get {
object obj = ResourceManager.GetObject("erase", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap error {
get {
object obj = ResourceManager.GetObject("error", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap help {
get {
object obj = ResourceManager.GetObject("help", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap icons8_pause_button_30 {
get {
object obj = ResourceManager.GetObject("icons8_pause_button_30", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap info {
get {
object obj = ResourceManager.GetObject("info", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap mot {
get {
object obj = ResourceManager.GetObject("mot", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap plc {
get {
object obj = ResourceManager.GetObject("plc", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap reel_big {
get {
object obj = ResourceManager.GetObject("reel_big", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap reel_small {
get {
object obj = ResourceManager.GetObject("reel_small", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap safty {
get {
object obj = ResourceManager.GetObject("safty", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@@ -0,0 +1,435 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="air" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAABXRJREFUWEft
WHlM22UYxmMeMWo8ojPxH2E6l02dqPFWsrgZ2WaWsbiLjcTEOc8tGq9t0f3hkajTMGJBEDY2GFA3xmCj
COUqpXd/pa1dyzoJjGsgx2DGxOn4fN7m/fWADtNC2WL2JE8gv/f73vf5rvd7v8ZdxqUGu91+h9VqXQQu
t1gsiS6X6xo2XVxAzFK9RdLnqN1iR0WbeL+sQ3xZeVKUNTnOwqYA7+KmMwulUnkVgud8W+UVD+cMi3sU
ZydwZWGvqGh2jpjN5sXcbeaApcx9p/RUWGHBXPDjiChudJ2TJOlJ7hp7YOZWfK3yhghZU9wrdle3itxa
t/gUS/147pDftjB7WNTpbW1er/dadhFbNJkk60MIKgsgsZjRDCxlvMPhuAUDWNJokNzJ+/v8bWhvwr6R
XcQOQogrihpc5+XAqw/0CgjazWY/jEbjbapmx8AcxaivXWLOEAksZ3NsYbRIVWklXWJ5wWmham7p1ul0
t7IpBBD0xYrC0/5ZrNbbO9kUW2i12hsRfDsJAOP58wTA9vbGkm6/wHLMKJsuDWDpC5/OG/SJS8gcFdiX
LjZdfGD2krPV7jF59l7c1097VcHm6EGbGyfyFXBTNKRlhZADWTWesfnIgbLADKQg5MJHOUx0MBgMd6u0
9sF3SzvEpoNdUZEOz3N7BvzCiGuLeygN7eMw0QMjfy81aFNPB0mc1mST6GBxmOiB5Vm182hb2ECRkA7E
S/v7haKmdQyDzp8WcQRKwnD4TWWzva9cax+NhkebnYNNRpsTS5oBX4ns+n8OjHYlcpTjcJOjZyZYq7d1
aAwSwlpzwWVYuStZykSYTKbZRSiH5mYFUsJMMAF3dNLe332Vj8Zo80DHUywpFLRPvlKdDOtkpkiFREGD
62/M5nqWFUB9ff3VWF7zB2XtYfNaLEi5cilKMTrtssh78X9+3fF/kEmSWFoAEHkdDCkYQdjbIQZ8C/xO
pXMMrC7q9Yt8MPuMwP5s9xe2ELV4XMdJifZrwAtWL5ECN9dNBqPl2Hokc1kkF7YbaO/totdXakmPWIcG
/8UNuGHoDZJZ4xF6s6WarkWOMyXguXqDWt/SNTeLC9ufhqmoqIgr0zj+kFVHykU4fRVax9CUL38GBO2g
N43sv1LnHIjDwbA/EfSwiZSJeGqq8RBCNX09x4kaWNJVVKDIvpWaX89Rcp6nN1vVuJ66wyXT8SzTOvqy
1Z6xpKBKhU4kRv8xxwkBvq9D4HJwJ/6fxZ/DAvY3X/05UKTg0T/KpsgARwlqg/3UApw2cnQ/9o3OLJnY
7AcG/+wP1R7xANptPthJg8hkU1gYTJKW9h75pL1oNEl6NkUOBNuSpgyM9ojWOcImP6hNanGgTUbNiTHM
5Fo2hwDfP/wsqIKiNwz6f8Lm8ECDRLXB9ptS4/oL/6cH35WYnc9Tgl5qlTp7H5v8wLU1P682UO7TNapQ
t46hby5sz0NUPPwuMVkspZRJ4jlhU+I+1OT8ExniTnYVHhqjZKJfA6jT1sMdNCIlnCbh75YC3NvyW/cR
XFEIUsHdQoD2379xqNPXTmYyakSarfTqE74fmigbBNvpXsYgtrKLC6NOL7nuCyoelhX0ie3lbeJ17Ce6
kuTvVNxCSAp3CwEGM0tntvyyeZzIcIwHt8E/+uRw98mBhmm7qry+juEcEmmZkQVqqMjlbhNAIsF0Ov0v
5IfOFpH8v4zHf2G9kwqFbZP5mgDavLnYR8/wu1bmPLzUPjrSLgxmqRHBb+bmkwL7biH85VXqHGeyaty+
F15OrUeodC39NACIm8NNIwMcPwYHymNae/+eOrcobDh+HoWmHQ5fo98HuVlEgM/ZEEuH5Hb+ND2gh8+M
/Xx2GVNGXNy/B7Gt3iRjVn4AAAAASUVORK5CYII=
</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="alert" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-automatic-gearbox-warning-80.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="bcd" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAAsxJREFUWEft
ll1IU1EcwBdGBUFvPfRUD0VBjaAeerCHCMyHHkrXsZwhohOE2q6F835s0jUlg6h7J2rp7hJsICzQHiJI
LGePfdFLDyVEEEG9SEEguez0P/Nfzu3cfRjn+rIf/OAw/uec38O2e11lypQpEcWMBRXTWgSpQ75X++9u
x+sLo5rWC84hYo3EavD6wihmdIJ7iFgJXl8Y1Yz1cQ4QbfGBcsTycg4QbfGBmjG8g3OAaIsPZMAv+Tnn
EGHKkegpvLo45EjMzztIgClwRu+Pb8Ori6PjxthW2Pgl46D/tvPmCJWuD9C27lu0OdxHz3depWcv6efw
ytJRjFgD76JCdvXfXhoY6aWDd0K0vaeXNso9tK49TM8EtBw9kjaE160N+AO9ApcuZUegC7IZfaUY1his
ZdmwTirG6C76aPfmxeSB8VTSTb9NHaKh7jZuHNMT0N7hVWtHNaxKNWINQcQ92bTCqhGtDUZG95BEogJH
cqAJUpGadU+zyPmpw7Q52MENZNZeCO3Ebc7yc8a9DwJ/s8j4YB03jkkktQW3OA/EvWGBrxPHuXHoOI47
D8RNssC5B5W8sGUl9SuMblje4TC/Zt0N8F18+SxePceNQ2v88kHcsj5AxLXsqExJIHQZR9cHiPicHbVK
SXuIo+sDRKRyolb7/Ziub8Rx54EAH/gxIyhHj6QewfH8VHlb3zLZ+oTXp1d5fbS6vnU/k63ZZytzPrpi
S/qVKb2u991n60yamvQt8OQY5sUx4f9QwdH8iApksEiImc+OWzb0GMfyIzKQATHTuXFpfxBd34Rj9ogO
JH5tkhOXlkihozhmj+hACElmh2XYhWP2OBD4IStqRUl9gmP2iAwkUngvNwwlAe0pjtojNDCgSbywv8J3
8CKO2iMyEB5pjbwwNEEIsX0J/ofIQPY4gxD24sCeKgvgJ3DC066expEyZcqUhsv1B6iAtIhPh2shAAAA
AElFTkSuQmCC
</value>
</data>
<data name="bg_blue" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABGdBTUEAALGPC/xhBQAAAsFJREFUeF7t
nL1uE0EUhS0QvBDvYCcVCHAQeRoXId4N1IBrRyClSiSwgR7vFoCgQHZkp4wpDUqo+Bnm7M5AFM1aa07n
OUf6uvG17ifvrKvTUBRFUZan3fl8vdnN7rXS/FkrySetJDu3mDXD7mR3K3bMtrCzW59Lq5vf2UhGJ5e+
LAZmG2l222lYPe2Dg6utNHvkB24/+WR2h3PT//DdHB3/NIPZ77UCO2E37Ihd/d72x/Ow0zFXnJb68fI2
93KTvPliBtPwF68jL6e/TPf1vNgdDpppvue01AseWy+vN/oa/JIY6I0WFySObjk9y4PL0995xS8vMDgm
dl/N/eM8rfViKd629gO4B/BTDg2NCTjYfvyxvA+7o7bTVJ1mkj3HYZgPDYyRneGpE5jtO03VsQePcXjf
vpFCw2Kk//7cPcb5xGmqjj14hsOHkx/BYTFyZF2UArMzp6k67mBwUMx4L05TdSQwjASSSCCJBJJIIIkE
kkggiQSSSCCJBJJIIIkEkkggiQSSSCCJBJJIIIkEkkggiQSSSCCJBJJIIIkEkkggiQSSSCCJBJJIIIkE
kkggiQSSSCCJBJJIIIkEkkggiQSSSCCJBJJIIIkEkkggiQSSSCCJBJJIIIkEkkggiQSSSCDJKgKL0gkU
LYQGxcjh+G/pxDenqTr2kGpPLrFa7UnZn2ceDE+Dw2JkZ1AW7zSTrO80Vcce3MJh1B2p+qmsfrrvqp+a
aX7XaaoOCrbs4Rk+gAq40NCYQJ8gXFimN3rvrjlNy4PmRnyorL9bBAfHwNO3C7OZlvV39v676fTUC5ob
vUQUkcX0OL+wu+KX909eljot9YPaSzQ3ugHFnYgWM7yR1rFXCzthN7w8/Z3n5f1XBagPmhvtkOmFgbFg
d17xsa0KLk+UD6I/zw4eW4o/22sGdhpjR7xta78wFEVRok2j8Qfk0Qty9BRILAAAAABJRU5ErkJggg==
</value>
</data>
<data name="bg_red" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABGdBTUEAALGPC/xhBQAAAsFJREFUeF7t
nMFOE1EYhRuMvozLtok+gxq1UMDAri7EXaXs2WkpbO3MGiyKb6EriVsD9g68AwFcSa73n/mnMeROM8PZ
zT0n+XZ37uT/OnOnq9NgGIZh5ufh0a8H7ShZaUXJxHHaisyVw9YMN5PMlkzaY7MsM+v4WFrj6aLb/OzW
zUIgaUfTjmqonu6Rved+id18w5W9b/ZwMLRnvZ79s/bS2tUntUJmktlkRpk1n7sZTUeNbbugWsonl/f4
46n9+u69vVl96r1xHbl59cx+2fyQzp6JTHZUS7noa5tucPym771JCBxv9GcSm3HyQvXMjxye7oL0zJMn
z7dxSHzeHGZPYWxMqQ9L9rXNzjx5lH2bhoQ4WN77rk+h6aqm4rTi6aEslsPUt2GIfBqMMoGROVBNxXEL
f8vic/dF8m0WIknvdfYau/+Jqqk4buGlLL6u4V+Vu3K93lGB5lI1FUcXejcKmdyLaioOBfqhQBAKBKFA
EAoEoUAQCgShQBAKBKFAEAoEoUAQCgShQBAKBKFAEAoEoUAQCgShQBAKBKFAEAoEoUAQCgShQBAKBKFA
EAoEoUAQCgShQBAKBKFAEAoEoUAQCgShQBAKBKFAEAoEoUAQCgShQBAKBKFAEAoEoUAQCgShQBAKBKki
MCudWO94NwqRq7XFXOCFaiqOW8Tak1tUrD2RjkBjJ4Md72Yhsr+1mz+B+6qpOFI+KIul7ojVT1n1U1er
nxxLqqk4Wj6WyAVSAefbNCSkAiuVFxvTjH/eV03zI82NclFaf7cRbv3dj7d9+2icdwia56qnXKS5MZco
FXAhvc5/3azy5M3kxclQtVTItl2Q5ka1n56J0mImX6Q69mrJTDLbwdbo/zMvk3eXCtA80two7/9sw1DI
Zq722hZFDk8pH5T+PLfpiSP9s10zZKYTnXGp9AeDYRgm2DQa/wBGopc1FSaqkQAAAABJRU5ErkJggg==
</value>
</data>
<data name="debug" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-bug-80.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="debug40" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-bug-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="emg" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAABOJJREFUWEft
WOtvFFUUb6Ifff8HRv8AE9xZmqJsd0ZgW0BCWWp4tDxcKIK8FFsSEx/VAlXjB1NrNWpCMUSiSLR0i00w
EEHlIeq3on4UE40K2Z2ZfR/PuXvnzr0z03Vf9VNP8ktn5575nd/ce+fcc9oyb/NWwf6Khe8yDa0zHdX6
zaj2Nv79iMCv+2mMfLj7/2MQidye0sNPpPXQl2ldKyDgP5BHTKX0UDfE47dxmrkxFLYmpWu/egRUDVPX
fkkZodWcrnl2a2nrfSjsVFBQgrkyClZvHOydW8HevQ3sJ9fjPT3Ql4BcJ28uWnQvp2/MbkVaHwyaNbMr
Brk3DkPxi9MAV34EuPqTD8WpafQZBqt7ufIse97Qfr4ZXfAAD1OfkTgk+10hXhGF/OgIwKVrgaICgS+Q
f2c0aFZv1C2SL6syc3ZiA5TOnlcCFz49CdlDg2DvSoC1uRusresgs7cPskMv4+xOKEJL575Gjo2yQDaT
/0QeuoeHrd6C9pzVuxbgm8ssWOHoUbA2rlHGg2BtWA2Fj0+4Qi99z16Atkh26CXmY+qhT3jY6iwV1eLe
QA7s3QnIDOwLHKuEzMFnAC7/IESWzl+A/IcfiHH8wlfx8JWtnOekpTXCYO/YLIgagf10golzZlMWiLhe
VZ4sJ+HyQ7SEtMeIzFq3SiarHfiiucOvKF+8RyBgjlzLZcxudEKwL3XkLYUs9+ZrClmtMDseZdsjO/gi
5N8bg+LnE5B/d8zrl+Qygu1vY8Hd6FQwOxezPVOaPisEls5dgPSSVi9hs5H/s63tTi7Hb+zglx4onp4q
i5v+Cq+TYO/pk8nmBGb04RiX47e0ERoQjsvb3eV9/Uj5XsdihaxhLGtjqSsde8S9Z2gHuBy/pQxt1HGk
hOsIpPNVEDQJdt8mscetHjefmnp4hMvxGzocEwS4oYXALesFQbNgbep2+Z/aIo2Fx7kcv6FDoECaTZeg
OVAEYhXkjlUQKC+xrSxxQiJoDljS5vzVLzGW6cLxcV0Q5IaHBEGzkKWkTfy4DynvirFo+Fkux29me7hD
JqF6jkjoNJHvNwPFz04xbqp41LHQMi7Hb9TgoBP1EMyZik1nFmnPuCSNgZbU4c0NH5LHchUTNRnmoTOC
CCthJxUUxsdlooZAXEwgFg5m11JpLDzJZcxu1H3JZPmxUfG29ZRZXmSf7xd8VJnLY1TmcRmzG5U8VOU6
D9GJIqrob6+wBCuT1gKWnL+7yrjobPe0ADNVt6UpI9wlPQj2th63B8EAmef2ysR+yEcXBytYHQ78a2/v
UcbN9oUrefjqjFpDmYCOO+ftCbSPgkp+M96Jdd774jedtWrJfw0y+3epzxjaCR62eqO+VV5qgr29V22a
EJl9O9xAWKYVJ6ewnL9YbkknJhVfWlbvzCFmqMzjYWszagmR4IZMaK6IuG0n9hiU0NnYYwuhcPy4IkgA
fekZavBlLsx5v9lLtPt5uPqMRHpnkkDpITOwX/zOHNijisL0VJxMQu7Iq7jsMeVZjpmGxTlGfSu1hgFB
FNBXWkyeYQIpnQT5EGjP1b2slYxaQwxw3RtQAS519oWD2PMOBo3P1Py11mqUq6j7wmBJhDgWfcAujl/n
6ISgJDzn/37zGp2b1ENQmU5lEoqhevIYu8Z7dPD/EYncwd3nbd781tLyLxOgcrDBNHH8AAAAAElFTkSu
QmCC
</value>
</data>
<data name="erase" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAK
YQAACmEB/MxKJQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJrSURBVEhLvdZd
b9JQGAdwEr3wTm9M/AheqJlfxWSfQudMBnYaWarQ8WIyMBlUWoSp0CkzawWM6C5G0aiZzhfoMCZidIu6
bG5DL8yc0mMPO8cwOIUyWv/J/6aF55eekifYzMogHT424AqdoGl6H7pkfSgvn/bzYu36XVmlfNHNU3Tk
MLplXRwe7mn0zqw6pyyCuYUlIL+sgLPe6O+BS+xx9BHzA1GGnVLThTJ4UvxUh2ELrypg2BezBseomFeA
JCsg84iMn2FCfegrvacZxW3BtWMf9se2TMH10B14aSdO+a719uSdUFxTcaMorg7e3bHbPZH0yBVBlfIl
IqLX7OMyeNbwzvPz74HDw//UlsxeNFo/rnCSCgnZqjNwE9x6ME8E2jXThN+QCurgxXA/Gk8OROPizFr1
lwreLa2CnnFtyVzmp2unGfYIIlrTiP7YAvX+wx/uAtfeOZeaUbWjTiOiNe6Q4Elm5Y3vCGxs5es6GNHw
yfvPiQCp4mwJXAgmVDvD3UZEa9qhuBgXci+IUGNNQ3GN4KajuO1wQyjDCkPNPySjJeEQdWqow8uJiGiN
wx8/FJyQlneD4kLcObaNG0Jhzvu5PuGevEoa2E3fLq7Un9wZTKpDTCSLxuunP5XaM8pOvi5/XK6RBhot
PLHxRKZq9/ASGt05lDey380KpTeVz39IQzt1Y7OmLYfcmms8cRKNNJ46HhaUbvGeUByMFytfDOGmoDhG
cVNRnE44RKNTuW+mojh0IH6AhFuK4kCcCQsLxQ/b+H9Bcc6Nxg66rwqKtsfXAxPTK3C9olvWB/5Hosbi
R+F6RZd6jM32F+J393EUKic/AAAAAElFTkSuQmCC
</value>
</data>
<data name="error" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-hazard-warning-flasher-80.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="help" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-help-80.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_pause_button_30" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAK
YQAACmEB/MxKJQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKmSURBVEhL1ZfL
bxJRFMbrwvj4a4wLXdRUXZo4vGkxtDst0MQFGKMwMB1eKdVNI9CdaNQmxkWtIQyvqRTqprU8VpZuNLFt
FOq0tbpo7ALvCbch0gsZ4Frjl3wJmTnn/HIvl3MPff+F9NZXZxi7cFnBCka1K3lf7Uzcg88KNjZwhc+c
xmH0pOFSar17Pmfwvd0YCxertsjavmPmUw1se1zeh2cGf2Z90D2fVXMJJU7rXhoucVXPi2vm6dKe/021
9jC+29YQYw4X9/QesazhkwO4TGfSuUXXSCD3zfe6QoS0s3euUhtGuTo+5cDl5EnHi89NofzuA2GHWFiO
IdcULOwg+FNctr104ym/JVz6QSrWjS2hwne09RwuT5aajV8yBhalXlbabKhlDOQkrSt2EWOaVTuhd6dX
fTIOUaf2z1VrWj79ARgY1pDKmVTBd0JKfLn0s3aoz9LBkffw7FAQ2/webArmtxln8jrGNTToSb9rtVoa
YPh16N1iFuPqYvjoWYN/YZOUAKYBBhu8C5t/dDhoeZbpkkQKBtMCm0NFSWEX+jEWTrNgvBMpH5CCwbTA
tsjqL4aN3cBY1BpRl7K/+EgMBtMC21FvR33fhbHQk5Pj9pljAqNFYmx9q2EbSMFgWmArYihZYQhj/+Hh
unZbODXky2yQgsG0wAZvZn10dOUkxtaF2mXubzcQHZ/OYFxD0DLNocI2KYkG2PSoRcsEocu/4Jn9Skzs
xZ7ZL9AuVzDmqDQuod84kduifS0OT2SrKjZ6AWPIQrPS2K2p9y1PeKe+ObUsabi4CZdvL3R3PqM1+mh5
8QkuK09aLn13ZLKHYW9ycUvrTltxuc7EOKLnUfIyGlkrssfbYL6KBrwllSN2DpfpXjCkyx3olVySwWn0
dOx/Yeirr+83SXRvTbd4pKkAAAAASUVORK5CYII=
</value>
</data>
<data name="info" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-info-80.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="mot" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAABF1JREFUWEft
Vt1PU2ccZtebu5gXy7Ys2TJ3vf9id5rtZhdeumQxQbaQQQnooAWhxZaPtpSV0p5+QG0nLT0gVaHGQqQF
lkgUK6UyQJSYbZmaqVkCi5ydp/m97Hh62h5LSxazJ3mSk/M+z+/39LwffateOySCX22lr317rxTCS2Uq
h3Ss+o+d9T6hFMJLZSqH/wPuF//pgDVnLJ/09bU/dwx2PyuF8KIGlSsvTp2xftxs9qdH40sCP5MqiZH4
baHFHMjUt9k/pbLlQTnCMZY9ZDnDMZYtZCXCMe47ZCXDMZYc8iDCMb5yyIMMx6g6JM6oZvP5ZRiUCknJ
jSWeGRyRVTU0cRcfFKuJcfQueE42mrw31YT7MXj1UZ3e2UG2oqAfnlYTEhnIlovmXv+MklFK6/Dkb/Ud
Tg1ZVANL54fe4ksHGciSi3qD2x2O31I0gl3c+P269oHjJH9lFAuJ9w0GzkXyXJxq6z/mjszuyI2R6ZSg
t4+u1bcNfE7SklEoJMdf/7tGZztK0lyc0HQeOufk78mNLZZApqbV/hnJ9g2syRZxTcr7oDcykEwZzRZ/
Um4UN4SHhssG1JT3EUMnaDg/Gjpdgcj0y7tNKeCggW8K2q9tXnDMbBQiNNCSbQ/ygOjZcI7z03B+fNfa
f9w7nnwhNcsD9mgDH0U8iY1f7jwV1JD3JDZt2qEjZM9CHtA7lnxRq+0vvgG/1na/Y3Jf3JKa5QHdXdHp
zNKTvQCrqafC8o3Hwu2FR1niGe/Y+F1R6zZGp4Uq4Q0qkRPQxI1vVTf2HabhwtBZAj9LzdKAg/rI9wvx
jb9Y8yUx0NzUQ+FSMCWEXfPbIJ7xDmGZDh54qUxOQK01sEBDxdFgdId5yTpkAbtPez8Ic7NrrOni7O/C
ZGh519cbW7ad5Y8a63xvgnbx2WeeSk+G0rvQMD28qIFa0oA4xhqNnhG8V4XaVvvJoej8rjwgZ4zGVmhq
8eUQzmO6wmVNCuCMV7xToZVdaOGBFzUwJg04HJ0Xas86TmZNavBNU897vZ7or9KAg+189dzV9edohPWF
KcSXI0teiJqVudhD0fNnNiRqoJY0YI/Y64TG+j5Z1EFnDS6yAho9FxxxzqyiAYhNgHWGaSV5Xgy0hb64
/FNKuHPj302FWqjJ6uusgUWSq0edwTXCrktave/+ys3Hew0wZSHn3LZNe+EtkudFp8Z1SNTuSDdM5tYT
oUXve8DqoxfJS4PbOHFZIeCOmoCWmuG3lQK6TdEJkuwfvU3n31WaYuxWkuSFQxf+UmmKUZMk5YHiJhGP
EhrOiyFLLKO0SWi4vJAeM5gynHM4Smg4B+6uS/5YnmOmIlA6qHHO4Uv2d4wdw5oEMa0+cyyDcPkO6opB
8a9OnEKss1FufhvEM96xLwfK/+oqCs40EcdOZM2xvrAJMO0gntmaA3FZEKf2pctCRWE7HfiQ9ybXWYBi
5D3JTVzRyH4wwCU0zF1f472J1UKERunC+pqgquofdvoa6+LDQkwAAAAASUVORK5CYII=
</value>
</data>
<data name="plc" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAAnhJREFUWEft
ls1rE1EUxd/eP0BcigvBpS5sQcVdFEVTUFuoOi1pG8ViotSkBGea1tSQzJBObEhSMOmHMYm2JqmlWgNq
IoiLdiXBD1zozmVx6cJc33u+DIozNZ1JYsU58CMhN/eew7tvYJApU1tZMIe2wRSaw6w1lDh6jj/3Mhv9
ghgaxMOgKcRQidnoFx7iVR3eGCrMRr/++YDvvAgWL6pTvorgW0y9j9H8gPJpBMEObT6Oq/cxmh/wlQvB
LKdO/gKCrxH1PoZ5B41iBjSKGdAoZkCjmAGNYgY0yv8RcOu98vd6pT0cL+0juH3uA6/Du5ffT+5800je
yrtWs+KxrrOeiR3Mtn71jYY+9fAitIpeQfrACVI3s/+zAsl7n8dvp6EV8JEZ6B+TqzSsII6xCBur8Oxl
BQPzKyVw+SQYuMaDP5YA8tvPTM5mwe4SwDnih9TSk19qm+lN5pbBKcbIaVbP82I7i6EtPIAG7By4DPst
JxW8oahicGsmC20Wq1KzdHIwXywp9c32JguP2cqlaRZDW3hIJfWwSJs5hwvuLK7AoRNn4JTtkmJidwu0
Hs88gCteP/0uT6dpTW+v/Ua4ygniKouhLTykQlbUfrQDjnfbwBMIQ9sRK5wbHFJMHCM36WBiUDutqUyO
1vT0xtM5sI2GyF18wWJoCw+hKx72TyirOGztUgIQyJ0jqyE1Qv/QdaWmpzeSKbAnWvSxGNrCQ2hAQnJh
CUKJFGQfPVUMaiwUyyAn72Lz/G81Qj298XSehvtxetJ6n0fezmJoa1hOfHEGo9BsHIFoba3k4Vjv4YMH
WYSNhf98HzettQRBLJO11nVypkz9FSH0HdsLU8gVsNwDAAAAAElFTkSuQmCC
</value>
</data>
<data name="reel_big" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABGdBTUEAALGPC/xhBQAADlRJREFUeF7t
XOlzFMcV96dcH5L8BTm+53alkg+5/oNUkvJ3V0VoDyGMsGFXO7urlbQ6kXbn2FurvXQghGStThsMso2N
IWAS4jJg7LKNMT6CQRDQEYOh079mZMFs7zkzwgev6le1pZnu9/qpu9/Rr+eRh/SQvr5U74t/x+oM/sni
DFhtLjnU4A0dafAo521u+ZJVkFYszeJnAH7jb3hmp+/g3fpm0bKlOfBH9KF29/WgOqH/txZBbKeK+LfF
JX7a5I9f84gjK10DeSIOHyCxiRfJwNTLJD17jGQXjjPgN/6GZ3gH73rE4ZWm9vg19GHzKKfq3VIbVepv
VDZfLapzKz+2CHIrnUUfbmuNXm+LjN+UR58jmbl/kKFnXtUF9IG+2sLjNxt9kRt2t/KB1SX56Mz+kcr+
y0t1TulRm0d+lipu1SvvWYuMP89VgpEIjy+SFnlszeqW1+weeaHeFfyVKs6Xh6A4q1t50e5Rlulyu23E
TKsW4NmTnL5D981V+g88bHX2/1IV74tLj/uC37e5pSQVeKV3cPZ2bv44d3CbCcjQm5q5Q/dJzMpEvaP7
e6q4XyyyCeJjVHlXPeLoanrmGHcwDxKpmaPEHRyhs1G6ahXEv6liP3h63Of7lk2QB7Z6Q8vhvebvcXoR
HlskW73hFTudjY2N8jfVYTwYgnWly+INZ192OT33xZt1xZCibpGjN7NKjczZB2atLY7+n9sEaal7IP9Z
boEvKFDqmdkoJ1dXIn/L6pau1LnEn6nD2hxCBECVdyOQW7jDE24d0sh+8mRnnDnCvOdmAjzBOzj0LPf5
OjAGui/esDjEP6jDM5egPLpsV+C88gQCBqePEG8wSzy7Q0ROREhnbB/3PTPRQXlKlLe3L8RkSeZf4b4H
YCwYk+lKrHcEfkqn/HV55ABXEACzrrFFJk9PJ8itT3Lk6oUs2eaTSw7AaIAXeII3ZJjMJ5hMUgm5lT0H
CWbiFlfwF+pwjSUYDOx5pZZtd3KK7OoMkXfPpAlZGvocGIBPGeG2MQPgNTmVuE+Gd8+kyK4OhfQM5rlt
AIwNe6LhhkV1Vc7BYPAYI+CH0L7+MLn2fvY+wYG1j3OkqU1hyQBeeyMBHuAFnlo5MCNb+kOkjcqamz/B
bQ/DYndLZwx1cRBdOHrSK3yrdoK0SDnSF4lwhV7HwecGiDuQ4rQ3Fu7+NDl08P7Zdy/+958cCcQjTGbI
rm2PMTp3Z1ZsHimuDl8fIcJo8IZWivl57eExEohFyGef8AVeB/YiZ1eI7TW8fowA+gYP8OLJsA7I2h+N
UNn3cPuBn9hAne0tzsBfVDXURmpse7VYhNERnyStgRD7r/IE1eLE0STZ1RWnbfnLRw8wcxzdcfLq0UEu
by2wWloCYdJFx8DrLzR2iBoVeUlX7Gx3K0mPNLrKYyAO76cGQyH/5ex5xXDnyhDxi2HSn10o6E8v0Gdb
MMJ48HjzgP16Jx1DMLef26cQHF21CUpUVUd1VOeUHqXxIjcxkJp+hWxvC5HzGmtbCd58LUWa2sMsS6Lt
t1bAiO3wh8kbpyqbfffivbNpOhaFjUnbLxIQyGXW5NpQ5b3Um5otcFmwVIT+DJmeLb5Rl4MYj5Z0J6pF
TzJPneYol1clyM8kiNCX4oZ+PcmZ2za38ryqlsoIyUe6fFeznFnSl56j+164rNEohQ/fypBtrQoxIgGB
PtAX+uTxqgQYC1ywvvR8Qf9YKXavsoIVqaqnPDV4lWe7B6ZvazuDQpvo0sW05wlSDTIjMeKPjd/Xfy3w
R8dJZjTG5VENsB1hW+JNmi7q/9o9yryqntLEIg667nlpeOpIk9Bg7UvlXmADZyHe1JECPpUCMTf6WHqv
ckNWCkoyhmOAAj7QBc5Y/i70/VBVU3HC6RkOgHidPNEaIu+fq32paDE1HSc+ufYQr0UaJlN0/+L1XQs+
eDNDnvAp3NNC6MTqkjyqmooTnX0f8E7P8J+JZvQvlXuhJ8QrFbLpQSRFZ+Fg4SyEL0yNyUVVTXzCoTfO
bbWNgV1dsZrchHI4dJCGeDT84vEsBVjNxUMD3D714My/UsTZA2f/fn6w0Ftbwje2OMVfq+oqJKsr6G8L
77upbRyfPEx2tCvk9mU+Uz2ABXR2KUQZrTzEQ8gGJ75cyFYL4Ig/6VfYmLV8W5XxT6mOfKq6CgnlFrxE
KZKTE5r0kJE4eSxJdlYc4p1gIdvJY8avhnWMT8ZZmKrljTyo3R06qarrfkKRDupMeBvoUx2Rghyfkbgb
4kUqCvHwDt6tJmSrFu+cTtMxRwt4Qzesnqcp8G1VbRuEKikU+mgbDdIQp8Ej0eVr/HK5F2+/nmYhXpQa
sPbIGN1zo4wvgN/+8BiJTrxAl1eYvPWaef9MANuK3S2ysWv10dSeuMZN/aPEDFVS2gaB3DOkU4lwGRmJ
W5eGiNCrkO2tMpmbT5ALb6RZlge4QB13/O0J+sxN3zFj79OiQ44QkXMg5Q6OLG9pFreoatsgqyCFUTam
bdARmyBPU3+Nx8QoQHn9UTr70qWTsngWSYVJIFY+56cXk3m6D8YK90Gqozt2ISSpatsgFDfyDl1axCw5
fiTJZWIUhvdGSYwqr5J9De9E02GyZ58xEVExHHs5SceeKdAH6hO3epXDqto2yOZV3uM5tA7qE507leIy
MQIXz9EN2y9V5RCvfpRlbRA58J4bgbPUH3T0JAr0Edv3AqHeyruq2jbIJsiXB/IvFzRArkxPpqMc9k7E
yDzd33jPSmF2Lk7GaVveMyOAMSO5oNXHAI3dabR2SVXbBqEOGWcB2gawgviP85gYgZY+mbxPDQbvWSnA
sPj6Ze4zI7DyUY6NXasPJFmtbvmGqrYNQjE3MrvaBtTvIfXNQdNgE4IVn6ncCyx5uBq8Po2CVRAL9IH8
INXJLVVtG1RMgWajwVvd/rcOtOHNELNRVIHFlrDZ2NkZYT4fT0mlgKTuTupg8/o0E0WXcDEjYjYQYczW
cL4yMxMn7WH9Ge1qUdSI2D2h85tReqFFfOJw1Xk9GDVELLyMidko6sbAkYaTyGtkNlAhoCSjFTvS8kCU
xcu8vsyGOLSf70hTixPuTuZLFkyaBRgv1+5BpsRSLhOe4R0XjiCLFAeZjaKhXLFkwmYhQ63bU9SgNLWK
zEmGkYB7g6WN3/gbniG1lp17MMoDiiYTUHna5E8UpLM2Cz2DM+y8GQ4yIgw4yY1ekQG/xydjLOzzS2HS
myo8s9gsbPfHr9U1B36vqm2DSiVUzQYMCVJVH79dPmT85B2cnMlsM+f1ZSZKJlRBNq9yqlTtsxmAUE91
RsnRlyrP+Bx/ZZDs8Ee4x49mAtkqaoFfVdVVSLiGipuUvMZmAZWtg0PVJwWStE1raPPKhgFfCIdKUouq
rkLCfVtcGeU1NgO4goCCyFpCORgYV0/IlFI5HtaPNcvWyODweDOupSbzR+i+p7Dib56CKgGsM/pAdMDj
YSTCexeJ3aNcUNVUnHBZmVfaYSRyCyeIs2eAHNiv/6j0wP4Blvg02y/0SqNrlmbRraqpOKHEv1hxkVHA
OUt/rLLIoxzQB+oNO+PmXeaBLqxuaa3eIf1AVVNpogp8pntgmnulQS9Qe7yjTa6qNLgcrl/MscoJswrY
uxJTKG+bU9VTnlDSWqzAUg+QCkKaHPUnPEXoAc5tcPwwOH2Uy7tWQAdUeStVfzqAKvBFGh0UFFnWClgx
TyBjaonIvqk4K1QCL54MtaA7OY0S30OqWionlPliL8Ss4XVcLVAyhlDNzPNcVE+wUI9TnlYLUHiOQvua
r8PaBCnuFod1JxiqCdX0wshQTwiOrFoFJayqo3rCJRN20WZskcugEtQSqumFEaHe3Ys20lKjT/6uqo7a
yNIc/CuuPdV6XtIq01Bt2NzSEB4QHrbWeEMUd2Nwvc3iCPxZVYM+srrlRPHLhsWhJ1TTi1pDPYzRsTu7
TP2+iDp8/YSrn3aPdBZXQXlMeTAiVNOLWkK9zvjULWo4Xn/M5/uGOnxjCBGKVZAv0/9oWdfGyFBNL6oJ
9QJZ9v2EyxVHHNUSjZN/YhWk61KZnKE/NkncvSFTaqqrBWSALJCJJ+s6UKNNlXcDXyNRh2sOoTqT7okl
PzqBT9U1706SDuqTIQ3PG9hmAHda4Be6qCyQiScrgNpnjInOvN+pwzSXcB0CM7EvM1fiFO8E2Z2eI9vp
HgQrfOW8eQVKWlw+n2FWGLwhQynj159ZuI2xcM85zCR455TxFRiWUgLi+y347AlzbjMxVsDNG7QRePt0
il0GguHAzYJSfiBkhsHAnoetSR3W5tLd1Jd0xtGbWS7nJ2Iw3ck8c6qbe8JkZjbBTuD0pLTQFpYWV2+b
u0NkJ+0bN6rKOdDw8xy96VWbRz5tmsGolODiWF1yDB8fg/fOE1iLyN5FdssShUUI8YLxKJmeuXtdH7MI
X9dY+TDHFATgN/6GSn68k6fvBuMxss0nsQIj9IUPL/J4aQEZG7zKql1Qooa7KnoIH2iwueUlfGKumgQE
blyiXMIfmyA+KUtcvQmW8mpskYjFFWT1ifiNv+GZT86yd9Gmmo/5IDEgBBDbykuGRRhGE4udPVIUWRzc
9DY6n1gLIANSUsiqILrQHdtuBiEhaxPkRSo0PgF6S09QXyvYnnv3ojRdrvLipn+hzQhSM9vz1Mda88h7
1sz+QCMsK07PcACEM4wGtzJrumO8GYSb3pZm0Ust9kWcrbYqe2/CeTViZqIPVAzg0Bt94+jR6gp6Hrh1
NYtw3xan+zav8k9WZ9KeuCYER7DU736Ie98LLGqAW4SyNwC/2Ye46TMYD+p7EiE4vIxCH/SBG5R0y/DW
VfNhiK8CoUgHoaHFGaxHzV2DN/RSg0d5hxqhS1TJn38K3iKIy/gbnqG4Ee+iDaKHooU+D+khfQ3okUf+
D1WHWk/swkxBAAAAAElFTkSuQmCC
</value>
<comment>rell icon ( 80x80)</comment>
</data>
<data name="reel_small" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAABe5JREFUWEfd
mF1zE1UYxzOjd+r38AVH/TBcOIgX3sggQtJqgQIlpQn2vSSbwiabzW42zXvSNiUJjjJKodBC6oXjgKDA
ADpjWxTEGwWkx/Pf7gm7ydlkU+SGZ+Y3k9lznv95Nuftedb1wtqOfcH3uv3S8N4htXrwWGqpL5i5TLlp
cPngxNQS2tBnZ+/Eu4bb87WPeoZe8/ijg/snEstjavVBbG6RJE4ttwR9RtXqnwfGEsuegcjgTu/kq4bc
/2der/dlj0/y9wXTP0Vnz6/zAnGCNLuwTjWueXyRAWga8s9mu72BLXuHleVw8exj3qCbQSzMP+4ZVmvd
R8U3jWE2Z3v84of9ofxtrVrjDvQsQPNIKH+ryy99YAzXmXn8kT3Dcmm1Lli5RILxPBmX002DOQW+0IAW
ezYolVa7ByKfGsM6s939ke3D8txvTEQuLZCQqpK1Gyo5fVohkeKZ+gBOgQ98oRFSFF2TtQ1F59Yc/5NY
c5hW5ixR4VgqRh7f1Qi5lyBPftdIUNHq4k6BD3yhAS2ZakrF+Xp7fyh3yz0w+YYRBt+ws7Ah2JqLzi4Q
JRMj638kdGFGbVEhxzNf1cXbgb6XFlWLBjSVlKyPgT5apUawcVrubhwlbLdinUzSaf33rjU4xnE1ToWd
bJ6a3pengX8SSyde3ViTYn7+kXsgfMQIx2o4hHHOMeGAmiN3b/KFwfUfVCIky6ZA+AjJk+Rn2penAdZu
xEkgnq33p7fQVe5hjhuCHcLRmQUyV45xBc1Ek4plRzaCNvTh+ZoplRUc4rpPdOb8epc/ctQI66ntn5ha
ZsIBJUUervHFzKzQHRnUpi1BmUEb+vB8zfyzSjeemqr79Y5pNSOsDcPFj7sVjWr5IslMt39rxlReIbGT
S5bAgFJeIql8+1lgJGlfjA3fMbVyf9ch4W0jPExveJRd/MJUhdy52v6tGX/9qtF//OkaYuAZ2ng+PG5f
UYiQqui+sdIF0u2TvjDCc7n2jcQrTBh/deOx0o7sdJQE5Lh+XoKJaJz+ezK3rx0YUzBN894RtWyE53Id
HJ+6yBrklPO3BvduqyRXDJNHxkEO8DtbEPU2c992ROnYLA4a06IRnsvVF8hcYQ1arjPRwrRoCY6BZ8UZ
sel5KzA2iwNJrxEevUGE7HXW4Bckkp9RHaMm7YNQUyLXxw6/EKkH6BUy143wrAF2CtYcLzigpGNcHydY
AjRPcacEYhvT2RgcngnKFNfHCZYpNm+STpFmzpJYMmYJEr9lPRG4wPVxgmWT9JiOmc0wKqVIMnuC5It0
zVHSOZGMRTef2ALLMdN1NDLipELjEc59Tc6dab55LiwoRMw6T8nM4KC23McfHwq+g9KQ17kVeCklbX8t
xlL0GqSD8XxbMaqU7+/oDWwxwtuwA+OJGq+zHVoVG0Qjf6/YH+xIAo7Jmt6Xp2FHU7IAQ1GNupXnwAOZ
Sqs8j3HzCs0bE/YZTyPSzPknbr/YnG4hSURRzXNqJFz4llROOc94ylWF+nzD1WqkL5C8uv2zkVeMsKzm
8Yn9kcLZhzxHBlIiUVM6SijQFz4snbJDzJ951DUQ9hrhNBsKlp4htdaqUJ+QU+TBL/algB0badnTbKUR
FE2fDyqXtm7NvWSEwzd8jkDFzxOZpPnadxedT20j39cUqnGySRd4adm5yyu8boTR2ty+E9toMV0v3AFd
vDTr7SzH4wENaJm1h6TSqtsX2WYM78y6fOHdg9G5FSaCKQgliqRQotfamv3RYgdKzMqXKjmm5Ejc+ulj
xd3ppw9mbp+8DRW/eU1Ks+eIoGVIqqjqpUGrzYK2Oz+qet9QPE0rtnN1HbwwptXtE983htuc4XMEKn4U
1UwcYEdOpqskSAeW0zTZzKokWVB08BuZOdqwbht3bzg//xAbwvGaa2cbHzAj/SiqUbeaB+sEHMI459x+
6XDb3boZw2GOU37/uFZDaejknpVLi/rd2juWqMH3uXwC5hkuc1yPPcNKBbkbEszDQuYGwG88Q5uHlo+f
HAq9Zbi9aOZy/Qe4xYHxvg6NpAAAAABJRU5ErkJggg==
</value>
<comment>reel icon (40x40)</comment>
</data>
<data name="safty" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAAW9JREFUWEfl
2E1qwlAUBeBndygvC9CdCHHcuIkWqp27DK3toLiIOrRkkno1B6TcJO/e95fSA2fiUfgwPogx/yLNYvGw
K4rqOJt9UPfWPtJr7Zw3BNlPpy+nsvw+V1VD/SrL+s3a1+zIxpjJBfJ8j0NPy2V9KIpNNmQfDs2GdMGh
yZESHJoMqcGh0ZE+ODQaMgQODY6U4BBuu28wpPSbQ7jtd72RmsuKcBtXNVL7m0O4ratipM+BQLitr85I
HxwV4bahDiJ9cVSE21zaiQyBoyLc5loWSTebdA/HfUBShNskJQuZWp4xx/n8nXujtAi3Sft5MbW8PwAc
4yWm/zUt73ZIDtY+jeiQrNmTHALp004ckhM5iEPUyNWqqbfba9m9p844RIMkGCJBinGIFKkBqnGIBpkM
h8Q4OMFwSEhkcBwSAhkNh/ggo+MQDTIZDpEgk+MQF2Q2HNKHzI5DCDDaR8AIQeiml+6CqaN6iB43xvwA
iFk1KsvXeuAAAAAASUVORK5CYII=
</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 789 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 750 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 865 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 667 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 816 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 825 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 570 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 809 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 705 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 B

View File

@@ -0,0 +1,187 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{9264CD2E-7CF8-4237-A69F-DCDA984E0613}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>UIControl</RootNamespace>
<AssemblyName>UIControl</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CItem.cs" />
<Compile Include="CMenu.cs" />
<Compile Include="Common.cs" />
<Compile Include="CPicker.cs" />
<Compile Include="CIcon.cs" />
<Compile Include="CPort.cs" />
<Compile Include="CUnPortData.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="CUnPortInfo.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="EnumStruct.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Events.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Loader.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Loader.Designer.cs">
<DependentUpon>Loader.cs</DependentUpon>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Unloader.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Unloader.Designer.cs">
<DependentUpon>Unloader.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Utility.cs" />
<Service Include="{94E38DFF-614B-4cbd-B67C-F211BB35CE8B}" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-code-30.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-erase-30.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-pause-button-30.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-settings-30.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-start-30.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-assembly-machine-40.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-rounded-square-80.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-rounded-square-80_blue.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-rounded-square-80_red.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-high-priority-40.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-wind-40.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-emergency-stop-button-40.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-deployment-40.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-barcode-reader-40.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\reel_big.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\reel_small.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\bg_red.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\air.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\bcd.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\bg_blue.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\emg.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\erase.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8_pause_button_30.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\mot.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\plc.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\safty.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-automatic-gearbox-warning-80.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-hazard-warning-flasher-80.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-info-80.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-help-80.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-bug-80.png" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\icons8-bug-40.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,38 @@
namespace UIControl
{
partial class Unloader
{
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
/// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
}
#endregion
}
}

View File

@@ -0,0 +1,343 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace UIControl
{
public partial class Unloader : UserControl
{
public Boolean bRemakeRect = true;
public CPort[] ports;
public Font Font_Alert { get; set; }
public Font Font_SIDLIST { get; set; }
public Font Font_Sign { get; set; }
private Color _portback = Color.FromArgb(32, 32, 32);
public Color arPortBack { get { return _portback; } set { _portback = value; this.Invalidate(); } }
private Color _titleback = Color.DeepSkyBlue;
public Color arTitleBack { get { return _titleback; } set { _titleback = value; this.Invalidate(); } }
public Boolean arStop { get; set; }
public Boolean arBusy { get; set; }
public Boolean debugMode { get; set; }
double port_width, port_height, space_width;
public Unloader()
{
InitializeComponent();
// Set Optimized Double Buffer to reduce flickering
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.SetStyle(ControlStyles.ContainerControl, false);
this.SetStyle(ControlStyles.Selectable, true);
// Redraw when resized
this.SetStyle(ControlStyles.ResizeRedraw, true);
Font_SIDLIST = new Font("Consolas", 30, FontStyle.Bold);
this.Padding = new Padding(5, 5, 5, 5);
this.Font_Sign = new Font("Consolas", 15, FontStyle.Bold);
this.Font_Alert = new Font("Consolas", 30, FontStyle.Bold);
}
protected override void OnResize(EventArgs e)
{
bRemakeRect = true;
Invalidate();
// base.OnResize(e);
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (ports == null || ports.Length == 0)
{
this.ports = new CPort[]
{
new CPort(){ cartSize=7, cartState = 1, Mode="USER", portName="#11", portNo=1 },
new CPort(){ cartSize=7, cartState = 1, Mode="USER", portName="#21", portNo=2 },
new CPort(){ cartSize=13, cartState = 0, Mode="USER", portName="#12", portNo=3 },
new CPort(){ cartSize=13, cartState = 2, Mode="USER", portName="#22", portNo=4 },
};
this.ports[0].reelSID.Add(new CPortData("012345678",30,100,"릴#6"));
//e.Graphics.DrawString("PORT가 설정되지 않았습니다", this.Font, Brushes.White, DisplayRectangle,
// new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
//return;
}
//Set Optimized Double Buffer to reduce flickering
e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
e.Graphics.InterpolationMode = InterpolationMode.High;
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
//e.Graphics.DrawString(DisplayRectangle.ToString(), this.Font, Brushes.White, 1, 1);
//포트영역생성
if (bRemakeRect)
{
space_width = 10;
int row = 2;
int col = 2;
port_width = (DisplayRectangle.Width - (col - 1) * space_width) / 2f;
port_height = (DisplayRectangle.Height - (row - 1) * space_width) / 2f;
//space_width = (DisplayRectangle.Width - (port_width * 2.0)) / 3.0;
//space_height = (DisplayRectangle.Height - (port_height * 2.0)) / 3.0;
var signSize = e.Graphics.MeasureString("13\"", this.Font_Sign);
var titlesize = e.Graphics.MeasureString("1.01234567890", this.Font);
var idx = 0;
for (int c = 0; c < col; c++)
{
for (int r = 0; r < row; r++)
{
ports[idx].rect = new Rectangle(
(int)(DisplayRectangle.Left + (c * space_width) + (c * port_width)),
(int)(DisplayRectangle.Top + (r * space_width) + (r * port_height)),
(int)port_width,
(int)port_height);
ports[idx].rect_signL = new Rectangle(
(int)(DisplayRectangle.Left + (c * space_width) + (c * port_width)),
(int)(DisplayRectangle.Top + (r * space_width) + (r * port_height)),
(int)(signSize.Width * 1.05f),
(int)(signSize.Height * 1.05f));
ports[idx].rect_signR = new Rectangle(
(int)(ports[idx].rect.Right - ports[idx].rect_signL.Width),
ports[idx].rect_signL.Top,
ports[idx].rect_signL.Width,
ports[idx].rect_signL.Height);
ports[idx].rect_title = new Rectangle(
(int)(ports[idx].rect.Left),
(int)(ports[idx].rect.Top), //Bottom - (titlesize.Height * 1.2f)),
ports[idx].rect.Width,
(int)(signSize.Height * 1.05f));
ports[idx].rect_count = new Rectangle(
ports[idx].rect.Left + 2,
ports[idx].rect_title.Bottom + 2,
ports[idx].rect.Width - 4,
ports[idx].rect.Height - ports[idx].rect_title.Height - 4
);
idx += 1;
}
}
bRemakeRect = false;
}
//포트그리기 (총 4개의 포트가 있다)
var sfCenter = new StringFormat
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center,
};
var sfLeft = new StringFormat
{
Alignment = StringAlignment.Near,
LineAlignment = StringAlignment.Center,
};
foreach (var port in ports)
{
//배경영역 칠하기
e.Graphics.FillRectangle(new SolidBrush(this._portback), port.rect);
if (port.Mode == "USER")
e.Graphics.FillRectangle(new SolidBrush(Color.SkyBlue), port.rect_title);
else
e.Graphics.FillRectangle(new SolidBrush(this._titleback), port.rect_title);
//글자영역 칠하기
if(port.cartSize ==13)
e.Graphics.FillRectangle(Brushes.Gold, port.rect_signL);
else
e.Graphics.FillRectangle(Brushes.WhiteSmoke, port.rect_signL);
e.Graphics.FillRectangle(Brushes.WhiteSmoke, port.rect_signR);
var portSize = port.cartSize == 0 ? "--" : port.cartSize + "\"";
e.Graphics.DrawString(portSize, this.Font_Sign, Brushes.Black, port.rect_signL, sfCenter);
//sign R 에는 카운트를 넣는다
//var portStat = port.cartState == 0 ? "STP" : (port.cartState == 1 ? "RDY" : "MAX");
var portStatBG = port.cartState == 0 ? Color.Gray : (port.cartState == 1 ? Color.Green : Color.Tomato);
e.Graphics.DrawString(port.reelCount.ToString(), this.Font_Sign, new SolidBrush(portStatBG), port.rect_signR, sfCenter);
//타이틀 글자
var title = "[ " + port.portNo.ToString() + " ]";
if (string.IsNullOrEmpty(port.portName) == false && port.portName != port.portNo.ToString())
{
title = "[" + port.portNo.ToString() + ":" + port.portName + "]";
}
//if (port.Mode == "DISABLE") title += " (사용안함)";
//else if (port.Mode == "EXIT") title += " (배출전용)";
//if (port.Mode == "USER") title = "* " + port.portNo.ToString() + " *";
//else if (port.Mode == "DISABLE") title = "# " + port.portNo.ToString() + " #";
//else
//{
//if (port.reelSID.Count == 0) title += " (할당안됨)";
//else if (port.reelSID.Count == 1) title += " " + port.reelSID[0];
//else title += " " + port.reelSID[0] + "(" + (port.reelSID.Count - 1).ToString() + ")";
//}
if (string.IsNullOrEmpty(title) == false)
{
e.Graphics.DrawString(title, Font_Sign, new SolidBrush(Color.Black), port.rect_title, sfCenter);
}
//SID목록 가져온다
//port.reelSID.Clear();
//port.reelSID.AddRange(new CPortData[] {
// new CPortData("0123456789A",1,10),
// new CPortData("0123456789B",2,10),
// new CPortData("0123456789C",3,10),
// new CPortData("0123456789D",4,10)
//});
Color cntColor = ForeColor;
string SidList = string.Empty;
if (port.Mode == "USER") SidList = "";// cntColor = Color.FromArgb(50, 50, 50);
foreach (var sid in port.reelSID)
{
if (sid.Active == false) continue; //비활성화된것은 표시하지 않는다
if (string.IsNullOrEmpty(SidList) == false) SidList += "\n";
SidList += string.Format(" {0} ({1}/{2})→{3}", sid.sid, sid.qty, sid.kpc,sid.towername);
}
e.Graphics.DrawString(SidList,
Font_SIDLIST,
new SolidBrush(cntColor),
port.rect_count, new StringFormat { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Near });
//e.Graphics.DrawRect(port.rect_count, Color.DarkBlue, 5);
///테두리
e.Graphics.DrawRectangle(Pens.Gray, port.rect);
using (Font fsta = new Font("맑은 고딕", 25f, FontStyle.Regular))
{
//장비상태는 추가로 표시해준다.
//STOP혹은 MAX라면 별도 표기한다. //미사용도 마찬가지
if (port.Mode == "DISABLE")
{
using (var sb = new SolidBrush(Color.FromArgb(220, Color.White)))
{
e.Graphics.FillRectangle(sb, port.rect_count);
}
if (string.IsNullOrEmpty(port.portName) == false && port.portName != port.portNo.ToString())
e.Graphics.DrawString(title + "\nDISABLE", fsta, new SolidBrush(Color.Black), port.rect_count, sfCenter);
else e.Graphics.DrawString(title + "\nDISABLE", fsta, new SolidBrush(Color.Black), port.rect_count, sfCenter);
}
else if (port.cartState == 0)
{
//stop
using (var sb = new SolidBrush(Color.FromArgb(220, Color.Yellow)))
{
e.Graphics.FillRectangle(sb, port.rect_count);
}
if (string.IsNullOrEmpty(port.portName) == false && port.portName != port.portNo.ToString())
e.Graphics.DrawString(title + "\nSTOP", fsta, new SolidBrush(Color.Black), port.rect_count, sfCenter);
else
e.Graphics.DrawString(title + "\nSTOP", fsta, new SolidBrush(Color.Black), port.rect_count, sfCenter);
}
else if (port.cartState == 2)
{
//max
using (var sb = new SolidBrush(Color.FromArgb(220, Color.Red)))
{
e.Graphics.FillRectangle(sb, port.rect_count);
}
if (string.IsNullOrEmpty(port.portName) == false && port.portName != port.portNo.ToString())
e.Graphics.DrawString(title + "\nFULL", fsta, new SolidBrush(Color.Black), port.rect_count, sfCenter);
else
e.Graphics.DrawString(title + "\nFULL", fsta, new SolidBrush(Color.White), port.rect_count, sfCenter);
}
}
//var portStat = port.cartState == 0 ? "STP" : (port.cartState == 1 ? "RDY" : "MAX");
//var portStatBG = port.cartState == 0 ? Color.Gray : (port.cartState == 1 ? Color.Green : Color.Tomato);
//e.Graphics.DrawString(portStat, this.Font_Sign, new SolidBrush(portStatBG), port.rect_signR, sfCenter);
}
if (this.arStop)
{
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(240, Color.Black)), DisplayRectangle);
e.Graphics.DrawString("STOP", this.Font_Alert, Brushes.Orange, DisplayRectangle, sfCenter);
}
else if (this.arBusy)
{
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(240, Color.Black)), DisplayRectangle);
e.Graphics.DrawString("BUSY", this.Font_Alert, Brushes.Aqua, DisplayRectangle, sfCenter);
}
if (debugMode)
{
var sb = new System.Text.StringBuilder();
sb.AppendLine("unloader ctonrol");
sb.AppendLine(string.Format("port size {0}x{1}", port_width, port_height));
sb.AppendLine(string.Format("space size {0}x{1}", space_width, space_width));
sb.AppendLine(string.Format("display rect {0}", DisplayRectangle));
e.Graphics.DrawString(sb.ToString(), this.Font, Brushes.White, 10, 10);
}
//e.Graphics.DrawRectangle(Pens.White, DisplayRectangle);
sfCenter.Dispose();
sfLeft.Dispose();
}
public class ClickEventArgs : EventArgs
{
public int idx { get; set; }
public ClickEventArgs(int idx_)
{
this.idx = idx_;
}
}
public event EventHandler<ClickEventArgs> ItemClick;
protected override void OnMouseClick(MouseEventArgs e)
{
base.OnMouseClick(e);
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
var item = this.ports.Where(t => t.rect.Contains(e.Location)).FirstOrDefault();
if (item != null)
{
//이 영역을 클릭한것으로 한다
if (ItemClick != null)
ItemClick(this, new ClickEventArgs(item.idx));
}
}
}
}
}

View File

@@ -0,0 +1,168 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
namespace UIControl
{
public static class Utility
{
public static Rectangle OffsetRect(this Rectangle rect, int x,int y)
{
var retval = new Rectangle(rect.X + x, rect.Y + y, rect.Width, rect.Height);
return retval;
}
public static void DrawString(this Graphics g,
string msg,
Font font,
Color fcolor,
RectangleF rect,
ContentAlignment textalign = ContentAlignment.MiddleCenter,
Color? ShadowColor = null,
Brush BackBrush = null,
Pen BorderPen = null)
{
DrawString(g, msg, font, fcolor, rect.toRect(), textalign, ShadowColor, BackBrush, BorderPen);
}
public static void DrawRectangle(this Graphics g, Pen pen, RectangleF rect)
{
g.DrawRectangle(pen, rect.Left, rect.Top, rect.Width, rect.Height);
}
public static void DrawString(this Graphics g,
string msg,
Font font,
Color fcolor,
Rectangle rect,
ContentAlignment textalign = ContentAlignment.MiddleCenter,
Color? ShadowColor = null,
Brush BackBrush = null,
Pen BorderPen = null)
{
//배경색 지정되어 있다면
if (BackBrush != null) g.FillRectangle(BackBrush, rect);
//테두리 지정되어 있다면
if (BorderPen != null) g.DrawRectangle(BorderPen, rect);
//그립자가 지정되있다면 별도 처리를 한다
if (ShadowColor != null && ShadowColor != Color.Transparent)
{
SizeF fsize;
var drawPT = GetTextPosition(g, msg, font, rect, textalign, out fsize);
//그림자를 먼저 그린다
g.DrawString(msg, font, new SolidBrush((Color)ShadowColor), drawPT.X + 1, drawPT.Y + 1);
g.DrawString(msg, font, new SolidBrush(fcolor), drawPT.X, drawPT.Y);
}
else
{
var sf = new StringFormat();
if (textalign == ContentAlignment.BottomCenter) { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Near; }
else if (textalign == ContentAlignment.BottomLeft) { sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Near; }
else if (textalign == ContentAlignment.BottomRight) { sf.Alignment = StringAlignment.Far; sf.LineAlignment = StringAlignment.Near; }
else if (textalign == ContentAlignment.MiddleCenter) { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; }
else if (textalign == ContentAlignment.MiddleLeft) { sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Center; }
else if (textalign == ContentAlignment.MiddleRight) { sf.Alignment = StringAlignment.Far; sf.LineAlignment = StringAlignment.Center; }
else if (textalign == ContentAlignment.TopCenter) { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Far; }
else if (textalign == ContentAlignment.TopLeft) { sf.Alignment = StringAlignment.Near; sf.LineAlignment = StringAlignment.Far; }
else if (textalign == ContentAlignment.TopRight) { sf.Alignment = StringAlignment.Far; sf.LineAlignment = StringAlignment.Far; }
else { sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; }
g.DrawString(msg, font, new SolidBrush(fcolor), rect, sf);
sf.Dispose();
}
}
public static void DrawRect(this Graphics g, Rectangle rect, Color color, Color shadowColor, int pensize = 1)
{
//우측하단에 선을 그려준다. 일단은 검은색
g.DrawLine(new Pen(shadowColor, pensize), rect.Left + 1, rect.Bottom + 1, rect.Right - 1, rect.Bottom + 1);
g.DrawLine(new Pen(shadowColor, pensize), rect.Right + 1, rect.Top + 1, rect.Right + 1, rect.Bottom - 1);
DrawRect(g, rect, color, pensize);
}
public static void DrawRect(this Graphics g, Rectangle rect, Color color, int pensize = 1)
{
g.DrawRectangle(new Pen(color, pensize), rect);
}
public static void DrawRect(this Graphics g, RectangleF rect, Color color, int pensize = 1, Boolean shadow = false)
{
g.DrawRectangle(new Pen(color, pensize), rect.Left, rect.Top, rect.Width, rect.Height);
}
/// <summary>
/// Rectangle 개체를 반환 합니다. 단순 float -> int 로 값을 변환 합니다.
/// </summary>
/// <param name="rect"></param>
/// <returns></returns>
public static Rectangle toRect(this RectangleF rect)
{
return new Rectangle((int)rect.Left, (int)rect.Top, (int)rect.Width, (int)rect.Height); ;
}
static PointF GetTextPosition(Graphics g, string data, Font f, Rectangle rect, ContentAlignment align, System.Windows.Forms.Padding Padding, out SizeF fsize)
{
float x = 0;
float y = 0;
fsize = g.MeasureString(data, f);
if (align == ContentAlignment.MiddleCenter)
{
x = (rect.Width - fsize.Width) / 2 + Padding.Left - Padding.Right;
y = (rect.Height - fsize.Height) / 2 + Padding.Top - Padding.Bottom;
}
else if (align == ContentAlignment.MiddleLeft)
{
x = Padding.Left;
y = (rect.Height - fsize.Height) / 2;
}
else if (align == ContentAlignment.MiddleRight)
{
x = rect.Width - fsize.Width - Padding.Right;
y = (rect.Height - fsize.Height) / 2;
}
else if (align == ContentAlignment.BottomLeft)
{
x = Padding.Left;
y = rect.Height - fsize.Height - Padding.Bottom;
}
else if (align == ContentAlignment.BottomRight)
{
x = rect.Width - fsize.Width - Padding.Right;
y = rect.Height - fsize.Height - Padding.Bottom;
}
else if (align == ContentAlignment.BottomCenter)
{
x = (rect.Width - fsize.Width) / 2;
y = rect.Height - fsize.Height - Padding.Bottom;
}
else if (align == ContentAlignment.TopLeft)
{
x = Padding.Left;
y = Padding.Top;
}
else if (align == ContentAlignment.TopRight)
{
x = rect.Width - fsize.Width - Padding.Right;
y = Padding.Top;
}
else if (align == ContentAlignment.TopCenter)
{
x = (rect.Width - fsize.Width) / 2;
y = Padding.Top;
}
return new PointF(x + rect.Left, y + rect.Top);
}
static PointF GetTextPosition(Graphics g, string data, Font f, Rectangle rect, ContentAlignment align, out SizeF fsize)
{
return GetTextPosition(g, data, f, rect, align, new System.Windows.Forms.Padding(0), out fsize);
}
}
}

BIN
QRValidation/DLL/AMM.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
QRValidation/DLL/libxl.dll Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,118 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Project.Class
{
public class CAmkorSTDBarcode
{
public string Message { get; private set; }
public Boolean isValid = false;
public string SID { get; private set; }
public string VLOT { get; private set; }
public string RID { get; private set; }
public string MFGDate { get; set; }
public string SUPPLY { get; set; }
public int QTY { get; set; }
public string RAW { get; set; }
public Boolean DateError { get; set; }
public CAmkorSTDBarcode()
{
isValid = false;
}
public CAmkorSTDBarcode(string raw)
{
SetBarcode(raw);
}
public void SetBarcodeDemo()
{
SetBarcode("101410653;AG64B3W;SAMSUNG;20000;AG64B3W0031;19000101;");
}
/// <summary>
/// Returns barcode value with current property values.
/// To check the original barcode value, check the RAW property
/// </summary>
/// <returns></returns>
public string GetBarcode()
{
return string.Format("{0};{1};{2};{3};{4};{5};",
SID, VLOT, SUPPLY, QTY, RID, MFGDate);
}
public void SetBarcode(string raw)
{
isValid = false;
this.Message = string.Empty;
this.RAW = raw;
var buf = raw.Split(';');
if (buf.Length < 5)
{
isValid = false;
Message = "buffer len error : " + raw;
return;
}
decimal vSID = 0;
double vQty = 0;
if (decimal.TryParse(buf[0], out vSID) == false)
{
Message = "SID value is not a number. Amkor STD barcode consists of numbers";
return;
}
this.SID = vSID.ToString();
this.VLOT = buf[1];
this.SUPPLY = buf[2];
if (double.TryParse(buf[3], out vQty) == false) return;
this.QTY = (int)vQty;
this.RID = buf[4];
//DateTime vMFGDate;
MFGDate = buf[5].Trim();
DateError = false;
//buf[5] = buf[5].Replace("-", ""); //날짜표식제거
//if (this.SUPPLY.ToUpper() == "SAMSUNG" && buf[5].Length == 4) //삼성은 년도와 주차로 입력한다 210202
//{
// var y = "20" + buf[5].Substring(0, 2);
// MFGDate = new DateTime(int.Parse(y), 1, 1).ToString("yyyyMMdd"); //주차계산무시한다
// DateError = true;
//}
//else if (this.SUPPLY.ToUpper() == "WT" && buf[5].Length == 4) //삼성은 년도와 주차로 입력한다 210202
//{
// var y = "20" + buf[5].Substring(0, 2);
// MFGDate = new DateTime(int.Parse(y), 1, 1).ToString("yyyyMMdd"); //주차계산무시한다
// DateError = true;
//}
//else if (buf[5].Length == 8) //일반적인날짜데이터이며 YYYYMMDD 형태이다
//{
// buf[5] = buf[5].Substring(0, 4) + "-" + buf[5].Substring(4, 2) + "-" + buf[5].Substring(6, 2);
// if (DateTime.TryParse(buf[5], out vMFGDate) == false) return;
// MFGDate = vMFGDate.ToString("yyyyMMdd");
// DateError = false;
//}
////else if (buf[5].Equals("N/A")) //날짜값에 NA
////{
//// MFGDate = "N/A";
//// DateError = false;
////}
////else if (buf[5].Equals("NA")) //날짜값에 NA
////{
//// MFGDate = "NA";
//// DateError = false;
////}
//else
//{
// MFGDate = buf[5].Trim();
// Message = "Date value Length Error : " + buf[5];
// DateError = false;
// //return;
//}
isValid = true;
}
}
}

View File

@@ -0,0 +1,99 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Project
{
public class CInterLock
{
UInt64 offsetValue = 0x01;
public object Tag { get; set; }
public string errorMessage;
protected UInt64 _value;
public UInt64 Value { get { return _value; } set { _value = value; } }
public event EventHandler<ValueEventArgs> ValueChanged;
public class ValueEventArgs : EventArgs
{
private int _arridx;
private Boolean _oldvalue;
private Boolean _newvalue;
private string _reason;
public int ArrIDX { get { return _arridx; } }
public Boolean OldValue { get { return _oldvalue; } }
public Boolean NewValue { get { return _newvalue; } }
public string Reason { get { return _reason; } }
public Boolean NewOn { get; set; }
public Boolean NewOff { get; set; }
public ValueEventArgs(int arridx, Boolean oldvalue, Boolean newvalue, string reason_, Boolean newon_, Boolean newof_)
{
_arridx = arridx;
_oldvalue = oldvalue;
_newvalue = newvalue;
_reason = reason_;
this.NewOn = newon_;
this.NewOff = newon_;
}
}
public CInterLock(object tag = null)
{
errorMessage = string.Empty;
_value = 0;
this.Tag = tag;
}
public Boolean get(int idx)
{
if (idx >= 64)
throw new Exception("flag는 최대 64개를 지원 합니다");
var offset = (UInt64)(offsetValue << idx);
return (_value & offset) != 0;
}
public void set(int idx, Boolean value, string reason)
{
if (idx >= 64)
throw new Exception("flag는 최대 64개를 지원 합니다");
var oldvalue = get(idx);
var raw_old = _value;
if (value)
{
var offset = (UInt64)(offsetValue << idx);
_value = _value | offset;
}
else
{
var shiftvalue = (UInt64)(offsetValue << idx);
UInt64 offset = ~shiftvalue;
_value = _value & offset;
}
if (oldvalue != value)
{
Boolean NewOn = (raw_old == 0 && _value > 0);
Boolean NewOf = (raw_old != 0 && _value == 0);
if (ValueChanged != null)
ValueChanged(this, new ValueEventArgs(idx, oldvalue, value, reason, NewOn, NewOf));
}
else
{
//Pub.log.Add(" >> SKIP");
//if (string.IsNullOrEmpty(reason) == false)
//Pub.log.Add("#### FLAG변경(값이 같아서 처리 안함) : idx=" + idx.ToString() + ",값:" + value.ToString() + ",사유:" + reason);
}
}
public void Toggle(int idx, string reason = "")
{
var curValue = get(idx);
set(idx, !curValue, reason);
}
}
}

View File

@@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Project
{
public enum eFlag
{
CHECKLICENSE=0,
CHECKCAMERAL,
CHECKCAMERAR,
CAMERAINIT,
}
public class Flag : CInterLock
{
public Boolean IsInit; //H/W설정이 안된경우에만 FALSE로 한다
public int PortCount;
public string[] Name;
public Flag()
{
this.Tag = "MAIN";
PortCount = 64;
IsInit = true;
errorMessage = string.Empty;
_value = 0;
Name = new string[PortCount];
for (int i = 0; i < Name.Length; i++)
{
Name[i] = string.Empty;
}
}
public bool get(eFlag flag)
{
return get((int)flag);
}
public void set(eFlag flag, bool value, string reason)
{
var idx = (int)flag;
set(idx, value, reason);
}
public void Toggle(eFlag flag)
{
Toggle((int)flag);
}
}
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Project.Class
{
public class WebSocket : WatsonWebsocket.WatsonWsServer
{
public eTarget Target { get; set; }
public int TargetIdx { get; set; }
public WebSocket(string host, int port) : base(host, port) { }
}
}

View File

@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace Project
{
public static class Win32API
{
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll")]
private static extern int SetActiveWindow(int hwnd);
}
}

View File

@@ -0,0 +1,648 @@
namespace Project.Dialog
{
partial class fEmulator
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
arDev.AzinAxt.ColorListItem colorListItem5 = new arDev.AzinAxt.ColorListItem();
arDev.AzinAxt.ColorListItem colorListItem6 = new arDev.AzinAxt.ColorListItem();
arDev.AzinAxt.ColorListItem colorListItem7 = new arDev.AzinAxt.ColorListItem();
arDev.AzinAxt.ColorListItem colorListItem8 = new arDev.AzinAxt.ColorListItem();
this.panel1 = new System.Windows.Forms.Panel();
this.jogController5 = new arDev.AzinAxt.JogController();
this.jogController4 = new arDev.AzinAxt.JogController();
this.jogController3 = new arDev.AzinAxt.JogController();
this.jogController2 = new arDev.AzinAxt.JogController();
this.jogController1 = new arDev.AzinAxt.JogController();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.panel2 = new System.Windows.Forms.Panel();
this.tblDI = new arDev.AzinAxt.GridView();
this.lbTitle1 = new System.Windows.Forms.Label();
this.panel3 = new System.Windows.Forms.Panel();
this.tblDO = new arDev.AzinAxt.GridView();
this.lbtitle2 = new System.Windows.Forms.Label();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.button1 = new System.Windows.Forms.Button();
this.ctlSensor1 = new UIControl.CtlSensor();
this.m4 = new UIControl.CtlMotor();
this.m3 = new UIControl.CtlMotor();
this.m2 = new UIControl.CtlMotor();
this.m1 = new UIControl.CtlMotor();
this.mcv = new UIControl.CtlMotor();
this.panel1.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
this.panel2.SuspendLayout();
this.panel3.SuspendLayout();
this.SuspendLayout();
//
// panel1
//
this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.panel1.Controls.Add(this.jogController5);
this.panel1.Controls.Add(this.jogController4);
this.panel1.Controls.Add(this.jogController3);
this.panel1.Controls.Add(this.jogController2);
this.panel1.Controls.Add(this.jogController1);
this.panel1.Dock = System.Windows.Forms.DockStyle.Right;
this.panel1.Location = new System.Drawing.Point(574, 0);
this.panel1.Name = "panel1";
this.panel1.Padding = new System.Windows.Forms.Padding(5);
this.panel1.Size = new System.Drawing.Size(226, 414);
this.panel1.TabIndex = 8;
//
// jogController5
//
this.jogController5.arAutoUpdate = false;
this.jogController5.arAxis = 4;
this.jogController5.arAxisName = "Z-R";
this.jogController5.arBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.jogController5.arBottomSensorCommand = new string[] {
"INP",
"ORG",
"LIM+",
"HOME",
"ALM",
"SVON",
"LIM-",
"POS"};
this.jogController5.arBottomSensorFont = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold);
this.jogController5.arBottomSensorHeight = 30;
this.jogController5.arBottomSensorListCount = new System.Drawing.Point(4, 2);
this.jogController5.arBottomSensorTitle = new string[] {
"INP",
"ORG",
"LIM+",
"HOME",
"ALM",
"SVON",
"LIM-",
"--"};
this.jogController5.arCellBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.jogController5.ardAct = 200D;
this.jogController5.arDebugMode = false;
this.jogController5.arIsAlm = false;
this.jogController5.arIsHSet = true;
this.jogController5.arIsInit = false;
this.jogController5.arIsInp = false;
this.jogController5.arIsLimM = false;
this.jogController5.arIsLimP = false;
this.jogController5.arIsOrg = false;
this.jogController5.arIsSvON = true;
this.jogController5.arMaxLength = 400;
this.jogController5.arMinLength = -10;
this.jogController5.arShowJogButton = true;
this.jogController5.arShowPositionBar = true;
this.jogController5.arShowSensor = true;
this.jogController5.arShowTitleBar = true;
this.jogController5.arTitlebarHeight = ((ushort)(20));
this.jogController5.arUpdateInterval = ((ushort)(100));
this.jogController5.arUsage = true;
this.jogController5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.jogController5.Dock = System.Windows.Forms.DockStyle.Top;
this.jogController5.Font = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.jogController5.Location = new System.Drawing.Point(5, 293);
this.jogController5.Name = "jogController5";
this.jogController5.Size = new System.Drawing.Size(216, 72);
this.jogController5.TabIndex = 11;
this.jogController5.Text = "156";
//
// jogController4
//
this.jogController4.arAutoUpdate = false;
this.jogController4.arAxis = 3;
this.jogController4.arAxisName = "Z-F";
this.jogController4.arBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.jogController4.arBottomSensorCommand = new string[] {
"INP",
"ORG",
"LIM+",
"HOME",
"ALM",
"SVON",
"LIM-",
"POS"};
this.jogController4.arBottomSensorFont = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold);
this.jogController4.arBottomSensorHeight = 30;
this.jogController4.arBottomSensorListCount = new System.Drawing.Point(4, 2);
this.jogController4.arBottomSensorTitle = new string[] {
"INP",
"ORG",
"LIM+",
"HOME",
"ALM",
"SVON",
"LIM-",
"--"};
this.jogController4.arCellBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.jogController4.ardAct = 200D;
this.jogController4.arDebugMode = false;
this.jogController4.arIsAlm = false;
this.jogController4.arIsHSet = true;
this.jogController4.arIsInit = false;
this.jogController4.arIsInp = false;
this.jogController4.arIsLimM = false;
this.jogController4.arIsLimP = false;
this.jogController4.arIsOrg = false;
this.jogController4.arIsSvON = true;
this.jogController4.arMaxLength = 400;
this.jogController4.arMinLength = -10;
this.jogController4.arShowJogButton = true;
this.jogController4.arShowPositionBar = true;
this.jogController4.arShowSensor = true;
this.jogController4.arShowTitleBar = true;
this.jogController4.arTitlebarHeight = ((ushort)(20));
this.jogController4.arUpdateInterval = ((ushort)(100));
this.jogController4.arUsage = true;
this.jogController4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.jogController4.Dock = System.Windows.Forms.DockStyle.Top;
this.jogController4.Font = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.jogController4.Location = new System.Drawing.Point(5, 221);
this.jogController4.Name = "jogController4";
this.jogController4.Size = new System.Drawing.Size(216, 72);
this.jogController4.TabIndex = 10;
this.jogController4.Text = "156";
//
// jogController3
//
this.jogController3.arAutoUpdate = false;
this.jogController3.arAxis = 2;
this.jogController3.arAxisName = "Y-P";
this.jogController3.arBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.jogController3.arBottomSensorCommand = new string[] {
"INP",
"ORG",
"LIM+",
"HOME",
"ALM",
"SVON",
"LIM-",
"POS"};
this.jogController3.arBottomSensorFont = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold);
this.jogController3.arBottomSensorHeight = 30;
this.jogController3.arBottomSensorListCount = new System.Drawing.Point(4, 2);
this.jogController3.arBottomSensorTitle = new string[] {
"INP",
"ORG",
"LIM+",
"HOME",
"ALM",
"SVON",
"LIM-",
"--"};
this.jogController3.arCellBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.jogController3.ardAct = 200D;
this.jogController3.arDebugMode = false;
this.jogController3.arIsAlm = false;
this.jogController3.arIsHSet = true;
this.jogController3.arIsInit = false;
this.jogController3.arIsInp = false;
this.jogController3.arIsLimM = false;
this.jogController3.arIsLimP = false;
this.jogController3.arIsOrg = false;
this.jogController3.arIsSvON = true;
this.jogController3.arMaxLength = 400;
this.jogController3.arMinLength = -10;
this.jogController3.arShowJogButton = true;
this.jogController3.arShowPositionBar = true;
this.jogController3.arShowSensor = true;
this.jogController3.arShowTitleBar = true;
this.jogController3.arTitlebarHeight = ((ushort)(20));
this.jogController3.arUpdateInterval = ((ushort)(100));
this.jogController3.arUsage = true;
this.jogController3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.jogController3.Dock = System.Windows.Forms.DockStyle.Top;
this.jogController3.Font = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.jogController3.Location = new System.Drawing.Point(5, 149);
this.jogController3.Name = "jogController3";
this.jogController3.Size = new System.Drawing.Size(216, 72);
this.jogController3.TabIndex = 9;
this.jogController3.Text = "156";
//
// jogController2
//
this.jogController2.arAutoUpdate = false;
this.jogController2.arAxis = 1;
this.jogController2.arAxisName = "X-R";
this.jogController2.arBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.jogController2.arBottomSensorCommand = new string[] {
"INP",
"ORG",
"LIM+",
"HOME",
"ALM",
"SVON",
"LIM-",
"POS"};
this.jogController2.arBottomSensorFont = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold);
this.jogController2.arBottomSensorHeight = 30;
this.jogController2.arBottomSensorListCount = new System.Drawing.Point(4, 2);
this.jogController2.arBottomSensorTitle = new string[] {
"INP",
"ORG",
"LIM+",
"HOME",
"ALM",
"SVON",
"LIM-",
"--"};
this.jogController2.arCellBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.jogController2.ardAct = 200D;
this.jogController2.arDebugMode = false;
this.jogController2.arIsAlm = false;
this.jogController2.arIsHSet = true;
this.jogController2.arIsInit = false;
this.jogController2.arIsInp = false;
this.jogController2.arIsLimM = false;
this.jogController2.arIsLimP = false;
this.jogController2.arIsOrg = false;
this.jogController2.arIsSvON = true;
this.jogController2.arMaxLength = 400;
this.jogController2.arMinLength = -10;
this.jogController2.arShowJogButton = true;
this.jogController2.arShowPositionBar = true;
this.jogController2.arShowSensor = true;
this.jogController2.arShowTitleBar = true;
this.jogController2.arTitlebarHeight = ((ushort)(20));
this.jogController2.arUpdateInterval = ((ushort)(100));
this.jogController2.arUsage = true;
this.jogController2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.jogController2.Dock = System.Windows.Forms.DockStyle.Top;
this.jogController2.Font = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.jogController2.Location = new System.Drawing.Point(5, 77);
this.jogController2.Name = "jogController2";
this.jogController2.Size = new System.Drawing.Size(216, 72);
this.jogController2.TabIndex = 8;
this.jogController2.Text = "156";
//
// jogController1
//
this.jogController1.arAutoUpdate = false;
this.jogController1.arAxis = 0;
this.jogController1.arAxisName = "X-F";
this.jogController1.arBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.jogController1.arBottomSensorCommand = new string[] {
"INP",
"ORG",
"LIM+",
"HOME",
"ALM",
"SVON",
"LIM-",
"POS"};
this.jogController1.arBottomSensorFont = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold);
this.jogController1.arBottomSensorHeight = 30;
this.jogController1.arBottomSensorListCount = new System.Drawing.Point(4, 2);
this.jogController1.arBottomSensorTitle = new string[] {
"INP",
"ORG",
"LIM+",
"HOME",
"ALM",
"SVON",
"LIM-",
"--"};
this.jogController1.arCellBorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.jogController1.ardAct = 200D;
this.jogController1.arDebugMode = false;
this.jogController1.arIsAlm = false;
this.jogController1.arIsHSet = true;
this.jogController1.arIsInit = false;
this.jogController1.arIsInp = false;
this.jogController1.arIsLimM = false;
this.jogController1.arIsLimP = false;
this.jogController1.arIsOrg = false;
this.jogController1.arIsSvON = true;
this.jogController1.arMaxLength = 400;
this.jogController1.arMinLength = -10;
this.jogController1.arShowJogButton = true;
this.jogController1.arShowPositionBar = true;
this.jogController1.arShowSensor = true;
this.jogController1.arShowTitleBar = true;
this.jogController1.arTitlebarHeight = ((ushort)(20));
this.jogController1.arUpdateInterval = ((ushort)(100));
this.jogController1.arUsage = true;
this.jogController1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.jogController1.Dock = System.Windows.Forms.DockStyle.Top;
this.jogController1.Font = new System.Drawing.Font("Consolas", 8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.jogController1.Location = new System.Drawing.Point(5, 5);
this.jogController1.Name = "jogController1";
this.jogController1.Size = new System.Drawing.Size(216, 72);
this.jogController1.TabIndex = 7;
this.jogController1.Text = "156";
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 1;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.Controls.Add(this.panel2, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.panel3, 0, 1);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 2;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(574, 230);
this.tableLayoutPanel1.TabIndex = 137;
//
// panel2
//
this.panel2.Controls.Add(this.tblDI);
this.panel2.Controls.Add(this.lbTitle1);
this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel2.Location = new System.Drawing.Point(0, 0);
this.panel2.Margin = new System.Windows.Forms.Padding(0);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(574, 115);
this.panel2.TabIndex = 0;
//
// tblDI
//
this.tblDI.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.tblDI.BorderSize = 1;
colorListItem5.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
colorListItem5.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
colorListItem5.Remark = "";
colorListItem6.BackColor1 = System.Drawing.Color.Green;
colorListItem6.BackColor2 = System.Drawing.Color.Green;
colorListItem6.Remark = "";
this.tblDI.ColorList = new arDev.AzinAxt.ColorListItem[] {
colorListItem5,
colorListItem6};
this.tblDI.Cursor = System.Windows.Forms.Cursors.Arrow;
this.tblDI.Dock = System.Windows.Forms.DockStyle.Fill;
this.tblDI.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Bold);
this.tblDI.FontPin = new System.Drawing.Font("Consolas", 6.75F);
this.tblDI.ForeColor = System.Drawing.Color.WhiteSmoke;
this.tblDI.ForeColorPin = System.Drawing.Color.WhiteSmoke;
this.tblDI.Location = new System.Drawing.Point(0, 16);
this.tblDI.MatrixSize = new System.Drawing.Point(5, 4);
this.tblDI.MenuBorderSize = 1;
this.tblDI.MenuGap = 5;
this.tblDI.MinimumSize = new System.Drawing.Size(100, 50);
this.tblDI.Name = "tblDI";
this.tblDI.Names = null;
this.tblDI.ShadowColor = System.Drawing.Color.Black;
this.tblDI.showDebugInfo = false;
this.tblDI.ShowIndexString = true;
this.tblDI.Size = new System.Drawing.Size(574, 99);
this.tblDI.TabIndex = 3;
this.tblDI.Tags = null;
this.tblDI.Text = "gridView2";
this.tblDI.TextAttachToImage = true;
this.tblDI.Titles = null;
this.tblDI.Values = null;
//
// lbTitle1
//
this.lbTitle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60)))));
this.lbTitle1.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbTitle1.Dock = System.Windows.Forms.DockStyle.Top;
this.lbTitle1.Font = new System.Drawing.Font("Consolas", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbTitle1.ForeColor = System.Drawing.Color.White;
this.lbTitle1.Location = new System.Drawing.Point(0, 0);
this.lbTitle1.Name = "lbTitle1";
this.lbTitle1.Size = new System.Drawing.Size(574, 16);
this.lbTitle1.TabIndex = 0;
this.lbTitle1.Text = "INPUT";
this.lbTitle1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// panel3
//
this.panel3.Controls.Add(this.tblDO);
this.panel3.Controls.Add(this.lbtitle2);
this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel3.Location = new System.Drawing.Point(0, 115);
this.panel3.Margin = new System.Windows.Forms.Padding(0);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(574, 115);
this.panel3.TabIndex = 0;
//
// tblDO
//
this.tblDO.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.tblDO.BorderSize = 1;
colorListItem7.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
colorListItem7.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
colorListItem7.Remark = "";
colorListItem8.BackColor1 = System.Drawing.Color.Tomato;
colorListItem8.BackColor2 = System.Drawing.Color.Tomato;
colorListItem8.Remark = "";
this.tblDO.ColorList = new arDev.AzinAxt.ColorListItem[] {
colorListItem7,
colorListItem8};
this.tblDO.Cursor = System.Windows.Forms.Cursors.Arrow;
this.tblDO.Dock = System.Windows.Forms.DockStyle.Fill;
this.tblDO.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tblDO.FontPin = new System.Drawing.Font("Consolas", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tblDO.ForeColor = System.Drawing.Color.WhiteSmoke;
this.tblDO.ForeColorPin = System.Drawing.Color.WhiteSmoke;
this.tblDO.Location = new System.Drawing.Point(0, 16);
this.tblDO.MatrixSize = new System.Drawing.Point(5, 4);
this.tblDO.MenuBorderSize = 1;
this.tblDO.MenuGap = 5;
this.tblDO.MinimumSize = new System.Drawing.Size(100, 50);
this.tblDO.Name = "tblDO";
this.tblDO.Names = null;
this.tblDO.ShadowColor = System.Drawing.Color.Black;
this.tblDO.showDebugInfo = false;
this.tblDO.ShowIndexString = true;
this.tblDO.Size = new System.Drawing.Size(574, 99);
this.tblDO.TabIndex = 3;
this.tblDO.Tags = null;
this.tblDO.Text = "gridView3";
this.tblDO.TextAttachToImage = true;
this.tblDO.Titles = null;
this.tblDO.Values = null;
//
// lbtitle2
//
this.lbtitle2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60)))));
this.lbtitle2.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbtitle2.Dock = System.Windows.Forms.DockStyle.Top;
this.lbtitle2.Font = new System.Drawing.Font("Consolas", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbtitle2.ForeColor = System.Drawing.Color.White;
this.lbtitle2.Location = new System.Drawing.Point(0, 0);
this.lbtitle2.Name = "lbtitle2";
this.lbtitle2.Size = new System.Drawing.Size(574, 16);
this.lbtitle2.TabIndex = 1;
this.lbtitle2.Text = "OUTPUT";
this.lbtitle2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// timer1
//
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// button1
//
this.button1.Location = new System.Drawing.Point(11, 239);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(89, 28);
this.button1.TabIndex = 138;
this.button1.Text = "init IO/MOT";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// ctlSensor1
//
this.ctlSensor1.ColorOff = System.Drawing.Color.DimGray;
this.ctlSensor1.ColorOn = System.Drawing.Color.Lime;
this.ctlSensor1.Location = new System.Drawing.Point(468, 293);
this.ctlSensor1.MaximumSize = new System.Drawing.Size(80, 80);
this.ctlSensor1.MinimumSize = new System.Drawing.Size(40, 40);
this.ctlSensor1.Name = "ctlSensor1";
this.ctlSensor1.Size = new System.Drawing.Size(54, 48);
this.ctlSensor1.TabIndex = 142;
this.ctlSensor1.Value = true;
//
// m4
//
this.m4.Length = 100;
this.m4.Location = new System.Drawing.Point(277, 285);
this.m4.MaximumSize = new System.Drawing.Size(80, 80);
this.m4.MinimumSize = new System.Drawing.Size(40, 40);
this.m4.Name = "m4";
this.m4.Pin_DirCW = false;
this.m4.Pin_Max = false;
this.m4.Pin_Min = false;
this.m4.Pin_Run = false;
this.m4.Size = new System.Drawing.Size(80, 47);
this.m4.TabIndex = 141;
this.m4.TabStop = false;
//
// m3
//
this.m3.Length = 100;
this.m3.Location = new System.Drawing.Point(191, 285);
this.m3.MaximumSize = new System.Drawing.Size(80, 80);
this.m3.MinimumSize = new System.Drawing.Size(40, 40);
this.m3.Name = "m3";
this.m3.Pin_DirCW = false;
this.m3.Pin_Max = false;
this.m3.Pin_Min = false;
this.m3.Pin_Run = false;
this.m3.Size = new System.Drawing.Size(80, 47);
this.m3.TabIndex = 140;
this.m3.TabStop = false;
//
// m2
//
this.m2.Length = 100;
this.m2.Location = new System.Drawing.Point(105, 285);
this.m2.MaximumSize = new System.Drawing.Size(80, 80);
this.m2.MinimumSize = new System.Drawing.Size(40, 40);
this.m2.Name = "m2";
this.m2.Pin_DirCW = false;
this.m2.Pin_Max = false;
this.m2.Pin_Min = false;
this.m2.Pin_Run = false;
this.m2.Size = new System.Drawing.Size(80, 47);
this.m2.TabIndex = 140;
this.m2.TabStop = false;
//
// m1
//
this.m1.Length = 100;
this.m1.Location = new System.Drawing.Point(19, 285);
this.m1.MaximumSize = new System.Drawing.Size(80, 80);
this.m1.MinimumSize = new System.Drawing.Size(40, 40);
this.m1.Name = "m1";
this.m1.Pin_DirCW = false;
this.m1.Pin_Max = false;
this.m1.Pin_Min = false;
this.m1.Pin_Run = false;
this.m1.Size = new System.Drawing.Size(80, 47);
this.m1.TabIndex = 140;
this.m1.TabStop = false;
//
// mcv
//
this.mcv.Length = 100;
this.mcv.Location = new System.Drawing.Point(363, 285);
this.mcv.MaximumSize = new System.Drawing.Size(80, 80);
this.mcv.MinimumSize = new System.Drawing.Size(40, 40);
this.mcv.Name = "mcv";
this.mcv.Pin_DirCW = false;
this.mcv.Pin_Max = false;
this.mcv.Pin_Min = false;
this.mcv.Pin_Run = false;
this.mcv.Size = new System.Drawing.Size(80, 47);
this.mcv.TabIndex = 139;
this.mcv.TabStop = false;
//
// fEmulator
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 414);
this.Controls.Add(this.ctlSensor1);
this.Controls.Add(this.m4);
this.Controls.Add(this.m3);
this.Controls.Add(this.m2);
this.Controls.Add(this.m1);
this.Controls.Add(this.mcv);
this.Controls.Add(this.button1);
this.Controls.Add(this.tableLayoutPanel1);
this.Controls.Add(this.panel1);
this.Name = "fEmulator";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "fEmulator";
this.Load += new System.EventHandler(this.fEmulator_Load);
this.panel1.ResumeLayout(false);
this.tableLayoutPanel1.ResumeLayout(false);
this.panel2.ResumeLayout(false);
this.panel3.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private arDev.AzinAxt.JogController jogController1;
private System.Windows.Forms.Panel panel1;
private arDev.AzinAxt.JogController jogController3;
private arDev.AzinAxt.JogController jogController2;
private arDev.AzinAxt.JogController jogController5;
private arDev.AzinAxt.JogController jogController4;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Panel panel2;
private arDev.AzinAxt.GridView tblDI;
private System.Windows.Forms.Label lbTitle1;
private System.Windows.Forms.Panel panel3;
private arDev.AzinAxt.GridView tblDO;
private System.Windows.Forms.Label lbtitle2;
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.Button button1;
private UIControl.CtlMotor mcv;
private UIControl.CtlMotor m1;
private UIControl.CtlMotor m2;
private UIControl.CtlMotor m3;
private UIControl.CtlMotor m4;
private UIControl.CtlSensor ctlSensor1;
}
}

View File

@@ -0,0 +1,278 @@
using arDev.AzinAxt;
using arDev.AzinAxt.Emulator;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Project.Dialog
{
public partial class fEmulator : Form
{
public CEmuleDIO devIO { get; private set; }
public CEmulMOT devM { get; private set; }
JogController[] jobCtl;
public fEmulator(int pCnt,int aCnt, MOT mot)
{
InitializeComponent();
//motion
devM = new CEmulMOT(aCnt);
this.jobCtl = new JogController[] {
jogController1,jogController2,
jogController3,jogController4,
jogController5
};
foreach (var item in jobCtl)
{
item.arDebugMode = false;
item.ItemClick += Item_ItemClick;
}
for (int i = 0; i < aCnt; i++)
{
Boolean enb = i < aCnt;
jobCtl[i].MotionObject = mot;
jobCtl[i].Enabled = enb;
jobCtl[i].arUsage = enb;
jobCtl[i].arAutoUpdate = false;
jobCtl[i].Invalidate();
if (enb)
{
devM.MaxPosition[i] = jobCtl[i].arMaxLength;
devM.MinPosition[i] = jobCtl[i].arMinLength;
}
}
//input
devIO = new CEmuleDIO(pCnt);
devIO.IOValueChagned += Dev_IOValueChagned;
this.tblDI.SuspendLayout();
this.tblDO.SuspendLayout();
var pinNameI = new string[pCnt];
var pinNameO = new string[pCnt];
var pinTitleI = new string[pCnt];
var pinTitleO = new string[pCnt];
for (int i = 0; i < pinNameI.Length; i++)
{
pinNameI[i] = "X" + i.ToString("X2").PadLeft(3, '0');// Enum.GetName(typeof(ePLCIPin), i); //Enum.GetNames(typeof(eDIName))[i];// i.ToString();
pinTitleI[i] = string.Empty;// i.ToString();// Enum.GetName(typeof(ePLCITitle), i); //Enum.GetNames(typeof(eDITitle))[i];
}
for (int i = 0; i < pinNameO.Length; i++)
{
pinNameO[i] = "Y" + i.ToString("X2").PadLeft(3, '0');// Enum.GetName(typeof(ePLCOPin), i); // Enum.GetNames(typeof(eDOName))[i];
pinTitleO[i] = string.Empty;//i.ToString();// Enum.GetName(typeof(ePLCOTitle), i); // Enum.GetNames(typeof(eDOTitle))[i];
}
tblDI.MatrixSize = new Point(8, 8);
tblDO.MatrixSize = new Point(8, 8);
tblDI.setTitle(pinTitleI);
tblDO.setTitle(pinTitleO);
tblDI.setNames(pinNameI);
tblDO.setNames(pinNameO);
tblDI.setItemTextAlign(ContentAlignment.BottomLeft);
tblDO.setItemTextAlign(ContentAlignment.BottomLeft);
tblDI.setValue(devIO.Input);
tblDO.setValue(devIO.Output);
//dio.IOValueChanged += dio_IOValueChanged;
this.tblDI.ItemClick += tblDI_ItemClick;
this.tblDO.ItemClick += tblDO_ItemClick;
this.tblDI.Invalidate();
this.tblDO.Invalidate();
}
private void fEmulator_Load(object sender, EventArgs e)
{
timer1.Start();
}
private void Item_ItemClick(object sender, JogController.ItemClickEventArgs e)
{
//조그컨트롤에서 버튼을 누르면 동작하는 기능
JogController jog = sender as JogController;
arDev.AzinAxt.MOT mot = jog.MotionObject;
if (e.Button == MouseButtons.Left)
{
if (e.IsDown == false)
{
//마우스 업
if (e.Command.StartsWith("JOG"))
{
devM.dCmd[jog.arAxis] = devM.dAct[jog.arAxis];
mot.MoveStop("", (short)jog.arAxis);
}
}
else
{
//마우스 다운
if (e.Command == "HSET")
{
mot.isHomeSet[jog.arAxis] = !mot.isHomeSet[jog.arAxis];
Console.WriteLine("homse change : " + devM.isHSet[jog.arAxis].ToString());
}
else if (e.Command == "ALM")
{
//알람상태를 직접 변경해야한다
devM.SetMech(jog.arAxis, CEmulMOT.eMach.MotAlarm, !devM.isAlm(jog.arAxis));
}
else if (e.Command == "SVON")
{
var cVal = mot.isSERVOON[jog.arAxis];
mot.SetSVON((short)jog.arAxis, !cVal);
}
else if (e.Command == "ORG")
{
mot.Move((short)jog.arAxis, 0);
}
else if (e.Command == "JOGR")
{
mot.JOG((short)jog.arAxis, eMotionDirection.Positive);
}
else if (e.Command == "JOGL")
{
mot.JOG((short)jog.arAxis, eMotionDirection.Negative);
}
}
}
}
void tblDO_ItemClick(object sender, GridView.ItemClickEventArgs e)
{
var nVal = !devIO.Output[e.idx];//.Get(e.idx);// doValue[e.idx];// == 1 ? (ushort)0 : (ushort)1;
devIO.SetOutput(e.idx, nVal);
}
void tblDI_ItemClick(object sender, GridView.ItemClickEventArgs e)
{
var nVal = !devIO.Input[e.idx];
devIO.SetInput(e.idx, nVal);
}
private void Dev_IOValueChagned(object sender, CEmuleDIO.IOValueChangedArgs e)
{
if (e.Dir == CEmuleDIO.eDirection.In)
{
//해당 아이템의 값을 변경하고 다시 그린다.
if (tblDI.setValue(e.ArrIDX, e.NewValue))
tblDI.Invalidate();//.drawItem(e.ArrIDX);
Console.WriteLine(string.Format("di change {0}:{1}", e.ArrIDX, e.NewValue.ToString()));
}
else
{
//해당 아이템의 값을 변경하고 다시 그린다.
if (tblDO.setValue(e.ArrIDX, e.NewValue))
tblDO.Invalidate();//.drawItem(e.ArrIDX);
Console.WriteLine(string.Format("do change {0}:{1}", e.ArrIDX, e.NewValue.ToString()));
}
}
private void timer1_Tick(object sender, EventArgs e)
{
for (int i = 0; i < this.devM.axisCount; i++)
{
//각 축별 데이터를 표시한다
this.jobCtl[i].arIsOrg = devM.isOrg(i);
this.jobCtl[i].arIsInp = devM.isINp(i);
this.jobCtl[i].arIsAlm = devM.isAlm(i);
this.jobCtl[i].arIsLimM = devM.isLimM(i);
this.jobCtl[i].arIsLimP = devM.isLimP(i);
this.jobCtl[i].arIsSvON = devM.isSvOn(i);
this.jobCtl[i].ardAct = devM.dAct[i];
this.jobCtl[i].arIsInit = true;// MotionObject.IsInit;
this.jobCtl[i].arIsHSet = true;
this.jobCtl[i].Invalidate();
}
//motor 표시
mcv.Pin_Run = devIO.Output[(int)eDOName.CONV_RUN];
mcv.Pin_DirCW = true;
mcv.Invalidate();
m1.Pin_Run = devIO.Output[(int)eDOName.PORT1_MOT_RUN];
m1.Pin_DirCW = devIO.Output[(int)eDOName.PORT1_MOT_DIR];
m1.Invalidate();
m2.Pin_Run = devIO.Output[(int)eDOName.PORT2_MOT_RUN];
m2.Pin_DirCW = devIO.Output[(int)eDOName.PORT2_MOT_DIR];
m2.Invalidate();
m3.Pin_Run = devIO.Output[(int)eDOName.PORT3_MOT_RUN];
m3.Pin_DirCW = devIO.Output[(int)eDOName.PORT3_MOT_DIR];
m3.Invalidate();
m4.Pin_Run = devIO.Output[(int)eDOName.PORT4_MOT_RUN];
m4.Pin_DirCW = devIO.Output[(int)eDOName.PORT4_MOT_DIR];
m4.Invalidate();
}
private void button1_Click(object sender, EventArgs e)
{
//모터 svon
Pub.mot.SetSVON(true);
//emg on
devIO.SetInput((int)eDIName.BUT_EMGF, true);
devIO.SetInput((int)eDIName.BUT_EMGR, true);
devIO.SetInput((int)eDIName.AREA_PORT11, true);
devIO.SetInput((int)eDIName.AREA_PORT12, true);
devIO.SetInput((int)eDIName.AREA_PORT21, true);
devIO.SetInput((int)eDIName.AREA_PORT22, true);
devIO.SetInput((int)eDIName.AREA_PORT31, true);
devIO.SetInput((int)eDIName.AREA_PORT32, true);
devIO.SetInput((int)eDIName.AREA_PORT41, true);
devIO.SetInput((int)eDIName.AREA_PORT42, true);
//각포트는 하단에 있는걸로 한다
devIO.SetInput((int)eDIName.PORT1_LIM_UP, true);
devIO.SetInput((int)eDIName.PORT1_LIM_DN, false); //false가 감지
devIO.SetInput((int)eDIName.PORT1_DET_UP, true);
devIO.SetInput((int)eDIName.PORT1_DET_DN, true);
devIO.SetInput((int)eDIName.PORT2_LIM_UP, true);
devIO.SetInput((int)eDIName.PORT2_LIM_DN, false); //false가 감지
devIO.SetInput((int)eDIName.PORT2_DET_UP, true);
devIO.SetInput((int)eDIName.PORT2_DET_DN, true);
devIO.SetInput((int)eDIName.PORT3_LIM_UP, true);
devIO.SetInput((int)eDIName.PORT3_LIM_DN, false); //false가 감지
devIO.SetInput((int)eDIName.PORT3_DET_UP, true);
devIO.SetInput((int)eDIName.PORT3_DET_DN, true);
devIO.SetInput((int)eDIName.PORT4_LIM_UP, true);
devIO.SetInput((int)eDIName.PORT4_LIM_DN, false); //false가 감지
devIO.SetInput((int)eDIName.PORT4_DET_UP, true);
devIO.SetInput((int)eDIName.PORT4_DET_DN, true);
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,205 @@
namespace Project
{
partial class fErrorException
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fErrorException));
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.panTitleBar = new System.Windows.Forms.Panel();
this.label3 = new System.Windows.Forms.Label();
this.lbTitle = new System.Windows.Forms.Label();
this.btTeach = new System.Windows.Forms.Label();
this.panel1 = new System.Windows.Forms.Panel();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.panTitleBar.SuspendLayout();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// pictureBox1
//
this.pictureBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
this.pictureBox1.Location = new System.Drawing.Point(269, 19);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(80, 80);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
//
// label1
//
this.label1.AutoSize = true;
this.label1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.label1.Font = new System.Drawing.Font("맑은 고딕", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.label1.ForeColor = System.Drawing.Color.White;
this.label1.Location = new System.Drawing.Point(10, 106);
this.label1.Name = "label1";
this.label1.Padding = new System.Windows.Forms.Padding(10);
this.label1.Size = new System.Drawing.Size(598, 50);
this.label1.TabIndex = 3;
this.label1.Text = "The program was terminated due to an unhandled error";
//
// label2
//
this.label2.AutoSize = true;
this.label2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.label2.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.label2.ForeColor = System.Drawing.Color.DodgerBlue;
this.label2.Location = new System.Drawing.Point(17, 159);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(507, 45);
this.label2.TabIndex = 4;
this.label2.Text = "Information for error reporting has been collected.\r\nThe collected information is" +
" shown below.\r\nPlease send to \"Chikyun.kim@amkor.co.kr\" including the situation " +
"before the error occurred.";
//
// textBox1
//
this.textBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.textBox1.ForeColor = System.Drawing.Color.LightCoral;
this.textBox1.Location = new System.Drawing.Point(10, 218);
this.textBox1.Multiline = true;
this.textBox1.Name = "textBox1";
this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.textBox1.Size = new System.Drawing.Size(598, 346);
this.textBox1.TabIndex = 5;
this.textBox1.Text = "test";
//
// panTitleBar
//
this.panTitleBar.BackColor = System.Drawing.Color.Maroon;
this.panTitleBar.Controls.Add(this.label3);
this.panTitleBar.Controls.Add(this.lbTitle);
this.panTitleBar.Dock = System.Windows.Forms.DockStyle.Top;
this.panTitleBar.Location = new System.Drawing.Point(1, 1);
this.panTitleBar.Name = "panTitleBar";
this.panTitleBar.Size = new System.Drawing.Size(617, 32);
this.panTitleBar.TabIndex = 133;
//
// label3
//
this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.label3.AutoSize = true;
this.label3.Font = new System.Drawing.Font("맑은 고딕", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.label3.ForeColor = System.Drawing.Color.White;
this.label3.Location = new System.Drawing.Point(547, 6);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(61, 17);
this.label3.TabIndex = 61;
this.label3.Text = "[ Close ]";
this.label3.Click += new System.EventHandler(this.label3_Click);
//
// lbTitle
//
this.lbTitle.BackColor = System.Drawing.Color.Transparent;
this.lbTitle.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbTitle.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbTitle.Font = new System.Drawing.Font("Cambria", 12F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbTitle.ForeColor = System.Drawing.Color.LightSkyBlue;
this.lbTitle.Location = new System.Drawing.Point(0, 0);
this.lbTitle.Name = "lbTitle";
this.lbTitle.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lbTitle.Size = new System.Drawing.Size(617, 32);
this.lbTitle.TabIndex = 60;
this.lbTitle.Text = "UnhandledException";
this.lbTitle.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// btTeach
//
this.btTeach.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.btTeach.Cursor = System.Windows.Forms.Cursors.Hand;
this.btTeach.Dock = System.Windows.Forms.DockStyle.Bottom;
this.btTeach.Font = new System.Drawing.Font("맑은 고딕", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.btTeach.ForeColor = System.Drawing.Color.DeepPink;
this.btTeach.Location = new System.Drawing.Point(1, 610);
this.btTeach.Margin = new System.Windows.Forms.Padding(0, 0, 5, 0);
this.btTeach.Name = "btTeach";
this.btTeach.Size = new System.Drawing.Size(617, 61);
this.btTeach.TabIndex = 134;
this.btTeach.Text = "Close";
this.btTeach.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.btTeach.Click += new System.EventHandler(this.btTeach_Click);
//
// panel1
//
this.panel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.panel1.Controls.Add(this.pictureBox1);
this.panel1.Controls.Add(this.textBox1);
this.panel1.Controls.Add(this.label1);
this.panel1.Controls.Add(this.label2);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(1, 33);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(617, 577);
this.panel1.TabIndex = 135;
//
// fErrorException
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(15)))), ((int)(((byte)(15)))), ((int)(((byte)(15)))));
this.ClientSize = new System.Drawing.Size(619, 672);
this.Controls.Add(this.panel1);
this.Controls.Add(this.btTeach);
this.Controls.Add(this.panTitleBar);
this.Font = new System.Drawing.Font("맑은 고딕", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.KeyPreview = true;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "fErrorException";
this.Padding = new System.Windows.Forms.Padding(1);
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Error Report";
this.TopMost = true;
this.Load += new System.EventHandler(this.fErrorException_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.panTitleBar.ResumeLayout(false);
this.panTitleBar.PerformLayout();
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox textBox1;
public System.Windows.Forms.Panel panTitleBar;
private System.Windows.Forms.Label lbTitle;
private System.Windows.Forms.Label btTeach;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Label label3;
}
}

View File

@@ -0,0 +1,79 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Project
{
public partial class fErrorException : Form
{
public fErrorException(string err)
{
InitializeComponent();
System.Text.StringBuilder sb = new StringBuilder();
sb.AppendLine("===============================");
sb.AppendLine("Amkor Technology Korea");
sb.AppendLine("K4 EEDP");
sb.AppendLine("===============================");
sb.AppendLine();
sb.AppendLine(err);
this.textBox1.Text = sb.ToString();
this.lbTitle.MouseMove += LbTitle_MouseMove;
this.lbTitle.MouseUp += LbTitle_MouseUp;
this.lbTitle.MouseDown += LbTitle_MouseDown;
this.lbTitle.DoubleClick += LbTitle_DoubleClick;
}
private void fErrorException_Load(object sender, EventArgs e)
{
}
#region "Mouse Form Move"
private Boolean fMove = false;
private Point MDownPos;
private void LbTitle_DoubleClick(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Maximized) this.WindowState = FormWindowState.Normal;
else this.WindowState = FormWindowState.Maximized;
}
private void LbTitle_MouseMove(object sender, MouseEventArgs e)
{
if (fMove)
{
Point offset = new Point(e.X - MDownPos.X, e.Y - MDownPos.Y);
this.Left += offset.X;
this.Top += offset.Y;
offset = new Point(0, 0);
}
}
private void LbTitle_MouseUp(object sender, MouseEventArgs e)
{
fMove = false;
}
private void LbTitle_MouseDown(object sender, MouseEventArgs e)
{
MDownPos = new Point(e.X, e.Y);
fMove = true;
}
#endregion
private void btTeach_Click(object sender, EventArgs e)
{
this.Close();
}
private void label3_Click(object sender, EventArgs e)
{
this.Close();
}
}
}

View File

@@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAb
rQAAG60BIeRSlQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPnSURBVHhe7dzJ
TttQFAbgdNFKnZ6GFWKDfCNGsWRRddO+ATwBo5g2iNdopU7LqlXVFgUa2LDoE7TbQoEIFpVw72/5EOdw
INO919fx/aVfiuwTD58chcFyJSQkJJu4Urm3H0Uv95Wq7VWrx2jyOopeYF06FiLlcGbmkQZ7v6dULFav
w0w6HpINYGpKfQbUj/Hx+Pf8fHy2thafra8nr7EsQYyiT7Xh4Yfp20KQLF59cjI+XlqKL7e3W4plWBcQ
WXZHRp5qkF3AHE5NxScrKzfwqFiHmRRxF+9NN1POdINHDYhpesGjlh6xHzxqaRE53t/VVRGok5YO0SQe
tTSINvCoLYhKfR84RJt41IFFdIFHxbYHCtElHpUjfhkdfZIeTrGS4OkTcIlHLTxinnjUwiLiQPPGoxYO
0Sc8amEQTePxSDOd1ntEG1cejzTTTb1FbMGbnjaCh/JIM93WO0RbeCiPNNNLs4g1pb7lhmgTD+WRZnpt
7oi28VAeaaaf5oaIHWGHNvFQHmmm3yaI+hycIbrCQ3mkGRN1hugSD+WRZkzVOqJrPJRHmjFZa4h54KE8
0ozpGkfMCw/lkWZs1BhinngojzRjq30j5o2H8kgzNptF3Ffqa8eIPuChPNKM7XaN6AseyiPNuChHPBob
e5xytQZ3f2q81xg80L/inCwvixt0VR5pxlVhAZMEsVp9Jd4pq1c+xwBuZMwbD+WRZlwWJnSTZy2KnqVs
zegVyR8Hfs3NiRtwXR5pxnVhAyN8lFO2ZvSKc6w839gQ3+y6PNKM68IGRrpnKVszemEjAN5d3K99F2D4
CLdpu49w+BK5o22/RMKPMbcXFm1/jEEOh4bu68vzLQbrExPx8eKiuEEX5ZFmXBQGsICJ7hsYpVxyfEHk
kWZst2s8ik9XYl7tGY9SZsQsHgy6xqOUEdEYHqVMiMbxKGVAtIZHcYq4sxP/q9fjq9PTpHiNZeKsgVrH
o/ycnX3gAhFgPAmiMNtv/ywsuMGjuEC8ajRStmawTJrtp87xKEDUv/a9s4XoAjA3PIpNRNsfYY6Hc0lP
y22sIdKXyMVF0gTP0JeIN3gUjogDlA7ch3qHRykCYhYPx+oNHsVnRO/xKD4iFgaPggOkpw/ljVg4PIoP
iIXFo+SJWHg8Ch7PpE/iI07kAI90cvCPKuwD+8I+se/CPyLK5ZWYvfKwz8JeeTwuEAcWj2ITceDxKDYQ
S4NHMYlYOjyKCcTS4lESRKU+9IKI2etHgpYRj9ILYsBj6QYx4N2S8BBaA5Eeg9zY3IwbW1vhMcidBoj0
7SxWr8NMOh4iBXd/Xj8KXqlLNHkdHgUfEnIjlcp/1rPAKpMPkMkAAAAASUVORK5CYII=
</value>
</data>
</root>

View File

@@ -0,0 +1,242 @@
namespace Project
{
partial class fTeach
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fTeach));
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.btOpen = new System.Windows.Forms.ToolStripButton();
this.btSave = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.btFindEvision = new System.Windows.Forms.ToolStripButton();
this.btTestEvision = new System.Windows.Forms.ToolStripButton();
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.panel1 = new System.Windows.Forms.Panel();
this.button1 = new System.Windows.Forms.Button();
this.tbGainOff = new System.Windows.Forms.TextBox();
this.tbErode = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.panel2 = new System.Windows.Forms.Panel();
this.tbBarcodeList = new System.Windows.Forms.TextBox();
this.toolStripButton13 = new System.Windows.Forms.ToolStripButton();
this.toolStrip1.SuspendLayout();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// toolStrip1
//
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.btOpen,
this.btSave,
this.toolStripSeparator2,
this.btFindEvision,
this.btTestEvision,
this.toolStripButton13});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(688, 25);
this.toolStrip1.TabIndex = 3;
this.toolStrip1.Text = "toolStrip1";
//
// btOpen
//
this.btOpen.Image = ((System.Drawing.Image)(resources.GetObject("btOpen.Image")));
this.btOpen.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btOpen.Name = "btOpen";
this.btOpen.Size = new System.Drawing.Size(56, 22);
this.btOpen.Text = "Open";
this.btOpen.Click += new System.EventHandler(this.toolStripButton1_Click);
//
// btSave
//
this.btSave.Image = ((System.Drawing.Image)(resources.GetObject("btSave.Image")));
this.btSave.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btSave.Name = "btSave";
this.btSave.Size = new System.Drawing.Size(52, 22);
this.btSave.Text = "Save";
this.btSave.Click += new System.EventHandler(this.toolStripButton4_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25);
//
// btFindEvision
//
this.btFindEvision.Image = ((System.Drawing.Image)(resources.GetObject("btFindEvision.Image")));
this.btFindEvision.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btFindEvision.Name = "btFindEvision";
this.btFindEvision.Size = new System.Drawing.Size(95, 22);
this.btFindEvision.Text = "Find(Evision)";
this.btFindEvision.Click += new System.EventHandler(this.btFineEvision_Click);
//
// btTestEvision
//
this.btTestEvision.Image = ((System.Drawing.Image)(resources.GetObject("btTestEvision.Image")));
this.btTestEvision.ImageTransparentColor = System.Drawing.Color.Magenta;
this.btTestEvision.Name = "btTestEvision";
this.btTestEvision.Size = new System.Drawing.Size(93, 22);
this.btTestEvision.Text = "Test(Evision)";
this.btTestEvision.Click += new System.EventHandler(this.toolStripButton3_Click);
//
// statusStrip1
//
this.statusStrip1.Location = new System.Drawing.Point(0, 606);
this.statusStrip1.Name = "statusStrip1";
this.statusStrip1.Size = new System.Drawing.Size(688, 22);
this.statusStrip1.TabIndex = 4;
this.statusStrip1.Text = "statusStrip1";
//
// panel1
//
this.panel1.Controls.Add(this.button1);
this.panel1.Controls.Add(this.tbGainOff);
this.panel1.Controls.Add(this.tbErode);
this.panel1.Controls.Add(this.label2);
this.panel1.Controls.Add(this.label1);
this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.panel1.Location = new System.Drawing.Point(0, 495);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(688, 111);
this.panel1.TabIndex = 5;
//
// button1
//
this.button1.Location = new System.Drawing.Point(112, 70);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(564, 29);
this.button1.TabIndex = 2;
this.button1.Text = "Save Setting";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// tbGainOff
//
this.tbGainOff.Location = new System.Drawing.Point(112, 42);
this.tbGainOff.Name = "tbGainOff";
this.tbGainOff.Size = new System.Drawing.Size(564, 21);
this.tbGainOff.TabIndex = 1;
//
// tbErode
//
this.tbErode.Location = new System.Drawing.Point(112, 14);
this.tbErode.Name = "tbErode";
this.tbErode.Size = new System.Drawing.Size(564, 21);
this.tbErode.TabIndex = 1;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(15, 45);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(91, 12);
this.label2.TabIndex = 0;
this.label2.Text = "Gain Offset List";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(44, 17);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(62, 12);
this.label1.TabIndex = 0;
this.label1.Text = "Erode List";
//
// panel2
//
this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel2.Location = new System.Drawing.Point(0, 25);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(688, 405);
this.panel2.TabIndex = 6;
//
// tbBarcodeList
//
this.tbBarcodeList.Dock = System.Windows.Forms.DockStyle.Bottom;
this.tbBarcodeList.Location = new System.Drawing.Point(0, 430);
this.tbBarcodeList.Multiline = true;
this.tbBarcodeList.Name = "tbBarcodeList";
this.tbBarcodeList.ReadOnly = true;
this.tbBarcodeList.Size = new System.Drawing.Size(688, 65);
this.tbBarcodeList.TabIndex = 7;
//
// toolStripButton13
//
this.toolStripButton13.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
this.toolStripButton13.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton13.Image")));
this.toolStripButton13.ImageTransparentColor = System.Drawing.Color.Magenta;
this.toolStripButton13.Name = "toolStripButton13";
this.toolStripButton13.Size = new System.Drawing.Size(61, 22);
this.toolStripButton13.Text = "debug";
this.toolStripButton13.Click += new System.EventHandler(this.toolStripButton13_Click);
//
// fTeach
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(688, 628);
this.Controls.Add(this.panel2);
this.Controls.Add(this.tbBarcodeList);
this.Controls.Add(this.panel1);
this.Controls.Add(this.statusStrip1);
this.Controls.Add(this.toolStrip1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "fTeach";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Vision Teach";
this.Load += new System.EventHandler(this.fTeach_Load);
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.StatusStrip statusStrip1;
private System.Windows.Forms.ToolStripButton btOpen;
private System.Windows.Forms.ToolStripButton btFindEvision;
private System.Windows.Forms.ToolStripButton btTestEvision;
private System.Windows.Forms.ToolStripButton btSave;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox tbErode;
private System.Windows.Forms.TextBox tbGainOff;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.TextBox tbBarcodeList;
private System.Windows.Forms.ToolStripButton toolStripButton13;
}
}

View File

@@ -0,0 +1,252 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using AR;
#if V22
using Euresys.Open_eVision_22_12;
#else
using Euresys.Open_eVision_2_11;
#endif
namespace Project
{
public partial class fTeach : Form
{
EImageBW8 img = null;
private arCtl.ImageBoxEvision iv1;
public fTeach(EBaseROI img_ = null)
{
InitializeComponent();
this.iv1 = new arCtl.ImageBoxEvision();
this.iv1.BackColor = Color.Black;
this.iv1.Dock = DockStyle.Fill;
this.panel2.Controls.Add(iv1);
iv1.Dock = DockStyle.Fill;
if (img_ != null)
{
img = new EImageBW8();
img.SetSize(img_);
img_.CopyTo(this.img);
//EasyImage.Copy(img_, img);
this.iv1.Image = img;
this.iv1.Invalidate();
this.iv1.ZoomFit();
}
this.FormClosed += FTeach_FormClosed;
}
private void FTeach_FormClosed(object sender, FormClosedEventArgs e)
{
if (this.img != null) img.Dispose();
runtest = false;
}
private void fTeach_Load(object sender, EventArgs e)
{
this.tbErode.Text = PUB.setting.erodevaluestr;
this.tbGainOff.Text = PUB.setting.GainOffsetListStr;
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
//open file
OpenFileDialog od = new OpenFileDialog();
if (od.ShowDialog() == DialogResult.OK)
{
if (this.img != null) this.img.Dispose();
img = new EImageBW8();
img.Load(od.FileName);
this.iv1.Image = img;
this.iv1.Invalidate();
this.iv1.ZoomFit();
}
}
private void btFineEvision_Click(object sender, EventArgs e)
{
string resultMessage;
iv1.Shapes.Clear();
//using (EImageBW8 img = new EImageBW8(this.img.Width, this.img.Height))
{
//img.SetImagePtr(this.img.Width, this.img.Height, this.img.MIplImage.ImageData);
var pccnt = 0;
var qrrlt = Util_Vision.DetectQR(img, this.iv1, pccnt++,
out resultMessage,
tbErode.Text,
tbGainOff.Text,
PUB.setting.blob_area_min,
PUB.setting.blob_area_max,
PUB.setting.blob_sigmaxy,
PUB.setting.blob_sigmayy,
PUB.setting.blob_sigmaxx,
PUB.setting.blob_minw,
PUB.setting.blob_maxw,
PUB.setting.blob_minh,
PUB.setting.blob_maxh);
var list = qrrlt.Item1;
//PUB.ProcessTime[ECalibrationMode]
this.tbBarcodeList.Text = string.Join(",", list.Select(t => t.data).ToArray());
//
foreach (var item in list.OrderByDescending(t => t.sid))
{
Console.WriteLine("sid:" + item.sid);
}
}
this.iv1.ZoomFit();
}
Boolean runtest = false;
int runcount = 0;
private void toolStripButton3_Click(object sender, EventArgs e)
{
if (runtest)
{
runtest = false;
PUB.log_[0].Add($"Test completed({runcount})");
}
else
{
string resultMessage;
iv1.Shapes.Clear();
runcount = 0;
runtest = true;
PUB.log_[0].Add("Test Evision Start");
Task.Run(() =>
{
while (runtest)
{
Util_Vision.DetectQR(img, this.iv1, runcount++,
out resultMessage,
tbErode.Text,
tbGainOff.Text,
PUB.setting.blob_area_min,
PUB.setting.blob_area_max,
PUB.setting.blob_sigmaxy,
PUB.setting.blob_sigmayy,
PUB.setting.blob_sigmaxx,
PUB.setting.blob_minw,
PUB.setting.blob_maxw,
PUB.setting.blob_minh,
PUB.setting.blob_maxh);
}
});
}
}
private void toolStripButton4_Click(object sender, EventArgs e)
{
if (this.iv1.Image == null)
{
UTIL.MsgE("No image");
return;
}
var sd = new SaveFileDialog();
sd.FileName = "saveimage.bmp";
if (sd.ShowDialog() == DialogResult.OK)
this.iv1.Image.Save(sd.FileName);
}
private void button1_Click(object sender, EventArgs e)
{
PUB.setting.erodevaluestr = tbErode.Text;
PUB.setting.GainOffsetListStr = tbGainOff.Text;
PUB.setting.Save();
}
private void toolStripButton13_Click(object sender, EventArgs e)
{
this.iv1.DebugMode = !this.iv1.DebugMode;
this.iv1.Invalidate();
}
//private void toolStripButton6_Click(object sender, EventArgs e)
//{
// string resultMessage;
// iv1.ClearShape();
// using (EImageBW8 img = new EImageBW8(this.img.Width, this.img.Height))
// {
// img.SetImagePtr(this.img.Width, this.img.Height, this.img.MIplImage.ImageData);
// var pccnt = 0;
// var list = Util_Vision.DetectQR(img, this.iv1, pccnt++,
// out resultMessage,
// tbErode.Text,
// tbGainOff.Text,
// Pub.setting.blob_area_min,
// Pub.setting.blob_area_max,
// Pub.setting.blob_sigmaxy,
// Pub.setting.blob_sigmayy,
// Pub.setting.blob_sigmaxx,
// Pub.setting.blob_minw,
// Pub.setting.blob_maxw,
// Pub.setting.blob_minh,
// Pub.setting.blob_maxh,
// true);
// //
// foreach (var item in list.OrderByDescending(t => t.sid))
// {
// Console.WriteLine("sid:" + item.sid);
// }
// }
// this.iv1.ZoomFit();
//}
//private void toolStripButton5_Click(object sender, EventArgs e)
//{
// if (runtest)
// {
// runtest = false;
// Pub.log.Add($"테스트 종료({runcount})");
// }
// else
// {
// Pub.log.Add("Test Evision+Softtek Start");
// string resultMessage;
// iv1.ClearShape();
// runcount = 0;
// runtest = true;
// Task.Run(() =>
// {
// using (EImageBW8 img = new EImageBW8(this.img.Width, this.img.Height))
// {
// img.SetImagePtr(this.img.Width, this.img.Height, this.img.MIplImage.ImageData);
// while (runtest)
// {
// Util_Vision.DetectQR(img, this.iv1, runcount++,
// out resultMessage,
// tbErode.Text,
// tbGainOff.Text,
// Pub.setting.blob_area_min,
// Pub.setting.blob_area_max,
// Pub.setting.blob_sigmaxy,
// Pub.setting.blob_sigmayy,
// Pub.setting.blob_sigmaxx,
// Pub.setting.blob_minw,
// Pub.setting.blob_maxw,
// Pub.setting.blob_minh,
// Pub.setting.blob_maxh,
// true);
// }
// }
// });
// }
//}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,97 @@
namespace Project
{
partial class fviewer
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fviewer));
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.sbConnState = new System.Windows.Forms.ToolStripStatusLabel();
this.piv = new System.Windows.Forms.Panel();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.statusStrip1.SuspendLayout();
this.SuspendLayout();
//
// statusStrip1
//
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.sbConnState});
this.statusStrip1.Location = new System.Drawing.Point(0, 625);
this.statusStrip1.Name = "statusStrip1";
this.statusStrip1.Padding = new System.Windows.Forms.Padding(1, 0, 12, 0);
this.statusStrip1.Size = new System.Drawing.Size(854, 24);
this.statusStrip1.TabIndex = 4;
this.statusStrip1.Text = "statusStrip1";
//
// sbConnState
//
this.sbConnState.Font = new System.Drawing.Font("맑은 고딕", 10F);
this.sbConnState.Name = "sbConnState";
this.sbConnState.Size = new System.Drawing.Size(23, 19);
this.sbConnState.Text = "●";
//
// piv
//
this.piv.Dock = System.Windows.Forms.DockStyle.Fill;
this.piv.Location = new System.Drawing.Point(0, 0);
this.piv.Name = "piv";
this.piv.Size = new System.Drawing.Size(854, 625);
this.piv.TabIndex = 6;
this.piv.MouseClick += new System.Windows.Forms.MouseEventHandler(this.piv_MouseClick);
//
// timer1
//
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// fviewer
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(854, 649);
this.Controls.Add(this.piv);
this.Controls.Add(this.statusStrip1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.KeyPreview = true;
this.Name = "fviewer";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Image viewer";
this.Load += new System.EventHandler(this.fTeach_Load);
this.statusStrip1.ResumeLayout(false);
this.statusStrip1.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.StatusStrip statusStrip1;
private System.Windows.Forms.Panel piv;
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.ToolStripStatusLabel sbConnState;
}
}

Some files were not shown because too many files have changed in this diff Show More