From ff58f159796469f2ad7e6922fa5698654bc98c23 Mon Sep 17 00:00:00 2001 From: wells.liu <wells.liu@broconcentric.com> Date: 星期六, 04 七月 2020 13:51:39 +0800 Subject: [PATCH] 板卡运动配置 --- src/Bro.Common.Device/DeviceBase/MotionCardBase.cs | 147 +++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 136 insertions(+), 11 deletions(-) diff --git a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs index 271562e..117a980 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,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 @@ -119,14 +126,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 +156,10 @@ [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 +172,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 +247,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 +281,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 +339,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