From cda7be2cd01f809f64cfb0e812d38034a456546c Mon Sep 17 00:00:00 2001
From: wells.liu <wells.liu@broconcentric.com>
Date: 星期六, 11 七月 2020 11:04:59 +0800
Subject: [PATCH] io优化

---
 src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardIOStatus.cs |   69 ++++++++++++++++++++++++++++++++++
 1 files changed, 68 insertions(+), 1 deletions(-)

diff --git a/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardIOStatus.cs b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardIOStatus.cs
index 4114ea6..528ef6b 100644
--- a/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardIOStatus.cs
+++ b/src/Bro.UI.Device.Winform/MotionCard/CtrlMotionCardIOStatus.cs
@@ -7,14 +7,81 @@
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Forms;
+using Bro.Common.Model;
+using Bro.UI.Model.Winform;
+using static Bro.Common.Helper.EnumHelper;
+using Bro.Common.Interface;
+using Bro.Common.Base;
 
-namespace Bro.UI.Device.Winform.MotionCard
+namespace Bro.UI.Device.Winform
 {
     public partial class CtrlMotionCardIOStatus : UserControl
     {
+        public List<IOItem> _monitorValues { get; set; }
+
         public CtrlMotionCardIOStatus()
         {
             InitializeComponent();
+            InitIOEvent();
+        }
+        private IDevice Device { get; set; }
+
+        protected MotionCardBase MotionCard
+        {
+            get => Device as MotionCardBase;
+        }
+
+        public CtrlMotionCardIOStatus(IDevice device)
+        {
+            InitializeComponent();
+            Device = device;
+            InitIOEvent();
+        }
+
+        private void InitIOEvent()
+        {
+            foreach (var ctr in groupBoxIOOut.Controls)
+            {
+                if (ctr is IOIndicatorCtrl ioOut)
+                {
+                    ioOut.Cursor = Cursors.Hand;
+                    ioOut.OnIODoubleClick += IoOut_DoubleClick;
+                }
+            }
+        }
+
+        private void IoOut_DoubleClick(string name, bool isOn)
+        {
+            var index = Convert.ToInt16(name.Substring(6));
+            MotionCard.WriteOutput(index, isOn ? IOValue.TRUE : IOValue.FALSE);
+        }
+
+        private void RefreshIOStatus(object sender, EventArgs e)
+        {
+            _monitorValues = MotionCard.MonitorValues;
+            foreach (var ioItem in _monitorValues)
+            {
+                if (ioItem.IOType == Common.Helper.EnumHelper.IOType.INPUT)
+                {
+                    var ioInArray = groupBoxIOIn.Controls.Find("ioIn" + ioItem.IONum, false);
+                    if (ioInArray != null && ioInArray.Length == 1)
+                    {
+                        var ioIn = ioInArray[0] as IOIndicatorCtrl;
+                        ioIn.IsOn = ioItem.Value == IOValue.FALSE;
+                    }
+                }
+                else
+                {
+                    var ioOutArray = groupBoxIOOut.Controls.Find("ioOut" + ioItem.IONum, false);
+                    if (ioOutArray != null && ioOutArray.Length == 1)
+                    {
+                        var ioOut = ioOutArray[0] as IOIndicatorCtrl;
+                        ioOut.IsOn = ioItem.Value == IOValue.FALSE;
+                    }
+                }
+            }
+
+            this.Invalidate();
         }
     }
 }

--
Gitblit v1.8.0