- 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>
159 lines
5.9 KiB
C#
159 lines
5.9 KiB
C#
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 Test_IOPanel
|
|
{
|
|
/// <summary>
|
|
/// I/O창에 표시되는 핀 이름
|
|
/// </summary>
|
|
enum eDIName
|
|
{
|
|
SW_START, STOP, RESET, AIR, DOOR ,EMERGENCY, SPARE06, SPARE07,
|
|
MGZ_LOAD_IN, MGZ_LOAD_LIMIT, MGZ_HOLD1, MGZ_HOLD2, MGZ_CLAMP_OPEN, MGZ_CLAMP_CLOSE, SPARE14, SPARE15,
|
|
PCB_PICKER_OVERLOAD, PUSHER_LIMIT1, PUSHER_LIMIT2, GRIPER_OPEN, GRIPER_CLOSE, GRIP_DETECT, PCB_DETECT, SPARE23,
|
|
PCB_PUSHER_OVERLOAD, PUSH_OPEN, PUSH_CLOSE, MGZ_SAFTY, SPARE28, SPARE29, SPARE30, SPARE31,
|
|
SPARE32, SPARE33, SPARE34, SPARE35, SPARE36, SPARE37, SPARE38, SPARE39,
|
|
SPARE40, SPARE41, SPARE42, SPARE43, SPARE44, SPARE45, SPARE46, SPARE47,
|
|
}
|
|
/// <summary>
|
|
/// 실제 작업시사용하는 이름
|
|
/// </summary>
|
|
enum eDIPin
|
|
{
|
|
X00, X01, X02, X03, X04, X05, X06, X07,
|
|
X08, X09, X0A, X0B, X0C, X0D, X0E, X0F,
|
|
X10, X11, X12, X13, X14, X15, X16, X17,
|
|
X18, X19, X1A, X1B, X1C, X1D, X1E, X1F,
|
|
X20, X21, X22, X23, X24, X25, X26, X27,
|
|
X28, X29, X2A, X2B, X2C, X2D, X2E, X2F
|
|
}
|
|
|
|
enum eDOName
|
|
{
|
|
LED_START, LED_STOP, LED_RESET, LED_AIR, LED_INSIDE, SPARE05, SPARE06, SPARE07,
|
|
PUSHER, GRIPPER, MGZ_LOADER, MGZ_CLAMP_ON, MGZ_CLAMP_OFF, SPARE13, SPARE14, SPARE15,
|
|
TWR_RED, TWR_GRN, TWR_YEL, TWR_BUZZER, SPARE20, SPARE21, SPARE22, SPARE23,
|
|
AIR_ON, SPARE25, SPARE26, SPARE27, SPARE28, SPARE29, SPARE30, SPARE31,
|
|
SPARE32, SPARE33, SPARE34, SPARE35, SPARE36, SPARE37, SPARE38, SPARE39,
|
|
SPARE40, SPARE41, SPARE42, SPARE43, SPARE44, SPARE45, SPARE46, SPARE47,
|
|
}
|
|
|
|
enum eDOPin
|
|
{
|
|
Y00, Y01, Y02, Y03, Y04, Y05, Y06, Y07,
|
|
Y08, Y09, Y0A, Y0B, Y0C, Y0D, Y0E, Y0F,
|
|
Y10, Y11, Y12, Y13, Y14, Y15, Y16, Y17,
|
|
Y18, Y19, Y1A, Y1B, Y1C, Y1D, Y1E, Y1F,
|
|
Y20, Y21, Y22, Y23, Y24, Y25, Y26, Y27,
|
|
Y28, Y29, Y2A, Y2B, Y2C, Y2D, Y2E, Y2F
|
|
}
|
|
|
|
public partial class fIOMonitor : Form
|
|
{
|
|
|
|
public fIOMonitor()
|
|
{
|
|
InitializeComponent();
|
|
//this.WindowState = FormWindowState.Maximized;
|
|
|
|
for (int r = 0; r < 8; r++)
|
|
{
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
var idx = i * 8 + r;
|
|
var pinNo = Enum.GetName(typeof(eDIPin), idx);
|
|
var pinName = Enum.GetName(typeof(eDIName), idx);
|
|
|
|
var but = new Button();
|
|
if (pinName.StartsWith("SPARE"))
|
|
{
|
|
pinName = "--";
|
|
but.ForeColor = Color.Gray;
|
|
}
|
|
but.Text = string.Format("[{0}]\n{1}", pinNo, pinName, idx);
|
|
but.TextAlign = ContentAlignment.MiddleLeft;
|
|
but.Dock = DockStyle.Fill;
|
|
but.Font = new System.Drawing.Font("Consolas", 9, FontStyle.Bold);
|
|
but.Tag = idx;
|
|
but.Click += butI_Click;
|
|
this.tblDI.Controls.Add(but);
|
|
}
|
|
}
|
|
|
|
for (int r = 0; r < 8; r++)
|
|
{
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
var idx = i * 8 + r;
|
|
var pinNo = Enum.GetName(typeof(eDOPin), idx);
|
|
var pinName = Enum.GetName(typeof(eDOName), idx);
|
|
|
|
var but = new Button();
|
|
if (pinName.StartsWith("SPARE"))
|
|
{
|
|
pinName = "--";
|
|
but.ForeColor = Color.Gray;
|
|
}
|
|
but.Font = new System.Drawing.Font("Consolas", 9, FontStyle.Bold);
|
|
but.Text = string.Format("[{0}]\n{1}", pinNo, pinName, idx);
|
|
but.TextAlign = ContentAlignment.MiddleLeft;
|
|
but.Dock = DockStyle.Fill;
|
|
but.Tag = idx;
|
|
but.Click += butO_Click;
|
|
this.tblDO.Controls.Add(but);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void fIOMonitor_Load(object sender, EventArgs e)
|
|
{
|
|
|
|
this.Text = "I/O Monitor";
|
|
this.Show();
|
|
Application.DoEvents();
|
|
|
|
for(int i = 0; i < this.tblDI.Controls.Count; i++)
|
|
{
|
|
var but = tblDI.Controls[i] as Button;
|
|
var idx = int.Parse(but.Tag.ToString());
|
|
but.BackColor = Color.Lime;
|
|
}
|
|
for (int i = 0; i < this.tblDO.Controls.Count; i++)
|
|
{
|
|
var but = tblDO.Controls[i] as Button;
|
|
var idx = int.Parse(but.Tag.ToString());
|
|
but.BackColor = Color.Pink;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
void butI_Click(object sender, EventArgs e)
|
|
{
|
|
var but = sender as Button;
|
|
var idx = int.Parse(but.Tag.ToString());
|
|
//var curvalue = Pub.dio.INPUT(idx);
|
|
//Pub.dio.RaiseEvent(arDev.AzinAxt.eIOPINDIR.INPUT, idx, !curvalue);
|
|
//Pub.log.AddI("I/O MON : User DI event idx=" + idx.ToString() + ",oldvalue= " + curvalue.ToString());
|
|
}
|
|
void butO_Click(object sender, EventArgs e)
|
|
{
|
|
var but = sender as Button;
|
|
var idx = int.Parse(but.Tag.ToString());
|
|
var 몫 = (int)(Math.Floor(idx / 8.0));
|
|
var 나머지 = (idx % 8.0);
|
|
var idx2 = 나머지 * 6 + 몫;
|
|
Console.WriteLine(string.Format("idx={0}, 몫={1},나머지={2},컨트롤인덱스={3}", idx, 몫, 나머지, idx2));
|
|
//var curvalue = Pub.dio.OUTPUT(idx);
|
|
//if (Pub.dio.initOK) Pub.dio.SetOutput(idx, !curvalue);
|
|
//else Pub.dio.RaiseEvent(arDev.AzinAxt.eIOPINDIR.OUTPUT, idx, !curvalue);
|
|
}
|
|
}
|
|
}
|