banboshi_V1/halftoneproject-master/Code/UI/IOCardDevProp.cs
2023-10-31 13:19:29 +08:00

164 lines
6.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 ProductionControl.UI.PropExtend;
using static ProductionControl.UI.UIAxisDev;
namespace ProductionControl.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("输入 (H-高/1L-低/0)"), ReadOnly(true), JsonIgnore]
public string[] IN_SHOW { get; set; }
[PropertyOrder(12), Browsable(true), Category("2 时时数据"), DisplayName("2.2 输出"), Description("输出 (H-高/1L-低/0)"), 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; }
/// <summary>
/// 输入值, XXXX XXHL
/// </summary>
[PropertyOrder(11), Browsable(true), Category("3 指令"), DisplayName("3.2 输入指令值"), Description("输入指令值 (H-高/1L-低/0X-忽略)")]
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;
/// <summary>
/// 输出值, XXXX XXHL
/// </summary>
[PropertyOrder(11), Browsable(true), Category("3 指令"), DisplayName("3.4 输出指令值"), Description("输出指令值 (H-高/1L-低/0X-忽略)")]
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("禁用本工序(True-是False-否)")]
public bool Disable { get; set; }
/// <summary>
/// 序列化
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public string serialize()
{
return JsonConvert.SerializeObject(this);
}
/// <summary>
/// 反序列化
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public void deserialize(string json)
{
var o= JsonConvert.DeserializeObject<IOCardDevProp>(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;
}
}
}