Files
CapMachine/CapMachine.Wpf/Services/MachineRtDataService.cs

1784 lines
73 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 AutoMapper.Internal;
using CapMachine.Core;
using CapMachine.Wpf.Dtos;
using CapMachine.Wpf.Models;
using CapMachine.Wpf.Models.Tag;
using CapMachine.Wpf.Models.Tag.Cell;
using CapMachine.Wpf.PrismEvent;
using HslCommunication;
using HslCommunication.Profinet.Melsec;
using HslCommunication.Profinet.Siemens;
using Org.BouncyCastle.Utilities;
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.IO;
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
{
/// <summary>
/// 机器实时数据服务
/// </summary>
public class MachineRtDataService : BindableBase
{
/// <summary>
/// 事件聚合器
/// </summary>
private IEventAggregator _EventAggregator { get; set; }
public AlarmService AlarmService { get; }
public ConfigService ConfigService { get; }
public ILogService LogService { get; }
public CanDriveService CanDriveService { get; }
public CanFdDriveService CanFdDriveService { get; }
public LinDriveService LinDriveService { get; }
public SysRunService SysRunService { get; }
/// <summary>
/// PLCScanTask扫描Task
/// </summary>
private static Task PLCScanTask { get; set; }
/// <summary>
/// ScanTask扫描Task
/// </summary>
private static Task ScanTask { get; set; }
/// <summary>
/// 西门子连接驱动程序
/// </summary>
public SiemensS7Net SiemensDrive { get; set; }
/// <summary>
/// 三菱连接驱动程序
/// </summary>
public MelsecMcNet MelsecMcNetDrive { get; set; }
private bool _LinkState;
/// <summary>
/// PLC连接状态
/// </summary>
public bool LinkState
{
get { return _LinkState; }
set { _LinkState = value; RaisePropertyChanged(); }
}
/// <summary>
/// 周期定时器
/// </summary>
private System.Timers.Timer CycleTimer { get; set; }
/// <summary>
/// 界面更新数据
/// </summary>
private bool IsValueShow { get; set; } = true;
/// <summary>
/// 系统拓展数据
/// </summary>
public SysExdInfo CurSysExdInfo { get; set; }
/// <summary>
/// 布尔拓展信息
/// </summary>
public SysExdBoolInfo SysExdBoolInfos { get; set; }
///// <summary>
///// Tag数据集合
///// </summary>
//public List<TagInfo> ListRtDataModel { get; set; }
/// <summary>
/// 标签管理中心
/// </summary>
public TagManager TagManger { get; set; } = new TagManager();
/// <summary>
/// 扫描线程使能
/// </summary>
public bool ThreadEnable { get; set; } = true;
/// <summary>
/// 历史数据
/// </summary>
public List<RecordInfo> HistoryData { get; set; } = new List<RecordInfo>();
/// <summary>
/// 手自动切换的条件
/// </summary>
public AutoHandSwtichCondition AutoHandSwtichConditionState { get; set; } = new AutoHandSwtichCondition();
/// <summary>
/// 实例化函数
/// </summary>
/// <param name="eventAggregator"></param>
public MachineRtDataService(IEventAggregator eventAggregator, AlarmService alarmService, ConfigService configService,ILogService logService,
CanDriveService canDriveService, CanFdDriveService canFdDriveService, LinDriveService linDriveService, SysRunService sysRunService)//, AlarmService alarmService
{
//ConcurrentDictionary<DateTime, RecordInfo> keyValuePairs = new ConcurrentDictionary<DateTime, RecordInfo>();
//Stopwatch stopwatch = new Stopwatch();
////第一次计时
//stopwatch.Start(); //启动Stopwatch
//stopwatch.Stop(); //停止Stopwatch
//Console.WriteLine("Add Elapsed output runTime:{0}", stopwatch.Elapsed.ToString());
//MelsecMcNetDrive.
//事件服务
_EventAggregator = eventAggregator;
AlarmService = alarmService;
ConfigService = configService;
LogService = logService;
CanDriveService = canDriveService;
CanFdDriveService = canFdDriveService;
LinDriveService = linDriveService;
SysRunService = sysRunService;
//秒触发一次
CycleTimer = new System.Timers.Timer(500);
CycleTimer.Elapsed += RecoredCycleAction;
CycleTimer.AutoReset = true;
CycleTimer.Enabled = true;
#region
#region
// 从配置文件加载标签
string tagConfigPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TagConfig", "SysTags.json");
try
{
TagManger.LoadTagsFromConfig(tagConfigPath);
Debug.WriteLine("已成功从配置文件加载标签");
}
catch (Exception ex)
{
// 处理异常,如记录日志
Debug.WriteLine($"加载标签配置文件失败: {ex.Message}");
LogService.Error($"加载标签配置文件失败: {ex.Message}");
MessageBox.Show($"加载标签配置文件失败,请检查标签配置是否正确: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
// 可以在这里添加备用的手动添加标签的代码
}
#endregion
//TagManger.LoadTagsFromConfig("E:\\MyTest\\VS2022\\CapMachine\\CapMachine\\CapMachine.Wpf\\TagConfig\\ShortTags.json");
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 10,
// Name = "转速[rpm]",
// NameNoUnit = "转速",
// EnName = "Speed",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "rpm",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15000", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 0 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 20,
// Name = "排气压力[BarA]",
// NameNoUnit = "排气压力",
// EnName = "ExPress",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 100,
// Unit = "BarA",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15002", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 2 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 30,
// Name = "吸气压力[BarA]",
// NameNoUnit = "吸气压力",
// EnName = "InhPress",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 100,
// Unit = "BarA",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15004", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 4 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 40,
// Name = "吸气温度[℃]",
// NameNoUnit = "吸气温度",
// EnName = "InhTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15006", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 6 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 50,
// Name = "COND1温度[℃]",
// NameNoUnit = "COND1温度",
// EnName = "Cond1Temp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15008", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 8 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 60,
// Name = "润滑油压力[BarA]",
// NameNoUnit = "润滑油压力",
// EnName = "LubePress",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 100,
// Unit = "BarA",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15010", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 10 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 70,
// Name = "COND2压力[BarA]",
// NameNoUnit = "COND2压力",
// EnName = "Cond2Press",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 100,
// Unit = "BarA",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15012", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 12 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 80,
// Name = "OCR[%]",
// NameNoUnit = "OCR",
// EnName = "OCR",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "%",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15014", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 14 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 90,
// Name = "HV[V]",
// NameNoUnit = "HV[V]",
// EnName = "HV",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "V",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15016", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 16 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 100,
// Name = "HV[A]",
// NameNoUnit = "HV[A]",
// EnName = "HVCur",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 100,
// Unit = "A",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15018", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 18 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 110,
// Name = "HV[W]",
// NameNoUnit = "HV[W]",
// EnName = "HVPw",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "W",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15020", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 20 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 120,
// Name = "LV[V]",
// NameNoUnit = "LV[V]",
// EnName = "LV",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "V",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15022", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 22 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 130,
// Name = "LV[A]",
// NameNoUnit = "LV[A]",
// EnName = "LVCur",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 100,
// Unit = "A",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15024", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 24 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 140,
// Name = "环境温度[℃]",
// NameNoUnit = "环境温度",
// EnName = "EnvTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15026", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 26 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 150,
// Name = "环境湿度[%]",
// NameNoUnit = "环境湿度",
// EnName = "EnvRH",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "%",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15028", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 28 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 160,
// Name = "OS1温度[℃]",
// NameNoUnit = "OS1温度",
// EnName = "OS1Temp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15030", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 30 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 170,
// Name = "OS2温度[℃]",
// NameNoUnit = "OS2温度",
// EnName = "OS2Temp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15032", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 32 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 180,
// Name = "COND2温度[℃]",
// NameNoUnit = "COND2温度",
// EnName = "Cond2Temp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15034", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 34 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 190,
// Name = "EVAP出口温度[℃]",
// NameNoUnit = "EVAP出口温度",
// EnName = "EVAPExpTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15036", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 36 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 200,
// Name = "冷媒流量[L/min]",
// NameNoUnit = "冷媒流量",
// EnName = "VRV",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "L/min",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15038", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 38 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 210,
// Name = "润滑油流量[L/min]",
// NameNoUnit = "润滑油流量",
// EnName = "LubeFlow",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "L/min",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15040", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 40 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 220,
// Name = "排气温度[℃]",
// NameNoUnit = "排气温度",
// EnName = "ExTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15042", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 42 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 230,
// Name = "膨胀阀前压力[BarA]",
// NameNoUnit = "膨胀阀前压力",
// EnName = "TxvFrPress",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 100,
// Unit = "BarA",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15044", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 44 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 240,
// Name = "膨胀阀前温度[℃]",
// NameNoUnit = "膨胀阀前温度",
// EnName = "TxvFrTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15046", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 46 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 250,
// Name = "EVAP出口压力[BarA]",
// NameNoUnit = "EVAP出口压力",
// EnName = "EVAPExpPress",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 100,
// Unit = "BarA",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15048", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 48 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 260,
// Name = "腔内压力[BarA]",
// NameNoUnit = "腔内压力",
// EnName = "IntrplPress",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 100,
// Unit = "BarA",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15050", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 50 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 270,
// Name = "压缩机表面温度[℃]",
// NameNoUnit = "压缩机表面温度",
// EnName = "CapSurfTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15052", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 52 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 280,
// Name = "PTC流量[L/min]",
// NameNoUnit = "PTC流量",
// EnName = "PTCFlow",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "L/min",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15054", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 54 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 290,
// Name = "PTC入水温度[℃]",
// NameNoUnit = "PTC入水温度",
// EnName = "PTCEntTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15056", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 56 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 300,
// Name = "PTC出水温度[℃]",
// NameNoUnit = "PTC出水温度",
// EnName = "PTCExpTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15058", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 58 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 310,
// Name = "通讯Cmp母线电流[A]",
// NameNoUnit = "通讯Cmp母线电流",
// EnName = "ComCapBusCur",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 100,
// Unit = "A",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15060", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 60 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 320,
// Name = "通讯Cmp母线电压[V]",
// NameNoUnit = "通讯Cmp母线电压",
// EnName = "ComCapBusVol",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "V",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15062", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 62 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 330,
// Name = "通讯Cmp逆变器温度[℃]",
// NameNoUnit = "通讯Cmp逆变器温度",
// EnName = "ComCapInvTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15064", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 64 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 340,
// Name = "通讯Cmp相电流[A]",
// NameNoUnit = "通讯Cmp相电流",
// EnName = "ComCapPhCur",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 100,
// Unit = "A",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15066", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 66 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 350,
// Name = "通讯Cmp功率[W]",
// NameNoUnit = "通讯Cmp功率",
// EnName = "ComCapPw",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "W",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15068", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 68 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 360,
// Name = "通讯Cmp芯片温度[℃]",
// NameNoUnit = "通讯Cmp芯片温度",
// EnName = "ComCapChipTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15070", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 70 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 370,
// Name = "通讯PTC入水温度[℃]",
// NameNoUnit = "通讯PTC入水温度",
// EnName = "ComPTCEntTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15072", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 72 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 380,
// Name = "通讯PTC出水温度[℃]",
// NameNoUnit = "通讯PTC出水温度",
// EnName = "ComPTCExpTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 10,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15074", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 74 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 390,
// Name = "通讯PTC峰值电流[A]",
// NameNoUnit = "通讯PTC峰值电流",
// EnName = "ComPTCPeakCur",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "A",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15076", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 76 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 400,
// Name = "通讯PTC母线电流[A]",
// NameNoUnit = "通讯PTC母线电流",
// EnName = "ComPTCBusCur",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 100,
// Unit = "A",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15078", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 78 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 410,
// Name = "通讯PTC膜温[℃]",
// NameNoUnit = "通讯PTC膜温",
// EnName = "ComPTCFlmTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15080", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 80 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 420,
// Name = "通讯PTC模块温度[℃]",
// NameNoUnit = "通讯PTC模块温度",
// EnName = "ComPTCMdTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15082", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 82 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 430,
// Name = "液冷媒流量[kg/h]",
// NameNoUnit = "液冷媒流量",
// EnName = "LiqRefFlow",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "kg/h",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15084", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 84 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 440,
// Name = "干度流量[kg/h]",
// NameNoUnit = "干度流量",
// EnName = "DryFlow",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "kg/h",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15086", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 86 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 450,
// Name = "H5吸气混合器温度[℃]",
// NameNoUnit = "H5吸气混合器温度",
// EnName = "H5InhMixTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15088", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 88 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 460,
// Name = "COND循环水温[℃]",
// NameNoUnit = "COND循环水温",
// EnName = "CONDCirWaterTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15090", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 90 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 470,
// Name = "SUBCOOL出口温度[℃]",
// NameNoUnit = "SUBCOOL出口温度",
// EnName = "SubcoolOutTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15092", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 92 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 480,
// Name = "吸气混合器出口温度[℃]",
// NameNoUnit = "吸气混合器出口温度",
// EnName = "InhMixOutTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15094", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 94 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 490,
// Name = "H1出口温度[℃]",
// NameNoUnit = "H1出口温度",
// EnName = "H1OutTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15096", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 96 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 500,
// Name = "S.C循环水温[℃]",
// NameNoUnit = "S.C循环水温",
// EnName = "SCCirWaterTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15098", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 98 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 510,
// Name = "EVAP循环水温[℃]",
// NameNoUnit = "EVAP循环水温",
// EnName = "EvapCirWaterTemp",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "℃",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15100", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 100 },
//});
//TagManger.AddTag(new ShortValueTag()
//{
// Id = 520,
// Name = "吸气混合器出口压力[BarA]",
// NameNoUnit = "吸气混合器出口压力",
// EnName = "InhMixOutPress",
// Group = "采集",
// MinValue = 0,
// MaxValue = 10000,
// IsMeter = false,
// DecimalPoint = 0,
// Precision = 1,
// Unit = "BarA",
// DataType = TagDataType.Short,
// RWInfo = RWInfo.PLCRead,
// PVModel = new MeterValueAttrCell() { Address = "VW15102", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 102 },
//});
#endregion
ListHandSwitchData = new List<HandSwitchData>()
{
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.2" },
new HandSwitchData(){Name="HCV2",ActionAddress="M2.4",StateAddress="Q1.3" },
new HandSwitchData(){Name="ECV1",ActionAddress="M2.5",StateAddress="Q1.4" },
new HandSwitchData(){Name="ECV2",ActionAddress="M2.6",StateAddress="Q1.5" },
new HandSwitchData(){Name="使能",ActionAddress="M2.7",StateAddress="V15.1" },
};
InitialPLCCom();
//拓展的参数信息
CurSysExdInfo = new SysExdInfo(SiemensDrive);
SysExdBoolInfos = new SysExdBoolInfo(SiemensDrive);
//PubRtDataStart();
}
#region
//// <summary>
///// 手自动切换集合数据
///// </summary>
public List<HandSwitchData> ListHandSwitchData { get; set; }
/// <summary>
/// 程序复位
/// </summary>
/// <returns></returns>
public bool SysReset()
{
return true;
//取消XXX
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;
}
/// <summary>
/// 程序消音
/// </summary>
/// <returns></returns>
public bool SysMute()
{
return true;
//取消XXX
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;
}
/// <summary>
/// 程序Start
/// </summary>
/// <returns></returns>
public bool SysStart()
{
return true;
//取消XXX
//var Result = SiemensDrive.Write("M0.4", true);
//if (Result.IsSuccess)
//{
// return true;
//}
//else
//{
// return false;
//}
}
/// <summary>
/// 程序结束
/// </summary>
/// <returns></returns>
public bool SysEnd()
{
return true;
//取消XXX
var Result = SiemensDrive.Write("M0.7", true);
if (Result.IsSuccess)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 程序暂停
/// 取反
/// </summary>
/// <returns></returns>
public bool SysPause()
{
return true;
//取消XXX
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
/// <summary>
/// UI更新
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <exception cref="NotImplementedException"></exception>
private void RecoredCycleAction(object? sender, ElapsedEventArgs e)
{
//IsValueShow = !IsValueShow;
}
/// <summary>
/// 初始化PLC通信
/// </summary>
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<short> OperateResultShort { get; set; }
/// <summary>
/// SV数据
/// </summary>
private OperateResult<short> OperateResultSVShort { get; set; }
/// <summary>
/// MV数据
/// </summary>
private OperateResult<short> OperateResultMVShort { get; set; }
private Random Random { get; set; } = new Random();
/// <summary>
/// 报警结果集合
/// </summary>
private OperateResult<bool[]> OperateResultAlarm { get; set; }
/// <summary>
/// 压缩机使能信号
/// 压缩机使能信号
/// 压缩机速度控制
/// 压缩机功率限制
/// 加热器使能信号
///加热器功率给定
///水流量信号给定
///加热器目标水温
/// </summary>
private OperateResult<short[]> OperateResultValue { get; set; }
/// <summary>
/// CAP的使能状态
/// </summary>
private OperateResult<bool> OperateResultCapEnable { get; set; }
/// <summary>
/// 时间诊断
/// </summary>
private Stopwatch DiagnosticsTime { get; set; } = new Stopwatch();
/// <summary>
/// PV整块读取数据
/// </summary>
private OperateResult<byte[]> OperateResultBlockPVRead { get; set; }
/// <summary>
/// PLC扫描线程
/// </summary>
private void RtScanDeviceStart()
{
PLCScanTask = Task.Run(async () =>
{
Stopwatch stopwatch = new Stopwatch();
while (ThreadEnable)
{
await Task.Delay(100);
//await Task.CompletedTask;
DiagnosticsTime.Reset();
DiagnosticsTime.Start();
try
{
//stopwatch.Start(); //启动Stopwatch
//CANLIN数据读取到TagManger.DicTags数据中心中上面的操作是itemWrite反写到PLC中
foreach (var itemCanLinGroup in TagManger.DicTags)
{
//转速特殊处理因为在数据集合中叫做【转速】在CANLIN中叫做【通讯Cmp转速】
if (itemCanLinGroup.Value.NameNoUnit == "转速")
{
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
//通信转速 Dbc中间配置名称的转速数据读取出来 给PLC 取消XXX
if (TagManger.TryGetPVModel(itemCanLinGroup.Key, out MeterValueAttrCell? CanpVModel))
{
CanpVModel!.EngValue = CanDriveService.GetDbcSpeedValueBySpeedName("通讯Cmp转速");
SiemensDrive.Write(CanpVModel!.ReWritePLCAddress!, (short)CanDriveService.GetDbcSpeedValueBySpeedName("通讯Cmp转速"));
//pVModel.EngSrcValue = 0;
}
break;
case CanLinEnum.CANFD:
//通信转速 Dbc中间配置名称的转速数据读取出来 给PLC 取消XXX
if (TagManger.TryGetPVModel(itemCanLinGroup.Key, out MeterValueAttrCell? CanfdpVModel))
{
CanfdpVModel!.EngValue = CanFdDriveService.GetDbcSpeedValueBySpeedName("通讯Cmp转速");
SiemensDrive.Write(CanfdpVModel!.ReWritePLCAddress!, (short)CanFdDriveService.GetDbcSpeedValueBySpeedName("通讯Cmp转速"));
//pVModel.EngSrcValue = 0;
}
break;
case CanLinEnum.Lin:
//通信转速 Dbc中间配置名称的转速数据读取出来 给PLC 取消XXX
if (TagManger.TryGetPVModel(itemCanLinGroup.Key, out MeterValueAttrCell? LinpVModel))
{
LinpVModel!.EngValue = LinDriveService.GetLdfSpeedValueBySpeedName("通讯Cmp转速");
SiemensDrive.Write(LinpVModel!.ReWritePLCAddress!, (short)LinDriveService.GetLdfSpeedValueBySpeedName("通讯Cmp转速"));
}
break;
default:
break;
}
//找到后继续下一个
continue;
}
//只处理CANLIN的数据
if (itemCanLinGroup.Value.Group == "压缩机")
{
//尝试获取模型信息
if (TagManger.TryGetCapPVModelByShortValueTag(itemCanLinGroup.Key, out MeterValueAttrCell? pVModel))
{
//没有这个地址则跳过
if (String.IsNullOrEmpty(pVModel!.ReWritePLCAddress)) continue;
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
//取得压缩机的CANLIN数据到数据集合中
pVModel!.EngValue = CanDriveService.GetDbcValueByName(itemCanLinGroup.Value.NameNoUnit);
//写入到PLC中
SiemensDrive.Write(pVModel!.ReWritePLCAddress!, (short)(CanDriveService.GetDbcValueByName(itemCanLinGroup.Value.NameNoUnit) * itemCanLinGroup.Value.Precision));
break;
case CanLinEnum.CANFD:
//取得压缩机的CANLIN数据到数据集合中
pVModel!.EngValue = CanFdDriveService.GetDbcValueByName(itemCanLinGroup.Value.NameNoUnit);
//写入到PLC中
SiemensDrive.Write(pVModel!.ReWritePLCAddress!, (short)(CanFdDriveService.GetDbcValueByName(itemCanLinGroup.Value.NameNoUnit) * itemCanLinGroup.Value.Precision));
break;
case CanLinEnum.Lin:
//取得压缩机的CANLIN数据
pVModel!.EngValue = LinDriveService.GetLdfValueByName(itemCanLinGroup.Value.NameNoUnit);
//写入到PLC中
SiemensDrive.Write(pVModel!.ReWritePLCAddress!, (short)(LinDriveService.GetLdfValueByName(itemCanLinGroup.Value.NameNoUnit) * itemCanLinGroup.Value.Precision));
break;
case CanLinEnum.No:
break;
default:
break;
}
}
}
}
//PV批量读取
OperateResultBlockPVRead = SiemensDrive.Read("VW15000", 200);
if (OperateResultBlockPVRead.IsSuccess)
{
foreach (var itemBlockReadTag in TagManger.DicTags)
{
if (itemBlockReadTag.Key.Contains("转速"))
{
//转速不需要PLC读取
continue;
}
//需要从PLC读取的标签才算
if ((itemBlockReadTag.Value.RWInfo == RWInfo.PLCRead || itemBlockReadTag.Value.RWInfo == RWInfo.Control) && TagManger.TryGetPVModel(itemBlockReadTag.Key, out MeterValueAttrCell pVModel))
{
//地址为空的话则下一个
if (string.IsNullOrEmpty(pVModel!.Address)) continue;
//给PvModel的原始属性赋值
pVModel!.EngSrcValue = SiemensDrive.ByteTransform.TransInt16(OperateResultBlockPVRead.Content, pVModel.BlockIndex);
}
}
//通信状态
LinkState = true;
}
else
{
//通信状态
LinkState = false;
}
////读取报警信息 取消报警XXX
//OperateResultAlarm = SiemensDrive.ReadBool("V0.0", 15);
//if (OperateResultAlarm.IsSuccess)
//{
// foreach (var item in AlarmService.ListAlarmRunCell)
// {
// item.UpdateBoolValue(OperateResultAlarm.Content[item.Index]);
// }
//}
//压缩机使能信号实时赋值
OperateResultValue = SiemensDrive.ReadInt16("VW14000", 30);
if (OperateResultValue.IsSuccess)
{
//压缩机使能信号实时赋值
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
//获取PLC的使能状态更新到CAN的使能状态
CanDriveService.UpdateCapEnableCmdData(OperateResultValue.Content[0] == 0 ? false : true);
break;
case CanLinEnum.CANFD:
//获取PLC的使能状态更新到CAN的使能状态
CanFdDriveService.UpdateCapEnableCmdData(OperateResultValue.Content[0] == 0 ? false : true);
break;
case CanLinEnum.Lin:
//获取PLC的使能状态更新到LIN的使能状态
LinDriveService.UpdateCapEnableCmdData(OperateResultValue.Content[0] == 0 ? false : true);
break;
default:
break;
}
//压缩机速度实时赋值
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
//获取PLC的使能状态更新到CAN的使能状态
CanDriveService.UpdateSpeedCmdData(OperateResultValue.Content[1]);
break;
case CanLinEnum.CANFD:
//获取PLC的使能状态更新到CAN的使能状态
CanFdDriveService.UpdateSpeedCmdData(OperateResultValue.Content[1]);
break;
case CanLinEnum.Lin:
//获取PLC的使能状态更新到LIN的使能状态
LinDriveService.UpdateSpeedCmdData(OperateResultValue.Content[1]);
break;
default:
break;
}
//压缩机压缩机功率限制实时赋值
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
//获取PLC的功率限制更新到CAN的功率限制
CanDriveService.UpdateCapPwLimitCmdData(OperateResultValue.Content[2]);
break;
case CanLinEnum.CANFD:
//获取PLC的功率限制更新到CAN的功率限制
CanFdDriveService.UpdateCapPwLimitCmdData(OperateResultValue.Content[2]);
break;
case CanLinEnum.Lin:
//获取PLC的功率限制更新到LIN的功率限制
LinDriveService.UpdateCapPwLimitCmdData(OperateResultValue.Content[2]);
break;
default:
break;
}
//压缩机 PTC使能 实时赋值
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
//获取PLC的 PTC使能更新到CAN的 PTC使能
CanDriveService.UpdateCapPTCEnableCmdData(OperateResultValue.Content[10] == 0 ? false : true);
break;
case CanLinEnum.CANFD:
//获取PLC的 PTC使能更新到CAN的 PTC使能
CanFdDriveService.UpdateCapPTCEnableCmdData(OperateResultValue.Content[10] == 0 ? false : true);
break;
case CanLinEnum.Lin:
//获取PLC的 PTC使能更新到LIN的 PTC使能
LinDriveService.UpdateCapPTCEnableCmdData(OperateResultValue.Content[10] == 0 ? false : true);
break;
default:
break;
}
//压缩机 PTC功率 实时赋值
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
//获取PLC的 PTC功率更新到CAN的 PTC功率
CanDriveService.UpdateCapPTCPwCmdData(OperateResultValue.Content[11]);
break;
case CanLinEnum.CANFD:
//获取PLC的 PTC功率更新到CAN的 PTC功率
CanFdDriveService.UpdateCapPTCPwCmdData(OperateResultValue.Content[11]);
break;
case CanLinEnum.Lin:
//获取PLC的 PTC功率更新到LIN的 PTC功率
LinDriveService.UpdateCapPTCPwCmdData(OperateResultValue.Content[11]);
break;
default:
break;
}
//压缩机 PTC水流量信号 实时赋值
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
//获取PLC的 PTC水流量信号更新到CAN的 PTC水流量信号
CanDriveService.UpdateCapPTCFlowCmdData(OperateResultValue.Content[12] * 1.0 / 100);
break;
case CanLinEnum.CANFD:
//获取PLC的 PTC水流量信号更新到CAN的 PTC水流量信号
CanFdDriveService.UpdateCapPTCFlowCmdData(OperateResultValue.Content[12] * 1.0 / 100);
break;
case CanLinEnum.Lin:
//获取PLC的 PTC水流量信号更新到LIN的 PTC水流量信号
LinDriveService.UpdateCapPTCFlowCmdData(OperateResultValue.Content[12] * 1.0 / 100);
break;
default:
break;
}
//压缩机 PTC水温 实时赋值
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
//获取PLC的 PTC水温更新到CAN的 PTC水温
CanDriveService.UpdateCapPTCWaterTempCmdData(OperateResultValue.Content[13]);
break;
case CanLinEnum.CANFD:
//获取PLC的 PTC水温更新到CAN的 PTC水温
CanFdDriveService.UpdateCapPTCWaterTempCmdData(OperateResultValue.Content[13]);
break;
case CanLinEnum.Lin:
//获取PLC的 PTC水温更新到LIN的 PTC水温
LinDriveService.UpdateCapPTCWaterTempCmdData(OperateResultValue.Content[13]);
break;
default:
break;
}
}
//循环读取手自动切换
//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);
// break;
// case CanLinEnum.Lin:
// //获取PLC的使能状态更新到LIN的使能状态
// LinDriveService.UpdateCapEnableCmdData(item.State);
// break;
// default:
// break;
// }
// }
// }
//}
////拓展信息的展示 取消XXX
//foreach (var itemQuickTag in CurSysExdInfo.QuickTags)
//{
// itemQuickTag.OperateResultSource = SiemensDrive.Read(itemQuickTag.ValueAddress, itemQuickTag.ByteLength);
//}
//CurSysExdInfo.SumRunTime();
////布尔拓展信息的展示 取消XXX
//foreach (var itemQuickTag in SysExdBoolInfos.QuickTags)
//{
// itemQuickTag.OperateResultSource = SiemensDrive.Read(itemQuickTag.ValueAddress, itemQuickTag.ByteLength);
//}
}
catch (Exception ex)
{
LogService.Error(ex.Message);
}
DiagnosticsTime.Stop();
ConfigService.PlcCycleTime = (int)DiagnosticsTime.Elapsed.TotalMilliseconds;
//Console.WriteLine($"扫描时间:{DiagnosticsTime.Elapsed.TotalMilliseconds.ToString()}");
}
});
}
private Random random = new Random();
/// <summary>
///发布实时数据
/// </summary>
private void PubRtDataStart()
{
ScanTask = Task.Run(async () =>
{
while (ThreadEnable)
{
try
{
await Task.Delay(1000);
//_EventAggregator.GetEvent<ChartRtEvent>().Publish(new List<Models.ChartRtValue>()
//{
// 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)
{
}
}
});
}
}
}