1440 lines
63 KiB
C#
1440 lines
63 KiB
C#
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
|
||
{
|
||
/// <summary>
|
||
/// 机器实时数据服务
|
||
/// </summary>
|
||
public class MachineRtDataService : BindableBase
|
||
{
|
||
/// <summary>
|
||
/// 事件聚合器
|
||
/// </summary>
|
||
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; }
|
||
|
||
/// <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; }
|
||
|
||
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,
|
||
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());
|
||
|
||
//事件服务
|
||
_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 标签管理
|
||
|
||
//【SongZhi】
|
||
|
||
#region SongZhi
|
||
|
||
TagManger.AddTag(new Tag<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(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<short>(new ShortTagValue())
|
||
{
|
||
Name = "通讯母线电压[V]",//名称带单位
|
||
NameNoUnit = "通讯母线电压",//无单位名称
|
||
EnName = "ComCapBusVol",//英文名称
|
||
Group = "CANLIN",//分组
|
||
MinValue = 0,
|
||
MaxValue = 100,
|
||
Unit = "V",
|
||
PVAddress = "VW146",//地址信息
|
||
SVAddress = "",
|
||
MVAddress = "",
|
||
IsMeter = false,
|
||
Precision = 1,
|
||
DecimalPoint = 1,
|
||
Samp = 1,
|
||
ValueType = typeof(short),
|
||
Index = "",
|
||
});
|
||
TagManger.AddTag(new Tag<short>(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<short>(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<short>(new ShortTagValue())
|
||
{
|
||
Name = "通讯功率[W]",//名称带单位
|
||
NameNoUnit = "通讯功率",//无单位名称
|
||
EnName = "ComCapPw",//英文名称
|
||
Group = "CANLIN",//分组
|
||
MinValue = 0,
|
||
MaxValue = 100,
|
||
Unit = "W",
|
||
PVAddress = "VW152",//地址信息
|
||
SVAddress = "",
|
||
MVAddress = "",
|
||
IsMeter = false,
|
||
Precision = 1,
|
||
DecimalPoint = 0,
|
||
Samp = 1,
|
||
ValueType = typeof(short),
|
||
Index = "",
|
||
});
|
||
TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||
{
|
||
Name = "通讯芯片温度[℃]",//名称带单位
|
||
NameNoUnit = "通讯芯片温度",//无单位名称
|
||
EnName = "ComCapChipTemp",//英文名称
|
||
Group = "CANLIN",//分组
|
||
MinValue = 0,
|
||
MaxValue = 100,
|
||
Unit = "℃",
|
||
PVAddress = "VW154",//地址信息
|
||
SVAddress = "",
|
||
MVAddress = "",
|
||
IsMeter = false,
|
||
Precision = 1,
|
||
DecimalPoint = 1,
|
||
Samp = 1,
|
||
ValueType = typeof(short),
|
||
Index = "",
|
||
});
|
||
TagManger.AddTag(new Tag<short>(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<short>(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
|
||
|
||
|
||
#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.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<short>("转速");
|
||
//var data1 = TagManger.GetTagByName<short>("转速");
|
||
|
||
//var data2 = TagManger.GetTagByName<short>("转速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 手自动的操作
|
||
|
||
//// <summary>
|
||
///// 手自动切换集合数据
|
||
///// </summary>
|
||
public List<HandSwitchData> ListHandSwitchData { get; set; }
|
||
|
||
/// <summary>
|
||
/// 程序复位
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 程序消音
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
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;
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 程序Start
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public bool SysStart()
|
||
{
|
||
var Result = SiemensDrive.Write("M0.4", true);
|
||
if (Result.IsSuccess)
|
||
{
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 程序结束
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public bool SysEnd()
|
||
{
|
||
var Result = SiemensDrive.Write("M0.7", true);
|
||
if (Result.IsSuccess)
|
||
{
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
return false;
|
||
}
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 程序暂停
|
||
/// 取反
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
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
|
||
|
||
|
||
/// <summary>
|
||
/// UI更新
|
||
/// </summary>
|
||
/// <param name="sender"></param>
|
||
/// <param name="e"></param>
|
||
/// <exception cref="NotImplementedException"></exception>
|
||
private void RecoredCycleAction(object? sender, ElapsedEventArgs e)
|
||
{
|
||
//IsValueShow = !IsValueShow;
|
||
}
|
||
|
||
private Tag<short> _TagInfo;
|
||
|
||
public Tag<short> TagInfo
|
||
{
|
||
get { return _TagInfo; }
|
||
set { _TagInfo = value; RaisePropertyChanged(); }
|
||
}
|
||
|
||
|
||
/// <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>
|
||
/// CAP的使能状态
|
||
/// </summary>
|
||
private OperateResult<bool> OperateResultCapEnable { get; set; }
|
||
|
||
/// <summary>
|
||
/// 时间诊断
|
||
/// </summary>
|
||
private Stopwatch DiagnosticsTime { get; set; } = new Stopwatch();
|
||
|
||
/// <summary>
|
||
/// PLC扫描线程
|
||
/// </summary>
|
||
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<short>(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<short>(itemTag.Value.Name)!.Value = SiemensDrive.ReadInt16(itemTag.Value.Address).Content;
|
||
// TagManger.GetTagByName<short>(itemTag.Value.Name).EngPvValue = TagManger.GetTagInfoValueByName<short>(itemTag.Value.Name)!.Value * 1.0 / TagManger.GetTagByName<short>(itemTag.Value.Name)!.Precision;
|
||
// break;
|
||
case ConstShortType:
|
||
|
||
TagManger.GetTagInfoValueByName<short>(itemTag.Value.Name)!.IsShow = IsValueShow;
|
||
|
||
////仿真数据
|
||
//TagManger.GetTagInfoValueByName<short>(itemTag.Value.Name)!.Value = (short)Random.Next(1, 100);
|
||
//TagManger.GetTagByName<short>(itemTag.Value.Name).EngPvValue = (short)Random.Next(1, 100) * 1.0 / TagManger.GetTagByName<short>(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("通讯转速"));
|
||
//itemTag.Value.EngPvValue = 0;
|
||
break;
|
||
case CanLinEnum.CANFD:
|
||
SiemensDrive.Write(itemTag.Value.PVAddress, (short)CanFdDriveService.GetDbcSpeedValueBySpeedName("通讯转速"));
|
||
break;
|
||
case CanLinEnum.Lin:
|
||
//通信转速 Dbc中间配置名称的转速数据读取出来 给PLC
|
||
SiemensDrive.Write(itemTag.Value.PVAddress, (short)LinDriveService.GetLdfSpeedValueBySpeedName("通讯转速"));
|
||
//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("通讯母线电压") * itemTag.Value.Precision));
|
||
//itemTag.Value.EngPvValue = 0;
|
||
break;
|
||
case CanLinEnum.CANFD:
|
||
SiemensDrive.Write(itemTag.Value.PVAddress, (short)CanFdDriveService.GetDbcValueByName("通讯母线电压") * itemTag.Value.Precision);
|
||
break;
|
||
case CanLinEnum.Lin:
|
||
//通信转速 Dbc中间配置名称的转速数据读取出来 给PLC
|
||
SiemensDrive.Write(itemTag.Value.PVAddress, (short)(LinDriveService.GetLdfValueByName("通讯母线电压") * 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("通讯母线电流") * itemTag.Value.Precision));
|
||
//itemTag.Value.EngPvValue = 0;
|
||
break;
|
||
case CanLinEnum.CANFD:
|
||
SiemensDrive.Write(itemTag.Value.PVAddress, (short)CanFdDriveService.GetDbcValueByName("通讯母线电流") * itemTag.Value.Precision);
|
||
break;
|
||
case CanLinEnum.Lin:
|
||
//通信转速 Dbc中间配置名称的转速数据读取出来 给PLC
|
||
SiemensDrive.Write(itemTag.Value.PVAddress, (short)(LinDriveService.GetLdfValueByName("通讯母线电流") * 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("通讯相电流") * itemTag.Value.Precision));
|
||
//itemTag.Value.EngPvValue = 0;
|
||
break;
|
||
case CanLinEnum.CANFD:
|
||
SiemensDrive.Write(itemTag.Value.PVAddress, (short)CanFdDriveService.GetDbcValueByName("通讯相电流") * itemTag.Value.Precision);
|
||
break;
|
||
case CanLinEnum.Lin:
|
||
//通信转速 Dbc中间配置名称的转速数据读取出来 给PLC
|
||
SiemensDrive.Write(itemTag.Value.PVAddress, (short)(LinDriveService.GetLdfValueByName("通讯相电流") * 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("通讯功率") * itemTag.Value.Precision));
|
||
//itemTag.Value.EngPvValue = 0;
|
||
break;
|
||
case CanLinEnum.CANFD:
|
||
SiemensDrive.Write(itemTag.Value.PVAddress, (short)CanFdDriveService.GetDbcValueByName("通讯功率") * itemTag.Value.Precision);
|
||
break;
|
||
case CanLinEnum.Lin:
|
||
//通信转速 Dbc中间配置名称的转速数据读取出来 给PLC
|
||
SiemensDrive.Write(itemTag.Value.PVAddress, (short)(LinDriveService.GetLdfValueByName("通讯功率") * 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("通讯芯片温度") * itemTag.Value.Precision));
|
||
//itemTag.Value.EngPvValue = 0;
|
||
break;
|
||
case CanLinEnum.CANFD:
|
||
SiemensDrive.Write(itemTag.Value.PVAddress, (short)CanFdDriveService.GetDbcValueByName("通讯芯片温度") * itemTag.Value.Precision);
|
||
break;
|
||
case CanLinEnum.Lin:
|
||
//通信转速 Dbc中间配置名称的转速数据读取出来 给PLC
|
||
SiemensDrive.Write(itemTag.Value.PVAddress, (short)(LinDriveService.GetLdfValueByName("通讯芯片温度") * itemTag.Value.Precision));
|
||
//itemTag.Value.EngPvValue = 0;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
OperateResultShort = SiemensDrive.ReadInt16(itemTag.Value.PVAddress);
|
||
if (OperateResultShort.IsSuccess)
|
||
{
|
||
TagManger.GetTagInfoValueByName<short>(itemTag.Value.Name)!.Value = SiemensDrive.ReadInt16(itemTag.Value.PVAddress).Content;
|
||
TagManger.GetTagByName<short>(itemTag.Value.Name)!.EngPvValue = TagManger.GetTagInfoValueByName<short>(itemTag.Value.Name)!.Value * 1.0 / TagManger.GetTagByName<short>(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<short>(itemTag.Value.Name)!.Value = OperateResultSVShort.Content;
|
||
TagManger.GetTagByName<short>(itemTag.Value.Name)!.EngSvValue = OperateResultSVShort.Content * 1.0 / TagManger.GetTagByName<short>(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<short>(itemTag.Value.Name)!.EngSvValue);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
LinkState = false;
|
||
}
|
||
}
|
||
|
||
if (!string.IsNullOrEmpty(itemTag.Value.MVAddress))
|
||
{
|
||
OperateResultMVShort = SiemensDrive.ReadInt16(itemTag.Value.MVAddress);
|
||
if (OperateResultMVShort.IsSuccess)
|
||
{
|
||
//TagManger.GetTagInfoValueByName<short>(itemTag.Value.Name)!.Value = OperateResultMVShort.Content;
|
||
TagManger.GetTagByName<short>(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();
|
||
|
||
/// <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)
|
||
{
|
||
|
||
}
|
||
|
||
}
|
||
|
||
});
|
||
}
|
||
}
|
||
}
|