From 3cba54c4ee8d29d33ed21a2c749a9d2f2d03e22d Mon Sep 17 00:00:00 2001
From: xcd <834800634@qq.com>
Date: 星期五, 03 七月 2020 18:33:30 +0800
Subject: [PATCH] 板卡IO定义修改。板卡预定义操作功能实现

---
 src/Bro.Device.GTSCard/GTSCardDriver.cs            |   22 +-
 /dev/null                                          |   13 --
 src/Bro.Common.Device/DeviceBase/MotionCardBase.cs |   20 +++
 src/Bro.M071.Process/M071Process.cs                |   37 -----
 src/Bro.Common.Model/Model/IOItem.cs               |   15 +-
 src/Bro.M071.Process/M071Process_MotionCard.cs     |  217 ++++++++++++++++++++++++++++++++++++
 src/Bro.M071.Process/Bro.M071.Process.csproj       |    2 
 src/Bro.M071.Process/M071Config.cs                 |    3 
 src/Bro.M071.Process/M071Models.cs                 |    4 
 src/Bro.Common.Model/Helper/EnumHelper.cs          |   19 +++
 10 files changed, 281 insertions(+), 71 deletions(-)

diff --git a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
index dce4dcd..d7d1a41 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,7 +27,7 @@
         public abstract void ResetAlarm();
         public abstract ResponseMessage Run(IOperationConfig config);
 
-        public void ExcuteMonitorInvok(DateTime dateTime, string invokeDevice, IDevice device, IMonitorSet monitorSet)
+        public void ExcuteMonitorInvoke(DateTime dateTime, string invokeDevice, IDevice device, IMonitorSet monitorSet)
         {
             OnMonitorInvoke?.BeginInvoke(dateTime, invokeDevice, device, monitorSet, null, null);
         }
@@ -43,6 +44,10 @@
                 return InitialConfig as MotionCardInitialConfigBase;
             }
         }
+
+        public List<IOItem> MonitorValues { get; set; } = new List<IOItem>();
+
+        public abstract void WriteOutput(short cardNum, short index, IOValue value);
     }
 
     public class MotionCardInitialConfigBase : InitialConfigBase, IMonitorConfig
@@ -126,6 +131,7 @@
         #endregion
     }
 
+    [Device("MotionCardBase", "鏉垮崱鎿嶄綔閰嶇疆鍩虹被", EnumHelper.DeviceAttributeType.OperationConfig)]
     public class MotionCardOperationConfigBase : OperationConfigBase, IComplexDisplay
     {
         [Category("IO鎿嶄綔閰嶇疆")]
@@ -179,7 +185,7 @@
             IOConfirmCollection.ForEach(i =>
             {
                 confirm += i.GetDisplayText() + " ";
-            }); 
+            });
             if (confirm != "")
             {
                 confirm = " 纭锛�" + confirm;
@@ -199,6 +205,16 @@
         }
     }
 
+    [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
     {
         protected override CollectionForm CreateCollectionForm()
diff --git a/src/Bro.Common.Model/Helper/EnumHelper.cs b/src/Bro.Common.Model/Helper/EnumHelper.cs
index 52c5349..703be4a 100644
--- a/src/Bro.Common.Model/Helper/EnumHelper.cs
+++ b/src/Bro.Common.Model/Helper/EnumHelper.cs
@@ -577,6 +577,16 @@
             OUTPUT = 1
         }
 
+        public enum IOValue
+        {
+            [Description("鍏抽棴")]
+            FALSE = 0,
+            [Description("寮�鍚�")]
+            TRUE = 1,
+            [Description("鍙嶈浆")]
+            REVERSE = 2,
+        }
+
         /// <summary>
         /// PubSubCenter浜嬩欢涓績鐨勬秷鎭被鍨�
         /// </summary>
@@ -593,5 +603,14 @@
             //[Description("鏇存柊鏁版嵁")]
             //UpdateData,
         }
+
+        public enum MachineState
+        {
+            Unknown,
+            Ready,
+            Running,
+            Alarm,
+            Pause,
+        }
     }
 }
diff --git a/src/Bro.Common.Model/Model/IOItem.cs b/src/Bro.Common.Model/Model/IOItem.cs
index 147880e..653cdb2 100644
--- a/src/Bro.Common.Model/Model/IOItem.cs
+++ b/src/Bro.Common.Model/Model/IOItem.cs
@@ -22,8 +22,9 @@
         /// IO鐐圭殑鍊�
         /// </summary>
         [Category("IO閰嶇疆")]
-        [Description("IO鏁板��")]
-        public virtual int Value { get; set; }
+        [Description("IO鐘舵��")]
+        [TypeConverter(typeof(EnumDescriptionConverter<IOValue>))]
+        public virtual IOValue Value { get; set; }
 
         /// <summary>
         /// IO鐐规槸in杩樻槸out
@@ -44,7 +45,7 @@
 
         public virtual string GetDisplayText()
         {
-            return $"{IOType.GetEnumDescription()}-{IONum}-{Value}";
+            return $"{IOType.GetEnumDescription()}-{IONum}-{Value.GetEnumDescription()}";
         }
 
         public int GetHashCode(object obj)
@@ -70,7 +71,7 @@
 
         [Browsable(false)]
         [JsonIgnore]
-        public override int Value { get; set; }
+        public override IOValue Value { get; set; }
 
         public override string GetDisplayText()
         {
@@ -86,8 +87,8 @@
         public IODefinition IOItem { get; set; } = new IODefinition();
 
         [Category("IO鎿嶄綔閰嶇疆")]
-        [Description("闇�瑕佹搷浣滅殑IO鐨勬暟鍊�")]
-        public int CheckValue
+        [Description("闇�瑕佹搷浣滅殑IO鐨勭姸鎬�")]
+        public IOValue CheckValue
         {
             get => IOItem.Value;
             set => IOItem.Value = value;
@@ -99,7 +100,7 @@
 
         public string GetDisplayText()
         {
-            return IOItem.IODesc + "-" + CheckValue;
+            return IOItem.IODesc + "-" + CheckValue.GetEnumDescription();
         }
     }
 
diff --git a/src/Bro.Device.GTSCard/GTSCardDriver.cs b/src/Bro.Device.GTSCard/GTSCardDriver.cs
index b9bc5de..5b60b6d 100644
--- a/src/Bro.Device.GTSCard/GTSCardDriver.cs
+++ b/src/Bro.Device.GTSCard/GTSCardDriver.cs
@@ -652,16 +652,17 @@
         /// <param name="cardNum">鍗″彿</param>
         /// <param name="index">杈撳嚭鍙�,杩斿洖1-16</param>
         /// <param name="value">false琛ㄧず杈撳嚭锛宼rue琛ㄧず鍏抽棴</param>
-        public void WriteOut(short cardNum, short index, bool value)
+        public override void WriteOutput(short cardNum, short index, IOValue value)
         {
             short outNum = (short)(index % 100 + 1);
-            if (value)
+            if ((int)value <= 1)
             {
-                GTSCardAPI.GT_SetDoBit(cardNum, GTSCardAPI.MC_GPO, outNum, 0);
+                GTSCardAPI.GT_SetDoBit(cardNum, GTSCardAPI.MC_GPO, outNum, (short)value);
             }
             else
             {
-                GTSCardAPI.GT_SetDoBit(cardNum, GTSCardAPI.MC_GPO, outNum, 1);
+                var currentValue = (int)MonitorValues.FirstOrDefault(u => u.IONum == outNum && u.IOType == IOType.OUTPUT).Value;
+                GTSCardAPI.GT_SetDoBit(cardNum, GTSCardAPI.MC_GPO, outNum, (short)(currentValue == 1 ? 0 : 1));
             }
         }
 
@@ -687,7 +688,7 @@
 
         #region IMonitor
 
-        public List<IOItem> MonitorValues { get; set; } = new List<IOItem>();
+        //public List<IOItem> MonitorValues { get; set; } = new List<IOItem>();
 
 
         public List<IOItem> GetMonitorValues()
@@ -706,13 +707,13 @@
                 IOItem inItem = new IOItem()
                 {
                     IONum = index,
-                    Value = (inValue & (1 << index)) == 0 ? 1 : 0,
+                    Value = (inValue & (1 << index)) == 0 ? IOValue.TRUE : IOValue.FALSE,
                     IOType = IOType.INPUT
                 };
                 IOItem outItem = new IOItem()
                 {
                     IONum = index,
-                    Value = (outValue & (1 << index)) == 0 ? 1 : 0,
+                    Value = (outValue & (1 << index)) == 0 ? IOValue.TRUE : IOValue.FALSE,
                     IOType = IOType.OUTPUT
                 };
                 result.Add(inItem);
@@ -801,13 +802,12 @@
             {
                 MotionCardWarningSet warningSet = wSet as MotionCardWarningSet;
 
-                bool isOn = ((tempNew.FirstOrDefault(u => u.IONum == warningSet.TriggerIndex && u.IOType == warningSet.WarningIOModel)?.Value >> warningSet.TriggerIndex) & 1) == (warningSet.TriggerValue ? 1 : 0);
+                bool isOn = (((int)((tempNew.FirstOrDefault(u => u.IONum == warningSet.TriggerIndex && u.IOType == warningSet.WarningIOModel)?.Value)) >> warningSet.TriggerIndex) & 1) == (warningSet.TriggerValue ? 1 : 0);
 
                 if (warningSet.CurrentStatus != isOn)
                 {
                     warningSet.CurrentStatus = isOn;
                     warningSet.TriggerTime = DateTime.Now;
-                    warningSet.WarningDescription = $"璀︽姤锛歿warningSet.Name}-瑙﹀彂绱㈠紩锛歿warningSet.TriggerIndex}-{warningSet.WarningIOModel.GetEnumDescription()}:{warningSet.WarningCode}";
                     SaveAlarmCSVAsync(DateTime.Now, this.Name, warningSet);
                     ExcuteMonitorAlarm(DateTime.Now, this, warningSet);
                 }
@@ -828,7 +828,7 @@
 
                 if (newIOItem?.Value != oldIOItem?.Value)
                 {
-                    if (monitorSet.TriggerValue == -999 || newIOItem.Value == monitorSet.TriggerValue)
+                    if (monitorSet.TriggerValue == -999 || (int)newIOItem.Value == monitorSet.TriggerValue)
                     {
                         if (monitorSet.OpConfig == null)
                         {
@@ -840,7 +840,7 @@
                         //    return tempNew[index].Value;
                         //}).ToList();
 
-                        ExcuteMonitorInvok(DateTime.Now, monitorSet.InvokeDevice, this, monitorSet);
+                        ExcuteMonitorInvoke(DateTime.Now, monitorSet.InvokeDevice, this, monitorSet);
                     }
                 }
             });
diff --git a/src/Bro.M071.Process/Bro.M071.Process.csproj b/src/Bro.M071.Process/Bro.M071.Process.csproj
index ebc097e..08b6346 100644
--- a/src/Bro.M071.Process/Bro.M071.Process.csproj
+++ b/src/Bro.M071.Process/Bro.M071.Process.csproj
@@ -110,7 +110,7 @@
     <Compile Include="M071Config.cs" />
     <Compile Include="M071Models.cs" />
     <Compile Include="M071Process.cs" />
-    <Compile Include="M071Process_IO.cs" />
+    <Compile Include="M071Process_MotionCard.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="UI\KeyIndicator.cs" />
     <Compile Include="UI\M071Node.cs" />
diff --git a/src/Bro.M071.Process/M071Config.cs b/src/Bro.M071.Process/M071Config.cs
index b3ae3f3..84af1e8 100644
--- a/src/Bro.M071.Process/M071Config.cs
+++ b/src/Bro.M071.Process/M071Config.cs
@@ -44,18 +44,21 @@
         [Category("鑳屾櫙鍥剧墖璁剧疆")]
         [Description("杩愯鑳屾櫙鍥剧墖璺緞")]
         [Editor(typeof(FileDialogEditor), typeof(UITypeEditor))]
+        [DisplayName("鑳屾櫙鍥剧墖")]
         public string BackgroundImagePath { get; set; }
 
         [Category("妫�娴嬭缃�")]
         [Description("鎷嶆憚鐐逛綅璁剧疆闆嗗悎")]
         [TypeConverter(typeof(CollectionCountConvert))]
         [Editor(typeof(ComplexCollectionEditor<SnapshotPoint>), typeof(UITypeEditor))]
+        [DisplayName("鎷嶆憚鐐逛綅")]
         public List<SnapshotPoint> SnapshotPointCollection { get; set; } = new List<SnapshotPoint>();
 
         [Category("妫�娴嬭缃�")]
         [Description("瑙嗚妫�娴嬪崟閿厤缃泦鍚�")]
         [TypeConverter(typeof(CollectionCountConvert))]
         [Editor(typeof(ComplexCollectionEditor<KeyUnit>), typeof(UITypeEditor))]
+        [DisplayName("鍗曢敭閰嶇疆")]
         public List<KeyUnit> KeyUnitCollection { get; set; } = new List<KeyUnit>();
 
         [Category("妫�娴嬭缃�")]
diff --git a/src/Bro.M071.Process/M071Models.cs b/src/Bro.M071.Process/M071Models.cs
index 8c15fde..a5c4137 100644
--- a/src/Bro.M071.Process/M071Models.cs
+++ b/src/Bro.M071.Process/M071Models.cs
@@ -312,7 +312,7 @@
         [Category("鍗曢敭閰嶇疆")]
         [Description("鍗曢敭缁撴灉閰嶇疆")]
         [TypeConverter(typeof(KeyUnitResultConverter))]
-        public string KeyResult { get; set; } = "";
+        public string KeyResultId { get; set; } = "";
 
 
         public List<HImage> KeyImages = new List<HImage>();
@@ -342,7 +342,7 @@
         {
             string msg = Key;
 
-            msg += string.IsNullOrWhiteSpace(KeyResult) ? "" : $"-{KeyResult}";
+            msg += string.IsNullOrWhiteSpace(KeyResultId) ? "" : $"-{KeyResultId}";
 
             return msg;
         }
diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs
index 68b79c6..b5235b2 100644
--- a/src/Bro.M071.Process/M071Process.cs
+++ b/src/Bro.M071.Process/M071Process.cs
@@ -110,7 +110,7 @@
                     if (keyRespone.Count == 0)
                         throw new ProcessException($"{u.GetDisplayText()}瀵瑰簲鐨勫崟閿笉瀛樺湪鎴栦笉鍙敤");
 
-                    if (b.KeyResult == "All")
+                    if (b.KeyResultId == "All")
                     {
                         keyRespone.SelectMany(kr => kr.KeyResultList).ToList().ForEach(r =>
                           {
@@ -119,7 +119,7 @@
                     }
                     else
                     {
-                        b.MeasureValueDict[b.KeyResult] = null;
+                        b.MeasureValueDict[b.KeyResultId] = null;
                     }
                 });
             });
@@ -236,39 +236,6 @@
             BarCode = "";
 
             return new ProcessResponse(true);
-        }
-
-        /// <summary>
-        /// 鏆傚仠鏍囧織  
-        /// WaitHandle 鏆傚仠鍙ユ焺  榛樿涓洪潪闃诲 鍙墽琛�
-        /// WaitResult 鏆傚仠鏍囧織 true 姝e父鎵ц  false 鏆傚仠涓�
-        /// </summary>
-        ManualWaitConfirm _pauseHandle = new ManualWaitConfirm()
-        {
-            WaitHandle = new ManualResetEvent(true),
-            WaitResult = true,
-        };
-
-        [ProcessMethod("", "PauseJob", "鏆傚仠娴佺▼", InvokeType.TestInvoke)]
-        public ProcessResponse PauseJob(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
-        {
-            if (_pauseHandle.WaitResult)
-            {
-                #region 鏉垮崱鏆傚仠鍔ㄤ綔
-                #endregion
-
-                _pauseHandle.WaitHandle.Reset();
-            }
-            else
-            {
-                #region 鏉垮崱鎭㈠鍔ㄤ綔
-                #endregion
-
-                _pauseHandle.WaitHandle.Set();
-            }
-
-            _pauseHandle.WaitResult = !_pauseHandle.WaitResult;
-            return new ProcessResponse(_pauseHandle.WaitResult);
         }
 
         #region 绉佹湁鏂规硶
diff --git a/src/Bro.M071.Process/M071Process_IO.cs b/src/Bro.M071.Process/M071Process_IO.cs
deleted file mode 100644
index 3a0dd4f..0000000
--- a/src/Bro.M071.Process/M071Process_IO.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Bro.M071.Process
-{
-    public partial class M071Process
-    {
-
-    }
-}
diff --git a/src/Bro.M071.Process/M071Process_MotionCard.cs b/src/Bro.M071.Process/M071Process_MotionCard.cs
new file mode 100644
index 0000000..a0f31eb
--- /dev/null
+++ b/src/Bro.M071.Process/M071Process_MotionCard.cs
@@ -0,0 +1,217 @@
+锘縰sing Bro.Common.Base;
+using Bro.Common.Helper;
+using Bro.Common.Interface;
+using Bro.Common.Model;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing.Design;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using static Bro.Common.Helper.EnumHelper;
+
+namespace Bro.M071.Process
+{
+    public partial class M071Process
+    {
+        Timer _resetTimer = null;
+        const int FULLRESETTIME = 5;
+
+        MachineState machineState = MachineState.Unknown;
+        MachineState MachineState
+        {
+            get => machineState;
+            set
+            {
+                machineState = value;
+
+                switch (machineState)
+                {
+                    case MachineState.Ready:
+                        break;
+                    case MachineState.Running:
+                        break;
+                    case MachineState.Alarm:
+                        break;
+                    case MachineState.Pause:
+                        break;
+                    default:
+                        break;
+                }
+            }
+        }
+
+        [ProcessMethod("MotionCardBase", "Reset", "绠�鍗曞浣嶆搷浣�", InvokeType.TestInvoke)]
+        public ProcessResponse Reset(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            //if (opConfig == null)
+            //{
+            //    var monitorSet = Config.MonitorSetCollection.FirstOrDefault(u => u.MethodCode == "Reset");
+            //    if (monitorSet == null)
+            //        throw new ProcessException("鏈厤缃粯璁ゅ浣嶆搷浣�");
+
+            //    opConfig = monitorSet.OpConfig;
+            //    if (opConfig == null)
+            //        throw new ProcessException("鏈厤缃浣嶆搷浣滃叿浣撻厤缃姩浣�");
+
+            //    if (invokeDevice == null)
+            //    {
+            //        invokeDevice = DeviceCollection.FirstOrDefault(u => u.Id == monitorSet.InvokeDevice);
+            //        if (invokeDevice == null)
+            //            throw new ProcessException("鏈厤缃浣嶆搷浣滄墽琛岃澶�");
+            //    }
+            //}
+
+            MotionCardDefaultRun("Reset", ref opConfig, ref invokeDevice);
+
+            if (_resetTimer == null)
+            {
+                _resetTimer = new Timer(FullReset, null, -1, -1);
+            }
+
+            if (opConfig.InputPara.Count > 0)
+            {
+                //澶у浣嶄俊鍙�
+                _resetTimer.Change(-1, opConfig.InputPara[0] == 1 ? FULLRESETTIME * 1000 : -1);
+            }
+
+            //if (invokeDevice is MotionCardBase motionCard)
+            //{
+            //    motionCard.Run(opConfig);
+            //}
+
+            return new ProcessResponse(true);
+        }
+
+        private void FullReset(object state)
+        {
+            FullReset(null, null, null);
+        }
+
+        [ProcessMethod("MotionCardOperationConfigCollection", "FullReset", "澶у浣嶆搷浣�", InvokeType.TestInvoke)]
+        public ProcessResponse FullReset(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            //if (opConfig == null)
+            //{
+            //    var monitorSet = Config.MonitorSetCollection.FirstOrDefault(u => u.MethodCode == "FullReset");
+            //    if (monitorSet == null)
+            //        throw new ProcessException("鏈厤缃粯璁ゅぇ澶嶄綅鎿嶄綔");
+
+            //    opConfig = monitorSet.OpConfig;
+            //    if (opConfig == null)
+            //        throw new ProcessException("鏈厤缃ぇ澶嶄綅鎿嶄綔鍏蜂綋閰嶇疆鍔ㄤ綔");
+
+            //    if (invokeDevice == null)
+            //    {
+            //        invokeDevice = DeviceCollection.FirstOrDefault(u => u.Id == monitorSet.InvokeDevice);
+            //        if (invokeDevice == null)
+            //            throw new ProcessException("鏈厤缃ぇ澶嶄綅鎿嶄綔鎵ц璁惧");
+            //    }
+            //}
+
+            //if (invokeDevice is MotionCardBase motionCard)
+            //{
+            //    motionCard.Run(opConfig);
+            //}
+
+            MotionCardDefaultRun("FullReset", ref opConfig, ref invokeDevice);
+
+            return new ProcessResponse(true);
+        }
+
+        /// <summary>
+        /// 鏆傚仠鏍囧織  
+        /// WaitHandle 鏆傚仠鍙ユ焺  榛樿涓洪潪闃诲 鍙墽琛�
+        /// WaitResult 鏆傚仠鏍囧織 true 姝e父鎵ц  false 鏆傚仠涓�
+        /// </summary>
+        ManualWaitConfirm _pauseHandle = new ManualWaitConfirm()
+        {
+            WaitHandle = new ManualResetEvent(true),
+            WaitResult = true,
+        };
+
+        [ProcessMethod("", "PauseJob", "鏆傚仠娴佺▼", InvokeType.TestInvoke)]
+        public ProcessResponse PauseJob(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            if (_pauseHandle.WaitResult)
+            {
+                #region 鏉垮崱鏆傚仠鍔ㄤ綔
+                #endregion
+
+                _pauseHandle.WaitHandle.Reset();
+            }
+            else
+            {
+                #region 鏉垮崱鎭㈠鍔ㄤ綔
+                #endregion
+
+                _pauseHandle.WaitHandle.Set();
+            }
+
+            _pauseHandle.WaitResult = !_pauseHandle.WaitResult;
+            return new ProcessResponse(_pauseHandle.WaitResult);
+        }
+
+        [ProcessMethod("MotionCardBase", "SwitchLightRed", "鍒囨崲鎸囩ず鐏�-绾�", InvokeType.TestInvoke)]
+        public ProcessResponse SwitchLightRed(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            MotionCardDefaultRun("SwitchLightRed", ref opConfig, ref invokeDevice);
+            return new ProcessResponse(true);
+        }
+
+        [ProcessMethod("MotionCardBase", "SwitchLightYellow", "鍒囨崲鎸囩ず鐏�-榛�", InvokeType.TestInvoke)]
+        public ProcessResponse SwitchLightYellow(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            return new ProcessResponse(true);
+        }
+
+        [ProcessMethod("MotionCardBase", "SwitchLightGreen", "鍒囨崲鎸囩ず鐏�-缁�", InvokeType.TestInvoke)]
+        public ProcessResponse SwitchLightGreen(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            return new ProcessResponse(true);
+        }
+
+        [ProcessMethod("MotionCardBase", "SwitchBeep", "鍒囨崲铚傞福鍣�", InvokeType.TestInvoke)]
+        public ProcessResponse SwitchBeep(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            return new ProcessResponse(true);
+        }
+
+        [ProcessMethod("MotionCardBase", "SwitchNormalLight", "鍒囨崲鏃ュ厜鐏�", InvokeType.TestInvoke)]
+        public ProcessResponse SwitchNormalLight(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            MotionCardDefaultRun("SwitchNormalLight", ref opConfig, ref invokeDevice);
+
+            return new ProcessResponse(true);
+        }
+
+        private void MotionCardDefaultRun(string methodCode, ref IOperationConfig opConfig, ref IDevice invokeDevice)
+        {
+            IMonitorSet monitorSet = null;
+            if (opConfig == null)
+            {
+                monitorSet = Config.MonitorSetCollection.FirstOrDefault(u => u.MethodCode == methodCode);
+                if (monitorSet == null)
+                    throw new ProcessException("鏈厤缃粯璁ゆ搷浣�");
+
+                opConfig = monitorSet.OpConfig;
+                if (opConfig == null)
+                    throw new ProcessException("鏈厤缃叿浣撻厤缃姩浣�");
+            }
+
+            if (invokeDevice == null)
+            {
+                invokeDevice = DeviceCollection.FirstOrDefault(u => u.Id == monitorSet.InvokeDevice);
+                if (invokeDevice == null)
+                    throw new ProcessException("鏈厤缃搷浣滄墽琛岃澶�");
+            }
+
+            if (invokeDevice is MotionCardBase motionCard)
+            {
+                motionCard.Run(opConfig);
+            }
+        }
+    }
+}

--
Gitblit v1.8.0