87 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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();
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
|     }
 | |
| }
 | 
