using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace UIControl { public partial class CtlContainer : GroupBox { arDev.AjinEXTEK.Emulator.CEmuleDIO devIO; arDev.AjinEXTEK.Emulator.CEmulMOT devMOT; public CtlContainer() { InitializeComponent(); } public void updateControl() { updateControl(this.Controls); } public void setDevice(arDev.AjinEXTEK.Emulator.CEmuleDIO dio, arDev.AjinEXTEK.Emulator.CEmulMOT mot) { this.devIO = dio; this.devMOT = mot; } public void updateControl(System.Windows.Forms.Control.ControlCollection ctl) { if (devIO == null && devMOT == null) throw new Exception("디바이스(IO/MOT)가 설정되지 않았습니다"); foreach (Control c in ctl) { if (c.HasChildren) { updateControl(c.Controls); } else if (c is UIControl.CtlBase) { var cc = c as UIControl.CtlBase; foreach (var pin in cc.PinList) { if (pin.PinIndex != -1) { if (pin.ValueDirection == UIControl.eValueDirection.input) { //io의 값을 컨트롤에 적용해줘야한다 if (pin.Output) { pin.Raw = devIO.Output[pin.PinIndex]; } else { pin.Raw = devIO.Input[pin.PinIndex]; } } else { //컨트롤의 값을 io에 적용해줘야 한다 if (pin.Output) { //devIO.Output[pin.PinIndex] = pin.Value; devIO.SetOutput(pin.PinIndex, pin.Value); } else { // devIO.Input[pin.PinIndex] = pin.Value; devIO.SetInput(pin.PinIndex, pin.Value); } } } } cc.UpdateValue(); cc.Invalidate(); } } } } }