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)
{
}
}
});
}
}
}