using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; using Advantech.Motion; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Newtonsoft.Json.Serialization; using AssistClient.UI.PropExtend; using static AssistClient.UI.UIAxisDev; namespace AssistClient.UI { //[TypeConverter(typeof(PropertySorter))] //此属性使类无法序列化和反序列化 public class IOCardDevProp { private byte[] _in, _out; public IOCardDevProp(string deviceNum) { DeviceNum = deviceNum; } [PropertyOrder(1), Browsable(true), Category("1 设备"), DisplayName("设备号"), Description("设备号"), ReadOnly(true), JsonIgnore] public string DeviceNum { get;private set; } // [PropertyOrder(11), Browsable(false), Category("2 时时数据"), DisplayName("输入"), Description("输入"), ReadOnly(true), JsonIgnore] public byte[] IN { get { return _in; } set { _in = value; if (value == null) IN_SHOW = null; else { IN_SHOW = new string[value.Length]; IN_OP_SHOW= new string[value.Length]; for (int i = 0; i < IN_OP_SHOW.Length; i++) { if (string.IsNullOrWhiteSpace(IN_OP_SHOW[i])) IN_OP_SHOW[i] = "XXXX XXXX"; } string s; for (int i = 0; i < value.Length; i++) { s = Convert.ToString(value[i], 2).PadLeft(8, '0').Replace('0', 'L').Replace('1', 'H'); //IN_SHOW[i] = String.Join(" ", s.Reverse()); IN_SHOW[i] = s.Substring(0, 4) + " " + s.Substring(4); } } } } [PropertyOrder(12), Browsable(false), Category("2 时时数据"), DisplayName("输出"), Description("输出"), ReadOnly(true), JsonIgnore] public byte[] OUT { get { return _out; } set { _out = value; if (value == null) OUT_SHOW = null; else { OUT_SHOW = new string[value.Length]; OUT_OP_SHOW = new string[value.Length]; string s; for (int i = 0; i < value.Length; i++) { s = Convert.ToString(value[i], 2).PadLeft(8, '0').Replace('0', 'L').Replace('1', 'H'); OUT_SHOW[i] = s.Substring(0, 4) + " " + s.Substring(4); //String.Join(" ", s.Reverse()); OUT_OP_SHOW[i] = "XXXX XXXX"; } } } } [PropertyOrder(11), Browsable(true), Category("2 时时数据"), DisplayName("2.1 输入"), Description("输入"), ReadOnly(true), JsonIgnore] public string[] IN_SHOW { get; set; } [PropertyOrder(12), Browsable(true), Category("2 时时数据"), DisplayName("2.2 输出"), Description("输出"), ReadOnly(true), JsonIgnore] public string[] OUT_SHOW { get; set; } //IN_OP OUT_OP_INDEX OUT_OP_BIT_INDEX OUT_OP_VALUE [PropertyOrder(1), Browsable(true), Category("3 指令"), DisplayName("3.1 作业方向"), Description("作业方向")] public IODirectionEnum Direction { get; set; } /// /// 输入值, XXXX XXHL /// [PropertyOrder(11), Browsable(true), Category("3 指令"), DisplayName("3.2 输入指令值"), Description("输入指令值")] public string[] IN_OP_SHOW { get; set; }//单改数组属性不触发SET [PropertyOrder(11), Browsable(true), Category("3 指令"), DisplayName("3.3 输入超时告警(ms)"), Description("自动流程中等待输入指令超时则告警,0则无限期等待")] public uint IN_Waiting_Timeout { get; set; } = 0; /// /// 输出值, XXXX XXHL /// [PropertyOrder(11), Browsable(true), Category("3 指令"), DisplayName("3.4 输出指令值"), Description("输出指令值")] public string[] OUT_OP_SHOW { get; set; } // [PropertyOrder(25), Browsable(true), Category("4 控制"), DisplayName("4.1 运行前Sleep(ms)"), Description("休息时间")] public uint SleepPre { get; set; } [PropertyOrder(26), Browsable(true), Category("4 控制"), DisplayName("4.2 运行后Sleep(ms)"), Description("休息时间")] public uint SleepLater { get; set; } [PropertyOrder(27), Browsable(true), Category("4 控制"), DisplayName("4.4 禁用工序"), Description("禁用本工序")] public bool Disable { get; set; } /// /// 序列化 /// /// /// public string serialize() { return JsonConvert.SerializeObject(this); } /// /// 反序列化 /// /// /// public void deserialize(string json) { var o= JsonConvert.DeserializeObject(json); Type type = o.GetType(); System.Reflection.PropertyInfo[] properties = type.GetProperties(); foreach (System.Reflection.PropertyInfo property in properties) { string name = property.Name; if (!type.GetProperty(name).IsDefined(typeof(JsonIgnoreAttribute), true)) { var value = property.GetValue(o); this.GetType().GetProperty(name).SetValue(this, value); } } } private byte[] inputValue2byte(string[] strList) { byte[] result=new byte[strList.Length]; string[] strArr = Utils.Util.IODataFormatBinaryStr(strList,false, 'L'); for (int i=0; i< strArr.Length; i++) { strArr[i] = strArr[i].Replace("L", "0").Replace("H", "1").Replace("X", "0"); result[i] = Convert.ToByte(strArr[i], 2); } return result; } } }