using AutoMapper.Internal; using CapMachine.Core; using CapMachine.Wpf.Dtos; using CapMachine.Wpf.Models; using CapMachine.Wpf.Models.Tag; using CapMachine.Wpf.PrismEvent; using HslCommunication; using HslCommunication.Profinet.Siemens; using Prism.Events; using Prism.Mvvm; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Timers; using System.Windows; using static CapMachine.Wpf.Models.ComEnum; namespace CapMachine.Wpf.Services { /// /// 机器实时数据服务 /// public class MachineRtDataService : BindableBase { /// /// 事件聚合器 /// private IEventAggregator _EventAggregator { get; set; } public AlarmService AlarmService { get; } public ConfigService ConfigService { get; } public CanDriveService CanDriveService { get; } public CanFdDriveService CanFdDriveService { get; } public LinDriveService LinDriveService { get; } public SysRunService SysRunService { get; } /// /// PLCScanTask扫描Task /// private static Task PLCScanTask { get; set; } /// /// ScanTask扫描Task /// private static Task ScanTask { get; set; } /// /// 西门子连接驱动程序 /// public SiemensS7Net SiemensDrive { get; set; } private bool _LinkState; /// /// PLC连接状态 /// public bool LinkState { get { return _LinkState; } set { _LinkState = value; RaisePropertyChanged(); } } /// /// 周期定时器 /// private System.Timers.Timer CycleTimer { get; set; } /// /// 界面更新数据 /// private bool IsValueShow { get; set; } = true; /// /// 系统拓展数据 /// public SysExdInfo CurSysExdInfo { get; set; } /// /// 布尔拓展信息 /// public SysExdBoolInfo SysExdBoolInfos { get; set; } ///// ///// Tag数据集合 ///// //public List ListRtDataModel { get; set; } /// /// 标签管理中心 /// public TagManager TagManger { get; set; } = new TagManager(); /// /// 扫描线程使能 /// public bool ThreadEnable { get; set; } = true; /// /// 历史数据 /// public List HistoryData { get; set; } = new List(); /// /// 手自动切换的条件 /// public AutoHandSwtichCondition AutoHandSwtichConditionState { get; set; } = new AutoHandSwtichCondition(); /// /// 实例化函数 /// /// public MachineRtDataService(IEventAggregator eventAggregator, AlarmService alarmService, ConfigService configService, CanDriveService canDriveService, CanFdDriveService canFdDriveService, LinDriveService linDriveService, SysRunService sysRunService)//, AlarmService alarmService { //ConcurrentDictionary keyValuePairs = new ConcurrentDictionary(); //Stopwatch stopwatch = new Stopwatch(); ////第一次计时 //stopwatch.Start(); //启动Stopwatch //stopwatch.Stop(); //停止Stopwatch //Console.WriteLine("Add Elapsed output runTime:{0}", stopwatch.Elapsed.ToString()); //事件服务 _EventAggregator = eventAggregator; AlarmService = alarmService; ConfigService = configService; CanDriveService = canDriveService; CanFdDriveService = canFdDriveService; LinDriveService = linDriveService; SysRunService = sysRunService; //秒触发一次 CycleTimer = new System.Timers.Timer(500); CycleTimer.Elapsed += RecoredCycleAction; CycleTimer.AutoReset = true; CycleTimer.Enabled = true; #region 标签管理 //【测试】 //TagManger.AddTag(new Tag("转速", "转速[rpm]", "Speed", "程序", "VW15000", 100, 0, 1, "rpm", new ShortTagValue(), true) { DecimalPoint = 0 }); //TagManger.AddTag(new Tag("排气压力", "排气压力[MpaA]", "ExPress", "程序", "VW15002", 100, 0, 100, "MpaA", new ShortTagValue(), true) { DecimalPoint = 2 }); //TagManger.AddTag(new Tag("吸气压力", "吸气压力[MpaA]", "InhPress", "程序", "VW15004", 100, 0, 100, "MpaA", new ShortTagValue(), true) { DecimalPoint = 2 }); //TagManger.AddTag(new Tag("吸气温度", "吸气温度[℃]", "InhTemp", "程序", "VW15006", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("COND1温度", "COND1温度[℃]", "Cond1Temp", "程序", "VW15008", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("润滑油压力", "润滑油压力[MpaA]", "LubePress", "程序", "VW15010", 100, 0, 100, "MpaA", new ShortTagValue(), true) { DecimalPoint = 2 }); //TagManger.AddTag(new Tag("COND2压力", "COND2压力[MpaA]", "Cond2Press", "程序", "VW15012", 100, 0, 100, "MpaA", new ShortTagValue(), false) { DecimalPoint = 2 }); //TagManger.AddTag(new Tag("OCR", "OCR[%]", "OCR", "程序", "VW15014", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("HV[V]", "HV[V]", "HV", "程序", "VW15016", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("HV[A]", "HV[A]", "HVCur", "程序", "VW15018", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("HV[W]", "HV[W]", "HVPw", "程序", "VW15020", 100, 0, 1, "W", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("LV[V]", "LV[V]", "LV", "程序", "VW15022", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1 }); ////TagManger.AddTag(new Tag("LV[A]", "LV[A]", "LVCur", "程序", "VW15024", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("LV[A]", "LV[A]", "LVCur", "程序", "VW15024", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2 }); //TagManger.AddTag(new Tag("环境温度", "环境温度[℃]", "EnvTemp", "程序", "VW15026", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1 }); ////TagManger.AddTag(new Tag("环境湿度", "环境湿度[%]", "EnvRH", "程序", "VW15028", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("环境湿度", "环境湿度[%]", "EnvRH", "程序", "VW15028", 100, 0, 1, "%", new ShortTagValue(), true) { DecimalPoint = 0 }); //TagManger.AddTag(new Tag("OS1温度", "OS1温度[℃]", "OS1Temp", "程序", "VW15030", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("OS2温度", "OS2温度[℃]", "OS2Temp", "程序", "VW15032", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("COND2温度", "COND2温度[℃]", "Cond2Temp", "程序", "VW15034", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("EVAP出口温度", "EVAP出口温度[℃]", "EVAPExpTemp", "程序", "VW15036", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); ////TagManger.AddTag(new Tag("冷媒流量", "冷媒流量[L/min]", "VRV", "程序", "VW15038", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("冷媒流量", "冷媒流量[L/min]", "VRV", "程序", "VW15038", 100, 0, 10, "L/min", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("润滑油流量", "润滑油流量[L/min]", "LubeFlow", "程序", "VW15040", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("排气温度", "排气温度[℃]", "ExTemp", "程序", "VW15042", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("膨胀阀前压力", "膨胀阀前压力[MpaA]", "TxvFrPress", "程序", "VW15044", 100, 0, 100, "MpaA", new ShortTagValue(), false) { DecimalPoint = 2 }); //TagManger.AddTag(new Tag("膨胀阀前温度", "膨胀阀前温度[℃]", "TxvFrTemp", "程序", "VW15046", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("EVAP出口压力", "EVAP出口压力[MpaA]", "EVAPExpPress", "程序", "VW15048", 100, 0, 100, "MpaA", new ShortTagValue(), false) { DecimalPoint = 2 }); //TagManger.AddTag(new Tag("腔内压力", "腔内压力[MpaA]", "IntrplPress", "程序", "VW15050", 100, 0, 100, "MpaA", new ShortTagValue(), false) { DecimalPoint = 2 }); //TagManger.AddTag(new Tag("压缩机表面温度", "压缩机表面温度[℃]", "CapSurfTemp", "程序", "VW15052", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("PTC流量", "PTC流量[L/min]", "PTCFlow", "程序", "VW15054", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("PTC入水温度", "PTC入水温度[℃]", "PTCEntTemp", "程序", "VW15056", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("PTC出水温度", "PTC出水温度[℃]", "PTCExpTemp", "程序", "VW15058", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯Cmp母线电流", "通讯Cmp母线电流[A]", "ComCapBusCur", "程序", "VW15060", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯Cmp母线电压", "通讯Cmp母线电压[V]", "ComCapBusVol", "程序", "VW15062", 100, 0, 10, "V", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯Cmp逆变器温度", "通讯Cmp逆变器温度[℃]", "ComCapInvTemp", "程序", "VW15064", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯Cmp相电流", "通讯Cmp相电流[A]", "ComCapPhCur", "程序", "VW15066", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯Cmp功率", "通讯Cmp功率[W]", "ComCapPw", "程序", "VW15068", 100, 0, 1, "W", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯Cmp芯片温度", "通讯Cmp芯片温度[℃]", "ComCapChipTemp", "程序", "VW15070", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯PTC入水温度", "通讯PTC入水温度[℃]", "ComPTCEntTemp", "程序", "VW15072", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯PTC出水温度", "通讯PTC出水温度[℃]", "ComPTCExpTemp", "程序", "VW15074", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯PTC峰值电流", "通讯PTC峰值电流[A]", "ComPTCPeakCur", "程序", "VW15076", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯PTC母线电流", "通讯PTC母线电流[A]", "ComPTCBusCur", "程序", "VW15078", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯PTC膜温", "通讯PTC膜温[℃]", "ComPTCFlmTemp", "程序", "VW15080", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯PTC模块温度", "通讯PTC模块温度[℃]", "ComPTCMdTemp", "程序", "VW15082", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //【SongZhi】 #region SongZhi TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "转速[rpm]",//名称带单位 NameNoUnit = "转速",//无单位名称 EnName = "Speed",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "rpm", PVAddress = "VW100",//地址信息 SVAddress = "VW200", MVAddress = "VW242", IsMeter = true, AutoHandSwitchAddress = "VW240", Precision = 1, DecimalPoint = 0, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "排气压力[MpaA]",//名称带单位 NameNoUnit = "排气压力",//无单位名称 EnName = "ExPress",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "MpaA", PVAddress = "VW102",//地址信息 SVAddress = "VW202", MVAddress = "VW242", IsMeter = true, AutoHandSwitchAddress = "VW240", Precision = 1000, DecimalPoint = 3, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "吸气压力[MpaA]",//名称带单位 NameNoUnit = "吸气压力",//无单位名称 EnName = "InhPress",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "MpaA", PVAddress = "VW104",//地址信息 SVAddress = "VW204", MVAddress = "VW246", IsMeter = true, AutoHandSwitchAddress = "VW244", Precision = 1000, DecimalPoint = 3, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "吸气温度[℃]",//名称带单位 NameNoUnit = "吸气温度",//无单位名称 EnName = "InhTemp",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "℃", PVAddress = "VW106",//地址信息 SVAddress = "VW206", MVAddress = "VW250", IsMeter = true, AutoHandSwitchAddress = "VW248", Precision = 10, DecimalPoint = 1, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "冷凝器循环水温[℃]",//名称带单位 COND1水温 NameNoUnit = "冷凝器循环水温",//无单位名称 EnName = "Cond1Temp",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "℃", PVAddress = "VW108",//地址信息 SVAddress = "VW208", MVAddress = "VW254", IsMeter = true, AutoHandSwitchAddress = "VW252", Precision = 10, DecimalPoint = 1, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "吸气混合器温度[℃]",//名称带单位 OS2温度 NameNoUnit = "吸气混合器温度",//无单位名称 OS2温度 EnName = "OS2Temp",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "℃", PVAddress = "VW110",//地址信息 SVAddress = "VW210", MVAddress = "VW258", IsMeter = true, AutoHandSwitchAddress = "VW256", Precision = 10, DecimalPoint = 1, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "HV_V[V]",//名称带单位 NameNoUnit = "HV_V",//无单位名称 EnName = "HV_V",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "V", PVAddress = "VW112",//地址信息 SVAddress = "VW212", MVAddress = "VW262", IsMeter = true, AutoHandSwitchAddress = "VW260", Precision = 10, DecimalPoint = 1, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "HV_A[A]",//名称带单位 NameNoUnit = "HV_A",//无单位名称 EnName = "HV_A",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "A", PVAddress = "VW114",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 100, DecimalPoint = 2, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "HV_W[W]",//名称带单位 NameNoUnit = "HV_W",//无单位名称 EnName = "HV_W",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "W", PVAddress = "VW116",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 1, DecimalPoint = 0, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "LV_V[V]",//名称带单位 NameNoUnit = "LV_V",//无单位名称 EnName = "LV_V",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "V", PVAddress = "VW118",//地址信息 SVAddress = "VW214", MVAddress = "", IsMeter = true, AutoHandSwitchAddress = "", Precision = 100, DecimalPoint = 2, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "LV_A[A]",//名称带单位 NameNoUnit = "LV_A",//无单位名称 EnName = "LV_A",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "A", PVAddress = "VW120",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 1000, DecimalPoint = 3, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "试验箱温度[℃]",//名称带单位 NameNoUnit = "试验箱温度",//无单位名称 EnName = "EnvTemp",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "℃", PVAddress = "VW122",//地址信息 SVAddress = "VW216", MVAddress = "", IsMeter = true, AutoHandSwitchAddress = "", Precision = 10, DecimalPoint = 1, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "试验箱湿度[%]",//名称带单位 NameNoUnit = "试验箱湿度",//无单位名称 EnName = "EnvRH",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "%", PVAddress = "VW124",//地址信息 SVAddress = "VW218", MVAddress = "", IsMeter = true, AutoHandSwitchAddress = "", Precision = 10, DecimalPoint = 1, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "排气温度[℃]",//名称带单位 NameNoUnit = "排气温度",//无单位名称 EnName = "ExTemp",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "℃", PVAddress = "VW126",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 10, DecimalPoint = 1, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "膨胀阀前温度[℃]",//名称带单位 NameNoUnit = "膨胀阀前温度",//无单位名称 EnName = "TxvFrTemp",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "℃", PVAddress = "VW128",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 10, DecimalPoint = 1, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "膨胀阀前压力[MpaA]",//名称带单位 NameNoUnit = "膨胀阀前压力",//无单位名称 EnName = "TxvFrPress",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "MpaA", PVAddress = "VW130",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 1000, DecimalPoint = 3, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "冷凝器进口温度[℃]",//名称带单位 NameNoUnit = "冷凝器进口温度",//无单位名称 EnName = "CondInTemp",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "℃", PVAddress = "VW132",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 10, DecimalPoint = 1, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "冷凝器进口压力[MpaA]",//名称带单位 NameNoUnit = "冷凝器进口压力",//无单位名称 EnName = "CondInPress",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "MpaA", PVAddress = "VW134",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 1000, DecimalPoint = 3, Samp = 1, ValueType = typeof(short), Index = "", }); //TagManger.AddTag(new Tag(new ShortTagValue()) //{ // Name = "水箱进水温度[℃]",//名称带单位 // NameNoUnit = "水箱进水温度",//无单位名称 // EnName = "WaterTankInTemp",//英文名称 // Group = "程序",//分组 // MinValue = 0, // Unit = "℃", // MaxValue = 100, // PVAddress = "VW136",//地址信息 // SVAddress = "", // MVAddress = "", // IsMeter = false, // Precision = 10, // DecimalPoint = 1, // Samp = 1, // ValueType = typeof(short), // Index = "", //}); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "水加热温度H1[℃]",//名称带单位 NameNoUnit = "水加热温度H1",//无单位名称 EnName = "WaterHeatTempH1",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "℃", PVAddress = "VW138",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 10, DecimalPoint = 1, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "压缩机表面温度1[℃]",//名称带单位 NameNoUnit = "压缩机表面温度1",//无单位名称 EnName = "CapSurfTemp1",//英文名称 Group = "程序",//分组 MinValue = 0, MaxValue = 100, Unit = "℃", PVAddress = "VW140",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 10, DecimalPoint = 1, Samp = 1, ValueType = typeof(short), Index = "", }); //TagManger.AddTag(new Tag(new ShortTagValue()) //{ // Name = "压缩机表面温度2[℃]",//名称带单位 // NameNoUnit = "压缩机表面温度2",//无单位名称 // EnName = "CapSurfTemp2",//英文名称 // Group = "程序",//分组 // MinValue = 0, // MaxValue = 100, // Unit = "℃", // PVAddress = "VW142",//地址信息 // SVAddress = "", // MVAddress = "", // IsMeter = false, // Precision = 10, // DecimalPoint = 1, // Samp = 1, // ValueType = typeof(short), // Index = "", //}); //TagManger.AddTag(new Tag(new ShortTagValue()) //{ // Name = "压缩机表面温度3[℃]",//名称带单位 // NameNoUnit = "压缩机表面温度3",//无单位名称 // EnName = "CapSurfTemp3",//英文名称 // Group = "程序",//分组 // MinValue = 0, // MaxValue = 100, // Unit = "℃", // PVAddress = "VW144",//地址信息 // SVAddress = "", // MVAddress = "", // IsMeter = false, // Precision = 10, // DecimalPoint = 1, // Samp = 1, // ValueType = typeof(short), // Index = "", //}); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "通讯母线电压[V]",//名称带单位 NameNoUnit = "通讯母线电压",//无单位名称 EnName = "ComCapBusVol",//英文名称 Group = "CANLIN",//分组 MinValue = 0, MaxValue = 100, Unit = "V", PVAddress = "VW146",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 10, DecimalPoint = 1, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "通讯母线电流[A]",//名称带单位 NameNoUnit = "通讯母线电流",//无单位名称 EnName = "ComCapBusCur",//英文名称 Group = "CANLIN",//分组 MinValue = 0, MaxValue = 100, Unit = "A", PVAddress = "VW148",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 100, DecimalPoint = 2, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "通讯相电流[A]",//名称带单位 NameNoUnit = "通讯相电流",//无单位名称 EnName = "ComCapPhCur",//英文名称 Group = "CANLIN",//分组 MinValue = 0, MaxValue = 100, Unit = "A", PVAddress = "VW150",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 100, DecimalPoint = 2, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "通讯功率[W]",//名称带单位 NameNoUnit = "通讯功率",//无单位名称 EnName = "ComCapPw",//英文名称 Group = "CANLIN",//分组 MinValue = 0, MaxValue = 100, Unit = "W", PVAddress = "VW152",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 1000, DecimalPoint = 2, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "通讯芯片温度[℃]",//名称带单位 NameNoUnit = "通讯芯片温度",//无单位名称 EnName = "ComCapChipTemp",//英文名称 Group = "CANLIN",//分组 MinValue = 0, MaxValue = 100, Unit = "℃", PVAddress = "VW154",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 10, DecimalPoint = 1, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "过冷度[K]",//名称带单位 NameNoUnit = "过冷度",//无单位名称 EnName = "Subcooling",//英文名称 Group = "计算",//分组 MinValue = 0, MaxValue = 100, Unit = "K", PVAddress = "",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 10, DecimalPoint = 1, Samp = 1, ValueType = typeof(short), Index = "", }); TagManger.AddTag(new Tag(new ShortTagValue()) { Name = "过热度[K]",//名称带单位 NameNoUnit = "过热度",//无单位名称 EnName = "Superheat",//英文名称 Group = "计算",//分组 MinValue = 0, MaxValue = 100, Unit = "K", PVAddress = "",//地址信息 SVAddress = "", MVAddress = "", IsMeter = false, Precision = 10, DecimalPoint = 1, Samp = 1, ValueType = typeof(short), Index = "", }); #endregion //TagManger.AddTag(new Tag("OCR", "OCR[%]", "OCR", "程序", "VW15014", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("HV[V]", "HV[V]", "HV", "程序", "VW15016", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("HV[A]", "HV[A]", "HVCur", "程序", "VW15018", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("HV[W]", "HV[W]", "HVPw", "程序", "VW15020", 100, 0, 1, "W", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("LV[V]", "LV[V]", "LV", "程序", "VW15022", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1 }); ////TagManger.AddTag(new Tag("LV[A]", "LV[A]", "LVCur", "程序", "VW15024", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("LV[A]", "LV[A]", "LVCur", "程序", "VW15024", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2 }); //TagManger.AddTag(new Tag("环境温度", "环境温度[℃]", "EnvTemp", "程序", "VW15026", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1 }); ////TagManger.AddTag(new Tag("环境湿度", "环境湿度[%]", "EnvRH", "程序", "VW15028", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("环境湿度", "环境湿度[%]", "EnvRH", "程序", "VW15028", 100, 0, 1, "%", new ShortTagValue(), true) { DecimalPoint = 0 }); //TagManger.AddTag(new Tag("OS1温度", "OS1温度[℃]", "OS1Temp", "程序", "VW15030", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("OS2温度", "OS2温度[℃]", "OS2Temp", "程序", "VW15032", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("COND2温度", "COND2温度[℃]", "Cond2Temp", "程序", "VW15034", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("EVAP出口温度", "EVAP出口温度[℃]", "EVAPExpTemp", "程序", "VW15036", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); ////TagManger.AddTag(new Tag("冷媒流量", "冷媒流量[L/min]", "VRV", "程序", "VW15038", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("冷媒流量", "冷媒流量[L/min]", "VRV", "程序", "VW15038", 100, 0, 10, "L/min", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("润滑油流量", "润滑油流量[L/min]", "LubeFlow", "程序", "VW15040", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("排气温度", "排气温度[℃]", "ExTemp", "程序", "VW15042", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("膨胀阀前压力", "膨胀阀前压力[MpaA]", "TxvFrPress", "程序", "VW15044", 100, 0, 100, "MpaA", new ShortTagValue(), false) { DecimalPoint = 2 }); //TagManger.AddTag(new Tag("膨胀阀前温度", "膨胀阀前温度[℃]", "TxvFrTemp", "程序", "VW15046", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("EVAP出口压力", "EVAP出口压力[MpaA]", "EVAPExpPress", "程序", "VW15048", 100, 0, 100, "MpaA", new ShortTagValue(), false) { DecimalPoint = 2 }); //TagManger.AddTag(new Tag("腔内压力", "腔内压力[MpaA]", "IntrplPress", "程序", "VW15050", 100, 0, 100, "MpaA", new ShortTagValue(), false) { DecimalPoint = 2 }); //TagManger.AddTag(new Tag("压缩机表面温度", "压缩机表面温度[℃]", "CapSurfTemp", "程序", "VW15052", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("PTC流量", "PTC流量[L/min]", "PTCFlow", "程序", "VW15054", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("PTC入水温度", "PTC入水温度[℃]", "PTCEntTemp", "程序", "VW15056", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("PTC出水温度", "PTC出水温度[℃]", "PTCExpTemp", "程序", "VW15058", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯Cmp母线电流", "通讯Cmp母线电流[A]", "ComCapBusCur", "程序", "VW15060", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯Cmp母线电压", "通讯Cmp母线电压[V]", "ComCapBusVol", "程序", "VW15062", 100, 0, 10, "V", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯Cmp逆变器温度", "通讯Cmp逆变器温度[℃]", "ComCapInvTemp", "程序", "VW15064", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯Cmp相电流", "通讯Cmp相电流[A]", "ComCapPhCur", "程序", "VW15066", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯Cmp功率", "通讯Cmp功率[W]", "ComCapPw", "程序", "VW15068", 100, 0, 1, "W", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯Cmp芯片温度", "通讯Cmp芯片温度[℃]", "ComCapChipTemp", "程序", "VW15070", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯PTC入水温度", "通讯PTC入水温度[℃]", "ComPTCEntTemp", "程序", "VW15072", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯PTC出水温度", "通讯PTC出水温度[℃]", "ComPTCExpTemp", "程序", "VW15074", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯PTC峰值电流", "通讯PTC峰值电流[A]", "ComPTCPeakCur", "程序", "VW15076", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯PTC母线电流", "通讯PTC母线电流[A]", "ComPTCBusCur", "程序", "VW15078", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯PTC膜温", "通讯PTC膜温[℃]", "ComPTCFlmTemp", "程序", "VW15080", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); //TagManger.AddTag(new Tag("通讯PTC模块温度", "通讯PTC模块温度[℃]", "ComPTCMdTemp", "程序", "VW15082", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 }); #endregion ListHandSwitchData = new List() { new HandSwitchData(){Name="自动",ActionAddress="M0.0",StateAddress="M0.0" }, new HandSwitchData(){Name="抽真空",ActionAddress="M0.1",StateAddress="V15.2" }, //new HandSwitchData(){Name="复位",ActionAddress="M0.2",StateAddress="M0.2" },放到上侧的按钮区域了 //new HandSwitchData(){Name="消音",ActionAddress="M0.3",StateAddress="M0.3" },放到上侧的按钮区域了 new HandSwitchData(){Name="HV电源",ActionAddress="M1.1",StateAddress="Q0.1" }, new HandSwitchData(){Name="HV启动",ActionAddress="M1.2",StateAddress="Q0.6" }, new HandSwitchData(){Name="LV电源",ActionAddress="M1.3",StateAddress="Q0.2" }, new HandSwitchData(){Name="水泵",ActionAddress="M1.4",StateAddress="Q0.3" }, new HandSwitchData(){Name="冷凝器电加热",ActionAddress="M1.5",StateAddress="Q0.4" }, new HandSwitchData(){Name="吸气混合器电加热",ActionAddress="M1.6",StateAddress="Q0.5" }, new HandSwitchData(){Name="吸排气球阀",ActionAddress="M1.7",StateAddress="Q0.7" }, //new HandSwitchData(){Name="试验箱",ActionAddress="M2.0",StateAddress="V15.0" }, //new HandSwitchData(){Name="水SEV1",ActionAddress="M2.1",StateAddress="Q1.0" }, //new HandSwitchData(){Name="水SEV2",ActionAddress="M2.2",StateAddress="Q1.1" }, new HandSwitchData(){Name="HCV1",ActionAddress="M2.3",StateAddress="Q1.0" }, new HandSwitchData(){Name="HCV2",ActionAddress="M2.4",StateAddress="Q1.1" }, new HandSwitchData(){Name="ECV1",ActionAddress="M2.5",StateAddress="Q1.2" }, new HandSwitchData(){Name="ECV2",ActionAddress="M2.6",StateAddress="Q1.3" }, new HandSwitchData(){Name="使能",ActionAddress="M2.7",StateAddress="V15.1" }, }; //TagManger.ListTag[0].Name = "new TestType() { byteValue=12}"; //TagManger.ListTag[0].Name = "new TestType() { byteValue=12}"; //Type genericType = typeof(Tag<>).MakeGenericType(typeof(short)); //Activator.CreateInstance(genericType, 42); //var DATA = TagManger.GetTagValueByName("转速"); //var data1 = TagManger.GetTagByName("转速"); //var data2 = TagManger.GetTagByName("转速5888"); //data1.TagValue.Value = 12; //TagInfo = data1; //var TagInfo1= data1.RtValue.Value; //var Data = DATA.Value; //dynamic dad=10; InitialPLCCom(); //拓展的参数信息 CurSysExdInfo = new SysExdInfo(SiemensDrive); SysExdBoolInfos = new SysExdBoolInfo(SiemensDrive); //PubRtDataStart(); } #region 手自动的操作 //// ///// 手自动切换集合数据 ///// public List ListHandSwitchData { get; set; } /// /// 程序复位 /// /// public bool SysReset() { //var FindData = ListHandSwitchData.Where(a => a.Name == "复位"); //if (FindData.Count() > 0) //{ var Result = SiemensDrive.Write("M0.2", true); if (Result.IsSuccess) { return true; } else { return false; } //} //return false; } /// /// 程序消音 /// /// public bool SysMute() { var FindData = ListHandSwitchData.Where(a => a.Name == "消音"); if (FindData.Count() > 0) { var Result = SiemensDrive.Write(FindData.First().ActionAddress, true); if (Result.IsSuccess) { return true; } else { return false; } } return false; } /// /// 程序Start /// /// public bool SysStart() { var Result = SiemensDrive.Write("M0.4", true); if (Result.IsSuccess) { return true; } else { return false; } } /// /// 程序结束 /// /// public bool SysEnd() { var Result = SiemensDrive.Write("M0.7", true); if (Result.IsSuccess) { return true; } else { return false; } } /// /// 程序暂停 /// 取反 /// /// public bool SysPause() { var StateResult = SiemensDrive.ReadBool("M0.6"); if (StateResult.IsSuccess) { if (StateResult.Content == true) { var Result = SiemensDrive.Write("M0.6", false); if (Result.IsSuccess) { return true; } else { return false; } } else { var Result = SiemensDrive.Write("M0.6", true); if (Result.IsSuccess) { return true; } else { return false; } } } return false; } #endregion /// /// UI更新 /// /// /// /// private void RecoredCycleAction(object? sender, ElapsedEventArgs e) { //IsValueShow = !IsValueShow; } private Tag _TagInfo; public Tag TagInfo { get { return _TagInfo; } set { _TagInfo = value; RaisePropertyChanged(); } } /// /// 初始化PLC通信 /// private void InitialPLCCom() { var IPInfo = ConfigHelper.GetValue("PLCIP"); SiemensDrive = new SiemensS7Net(SiemensPLCS.S200Smart, IPInfo); // 连接对象 OperateResult connect = SiemensDrive.ConnectServer(); if (!connect.IsSuccess)//连接失败 { LinkState = false; Console.WriteLine("connect failed:" + connect.Message); MessageBox.Show($"PLC连接失败:{IPInfo}"); //return; } else//连接成功 { LinkState = true; } //扫描线程成功 RtScanDeviceStart(); } public const string ConstShortType = "Int16"; public const string ConstUShortType = "UInt16"; public const string ConstIntType = "Int32"; public const string ConstUIntType = "UInt32"; public const string ConstLongType = "Int64"; public const string ConstULongType = "UInt64"; public const string ConstByteType = "Byte"; public const string ConstCharType = "Char"; public const string ConstFloatType = "Single"; public const string ConstDoubleType = "Double"; public const string ConstDecimalType = "Decimal"; public const string ConstBoolType = "Boolean"; //private Random random = new Random(); private int IsShowCount = 0; private OperateResult OperateResultShort { get; set; } /// /// SV数据 /// private OperateResult OperateResultSVShort { get; set; } /// /// MV数据 /// private OperateResult OperateResultMVShort { get; set; } private Random Random { get; set; } = new Random(); /// /// 报警结果集合 /// private OperateResult OperateResultAlarm { get; set; } /// /// CAP的使能状态 /// private OperateResult OperateResultCapEnable { get; set; } /// /// 时间诊断 /// private Stopwatch DiagnosticsTime { get; set; } = new Stopwatch(); /// /// PLC扫描线程 /// private void RtScanDeviceStart() { PLCScanTask = Task.Run(async () => { Stopwatch stopwatch = new Stopwatch(); while (ThreadEnable) { //await Task.Delay(5); await Task.CompletedTask; DiagnosticsTime.Reset(); DiagnosticsTime.Start(); try { //TagInfo.RtValue.Value++; //var data = TagManger.DicTags["转速"].ValueType.Name; ////第一次计时 //stopwatch.Start(); //启动Stopwatch //IsShowCount++; //IsValueShow = false; //if (IsShowCount >= 20) //{ // IsShowCount = 0; // IsValueShow = true; //} foreach (var itemTag in TagManger.DicTags) { //TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = (short)random.Next(0, 100); //if (itemTag.Key== "转速[rpm]") //{ // var DS= SiemensDrive.ReadInt16(itemTag.Value.Address); // if (DS.IsSuccess) // { // var dd= DS.Content; // } //} switch (itemTag.Value.ValueType.Name) { //case ConstShortType: // //TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = SiemensDrive.ReadInt16(itemTag.Value.Address).Content; // TagManger.GetTagByName(itemTag.Value.Name).EngPvValue = TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value * 1.0 / TagManger.GetTagByName(itemTag.Value.Name)!.Precision; // break; case ConstShortType: TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.IsShow = IsValueShow; ////仿真数据 //TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = (short)Random.Next(1, 100); //TagManger.GetTagByName(itemTag.Value.Name).EngPvValue = (short)Random.Next(1, 100) * 1.0 / TagManger.GetTagByName(itemTag.Value.Name)!.Precision; //LinkState = false; //PLC 数据 if (!string.IsNullOrEmpty(itemTag.Value.PVAddress)) { //反写CANLIN速度数据到PLC,提前写入PLC,后面会回读PV值 if (itemTag.Value.NameNoUnit == "转速") { switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) { case CanLinEnum.Can: //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC SiemensDrive.Write(itemTag.Value.PVAddress, (short)CanDriveService.GetDbcSpeedValueBySpeedName("通讯Cmp转速")); //itemTag.Value.EngPvValue = 0; break; case CanLinEnum.CANFD: SiemensDrive.Write(itemTag.Value.PVAddress, (short)CanFdDriveService.GetDbcSpeedValueBySpeedName("通讯Cmp转速")); break; case CanLinEnum.Lin: //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC SiemensDrive.Write(itemTag.Value.PVAddress, (short)LinDriveService.GetLdfSpeedValueBySpeedName("通讯Cmp转速")); //itemTag.Value.EngPvValue = 0; break; default: break; } } else if (itemTag.Value.NameNoUnit == "通讯母线电压") { switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) { case CanLinEnum.Can: //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC SiemensDrive.Write(itemTag.Value.PVAddress, (short)(CanDriveService.GetDbcValueByName("通讯Cmp母线电压") * itemTag.Value.Precision)); //itemTag.Value.EngPvValue = 0; break; case CanLinEnum.CANFD: SiemensDrive.Write(itemTag.Value.PVAddress, (short)CanFdDriveService.GetDbcValueByName("通讯Cmp母线电压")); break; case CanLinEnum.Lin: //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC SiemensDrive.Write(itemTag.Value.PVAddress, (short)(LinDriveService.GetLdfValueByName("通讯Cmp母线电压") * itemTag.Value.Precision)); //itemTag.Value.EngPvValue = 0; break; default: break; } } else if (itemTag.Value.NameNoUnit == "通讯母线电流") { switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) { case CanLinEnum.Can: //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC SiemensDrive.Write(itemTag.Value.PVAddress, (short)(CanDriveService.GetDbcValueByName("通讯Cmp母线电流") * itemTag.Value.Precision)); //itemTag.Value.EngPvValue = 0; break; case CanLinEnum.CANFD: SiemensDrive.Write(itemTag.Value.PVAddress, (short)CanFdDriveService.GetDbcValueByName("通讯Cmp母线电流")); break; case CanLinEnum.Lin: //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC SiemensDrive.Write(itemTag.Value.PVAddress, (short)(LinDriveService.GetLdfValueByName("通讯Cmp母线电流") * itemTag.Value.Precision)); //itemTag.Value.EngPvValue = 0; break; default: break; } } else if (itemTag.Value.NameNoUnit == "通讯相电流") { switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) { case CanLinEnum.Can: //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC SiemensDrive.Write(itemTag.Value.PVAddress, (short)(CanDriveService.GetDbcValueByName("通讯Cmp相电流") * itemTag.Value.Precision)); //itemTag.Value.EngPvValue = 0; break; case CanLinEnum.CANFD: SiemensDrive.Write(itemTag.Value.PVAddress, (short)CanFdDriveService.GetDbcValueByName("通讯Cmp相电流")); break; case CanLinEnum.Lin: //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC SiemensDrive.Write(itemTag.Value.PVAddress, (short)(LinDriveService.GetLdfValueByName("通讯Cmp相电流") * itemTag.Value.Precision)); //itemTag.Value.EngPvValue = 0; break; default: break; } } else if (itemTag.Value.NameNoUnit == "通讯功率") { switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) { case CanLinEnum.Can: //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC SiemensDrive.Write(itemTag.Value.PVAddress, (short)(CanDriveService.GetDbcValueByName("通讯Cmp功率") * itemTag.Value.Precision)); //itemTag.Value.EngPvValue = 0; break; case CanLinEnum.CANFD: SiemensDrive.Write(itemTag.Value.PVAddress, (short)CanFdDriveService.GetDbcValueByName("通讯Cmp功率")); break; case CanLinEnum.Lin: //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC SiemensDrive.Write(itemTag.Value.PVAddress, (short)(LinDriveService.GetLdfValueByName("通讯Cmp功率") * itemTag.Value.Precision)); //itemTag.Value.EngPvValue = 0; break; default: break; } } else if (itemTag.Value.NameNoUnit == "通讯芯片温度") { switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) { case CanLinEnum.Can: //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC SiemensDrive.Write(itemTag.Value.PVAddress, (short)(CanDriveService.GetDbcValueByName("通讯Cmp芯片温度") * itemTag.Value.Precision)); //itemTag.Value.EngPvValue = 0; break; case CanLinEnum.CANFD: SiemensDrive.Write(itemTag.Value.PVAddress, (short)CanFdDriveService.GetDbcValueByName("通讯Cmp芯片温度") * itemTag.Value.Precision); break; case CanLinEnum.Lin: //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC SiemensDrive.Write(itemTag.Value.PVAddress, (short)(LinDriveService.GetLdfValueByName("通讯Cmp芯片温度") * itemTag.Value.Precision)); //itemTag.Value.EngPvValue = 0; break; default: break; } } OperateResultShort = SiemensDrive.ReadInt16(itemTag.Value.PVAddress); if (OperateResultShort.IsSuccess) { TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = SiemensDrive.ReadInt16(itemTag.Value.PVAddress).Content; TagManger.GetTagByName(itemTag.Value.Name)!.EngPvValue = TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value * 1.0 / TagManger.GetTagByName(itemTag.Value.Name)!.Precision; LinkState = true; } else { LinkState = false; } //根据CANLIN的选择,读取对应的解析实时数据更新到数据中心,这些数据相当于都是PV的实时数据 switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) { case CanLinEnum.Can: //CAN数据读取 //回读CAN通信的数据到集合中 //CAN组合并且在循环接收数据中时,才读取数据 if (itemTag.Value.Group == "CANLIN") { //回读CAN通信的DBC集合数据到集合中 itemTag.Value.EngPvValue = CanDriveService.GetDbcValueByName(itemTag.Value.NameNoUnit); } break; case CanLinEnum.CANFD: if (itemTag.Value.Group == "CANLIN") { //回读CAN通信的DBC集合数据到集合中 itemTag.Value.EngPvValue = CanFdDriveService.GetDbcValueByName(itemTag.Value.NameNoUnit); } break; case CanLinEnum.Lin: //LIN数据读取 //回读LIN通信的数据到集合中 //LIN组合并且在循环接收数据中时,才读取数据 if (itemTag.Value.Group == "CANLIN") { //回读LIN通信的DBC集合数据到集合中 itemTag.Value.EngPvValue = LinDriveService.GetLdfValueByName(itemTag.Value.NameNoUnit); } break; default: break; } } else //地址为空,PLC驱动不读取数据 { } if (!string.IsNullOrEmpty(itemTag.Value.SVAddress)) { OperateResultSVShort = SiemensDrive.ReadInt16(itemTag.Value.SVAddress); if (OperateResultSVShort.IsSuccess) { //TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = OperateResultSVShort.Content; TagManger.GetTagByName(itemTag.Value.Name)!.EngSvValue = OperateResultSVShort.Content * 1.0 / TagManger.GetTagByName(itemTag.Value.Name)!.Precision; LinkState = true; //在运行时,更新速度的SV的值 if (itemTag.Value.Name == "转速[rpm]" && SysRunService.MachineRunState1.RunStateMsg == "运行") { switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) { case CanLinEnum.Can: //获取PLC的SV数据 更新SV的速度值到压缩机 CanDriveService.UpdateSpeedCmdData(itemTag!.Value.EngSvValue); //itemTag.Value.EngPvValue = 0; break; case CanLinEnum.CANFD: //获取PLC的SV数据 更新SV的速度值到压缩机 CanFdDriveService.UpdateSpeedCmdData(itemTag!.Value.EngSvValue); //itemTag.Value.EngPvValue = 0; break; case CanLinEnum.Lin: //获取PLC的SV数据 更新SV的速度值到压缩机 LinDriveService.UpdateSpeedCmdData(itemTag!.Value.EngSvValue); //itemTag.Value.EngPvValue = 0; break; default: break; } ////更新SV的速度值 //CanDriveService.UpdateSpeedCmdData(TagManger.GetTagByName(itemTag.Value.Name)!.EngSvValue); } } else { LinkState = false; } } if (!string.IsNullOrEmpty(itemTag.Value.MVAddress)) { OperateResultMVShort = SiemensDrive.ReadInt16(itemTag.Value.MVAddress); if (OperateResultMVShort.IsSuccess) { //TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = OperateResultMVShort.Content; TagManger.GetTagByName(itemTag.Value.Name)!.EngMvValue = OperateResultMVShort.Content * 1.0 / 10; LinkState = true; } else { LinkState = false; } } //手自动切换按钮条件 AutoHandSwtichConditionState.AlarmStateResult = SiemensDrive.ReadBool(AutoHandSwtichConditionState.AlarmAddress); AutoHandSwtichConditionState.HandStateResult = SiemensDrive.ReadBool(AutoHandSwtichConditionState.HandStateAddress); AutoHandSwtichConditionState.SumResult(); break; default: break; } } //stopwatch.Stop(); //停止Stopwatch //Console.WriteLine("Add Elapsed output runTime:{0}", stopwatch.Elapsed.TotalSeconds.ToString()); //stopwatch.Reset(); OperateResultAlarm = SiemensDrive.ReadBool("V0.0", 15); if (OperateResultAlarm.IsSuccess) { foreach (var item in AlarmService.ListAlarmRunCell) { item.UpdateBoolValue(OperateResultAlarm.Content[item.Index]); } } //循环读取手自动切换 foreach (var item in ListHandSwitchData) { item.StateOperateResult = SiemensDrive.ReadBool(item.StateAddress); if (item.StateOperateResult.IsSuccess) { item.State = item.StateOperateResult.Content; //根据PLC得到执行的步骤数据,更新到CAN和LIN的数据 if (item.Name!.Equals("使能")) { switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) { case CanLinEnum.Can: //获取PLC的使能状态,更新到CAN的使能状态 CanDriveService.UpdateCapEnableCmdData(item.State); //itemTag.Value.EngPvValue = 0; break; case CanLinEnum.CANFD: //获取PLC的使能状态,更新到CAN的使能状态 CanFdDriveService.UpdateCapEnableCmdData(item.State); //itemTag.Value.EngPvValue = 0; break; case CanLinEnum.Lin: //获取PLC的使能状态,更新到LIN的使能状态 LinDriveService.UpdateCapEnableCmdData(item.State); //itemTag.Value.EngPvValue = 0; break; default: break; } } } } //拓展信息的展示 foreach (var itemQuickTag in CurSysExdInfo.QuickTags) { itemQuickTag.OperateResultSource = SiemensDrive.Read(itemQuickTag.ValueAddress, itemQuickTag.ByteLength); } CurSysExdInfo.SumRunTime(); //布尔拓展信息的展示 foreach (var itemQuickTag in SysExdBoolInfos.QuickTags) { itemQuickTag.OperateResultSource = SiemensDrive.Read(itemQuickTag.ValueAddress, itemQuickTag.ByteLength); } } catch (Exception ex) { //LogService.Info($"时间:{DateTime.Now.ToString()}-【Meter】-{ex.Message}"); } DiagnosticsTime.Stop(); ConfigService.PlcCycleTime = (int)DiagnosticsTime.Elapsed.TotalMilliseconds - 300; //Console.WriteLine($"扫描时间:{DiagnosticsTime.Elapsed.TotalMilliseconds.ToString()}"); } }); } private Random random = new Random(); /// ///发布实时数据 /// private void PubRtDataStart() { ScanTask = Task.Run(async () => { while (ThreadEnable) { try { await Task.Delay(1000); //_EventAggregator.GetEvent().Publish(new List() //{ // new Models.ChartRtValue(){Name="EVA风量",Value=random.NextDouble()*100,Unit="℃"}, // new Models.ChartRtValue(){Name="中间轴转速",Value=random.NextDouble()*100,Unit="℃"}, // new Models.ChartRtValue(){Name="加热电力",Value=random.NextDouble()*100,Unit="℃"}, // new Models.ChartRtValue(){Name="加湿电力",Value=random.NextDouble()*100,Unit="℃"}, // new Models.ChartRtValue(){Name="EMPCV电流",Value=random.NextDouble()*100,Unit="℃"}, // new Models.ChartRtValue(){Name="INJ压力",Value=random.NextDouble()*100,Unit="℃"}, // new Models.ChartRtValue(){Name="冷媒流量",Value=random.NextDouble()*100,Unit="℃"}, //}); } catch (Exception ex) { } } }); } } }