Files
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

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);
}
}
}