From b016e35f170a6e1a98d39f125762f97af677fd20 Mon Sep 17 00:00:00 2001
From: wells.liu <wells.liu@broconcentric.com>
Date: 星期一, 06 七月 2020 18:17:30 +0800
Subject: [PATCH] 板卡 运行 +操作界面

---
 src/Bro.Common.Device/DeviceBase/MotionCardBase.cs |  156 ++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 145 insertions(+), 11 deletions(-)

diff --git a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
index 271562e..e826d28 100644
--- a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
+++ b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
@@ -12,6 +12,7 @@
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Forms;
+using static Bro.Common.Helper.EnumHelper;
 
 namespace Bro.Common.Base
 {
@@ -26,12 +27,14 @@
         public abstract void ResetAlarm();
         public abstract ResponseMessage Run(IOperationConfig config);
 
-        public void ExcuteMonitorInvok(DateTime dateTime, string invokeDevice, IDevice device, IMonitorSet monitorSet)
+        public virtual void ExcuteMonitorInvoke(DateTime dateTime, string invokeDevice, IDevice device, IMonitorSet monitorSet)
         {
-            OnMonitorInvoke?.BeginInvoke(dateTime, invokeDevice, device, monitorSet, null, null);
+            OnMonitorInvoke?.BeginInvoke(dateTime, invokeDevice, device, monitorSet, OnMethodInvoked, null);
         }
 
-        public void ExcuteMonitorAlarm(DateTime dateTime, IDevice device, IWarningSet warningSet)
+        public abstract void OnMethodInvoked(IAsyncResult ar);
+
+        public virtual void ExcuteMonitorAlarm(DateTime dateTime, IDevice device, IWarningSet warningSet)
         {
             OnMonitorAlarm?.BeginInvoke(dateTime, device, warningSet, null, null);
         }
@@ -43,6 +46,18 @@
                 return InitialConfig as MotionCardInitialConfigBase;
             }
         }
+
+        /// <summary>
+        /// IO鐨勭洃鍚��
+        /// </summary>
+        public List<IOItem> MonitorValues { get; set; } = new List<IOItem>();
+
+        /// <summary>
+        /// 杞寸殑杩愬姩鐘舵�佸��
+        /// </summary>
+        public List<AxisMovingStatus> AxisMovingOptionValues { get; set; } = new List<AxisMovingStatus>();
+
+        public abstract void WriteOutput(short index, IOValue value);     
     }
 
     public class MotionCardInitialConfigBase : InitialConfigBase, IMonitorConfig
@@ -119,14 +134,29 @@
         public List<IMonitorSet> GetAllMonitorSet()
         {
             WarningSetCollection.ForEach(m => m.Source = this.Name);
-
             MonitorSetCollection.ForEach(m => m.SourceDevice = this.Id);
             return MonitorSetCollection;
         }
         #endregion
     }
 
+    [Device("MotionCardBase", "鏉垮崱鎿嶄綔閰嶇疆鍩虹被", EnumHelper.DeviceAttributeType.OperationConfig)]
     public class MotionCardOperationConfigBase : OperationConfigBase, IComplexDisplay
+    {
+        [Category("鏉垮崱鎿嶄綔")]
+        [Description("鏉垮崱鎿嶄綔閰嶇疆鍩虹被闆嗗悎锛屼緷娆℃墽琛�")]
+        [TypeConverter(typeof(CollectionCountConvert))]
+        [Editor(typeof(ComplexCollectionEditor<MotionCardOperationSet>), typeof(UITypeEditor))]
+        public List<MotionCardOperationSet> OperationCollection { get; set; } = new List<MotionCardOperationSet>();
+
+        public string GetDisplayText()
+        {
+            return string.Join(" ", OperationCollection.Select(u => u.GetDisplayText()));
+        }
+    }
+
+    [Device("MotionOperationSet", "杩愬姩鎿嶄綔閰嶇疆鍩虹被", EnumHelper.DeviceAttributeType.OperationConfig)]
+    public class MotionCardOperationSet :  IComplexDisplay
     {
         [Category("IO鎿嶄綔閰嶇疆")]
         [DisplayName("IO棰勬鏌ュ畾涔夐泦鍚�")]
@@ -134,6 +164,11 @@
         [TypeConverter(typeof(CollectionCountConvert))]
         [Editor(typeof(IORefrenceItemCollectionEditor), typeof(UITypeEditor))]
         public List<IORefrenceItem> PreCheckIOCollection { get; set; } = new List<IORefrenceItem>();
+
+        [Category("IO鎿嶄綔閰嶇疆")]
+        [Description("瓒呮椂璁剧疆锛屽崟浣嶏細ms")]
+        [DisplayName("IO棰勬鏌ヨ秴鏃�")]
+        public int PreCheckIOTimeout { get; set; } = 0;
 
         [Category("IO鎿嶄綔閰嶇疆")]
         [DisplayName("IO杈撳嚭瀹氫箟闆嗗悎")]
@@ -146,8 +181,73 @@
         [Description("IO纭瀹氫箟闆嗗悎")]
         [TypeConverter(typeof(CollectionCountConvert))]
         public List<IORefrenceItem> IOConfirmCollection { get; set; } = new List<IORefrenceItem>();
+        [Category("IO鎿嶄綔閰嶇疆")]
+        [Description("瓒呮椂璁剧疆锛屽崟浣嶏細ms")]
+        [DisplayName("IO纭瓒呮椂")]
+        public int IOConfirmTimeout { get; set; } = 0;
 
+        //[Category("鏉垮崱杩愬姩閰嶇疆")]
+        //[DisplayName("杩愬姩閰嶇疆闆嗗悎")]
+        //[Description("MovingOps锛氳繍鍔ㄩ厤缃泦鍚�")]
+        //[TypeConverter(typeof(CollectionCountConvert))]
+        //[Editor(typeof(ComplexCollectionEditor<MovingOption>), typeof(UITypeEditor))]
+        //public List<MovingOption> MovingOps { get; set; } = new List<MovingOption>();
         [Category("鏉垮崱杩愬姩閰嶇疆")]
+        [DisplayName("杩愬姩閰嶇疆闆嗗悎")]
+        [Description("MovingOps锛氳繍鍔ㄩ厤缃泦鍚�")]
+        [TypeConverter(typeof(ComplexObjectConvert))]
+        [Editor(typeof(PropertyObjectEditor),typeof(UITypeEditor))]
+        public MotionOperationCollection MotionOperationCollection { get; set; } = new MotionOperationCollection();
+
+
+        public string GetDisplayText()
+        {
+            string preCheck = "";
+            PreCheckIOCollection.ForEach(i =>
+            {
+                preCheck += i.GetDisplayText() + " ";
+            });
+            if (preCheck != "")
+            {
+                preCheck = " 棰勬锛�" + preCheck;
+            }
+
+            string output = "";
+            IOOutputCollection.ForEach(i =>
+            {
+                output += i.GetDisplayText() + " ";
+            });
+            if (output != "")
+            {
+                output = " 杈撳嚭锛�" + output;
+            }
+            string confirm = "";
+            IOConfirmCollection.ForEach(i =>
+            {
+                confirm += i.GetDisplayText() + " ";
+            });
+            if (confirm != "")
+            {
+                confirm = " 纭锛�" + confirm;
+            }
+
+            string moving = "";
+            //MovingOps.ForEach(i =>
+            //{
+            //    moving += i.GetDisplayText() + " ";
+            //});
+            //if (moving != "")
+            //{
+            //    moving = " 杩愬姩锛�" + moving;
+            //}
+
+            return (preCheck + output + confirm + moving).Trim();
+        }
+    }
+
+    public class MotionOperationCollection : OperationConfigBase, IComplexDisplay
+    {
+        [Category("杩愬姩閰嶇疆")]
         [DisplayName("杩愬姩閰嶇疆闆嗗悎")]
         [Description("MovingOps锛氳繍鍔ㄩ厤缃泦鍚�")]
         [TypeConverter(typeof(CollectionCountConvert))]
@@ -156,9 +256,19 @@
 
         public string GetDisplayText()
         {
-            throw new NotImplementedException();
+            return $"{string.Join(" ", MovingOps.Select(u => u.GetDisplayText()))}";
         }
     }
+
+    //[Device("MotionCardOperationConfigCollection", "鏉垮崱鎿嶄綔閰嶇疆鍩虹被闆嗗悎", EnumHelper.DeviceAttributeType.OperationConfig)]
+    //public class MotionCardOperationConfigCollection : OperationConfigBase
+    //{
+    //    [Category("澶嶄綅鎿嶄綔")]
+    //    [Description("鏉垮崱鎿嶄綔閰嶇疆鍩虹被闆嗗悎锛屼緷娆℃墽琛�")]
+    //    [TypeConverter(typeof(CollectionCountConvert))]
+    //    [Editor(typeof(ComplexCollectionEditor<MotionCardOperationConfigBase>), typeof(UITypeEditor))]
+    //    public List<MotionCardOperationConfigBase> MotionCardOpsCollection { get; set; } = new List<MotionCardOperationConfigBase>();
+    //}
 
     public class IORefrenceItemCollectionEditor : CollectionEditor
     {
@@ -180,10 +290,31 @@
             return form;
         }
 
-        //protected override object CreateInstance(Type itemType)
-        //{
-        //    return base.CreateInstance(itemType);
-        //}
+        protected override object CreateInstance(Type itemType)
+        {
+            if (itemType == typeof(IORefrenceItem))
+            {
+                IORefrenceItem item = new IORefrenceItem();
+                if ((this.Context.Instance is IOperationConfig opConfig) && !string.IsNullOrWhiteSpace(opConfig.DeviceId))
+                {
+                    using (var scope = GlobalVar.Container.BeginLifetimeScope())
+                    {
+                        List<IDevice> deviceList = scope.Resolve<List<IDevice>>();
+
+                        var device = deviceList.FirstOrDefault(u => u.Id == opConfig.DeviceId);
+
+                        if (device != null && (device is MotionCardBase motionCard))
+                        {
+                            item.IOItemSource = (motionCard.InitialConfig as MotionCardInitialConfigBase).IODefinitionCollection;
+                        }
+                    }
+                }
+
+                return item;
+            }
+
+            return base.CreateInstance(itemType);
+        }
 
         //protected override object[] GetItems(object editValue)
         //{
@@ -217,9 +348,12 @@
 
                     if (device is MotionCardBase motionCard)
                     {
-                        if (value is IORefrenceItem item)
+                        if (value is List<IORefrenceItem> items)
                         {
-                            item.IOItemSource = (motionCard.InitialConfig as MotionCardInitialConfigBase).IODefinitionCollection;
+                            items.ForEach(item =>
+                            {
+                                item.IOItemSource = (motionCard.InitialConfig as MotionCardInitialConfigBase).IODefinitionCollection;
+                            });
                         }
                     }
                 }

--
Gitblit v1.8.0