From cf4babd9a65efdb44163822f0b9137bef83a0bbf Mon Sep 17 00:00:00 2001
From: xcd <834800634@qq.com>
Date: 星期五, 03 七月 2020 10:47:42 +0800
Subject: [PATCH] 添加Enum描述转换器 板卡IO添加预定义配置

---
 src/Bro.Device.GTSCard/GTSCardDriver.cs              |    6 
 src/Bro.Common.Model/Helper/PropertyConvertHelper.cs |   96 +++++++++++++++++++++++
 src/Bro.M071.Process/M071Process.cs                  |   16 ++-
 src/Bro.Common.Model/Model/IOItem.cs                 |   11 ++
 src/Bro.Common.Model/Helper/EnumHelper.cs            |   54 ++++---------
 5 files changed, 134 insertions(+), 49 deletions(-)

diff --git a/src/Bro.Common.Model/Helper/EnumHelper.cs b/src/Bro.Common.Model/Helper/EnumHelper.cs
index b577699..2b56867 100644
--- a/src/Bro.Common.Model/Helper/EnumHelper.cs
+++ b/src/Bro.Common.Model/Helper/EnumHelper.cs
@@ -523,44 +523,26 @@
         }
 
         /// <summary>
-        /// IO瀹氫箟绫诲瀷
+        /// IO棰勫畾涔夌被鍨� 涓昏閽堝杈撳嚭
         /// </summary>
-        public enum IODefine
+        public enum IOPrestatement
         {
-            Nothing,
-            InputStartLeft,
-            InputStartRight,
-            InputCurtainLeft,
-            InputCurtainRight,
-            InputSafeDoor,
-            InputEmergency,
-            InputReset,
-            InputScrew1,
-            InputScrew2,
-            InputSuckLeft,
-            InputSuckRight,
-            InputSuckXYZ,
-            InputCylinderLeftLimitFront,
-            InputCylinderLeftLimitBack,
-            InputCylinderRightLimitFront,
-            InputCylinderRightLimitBack,
+            [Description("鑷畾涔�")]
+            Customized = 0,
 
+            [Description("鎸囩ず鐏�-榛�")]
+            Light_Yellow = 1,
+            [Description("鎸囩ず鐏�-绾�")]
+            Light_Green = 2,
+            [Description("鎸囩ず鐏�-缁�")]
+            Light_Red = 3,
+            [Description("铚傞福鍣�")]
+            Beep = 4,
+            [Description("鐓ф槑鐏�")]
+            Light = 5,
 
-            OutputYellow,
-            OutputGreen,
-            OutputRed,
-            OutputBeep,
-            OutputLight,
-            OutputMotorPower,
-            OutputInitOK,
-            OutputZLock,
-            OutputLeftCylinder,
-            OutputRightCylinder,
-            OutputLeftSuck,
-            OutputRightSuck,
-            OutputScrewBlow,
-            OutputCamera,
-            OutputScrewSuck,
+            [Description("鎬ュ仠")]
+            EmergencyStop = 99,
         }
 
         /// <summary>
@@ -590,9 +572,9 @@
         public enum IOType
         {
             [Description("INPUT")]
-            In = 0,
+            INPUT = 0,
             [Description("OUTPUT")]
-            Out = 1
+            OUTPUT = 1
         }
     }
 }
diff --git a/src/Bro.Common.Model/Helper/PropertyConvertHelper.cs b/src/Bro.Common.Model/Helper/PropertyConvertHelper.cs
index 3117d1e..b802a92 100644
--- a/src/Bro.Common.Model/Helper/PropertyConvertHelper.cs
+++ b/src/Bro.Common.Model/Helper/PropertyConvertHelper.cs
@@ -392,6 +392,100 @@
             return true;
         }
     }
+
+    public class EnumDescriptionConverter<T> : TypeConverter where T : Enum
+    {
+        Dictionary<T, string> itemDict = new Dictionary<T, string>();
+        public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
+        {
+            typeof(T).GetEnumNames().ToList().ForEach(e =>
+            {
+                T temp = (T)Enum.Parse(typeof(T), e);
+                itemDict[temp] = temp.GetEnumDescription();
+            });
+
+            return new StandardValuesCollection(itemDict.Keys);
+        }
+        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
+        {
+            return true;
+        }
+
+        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
+        {
+            return true;
+        }
+
+        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
+        {
+            if (sourceType == typeof(String))
+                return true;
+
+            return base.CanConvertFrom(context, sourceType);
+        }
+
+        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
+        {
+            return base.CanConvertTo(context, destinationType);
+        }
+
+        public override object CreateInstance(ITypeDescriptorContext context, IDictionary propertyValues)
+        {
+            return base.CreateInstance(context, propertyValues);
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="context"></param>
+        /// <param name="culture"></param>
+        /// <param name="value">string</param>
+        /// <returns></returns>
+        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
+        {
+            try
+            {
+                foreach (string e in typeof(T).GetEnumNames().ToList())
+                {
+                    T temp = (T)Enum.Parse(typeof(T), e);
+
+                    if (temp.GetEnumDescription() == value.ToString())
+                        return temp;
+                }
+            }
+            catch (Exception ex)
+            {
+            }
+
+            return base.ConvertFrom(context, culture, value);
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="context"></param>
+        /// <param name="culture"></param>
+        /// <param name="value">IOItem</param>
+        /// <param name="destinationType"></param>
+        /// <returns></returns>
+        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
+        {
+            if (value is T temp)
+            {
+                //foreach (KeyValuePair<T, string> pair in itemDict)
+                //{
+                //    if (Convert.ToInt32(pair.Key) == Convert.ToInt32(temp))
+                //    {
+                //        return pair.Value;
+                //    }
+                //}
+
+                return temp.GetEnumDescription();
+            }
+
+            return base.ConvertTo(context, culture, value, destinationType);
+        }
+    }
     #endregion
 
     #region UITypeEditor
@@ -923,7 +1017,7 @@
 
             return base.EditValue(context, provider, value);
         }
-    }    
+    }
     #endregion
 
 }
diff --git a/src/Bro.Common.Model/Model/IOItem.cs b/src/Bro.Common.Model/Model/IOItem.cs
index 4b59a7c..147880e 100644
--- a/src/Bro.Common.Model/Model/IOItem.cs
+++ b/src/Bro.Common.Model/Model/IOItem.cs
@@ -42,7 +42,7 @@
             return false;
         }
 
-        public string GetDisplayText()
+        public virtual string GetDisplayText()
         {
             return $"{IOType.GetEnumDescription()}-{IONum}-{Value}";
         }
@@ -56,6 +56,11 @@
     public class IODefinition : IOItem
     {
         [Category("IO閰嶇疆")]
+        [Description("IO棰勫畾涔�")]
+        [TypeConverter(typeof(EnumDescriptionConverter<IOPrestatement>))]
+        public IOPrestatement IOPreStatement { get; set; } = IOPrestatement.Customized;
+
+        [Category("IO閰嶇疆")]
         [Description("IO鐢ㄩ�旀弿杩�")]
         public string IODesc { get; set; }
 
@@ -67,9 +72,9 @@
         [JsonIgnore]
         public override int Value { get; set; }
 
-        public new string GetDisplayText()
+        public override string GetDisplayText()
         {
-            return $"{IODesc} {IOType.GetEnumDescription()} {IONum}";
+            return $"{(IOPreStatement == IOPrestatement.Customized ? IODesc : IOPreStatement.GetEnumDescription())} {IOType.GetEnumDescription()} {IONum}";
         }
     }
 
diff --git a/src/Bro.Device.GTSCard/GTSCardDriver.cs b/src/Bro.Device.GTSCard/GTSCardDriver.cs
index de90301..b9bc5de 100644
--- a/src/Bro.Device.GTSCard/GTSCardDriver.cs
+++ b/src/Bro.Device.GTSCard/GTSCardDriver.cs
@@ -707,13 +707,13 @@
                 {
                     IONum = index,
                     Value = (inValue & (1 << index)) == 0 ? 1 : 0,
-                    IOType = IOType.In
+                    IOType = IOType.INPUT
                 };
                 IOItem outItem = new IOItem()
                 {
                     IONum = index,
                     Value = (outValue & (1 << index)) == 0 ? 1 : 0,
-                    IOType = IOType.Out
+                    IOType = IOType.OUTPUT
                 };
                 result.Add(inItem);
                 result.Add(outItem);
@@ -784,7 +784,7 @@
             foreach (var replyIOData in monitorSet.ReplyIODatas)
             {
                 //鍐欏叆IO杈撳嚭
-                if (replyIOData.IOType == IOType.Out)
+                if (replyIOData.IOType == IOType.OUTPUT)
                 {
                     GTSCardAPI.GT_SetDoBit((short)IConfig.CardNum, GTSCardAPI.MC_GPI, (short)replyIOData.IONum, (short)replyIOData.Value);
                 }
diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs
index a6a58a3..68b79c6 100644
--- a/src/Bro.M071.Process/M071Process.cs
+++ b/src/Bro.M071.Process/M071Process.cs
@@ -42,6 +42,16 @@
             InitialSetting();
 
             base.Open();
+
+            CheckMachineState();
+        }
+
+        /// <summary>
+        /// 妫�鏌ヨ澶囩姸鎬�
+        /// </summary>
+        private void CheckMachineState()
+        {
+            throw new NotImplementedException();
         }
 
         private void InitialSetting()
@@ -163,12 +173,6 @@
             {
                 throw new ProcessException("鏈緭鍏ヤ骇鍝佹潯鐮侊紝璇峰嬁寮�濮嬫祴閲�");
             }
-
-            //妫�鏌ヤ骇鍝佹斁缃甇K
-
-            //姘旂几鎺ㄥ姩鍘嬫澘绉诲姩鍒颁骇鍝佷笂鏂�
-
-            //鍘嬫澘鍘嬬揣浜у搧
 
             OnMeasureStart?.BeginInvoke(null, null);
 

--
Gitblit v1.8.0