using Autofac; using Bro.Common.Helper; using Bro.Common.Interface; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing.Design; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Bro.Common.Model { /// /// PLC监听设置 /// public class MonitorSet : IComplexDisplay { //[Category("监听配置")] //[Description("监听设备")] //[TypeConverter(typeof(MonitorDeviceConverter))] //public string MonitorDevice { get; set; } [Category("监听配置")] [Description("调用方法")] [TypeConverter(typeof(MonitorCodeConverter))] public string MethodCode { get; set; } [Category("监听配置")] [Description("方法操作配置")] [TypeConverter(typeof(ComplexObjectConvert))] [Editor(typeof(IOperationConfigEditor), typeof(UITypeEditor))] public IOperationConfig OpConfig { get; set; } /// /// 监听地址索引 按照PLC监听地址从0开始的索引 /// [Category("监听设置")] [Description("监听地址索引 按照PLC监听地址从0开始的索引")] public int TriggerIndex { get; set; } = -1; /// /// 触发值 /// [Category("监听设置")] [Description("触发值,设置为-999时变化即触发")] public int TriggerValue { get; set; } = -1; /// /// 传入数据地址的索引 按照PLC监听地址从0开始的索引集合 /// [Category("监听设置")] [Description("传入数据地址的索引 按照PLC监听地址从0开始的索引")] [TypeConverter(typeof(SimpleCollectionConvert))] public List InputDataIndex { get; set; } = new List(); /// /// 数据地址 实际PLC寄存器的地址,例如 40012 /// [Category("回传设置")] [Description("回传数据地址 实际PLC寄存器的地址,10进制,例如 40012")] public int ReplyDataAddress { get; set; } = -1; /// /// 通知地址 实际PLC寄存器的地址,例如 40012 /// [Category("回传设置")] [Description("通知地址 实际PLC寄存器的地址,10进制,例如 40012")] public int NoticeAddress { get; set; } = -1; //[Browsable(false)] //[JsonIgnore] //public List InputDatas { get; set; } = new List(); [Browsable(false)] [JsonIgnore] public ProcessResponse Response { get; set; } = new ProcessResponse(); public MonitorSet() { } //public MonitorSet(int triggerIndex, int triggerValue, List inputDataIndex, int dataIndex, int noticeIndex) //{ // TriggerIndex = triggerIndex; // TriggerValue = triggerValue; // InputDataIndex = inputDataIndex; // ReplyDataAddress = dataIndex; // NoticeAddress = noticeIndex; //} public string GetDisplayText() { using (var scope = GlobalVar.Container.BeginLifetimeScope()) { List methodList = scope.Resolve>(); //List deviceList = scope.Resolve>(); string desc = ""; //var device = deviceList.FirstOrDefault(u => u.Id == MonitorDevice); //if (device != null) //{ // desc += ($"{device.Name}"); //} //else //{ // desc += "无设备"; //} desc += " "; var method = methodList.FirstOrDefault(u => u.MethodCode == MethodCode); if (method != null) { desc += ($"{method.MethodCode}-{method.MethodDesc}"); } else { desc += "无调用"; } desc += $"_{TriggerIndex}:{TriggerValue}"; return desc; } } } public class MonitorCodeConverter : ComboBoxItemTypeConvert { public override void GetConvertHash() { using (var scope = GlobalVar.Container.BeginLifetimeScope()) { List methodList = scope.Resolve>(); methodList.ForEach(d => { _hash[d.MethodCode] = d.MethodCode + "_" + d.MethodDesc; }); } } } public class MonitorDeviceConverter : ComboBoxItemTypeConvert { public override void GetConvertHash() { using (var scope = GlobalVar.Container.BeginLifetimeScope()) { List deviceList = scope.Resolve>(); deviceList.ForEach(d => { _hash[d.Id] = d.Name; }); } } } }