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 { /// /// I/O창에 표시되는 핀 이름 /// 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, } /// /// 실제 작업시사용하는 이름 /// 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); } } }