From c866d11e0054a7299076fa53830b96610286ac2c Mon Sep 17 00:00:00 2001
From: xcd <834800634@qq.com>
Date: 星期四, 02 七月 2020 20:14:40 +0800
Subject: [PATCH] 板卡操作配置添加IO定义
---
src/Bro.Common.Model/Helper/PropertyConvertHelper.cs | 7 +
src/Bro.Common.Device/DeviceBase/MotionCardBase.cs | 77 +++++++++++++++++-
src/Bro.Common.Model/Model/IOItem.cs | 132 ++++++++++++++++++++++++++++++--
src/Bro.Common.Model/Forms/FrmDeviceOpConfigEditor.cs | 2
src/Bro.Common.Model/Helper/EnumHelper.cs | 4
5 files changed, 201 insertions(+), 21 deletions(-)
diff --git a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
index 271562e..dce4dcd 100644
--- a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
+++ b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
@@ -156,7 +156,46 @@
public string GetDisplayText()
{
- throw new NotImplementedException();
+ 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();
}
}
@@ -180,10 +219,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 +277,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;
+ });
}
}
}
diff --git a/src/Bro.Common.Model/Forms/FrmDeviceOpConfigEditor.cs b/src/Bro.Common.Model/Forms/FrmDeviceOpConfigEditor.cs
index 26b8303..bb4b9a7 100644
--- a/src/Bro.Common.Model/Forms/FrmDeviceOpConfigEditor.cs
+++ b/src/Bro.Common.Model/Forms/FrmDeviceOpConfigEditor.cs
@@ -91,7 +91,7 @@
var attr = device.GetType().GetCustomAttribute<DeviceAttribute>();
if (attr != null)
{
- var opConfig= ConfigFactory.GetOperationConfig(attr.TypeCode);
+ var opConfig = ConfigFactory.GetOperationConfig(attr.TypeCode);
opConfig.DeviceId = device.Id;
propGrid.SelectedObject = opConfig;
}
diff --git a/src/Bro.Common.Model/Helper/EnumHelper.cs b/src/Bro.Common.Model/Helper/EnumHelper.cs
index 07c890b..15d0610 100644
--- a/src/Bro.Common.Model/Helper/EnumHelper.cs
+++ b/src/Bro.Common.Model/Helper/EnumHelper.cs
@@ -589,9 +589,9 @@
/// </summary>
public enum IOType
{
- [Description("In杈撳叆")]
+ [Description("INPUT")]
In = 0,
- [Description("Out杈撳嚭")]
+ [Description("OUTPUT")]
Out = 1
}
}
diff --git a/src/Bro.Common.Model/Helper/PropertyConvertHelper.cs b/src/Bro.Common.Model/Helper/PropertyConvertHelper.cs
index dd48235..3117d1e 100644
--- a/src/Bro.Common.Model/Helper/PropertyConvertHelper.cs
+++ b/src/Bro.Common.Model/Helper/PropertyConvertHelper.cs
@@ -184,6 +184,13 @@
}
return "";
}
+
+ //foreach (DictionaryEntry myDE in Hash)
+ //{
+ // if (myDE.Key.Equals(v))
+ // return myDE.Value;
+ //}
+ return null;
}
}
catch (Exception)
diff --git a/src/Bro.Common.Model/Model/IOItem.cs b/src/Bro.Common.Model/Model/IOItem.cs
index 486d0ff..4b59a7c 100644
--- a/src/Bro.Common.Model/Model/IOItem.cs
+++ b/src/Bro.Common.Model/Model/IOItem.cs
@@ -4,11 +4,12 @@
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
+using System.Globalization;
using static Bro.Common.Helper.EnumHelper;
namespace Bro.Common.Model
{
- public class IOItem : IComplexDisplay
+ public class IOItem : IComplexDisplay, IEqualityComparer
{
/// <summary>
/// IO鐐圭紪鍙�
@@ -31,9 +32,24 @@
[Description("IO绫诲瀷")]
public virtual IOType IOType { get; set; }
+ public new bool Equals(object x, object y)
+ {
+ if (x is IOItem a && y is IOItem b)
+ {
+ return a.IOType == b.IOType && a.IONum == b.IONum;
+ }
+
+ return false;
+ }
+
public string GetDisplayText()
{
- return $"{IOType.GetEnumDescription()},缂栧彿{IONum}锛孖O鐐圭殑鍊納Value}";
+ return $"{IOType.GetEnumDescription()}-{IONum}-{Value}";
+ }
+
+ public int GetHashCode(object obj)
+ {
+ return obj.GetHashCode();
}
}
@@ -57,37 +73,131 @@
}
}
- public class IORefrenceItem
+ public class IORefrenceItem : IComplexDisplay
{
[Category("IO鎿嶄綔閰嶇疆")]
[Description("闇�瑕佹搷浣滅殑IO")]
[TypeConverter(typeof(IORefrenceItemSourceConverter))]
- public IOItem IOItem { get; set; } = new IOItem();
+ public IODefinition IOItem { get; set; } = new IODefinition();
[Category("IO鎿嶄綔閰嶇疆")]
[Description("闇�瑕佹搷浣滅殑IO鐨勬暟鍊�")]
- public int CheckValue { get => IOItem.Value; set => IOItem.Value = value; }
+ public int CheckValue
+ {
+ get => IOItem.Value;
+ set => IOItem.Value = value;
+ }
[Browsable(false)]
[JsonIgnore]
public List<IODefinition> IOItemSource { get; set; } = new List<IODefinition>();
+
+ public string GetDisplayText()
+ {
+ return IOItem.IODesc + "-" + CheckValue;
+ }
}
- public class IORefrenceItemSourceConverter : ComboBoxItemTypeConvert
+ public class IORefrenceItemSourceConverter : TypeConverter
{
- public override Hashtable GetConvertHash(ITypeDescriptorContext context)
+ Dictionary<IODefinition, string> itemDict = new Dictionary<IODefinition, string>();
+ public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
- Hashtable table = new Hashtable();
-
if (context.Instance is IORefrenceItem item)
{
item.IOItemSource.ForEach(i =>
{
- table[i.IODesc + i.IOType.GetEnumDescription() + i.IONum] = i as IOItem;
+ itemDict[i] = i.IODesc + "-" + i.IOType.GetEnumDescription() + "-" + i.IONum;
});
+
+ return new StandardValuesCollection(itemDict.Keys);
}
- return table;
+ return base.GetStandardValues(context);
+ }
+ 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)
+ {
+ var s = value.ToString().Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
+
+ if (s.Length == 3)
+ {
+ foreach (KeyValuePair<IODefinition, string> pair in itemDict)
+ {
+ if (pair.Value == value.ToString())
+ {
+ return pair.Key;
+ }
+ }
+
+ IODefinition item = new IODefinition();
+ item.IODesc = s[0];
+ item.IOType = (IOType)Enum.Parse(typeof(IOType), s[1]);
+ item.IONum = int.Parse(s[2]);
+ return item;
+ }
+
+ 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 IODefinition item)
+ {
+ foreach (KeyValuePair<IODefinition, string> pair in itemDict)
+ {
+ if (pair.Key.IOType == item.IOType && pair.Key.IONum == item.IONum)
+ {
+ return pair.Value;
+ }
+ }
+
+ return item.IODesc + "-" + item.IOType.GetEnumDescription() + "-" + item.IONum;
+ }
+
+ return base.ConvertTo(context, culture, value, destinationType);
}
}
}
--
Gitblit v1.8.0