diff --git a/CapMachine.Wpf/Models/Tag/BaseTag.cs b/CapMachine.Wpf/Models/Tag/BaseTag.cs new file mode 100644 index 0000000..6fd4ef3 --- /dev/null +++ b/CapMachine.Wpf/Models/Tag/BaseTag.cs @@ -0,0 +1,88 @@ +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models.Tag +{ + public abstract class BaseTag : BindableBase, ITag + { + + #region 公共属性 + + /// + /// Id + /// + public long Id { get; set; } + + /// + /// 名称 中文 + /// + public string Name { get; set; } + + /// + /// 名称 英文 + /// + public string EnName { get; set; } + + /// + /// 名称 无单位中文名称 + /// + public string NameNoUnit { get; set; } + + /// + /// 标签组 + /// + public string Group { get; set; } + + /// + /// 数据类型信息 + /// + public TagDataType DataType { get; set; } + + /// + /// 读写信息 + /// + public RWInfo RWInfo { get; set; } + + /// + /// 最大值 + /// + public double MaxValue { get; set; } + + /// + /// 最小值 + /// + public double MinValue { get; set; } + + /// + /// 精度 到PLC的转换精度/分辨率 + /// + public short Precision { get; set; } + + /// + /// 小数点 展示时用的小数点 + /// + public short DecimalPoint { get; set; } + + /// + /// 单位 + /// + public string? Unit { get; set; } + + /// + /// 是否为仪表参数 + /// + public bool IsMeter { get; set; } = true; + + /// + /// PV 工程值 字符串 + /// + public string? PVEngValueStr { get; set; } + + + #endregion + } +} diff --git a/CapMachine.Wpf/Models/Tag/CalcTag.cs b/CapMachine.Wpf/Models/Tag/CalcTag.cs new file mode 100644 index 0000000..fc5242c --- /dev/null +++ b/CapMachine.Wpf/Models/Tag/CalcTag.cs @@ -0,0 +1,20 @@ +using CapMachine.Wpf.Models.Tag.Cell; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models.Tag +{ + /// + /// 计算得到的标签 + /// + public class CalcTag : BaseTag + { + /// + /// PV Value Model + /// + public QuickAttrCell? PVModel { get; set; } + } +} diff --git a/CapMachine.Wpf/Models/Tag/CapTag.cs b/CapMachine.Wpf/Models/Tag/CapTag.cs new file mode 100644 index 0000000..23bd4bc --- /dev/null +++ b/CapMachine.Wpf/Models/Tag/CapTag.cs @@ -0,0 +1,20 @@ +using CapMachine.Wpf.Models.Tag.Cell; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models.Tag +{ + /// + /// 压缩机通信标签 + /// + public class CapTag : BaseTag + { + /// + /// PV Value Model + /// + public QuickAttrCell? PVModel { get; set; } + } +} diff --git a/CapMachine.Wpf/Models/Tag/Cell/MeterExdAttrCell.cs b/CapMachine.Wpf/Models/Tag/Cell/MeterExdAttrCell.cs new file mode 100644 index 0000000..fb6816d --- /dev/null +++ b/CapMachine.Wpf/Models/Tag/Cell/MeterExdAttrCell.cs @@ -0,0 +1,62 @@ +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models.Tag +{ + /// + /// 标签信息仪表值拓展属性单元 + /// 比如 PID Limit ALARM的值信息 + /// + public class MeterExdAttrCell : BindableBase + { + /// + /// 地址 + /// + public string? Address { get; set; } + + /// + /// 启用 + /// + public bool? Enable { get; set; } = true; + + ///// + ///// 读取的块信息 + ///// 人工确认 + ///// + //public string? Block { get; set; } + + ///// + ///// 读取的块信息的Index + ///// + //public short BlockIndex { get; set; } + + private double _EngValue; + /// + /// 工程值 SV + /// + public double EngValue + { + get { return _EngValue; } + set + { + _EngValue = value; + RaisePropertyChanged(); + //EngValueStr = Math.Round(value, DecimalPoint).ToString(); + } + } + + private string? _EngValueStr; + /// + /// 工程值的字符串 MV + /// + public string? EngValueStr + { + get { return _EngValueStr; } + set { _EngValueStr = value; RaisePropertyChanged(); } + } + } +} diff --git a/CapMachine.Wpf/Models/Tag/Cell/MeterValueAttrCell.cs b/CapMachine.Wpf/Models/Tag/Cell/MeterValueAttrCell.cs new file mode 100644 index 0000000..e7b26c7 --- /dev/null +++ b/CapMachine.Wpf/Models/Tag/Cell/MeterValueAttrCell.cs @@ -0,0 +1,99 @@ +using Prism.Mvvm; + +namespace CapMachine.Wpf.Models.Tag +{ + /// + /// 标签信息的主要仪表值的属性单元 + /// 比如SV PV MV等主要数据的属性单元 + /// + public class MeterValueAttrCell : BindableBase + { + /// + /// 实例化构造函数 + /// + /// + /// + public MeterValueAttrCell() + { + + } + + /// + /// 地址 + /// + public string? Address { get; set; } + + /// + /// 启用 + /// + public bool? Enable { get; set; } = true; + + /// + /// 读取的块信息 + /// 人工确认 + /// + public string? Block { get; set; } + + /// + /// 读取的块信息的Index + /// + public short BlockIndex { get; set; } + + /// + /// 精度 到PLC的转换精度/分辨率 + /// 引用的属性信息 + /// + public short Precision { get; set; } + + /// + /// 小数点 展示时用的小数点 + /// 引用的属性信息 + /// + public short DecimalPoint { get; set; } + + private short _EngSrcValue = -1; + /// + /// PLC的原始值 SV + /// + public short EngSrcValue + { + get { return _EngSrcValue; } + set + { + //有改动的话则更新 + if (value != _EngSrcValue) + { + _EngSrcValue = value; + //原始数据转换成工程值 + EngValue = _EngSrcValue * 1.0 / Precision; + } + } + } + + private double _EngValue; + /// + /// 工程值 SV + /// + public double EngValue + { + get { return _EngValue; } + set + { + _EngValue = value; + RaisePropertyChanged(); + //工程值转换成字符串,可以灵活显示 + EngValueStr = Math.Round(value, DecimalPoint).ToString(); + } + } + + private string? _EngValueStr; + /// + /// 工程值的字符串 MV + /// + public string? EngValueStr + { + get { return _EngValueStr; } + set { _EngValueStr = value; RaisePropertyChanged(); } + } + } +} diff --git a/CapMachine.Wpf/Models/Tag/Cell/MvAmAttrCell.cs b/CapMachine.Wpf/Models/Tag/Cell/MvAmAttrCell.cs new file mode 100644 index 0000000..3cefd75 --- /dev/null +++ b/CapMachine.Wpf/Models/Tag/Cell/MvAmAttrCell.cs @@ -0,0 +1,66 @@ +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models.Tag.Cell +{ + /// + /// MV的手自动的值的属性 + /// + public class MvAmAttrCell : BindableBase + { + /// + /// 地址 + /// + public string? Address { get; set; } + + /// + /// 启用 + /// + public bool? Enable { get; set; } = true; + + /// + /// 读取的块信息 + /// 人工确认 + /// + public string? Block { get; set; } + + /// + /// 读取的块信息的Index + /// + public short BlockIndex { get; set; } + + private short _EngSrcValue = -1; + /// + /// PLC的原始值 + /// 手自动的切换应该没有转换,直接0和1的区别,直接使用工程的原值 + /// + public short EngSrcValue + { + get { return _EngSrcValue; } + set + { + //有改动的话则更新 + if (value != _EngSrcValue) + { + _EngSrcValue = value; + //原始数据转换成工程值 + EngValueStr = _EngSrcValue.ToString(); + } + } + } + + private string? _EngValueStr; + /// + /// 工程值的字符串 MV + /// + public string? EngValueStr + { + get { return _EngValueStr; } + set { _EngValueStr = value; RaisePropertyChanged(); } + } + } +} diff --git a/CapMachine.Wpf/Models/Tag/Cell/QuickAttrCell.cs b/CapMachine.Wpf/Models/Tag/Cell/QuickAttrCell.cs new file mode 100644 index 0000000..5274822 --- /dev/null +++ b/CapMachine.Wpf/Models/Tag/Cell/QuickAttrCell.cs @@ -0,0 +1,52 @@ +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models.Tag.Cell +{ + /// + /// 快速属性标签 + /// + public class QuickAttrCell : BindableBase + { + /// + /// 地址 PLC分配的地址 + /// 可能分配给PLC展示用,也可能不使用 + /// + public string? Address { get; set; } + + /// + /// 启用 + /// + public bool? Enable { get; set; } = true; + + private double _EngValue; + /// + /// 工程值 SV + /// + public double EngValue + { + get { return _EngValue; } + set + { + _EngValue = value; + RaisePropertyChanged(); + //EngValueStr = Math.Round(value, DecimalPoint).ToString(); + EngValueStr = value.ToString(); + } + } + + private string? _EngValueStr; + /// + /// 工程值的字符串 + /// + public string? EngValueStr + { + get { return _EngValueStr; } + set { _EngValueStr = value; RaisePropertyChanged(); } + } + } +} diff --git a/CapMachine.Wpf/Models/Tag/ITag.cs b/CapMachine.Wpf/Models/Tag/ITag.cs index 0d6e025..64a0c14 100644 --- a/CapMachine.Wpf/Models/Tag/ITag.cs +++ b/CapMachine.Wpf/Models/Tag/ITag.cs @@ -6,6 +6,11 @@ namespace CapMachine.Wpf.Models.Tag /// public interface ITag { + /// + /// Id + /// + long Id { get; set; } + /// /// 中文名称 /// @@ -31,42 +36,6 @@ namespace CapMachine.Wpf.Models.Tag /// string? Unit { get; set; } - /// - /// 工程值 PV - /// - double EngPvValue { get; set; } - - /// - /// 工程值的字符串 PV - /// - string EngPvValueStr { get; set; } - - /// - /// 工程值 Sv - /// - double EngSvValue { get; set; } - - /// - /// 工程值的字符串 Sv - /// - string EngSvValueStr { get; set; } - - /// - /// 工程值 Mv - /// - double EngMvValue { get; set; } - - /// - /// 工程值的字符串 Mv - /// - string EngMvValueStr { get; set; } - - - /// - /// MV - /// - double MVValue { get; set; } - /// /// 最大值 /// @@ -78,29 +47,14 @@ namespace CapMachine.Wpf.Models.Tag double MinValue { get; set; } /// - /// 值类型 + /// 标签值类型 /// - Type ValueType { get; set; } + TagDataType DataType { get; set; } /// - /// 地址 + /// 标签读写信息 /// - string PVAddress { get; set; } - - /// - /// 地址 - /// - string SVAddress { get; set; } - - /// - /// 地址 - /// - string MVAddress { get; set; } - - /// - /// Index - /// - string Index { get; set; } + RWInfo RWInfo { get; set; } /// /// 精度 @@ -116,29 +70,11 @@ namespace CapMachine.Wpf.Models.Tag /// 是否为仪表参数 /// bool IsMeter { get; set; } + /// - /// 手自动切换地址 + /// PV 工程值 字符串 + /// UI展示用 /// - string AutoHandSwitchAddress { get; set; } - /// - /// Pid-p地址 - /// - string Pid_PAddress { get; set; } - /// - /// Pid-i地址 - /// - string Pid_IAddress { get; set; } - /// - /// Pid-D地址 - /// - string Pid_DAddress { get; set; } - /// - /// Limit_Up地址 - /// - string Limit_UpAddress { get; set; } - /// - /// Limit_Down地址 - /// - string Limit_DownAddress { get; set; } + string? PVEngValueStr { get; set; } } } diff --git a/CapMachine.Wpf/Models/Tag/RWInfo.cs b/CapMachine.Wpf/Models/Tag/RWInfo.cs new file mode 100644 index 0000000..f691632 --- /dev/null +++ b/CapMachine.Wpf/Models/Tag/RWInfo.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models.Tag +{ + /// + /// 读写信息 + /// + public enum RWInfo + { + /// + /// 控制 + /// + Control = 1, + + /// + /// 从PLC读取 + /// + PLCRead = 2, + + /// + /// 从压缩机读取 + /// + CapRead = 5, + + /// + /// 计算 + /// + PCCalcu = 8, + + } +} diff --git a/CapMachine.Wpf/Models/Tag/ShortControlTag.cs b/CapMachine.Wpf/Models/Tag/ShortControlTag.cs new file mode 100644 index 0000000..0b922ad --- /dev/null +++ b/CapMachine.Wpf/Models/Tag/ShortControlTag.cs @@ -0,0 +1,112 @@ +using CapMachine.Wpf.Models.Tag.Cell; +using HslCommunication; +using NPOI.SS.Formula.Functions; +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models.Tag +{ + /// + /// Short类型 步序控制 标签数据 + /// 当前的数据无论是整型、浮点数等其他数据都是用Short表示,然后根据精度运算成所需数据 + /// 如果后期其他项目不是这样处理,则新建其他类对应 + /// + public class ShortControlTag : BaseTag + { + /// + /// 构造函数 + /// + public ShortControlTag() + { + + } + + /// + /// 初始化数据 + /// + public void UpdateInit() + { + PVModel!.DecimalPoint = this.DecimalPoint; + PVModel!.Precision = this.Precision; + + SVModel!.DecimalPoint = this.DecimalPoint; + SVModel!.Precision = this.Precision; + + //MV的值是固定到0-100,不需要转换 + MVModel!.DecimalPoint = 0; + MVModel!.Precision = 1; + } + + /// + /// PV Model + /// + public MeterValueAttrCell PVModel { get; set; } + + /// + /// SV Model + /// + public MeterValueAttrCell SVModel { get; set; } + + /// + /// MV Model + /// + public MeterValueAttrCell MVModel { get; set; } + + /// + /// AutoHand Model + /// 仪表的MV手动和自动 模型 + /// + public MvAmAttrCell MVAutoHandModel { get; set; } + + /// + /// Pid-P + /// + public MeterExdAttrCell Pid_PModel { get; set; } + + /// + /// Pid-I + /// + public MeterExdAttrCell Pid_IModel { get; set; } + + /// + /// Pid-D + /// + public MeterExdAttrCell Pid_DModel { get; set; } + + /// + /// Limit-Up + /// + public MeterExdAttrCell Limit_UpModel { get; set; } + + /// + /// Limit-Down + /// + public MeterExdAttrCell Limit_DownModel { get; set; } + + /// + /// Alarm + /// + public MeterExdAttrCell AlarmModel { get; set; } + + + private bool _AutoHandState; + /// + /// 手自动状态 + /// + public bool AutoHandState + { + get { return _AutoHandState; } + set { _AutoHandState = value; RaisePropertyChanged(); } + } + + ///// + ///// 手自动切换地址 + ///// + //public string AutoHandSwitchAddress { get; set; } + + } +} diff --git a/CapMachine.Wpf/Models/Tag/ShortValueTag.cs b/CapMachine.Wpf/Models/Tag/ShortValueTag.cs new file mode 100644 index 0000000..be77b5b --- /dev/null +++ b/CapMachine.Wpf/Models/Tag/ShortValueTag.cs @@ -0,0 +1,29 @@ +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models.Tag +{ + /// + /// Short类型 标签数据 + /// + public class ShortValueTag : BaseTag + { + /// + /// PV Model + /// + public MeterValueAttrCell PVModel { get; set; } + + /// + /// 初始化数据 + /// + public void UpdateInit() + { + PVModel!.DecimalPoint = this.DecimalPoint; + PVModel!.Precision = this.Precision; + } + } +} diff --git a/CapMachine.Wpf/Models/Tag/Tag.cs b/CapMachine.Wpf/Models/Tag/Tag.cs index c5490ba..61b0682 100644 --- a/CapMachine.Wpf/Models/Tag/Tag.cs +++ b/CapMachine.Wpf/Models/Tag/Tag.cs @@ -3,311 +3,311 @@ using Prism.Mvvm; namespace CapMachine.Wpf.Models.Tag { - /// - /// 基础模型 - /// - public class Tag : BindableBase, ITag - { - /// - /// 实例化函数 - /// - /// - /// - /// - public Tag(string nameNoUnit, string name, string enName, string group, string PVaddress, double maxValue, double minValue, short precision, string unit, ITagValue tagValue, bool isMeter) - { - Group = group; - Name = name; - Unit = unit; - EnName = enName; - PVAddress = PVaddress; - MaxValue = maxValue; - MinValue = minValue; - Precision = precision; + ///// + ///// 基础模型 + ///// + //public class Tag : BindableBase, ITag + //{ + // /// + // /// 实例化函数 + // /// + // /// + // /// + // /// + // public Tag(string nameNoUnit, string name, string enName, string group, string PVaddress, double maxValue, double minValue, short precision, string unit, ITagValue tagValue, bool isMeter) + // { + // Group = group; + // Name = name; + // Unit = unit; + // EnName = enName; + // PVAddress = PVaddress; + // MaxValue = maxValue; + // MinValue = minValue; + // Precision = precision; - IsMeter = isMeter; + // IsMeter = isMeter; - NameNoUnit = nameNoUnit; + // NameNoUnit = nameNoUnit; - //实例化 - TagValue = tagValue; - ValueType = typeof(T); + // //实例化 + // TagValue = tagValue; + // ValueType = typeof(T); - } + // } - /// - /// 实例化函数 - /// - /// - /// - /// - public Tag(ITagValue tagValue) - { - //实例化 - TagValue = tagValue; - ValueType = typeof(T); + // /// + // /// 实例化函数 + // /// + // /// + // /// + // /// + // public Tag(ITagValue tagValue) + // { + // //实例化 + // TagValue = tagValue; + // ValueType = typeof(T); - } + // } - /// - /// 实例化函数 - /// - /// - /// - /// - public Tag() - { - //实例化 - ValueType = typeof(T); + // /// + // /// 实例化函数 + // /// + // /// + // /// + // /// + // public Tag() + // { + // //实例化 + // ValueType = typeof(T); - } + // } - /// - /// 名称 中文 - /// - public string Name { get; set; } + // /// + // /// 名称 中文 + // /// + // public string Name { get; set; } - /// - /// 名称 英文 - /// - public string EnName { get; set; } + // /// + // /// 名称 英文 + // /// + // public string EnName { get; set; } - /// - /// 名称 无单位中文名称 - /// - public string NameNoUnit { get; set; } + // /// + // /// 名称 无单位中文名称 + // /// + // public string NameNoUnit { get; set; } - /// - /// 标签组 - /// - public string Group { get; set; } + // /// + // /// 标签组 + // /// + // public string Group { get; set; } - ///// - ///// 实时值 - ///// - //public abstract IRegisterValue RtValue { get; set; } + // ///// + // ///// 实时值 + // ///// + // //public abstract IRegisterValue RtValue { get; set; } - private ITagValue _TagValue; - /// - /// 实时值 - /// - public ITagValue TagValue - { - get { return _TagValue; } - set { _TagValue = value; RaisePropertyChanged(); } - } + // private ITagValue _TagValue; + // /// + // /// 实时值 + // /// + // public ITagValue TagValue + // { + // get { return _TagValue; } + // set { _TagValue = value; RaisePropertyChanged(); } + // } - /// - /// 原始值实时值 - /// - public OperateResult OperateResultSource { get; set; } // + // /// + // /// 原始值实时值 + // /// + // public OperateResult OperateResultSource { get; set; } // - /// - /// 数据类型信息 - /// - public Type ValueType { get; set; } + // /// + // /// 数据类型信息 + // /// + // public Type ValueType { get; set; } - /// - /// 地址信息 PV - /// - public string PVAddress { get; set; } + // /// + // /// 地址信息 PV + // /// + // public string PVAddress { get; set; } - /// - /// 地址信息 SV - /// - public string SVAddress { get; set; } + // /// + // /// 地址信息 SV + // /// + // public string SVAddress { get; set; } - /// - /// 地址信息 MV - /// - public string MVAddress { get; set; } + // /// + // /// 地址信息 MV + // /// + // public string MVAddress { get; set; } - /// - /// 地址信息 Pid_P - /// - public string Pid_PAddress { get; set; } + // /// + // /// 地址信息 Pid_P + // /// + // public string Pid_PAddress { get; set; } - /// - /// 地址信息 Pid_I - /// - public string Pid_IAddress { get; set; } + // /// + // /// 地址信息 Pid_I + // /// + // public string Pid_IAddress { get; set; } - /// - /// 地址信息 Pid_D - /// - public string Pid_DAddress { get; set; } + // /// + // /// 地址信息 Pid_D + // /// + // public string Pid_DAddress { get; set; } - /// - /// 地址信息 Limit_Up - /// - public string Limit_UpAddress { get; set; } + // /// + // /// 地址信息 Limit_Up + // /// + // public string Limit_UpAddress { get; set; } - /// - /// 地址信息 Limit_Down - /// - public string Limit_DownAddress { get; set; } + // /// + // /// 地址信息 Limit_Down + // /// + // public string Limit_DownAddress { get; set; } - /// - /// 地址信息 Index - /// - public string Index { get; set; } + // /// + // /// 地址信息 Index + // /// + // public string Index { get; set; } - /// - /// 最大值 - /// - public double MaxValue { get; set; } + // /// + // /// 最大值 + // /// + // public double MaxValue { get; set; } - /// - /// 最小值 - /// - public double MinValue { get; set; } + // /// + // /// 最小值 + // /// + // public double MinValue { get; set; } - /// - /// 精度 到PLC的转换精度/分辨率 - /// - public short Precision { get; set; } + // /// + // /// 精度 到PLC的转换精度/分辨率 + // /// + // public short Precision { get; set; } - /// - /// 小数点 展示时用的小数点 - /// - public short DecimalPoint { get; set; } + // /// + // /// 小数点 展示时用的小数点 + // /// + // public short DecimalPoint { get; set; } - /// - /// 单位 - /// - public string? Unit { get; set; } + // /// + // /// 单位 + // /// + // public string? Unit { get; set; } - /// - /// 采样周期 - /// - public int Samp { get; set; } + // /// + // /// 采样周期 + // /// + // public int Samp { get; set; } - /// - /// 是否为仪表参数 - /// - public bool IsMeter { get; set; } + // /// + // /// 是否为仪表参数 + // /// + // public bool IsMeter { get; set; } - /// - /// 手自动切换地址 - /// - public string AutoHandSwitchAddress { get; set; } + // /// + // /// 手自动切换地址 + // /// + // public string AutoHandSwitchAddress { get; set; } - private bool _AutoHandState; - /// - /// 手自动状态 - /// - public bool AutoHandState - { - get { return _AutoHandState; } - set { _AutoHandState = value; RaisePropertyChanged(); } - } + // private bool _AutoHandState; + // /// + // /// 手自动状态 + // /// + // public bool AutoHandState + // { + // get { return _AutoHandState; } + // set { _AutoHandState = value; RaisePropertyChanged(); } + // } - private double _EngSvValue; - /// - /// 工程值 SV - /// - public double EngSvValue - { - get { return _EngSvValue; } - set - { - _EngSvValue = value; - if (TagValue.IsShow) - { - RaisePropertyChanged(); - } - EngSvValueStr = Math.Round(value, DecimalPoint).ToString(); - } - } + // private double _EngSvValue; + // /// + // /// 工程值 SV + // /// + // public double EngSvValue + // { + // get { return _EngSvValue; } + // set + // { + // _EngSvValue = value; + // if (TagValue.IsShow) + // { + // RaisePropertyChanged(); + // } + // EngSvValueStr = Math.Round(value, DecimalPoint).ToString(); + // } + // } - private string _EngSvValueStr; - /// - /// 工程值的字符串 SV - /// - public string EngSvValueStr - { - get { return _EngSvValueStr; } - set { _EngSvValueStr = value; RaisePropertyChanged(); } - } + // private string _EngSvValueStr; + // /// + // /// 工程值的字符串 SV + // /// + // public string EngSvValueStr + // { + // get { return _EngSvValueStr; } + // set { _EngSvValueStr = value; RaisePropertyChanged(); } + // } - private double _EngPvValue; - /// - /// 工程值 PV - /// - public double EngPvValue - { - get { return _EngPvValue; } - set - { - _EngPvValue = value; - if (TagValue.IsShow) - { - RaisePropertyChanged(); - } - EngPvValueStr = Math.Round(value, DecimalPoint).ToString(); - } - } + // private double _EngPvValue; + // /// + // /// 工程值 PV + // /// + // public double EngPvValue + // { + // get { return _EngPvValue; } + // set + // { + // _EngPvValue = value; + // if (TagValue.IsShow) + // { + // RaisePropertyChanged(); + // } + // EngPvValueStr = Math.Round(value, DecimalPoint).ToString(); + // } + // } - private string _EngPvValueStr; - /// - /// 工程值的字符串 - /// - public string EngPvValueStr - { - get { return _EngPvValueStr; } - set { _EngPvValueStr = value; RaisePropertyChanged(); } - } + // private string _EngPvValueStr; + // /// + // /// 工程值的字符串 + // /// + // public string EngPvValueStr + // { + // get { return _EngPvValueStr; } + // set { _EngPvValueStr = value; RaisePropertyChanged(); } + // } - private double _EngMvValue; - /// - /// 工程值 MV - /// - public double EngMvValue - { - get { return _EngMvValue; } - set - { - _EngMvValue = value; - if (TagValue.IsShow) - { - RaisePropertyChanged(); - } - EngMvValueStr = value.ToString(); - } - } + // private double _EngMvValue; + // /// + // /// 工程值 MV + // /// + // public double EngMvValue + // { + // get { return _EngMvValue; } + // set + // { + // _EngMvValue = value; + // if (TagValue.IsShow) + // { + // RaisePropertyChanged(); + // } + // EngMvValueStr = value.ToString(); + // } + // } - private string _EngMvValueStr; - /// - /// 工程值的字符串 MV - /// - public string EngMvValueStr - { - get { return _EngMvValueStr; } - set { _EngMvValueStr = value; RaisePropertyChanged(); } - } + // private string _EngMvValueStr; + // /// + // /// 工程值的字符串 MV + // /// + // public string EngMvValueStr + // { + // get { return _EngMvValueStr; } + // set { _EngMvValueStr = value; RaisePropertyChanged(); } + // } - private double _MVValue = 20; - /// - /// MV值 - /// 不是所有的数据都有MV值,只有仪表参数设置的有 - /// - public double MVValue - { - get { return _MVValue; } - set - { - _MVValue = value; - if (TagValue.IsShow) - { - RaisePropertyChanged(); - } - } - } + // private double _MVValue = 20; + // /// + // /// MV值 + // /// 不是所有的数据都有MV值,只有仪表参数设置的有 + // /// + // public double MVValue + // { + // get { return _MVValue; } + // set + // { + // _MVValue = value; + // if (TagValue.IsShow) + // { + // RaisePropertyChanged(); + // } + // } + // } - } + //} } diff --git a/CapMachine.Wpf/Models/Tag/TagDataType.cs b/CapMachine.Wpf/Models/Tag/TagDataType.cs new file mode 100644 index 0000000..9bb92a0 --- /dev/null +++ b/CapMachine.Wpf/Models/Tag/TagDataType.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models.Tag +{ + /// + /// 标签的数据类型 + /// + public enum TagDataType + { + Short, + Int, + Long, + Float, + Double, + String, + Bool, + DateTime, + Byte, + UShort, + UInt, + ULong, + UByte + } +} diff --git a/CapMachine.Wpf/Models/Tag/TagManager.cs b/CapMachine.Wpf/Models/Tag/TagManager.cs index f263ebe..9a03d96 100644 --- a/CapMachine.Wpf/Models/Tag/TagManager.cs +++ b/CapMachine.Wpf/Models/Tag/TagManager.cs @@ -1,4 +1,8 @@ -namespace CapMachine.Wpf.Models.Tag +using CapMachine.Wpf.Models.Tag.Cell; +using HslCommunication.Algorithms.PID; +using System.Collections.Concurrent; + +namespace CapMachine.Wpf.Models.Tag { /// /// 标签管理中心 @@ -17,23 +21,614 @@ /// /// 标签集合数据 /// - public Dictionary DicTags { get; set; } = new Dictionary(); + //public Dictionary DicTags { get; set; } = new Dictionary(); + + /// + /// 标签集合数据 + /// 线程安全 + /// + public readonly ConcurrentDictionary DicTags = new ConcurrentDictionary(); /// /// 增加标签 /// - public void AddTag(Tag baseTag) + public void AddTag(BaseTag baseTag) { DicTags[baseTag.Name] = baseTag; } /// - /// 获取标签信息 + /// PV锁 + /// + private static readonly object PvLock = new object(); + + + #region 获取标签的PVModel SVModel MVModel + + /// + /// 尝试获取标签的PVModel模型 + /// + /// 标签名称 + /// 输出的pVModel模型,如果获取失败则为null + /// 是否成功获取PV模型 + public bool TryGetPVModel(string tagName, out MeterValueAttrCell? pVModel) + { + lock (PvLock) + { + pVModel = null; + + if (string.IsNullOrEmpty(tagName)) + return false; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(tagName, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is ShortControlTag controlTag) + { + pVModel = controlTag.PVModel; + return true; + } + else if (tag is ShortValueTag shortTag) + { + pVModel = shortTag.PVModel; + return true; + } + return false; + } + return false; + } + + } + + /// + /// 尝试获取标签的PVModel模型 + /// 给数据记录使用 + /// + /// 标签名称 + /// 输出的pVModel模型,如果获取失败则为null + /// 是否成功获取PV模型 + public MeterValueAttrCell TryGetRecordPVModel(string tagName) + { + if (string.IsNullOrEmpty(tagName)) + return null; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(tagName, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is ShortControlTag controlTag) + { + return controlTag.PVModel; + } + else if (tag is ShortValueTag shortTag) + { + return shortTag.PVModel; + } + } + return null; + } + + /// + /// 尝试获取标签的PVModel模型的数据 + /// 给数据记录使用 + /// + /// 标签名称 + /// 输出的pVModel模型,如果获取失败则为null + /// 是否成功获取PV模型 + public double TryGetRecordPVValue(string tagName) + { + if (string.IsNullOrEmpty(tagName)) + return 0; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(tagName, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is ShortControlTag controlTag) + { + return controlTag.PVModel.EngValue; + } + else if (tag is ShortValueTag shortTag) + { + return shortTag.PVModel.EngValue; + } + else if (tag is CalcTag calcTag) + { + return calcTag.PVModel!.EngValue; + } + else if (tag is CapTag capTag) + { + return capTag.PVModel!.EngValue; + } + } + return 0; + } + + /// + /// 尝试获取标签的SVModel模型 + /// + /// 标签名称 + /// 输出的sVModel模型,如果获取失败则为null + /// 是否成功获取SV模型 + public bool TryGetSVModel(string tagName, out MeterValueAttrCell? sVModel) + { + sVModel = null; + + if (string.IsNullOrEmpty(tagName)) + return false; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(tagName, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is ShortControlTag controlTag) + { + sVModel = controlTag.SVModel; + return true; + } + return false; + } + return false; + } + + /// + /// 尝试获取标签的MVModel模型 + /// + /// 标签名称 + /// 输出的MVModel模型,如果获取失败则为null + /// 是否成功获取MV模型 + public bool TryGetMVModel(string tagName, out MeterValueAttrCell? mVModel) + { + mVModel = null; + + if (string.IsNullOrEmpty(tagName)) + return false; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(tagName, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is ShortControlTag controlTag) + { + mVModel = controlTag.MVModel; + return true; + } + return false; + } + return false; + } + + /// + /// 尝试获取标签的MVAm模型 + /// + /// 标签名称 + /// 输出的MVAmModel模型,如果获取失败则为null + /// 是否成功获取MV模型 + public bool TryGetMVAmModel(string tagName, out MvAmAttrCell? mVAmModel) + { + mVAmModel = null; + + if (string.IsNullOrEmpty(tagName)) + return false; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(tagName, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is ShortControlTag controlTag) + { + mVAmModel = controlTag.MVAutoHandModel; + return true; + } + return false; + } + return false; + } + + #endregion + + + + #region 获取控制属性的PID LIMIT ALARM + + /// + /// 尝试获取标签的PID_P模型 + /// + /// + /// + /// + public bool TryGetPidPModel(string tagName, out MeterExdAttrCell? pidPModel) + { + pidPModel = null; + + if (string.IsNullOrEmpty(tagName)) + return false; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(tagName, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is ShortControlTag controlTag) + { + pidPModel = controlTag.Pid_PModel; + return true; + } + } + return false; + } + + /// + /// 尝试获取标签的PID_I模型 + /// + /// + /// + /// + public bool TryGetPidIModel(string tagName, out MeterExdAttrCell? pidIModel) + { + pidIModel = null; + + if (string.IsNullOrEmpty(tagName)) + return false; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(tagName, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is ShortControlTag controlTag) + { + pidIModel = controlTag.Pid_IModel; + return true; + } + } + return false; + } + + /// + /// 尝试获取标签的PID_D模型 + /// + /// 标签名称 + /// 输出的PID_D模型,如果获取失败则为null + /// 是否成功获取PID_D模型 + public bool TryGetPidDModel(string tagName, out MeterExdAttrCell? pidDModel) + { + pidDModel = null; + + if (string.IsNullOrEmpty(tagName)) + return false; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(tagName, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is ShortControlTag controlTag) + { + pidDModel = controlTag.Pid_DModel; + return true; + } + } + return false; + } + + + /// + /// 尝试获取标签的limitUpModel模型 + /// + /// + /// + /// + public bool TryGetLimitUpModel(string tagName, out MeterExdAttrCell? limitUpModel) + { + limitUpModel = null; + + if (string.IsNullOrEmpty(tagName)) + return false; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(tagName, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is ShortControlTag controlTag) + { + limitUpModel = controlTag.Limit_UpModel; + return true; + } + } + return false; + } + + /// + /// 尝试获取标签的limitDownModel模型 + /// + /// + /// + /// + public bool TryGetLimitDownModel(string tagName, out MeterExdAttrCell? limitDownModel) + { + limitDownModel = null; + + if (string.IsNullOrEmpty(tagName)) + return false; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(tagName, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is ShortControlTag controlTag) + { + limitDownModel = controlTag.Limit_DownModel; + return true; + } + } + return false; + } + + /// + /// 尝试获取标签的Alarm模型 + /// + /// + /// + /// + public bool TryGetAlarmModel(string tagName, out MeterExdAttrCell? alarmModel) + { + alarmModel = null; + + if (string.IsNullOrEmpty(tagName)) + return false; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(tagName, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is ShortControlTag controlTag) + { + alarmModel = controlTag.AlarmModel; + return true; + } + return false; + } + return false; + } + + /// + /// 尝试获取标签的MvAmAttrCelll模型 + /// + /// + /// + /// + public bool TryGetMvAmModel(string tagName, out MvAmAttrCell? mvAmModel) + { + mvAmModel = null; + + if (string.IsNullOrEmpty(tagName)) + return false; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(tagName, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is ShortControlTag controlTag) + { + mvAmModel = controlTag.MVAutoHandModel; + return true; + } + return false; + } + return false; + } + + /// + /// 尝试获取标签的MvAmAttrCelll模型 + /// + /// + /// + /// + public bool TryGetQuickAttrModel(string tagName, out QuickAttrCell? quickAttrCell) + { + quickAttrCell = null; + + if (string.IsNullOrEmpty(tagName)) + return false; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(tagName, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is CapTag capTag) + { + quickAttrCell = capTag.PVModel; + return true; + } + else if (tag is CalcTag calcTag) + { + quickAttrCell = calcTag.PVModel; + return true; + } + return false; + } + return false; + } + + + #endregion + + + + #region 获取标签 + + + /// + /// 尝试获取ShortControlTag变量 + /// + /// + /// + /// + public bool TryGetShortControlTagByName(string name, out ShortControlTag? shortControlTag) + { + shortControlTag = null; + + if (string.IsNullOrEmpty(name)) + return false; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(name, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is ShortControlTag controlTag) + { + shortControlTag = controlTag; + return true; + } + } + return false; + } + + /// + /// 尝试获取ShortTag变量 + /// + /// + /// + /// + public bool TryGetShortTagByName(string name, out ShortValueTag? shortTag) + { + shortTag = null; + + if (string.IsNullOrEmpty(name)) + return false; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(name, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is ShortValueTag getshortTag) + { + shortTag = getshortTag; + return true; + } + } + return false; + } + + /// + /// 尝试获取CapTag变量 + /// + /// + /// + /// + public bool TryGetCapTagByName(string name, out CapTag? capTag) + { + capTag = null; + + if (string.IsNullOrEmpty(name)) + return false; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(name, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is CapTag getshortTag) + { + capTag = getshortTag; + return true; + } + } + return false; + } + + + /// + /// 尝试获取CalcTag变量 + /// + /// + /// + /// + public bool TryGetCalcTagByName(string name, out CalcTag? calcTag) + { + calcTag = null; + + if (string.IsNullOrEmpty(name)) + return false; + + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(name, out var tag)) + { + // 尝试将标签转换为ShortControlTag + if (tag is CalcTag getshortTag) + { + calcTag = getshortTag; + return true; + } + } + return false; + } + + + /// + /// 检查标签是否为ShortControlTag标签类型 + /// + /// 标签名称 + /// 如果是ShortControlTag类型返回true,否则返回false + public bool IsShortControlTag(string tagName) + { + if (DicTags.TryGetValue(tagName, out var tag)) + { + return tag is ShortControlTag; + } + return false; + } + + /// + /// 检查标签是否为ShortTag标签类型 + /// + /// 标签名称 + /// 如果是ShortValueTag类型返回true,否则返回false + public bool IsShortTag(string tagName) + { + if (DicTags.TryGetValue(tagName, out var tag)) + { + return tag is ShortValueTag; + } + return false; + } + + + /// + /// 检查标签是否为CapTag标签类型 + /// + /// 标签名称 + /// 如果是CapTag类型返回true,否则返回false + public bool IsCapTag(string tagName) + { + if (DicTags.TryGetValue(tagName, out var tag)) + { + return tag is CapTag; + } + return false; + } + + + /// + /// 检查标签是否为CalcTag标签类型 + /// + /// 标签名称 + /// 如果是CalcTag类型返回true,否则返回false + public bool IsCalcTag(string tagName) + { + if (DicTags.TryGetValue(tagName, out var tag)) + { + return tag is CalcTag; + } + return false; + } + + + /// + /// 获取原始标签信息 /// /// /// /// - public Tag? GetTagByName(string name) + public BaseTag? GetBaseTagByName(string name) { //return ListTag.OfType>() // .FirstOrDefault(t => t.Name.Equals(name, StringComparison.OrdinalIgnoreCase)); @@ -41,47 +636,47 @@ // 尝试从字典中获取标签,并使用 as 关键字避免类型转换失败抛出异常 if (DicTags.TryGetValue(name, out var FindTag)) { - return FindTag as Tag;// 成功转换返回具体类型的标签,失败返回 null + return FindTag as BaseTag;// 成功转换返回具体类型的标签,失败返回 null + } + return null; + } + + + /// + /// 通过标签名称获取 ShortControlTag 信息 无返回是否为空 + /// + /// 标签名称 + /// 找到则返回ShortControlTag,否则返回null + public ShortControlTag? GetShortControlTagByName(string Name) + { + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(Name, out var findTag)) + { + // 尝试转换为 ShortControlTag + return findTag as ShortControlTag; } return null; } /// - /// 获取标签的值 + /// 通过标签名称获取 ShortTag 信息 无返回是否为空 /// - /// /// /// - public T? GetTagValueByName(string name) + public ShortValueTag GetShortTagByName(string name) { - var FindTag = GetTagByName(name); - - // 如果找到标签,则返回其值,否则返回默认值 - if (FindTag != null) + // 尝试从字典中获取标签 + if (DicTags.TryGetValue(name, out var findTag)) { - return FindTag!.TagValue.Value; + // 尝试转换为 ShortControlTag + return findTag as ShortValueTag; } - - return default; + return null; } - /// - /// 获取标签的值信息 - /// - /// - /// - /// - public ITagValue? GetTagInfoValueByName(string name) - { - var FindTag = GetTagByName(name); - // 如果找到标签,则返回其值,否则返回默认值 - if (FindTag != null) - { - return FindTag!.TagValue; - } + #endregion + - return default; - } } } diff --git a/CapMachine.Wpf/Models/Tag/TagValue/ByteTagValue.cs b/CapMachine.Wpf/Models/Tag/TagValue/ByteTagValue.cs deleted file mode 100644 index 972b0d9..0000000 --- a/CapMachine.Wpf/Models/Tag/TagValue/ByteTagValue.cs +++ /dev/null @@ -1,32 +0,0 @@ -using HslCommunication; -using Prism.Mvvm; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace CapMachine.Wpf.Models.Tag -{ - /// - /// Short类型的寄存器数据 - /// - public class ByteTagValue : BindableBase, ITagValue - { - private byte _Value; - /// - /// 值 - /// - public byte Value - { - get { return _Value; } - set { _Value = value; RaisePropertyChanged(); } - } - - /// - /// 寄存器原始数据 - /// - public OperateResult? OperateResultSource { get; set; } - public bool IsShow { get; set; } - } -} diff --git a/CapMachine.Wpf/Models/Tag/TagValue/DoubleTagValue.cs b/CapMachine.Wpf/Models/Tag/TagValue/DoubleTagValue.cs deleted file mode 100644 index ffc7878..0000000 --- a/CapMachine.Wpf/Models/Tag/TagValue/DoubleTagValue.cs +++ /dev/null @@ -1,31 +0,0 @@ -using HslCommunication; -using Prism.Mvvm; - -namespace CapMachine.Wpf.Models.Tag -{ - /// - /// Short类型的寄存器数据 - /// - public class DoubleTagValue : BindableBase, ITagValue - { - private double _Value; - /// - /// 值 - /// - public double Value - { - get { return _Value; } - set { _Value = value; RaisePropertyChanged(); } - } - - /// - /// 是否更新展示 - /// - public bool IsShow { get; set; } - - /// - /// 寄存器原始数据 - /// - public OperateResult? OperateResultSource { get; set; } - } -} diff --git a/CapMachine.Wpf/Models/Tag/TagValue/StringTagValue.cs b/CapMachine.Wpf/Models/Tag/TagValue/StringTagValue.cs deleted file mode 100644 index 4db70ba..0000000 --- a/CapMachine.Wpf/Models/Tag/TagValue/StringTagValue.cs +++ /dev/null @@ -1,32 +0,0 @@ -using HslCommunication; -using Prism.Mvvm; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace CapMachine.Wpf.Models.Tag -{ - /// - /// String类型的寄存器数据 - /// - public class StringTagValue : BindableBase, ITagValue - { - private string? _Value; - /// - /// 值 - /// - public string? Value - { - get { return _Value; } - set { _Value = value; RaisePropertyChanged(); } - } - - /// - /// 寄存器原始数据 - /// - public OperateResult? OperateResultSource { get; set; } - public bool IsShow { get; set; } - } -} diff --git a/CapMachine.Wpf/Services/DataRecordService.cs b/CapMachine.Wpf/Services/DataRecordService.cs index 3a80b49..5de2716 100644 --- a/CapMachine.Wpf/Services/DataRecordService.cs +++ b/CapMachine.Wpf/Services/DataRecordService.cs @@ -417,10 +417,6 @@ namespace CapMachine.Wpf.Services #endregion - - - - private Random Random = new Random(); private int Add = 1; Stopwatch stopwatch = new Stopwatch(); @@ -439,7 +435,7 @@ namespace CapMachine.Wpf.Services //CycleTimer.Stop(); //先关闭定时器 var DataInfo = MachineRtDataService.TagManger.DicTags - .ToDictionary(kvp => kvp.Key, kvp => (object)kvp.Value.EngPvValue); + .ToDictionary(kvp => kvp.Key, kvp => (object)MachineRtDataService.TagManger.TryGetRecordPVValue(kvp.Value.Name)); DataInfo.Add("创建时间", DateTime.Now); var RecordData = new RecordChannelData() diff --git a/CapMachine.Wpf/Services/MachineRtDataService.cs b/CapMachine.Wpf/Services/MachineRtDataService.cs index 43963a8..12be137 100644 --- a/CapMachine.Wpf/Services/MachineRtDataService.cs +++ b/CapMachine.Wpf/Services/MachineRtDataService.cs @@ -5,10 +5,12 @@ using CapMachine.Wpf.Dtos; using CapMachine.Wpf.Models; using CapMachine.Wpf.Models.ProModelPars; 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 MathNet.Numerics; using Prism.Events; using Prism.Mvvm; using System; @@ -156,51 +158,1417 @@ namespace CapMachine.Wpf.Services #region 标签管理 ////三电 Sample - TagManger.AddTag(new Tag("转速", "转速[rpm]", "Speed", "程序", "VW15000", 100, 0, 1, "rpm", new ShortTagValue(), true) { DecimalPoint = 0, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("排气压力", "排气压力[BarA]", "ExPress", "程序", "VW15002", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("吸气压力", "吸气压力[BarA]", "InhPress", "程序", "VW15004", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("吸气温度", "吸气温度[℃]", "InhTemp", "程序", "VW15006", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("COND1温度", "COND1温度[℃]", "Cond1Temp", "程序", "VW15008", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("润滑油压力", "润滑油压力[BarA]", "LubePress", "程序", "VW15010", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("COND2压力", "COND2压力[BarA]", "Cond2Press", "程序", "VW15012", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("OCR", "OCR[%]", "OCR", "程序", "VW15014", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("HV[V]", "HV[V]", "HV", "程序", "VW15016", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("HV[A]", "HV[A]", "HVCur", "程序", "VW15018", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = false }); - TagManger.AddTag(new Tag("HV[W]", "HV[W]", "HVPw", "程序", "VW15020", 100, 0, 1, "W", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); - TagManger.AddTag(new Tag("LV[V]", "LV[V]", "LV", "程序", "VW15022", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - //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, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("环境温度", "环境温度[℃]", "EnvTemp", "程序", "VW15026", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - //TagManger.AddTag(new Tag("环境湿度", "环境湿度[%]", "EnvRH", "程序", "VW15028", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1 }); - TagManger.AddTag(new Tag("环境湿度", "环境湿度[%]", "EnvRH", "程序", "VW15028", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("OS1温度", "OS1温度[℃]", "OS1Temp", "程序", "VW15030", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("OS2温度", "OS2温度[℃]", "OS2Temp", "程序", "VW15032", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("COND2温度", "COND2温度[℃]", "Cond2Temp", "程序", "VW15034", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("EVAP出口温度", "EVAP出口温度[℃]", "EVAPExpTemp", "程序", "VW15036", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - //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, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("润滑油流量", "润滑油流量[L/min]", "LubeFlow", "程序", "VW15040", 100, 0, 10, "L/min", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("排气温度", "排气温度[℃]", "ExTemp", "程序", "VW15042", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("膨胀阀前压力", "膨胀阀前压力[BarA]", "TxvFrPress", "程序", "VW15044", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("膨胀阀前温度", "膨胀阀前温度[℃]", "TxvFrTemp", "程序", "VW15046", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("EVAP出口压力", "EVAP出口压力[BarA]", "EVAPExpPress", "程序", "VW15048", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("腔内压力", "腔内压力[BarA]", "IntrplPress", "程序", "VW15050", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("压缩机表面温度", "压缩机表面温度[℃]", "CapSurfTemp", "程序", "VW15052", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("PTC流量", "PTC流量[L/min]", "PTCFlow", "程序", "VW15054", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("PTC入水温度", "PTC入水温度[℃]", "PTCEntTemp", "程序", "VW15056", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("PTC出水温度", "PTC出水温度[℃]", "PTCExpTemp", "程序", "VW15058", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); - TagManger.AddTag(new Tag("通讯Cmp母线电流", "通讯Cmp母线电流[A]", "ComCapBusCur", "程序", "VW15060", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = false }); - TagManger.AddTag(new Tag("通讯Cmp母线电压", "通讯Cmp母线电压[V]", "ComCapBusVol", "程序", "VW15062", 100, 0, 10, "V", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); - TagManger.AddTag(new Tag("通讯Cmp逆变器温度", "通讯Cmp逆变器温度[℃]", "ComCapInvTemp", "程序", "VW15064", 100, 0, 1, "℃", new ShortTagValue(), false) { DecimalPoint = 0, IsMeter = false }); - TagManger.AddTag(new Tag("通讯Cmp相电流", "通讯Cmp相电流[A]", "ComCapPhCur", "程序", "VW15066", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); - TagManger.AddTag(new Tag("通讯Cmp功率", "通讯Cmp功率[W]", "ComCapPw", "程序", "VW15068", 100, 0, 1, "W", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); - TagManger.AddTag(new Tag("通讯Cmp芯片温度", "通讯Cmp芯片温度[℃]", "ComCapChipTemp", "程序", "VW15070", 100, 0, 1, "℃", new ShortTagValue(), false) { DecimalPoint = 0, IsMeter = false }); - TagManger.AddTag(new Tag("通讯PTC入水温度", "通讯PTC入水温度[℃]", "ComPTCEntTemp", "程序", "VW15072", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); - TagManger.AddTag(new Tag("通讯PTC出水温度", "通讯PTC出水温度[℃]", "ComPTCExpTemp", "程序", "VW15074", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); - TagManger.AddTag(new Tag("通讯PTC峰值电流", "通讯PTC峰值电流[A]", "ComPTCPeakCur", "程序", "VW15076", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); - TagManger.AddTag(new Tag("通讯PTC母线电流", "通讯PTC母线电流[A]", "ComPTCBusCur", "程序", "VW15078", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); - TagManger.AddTag(new Tag("通讯PTC膜温", "通讯PTC膜温[℃]", "ComPTCFlmTemp", "程序", "VW15080", 100, 0, 1, "℃", new ShortTagValue(), false) { DecimalPoint = 0, IsMeter = false }); - TagManger.AddTag(new Tag("通讯PTC模块温度", "通讯PTC模块温度[℃]", "ComPTCMdTemp", "程序", "VW15082", 100, 0, 1, "℃", new ShortTagValue(), false) { DecimalPoint = 0, IsMeter = false }); + //TagManger.AddTag(new Tag("转速", "转速[rpm]", "Speed", "程序", "VW15000", 100, 0, 1, "rpm", new ShortTagValue(), true) { DecimalPoint = 0, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("排气压力", "排气压力[BarA]", "ExPress", "程序", "VW15002", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("吸气压力", "吸气压力[BarA]", "InhPress", "程序", "VW15004", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("吸气温度", "吸气温度[℃]", "InhTemp", "程序", "VW15006", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("COND1温度", "COND1温度[℃]", "Cond1Temp", "程序", "VW15008", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("润滑油压力", "润滑油压力[BarA]", "LubePress", "程序", "VW15010", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("COND2压力", "COND2压力[BarA]", "Cond2Press", "程序", "VW15012", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("OCR", "OCR[%]", "OCR", "程序", "VW15014", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("HV[V]", "HV[V]", "HV", "程序", "VW15016", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("HV[A]", "HV[A]", "HVCur", "程序", "VW15018", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = false }); + //TagManger.AddTag(new Tag("HV[W]", "HV[W]", "HVPw", "程序", "VW15020", 100, 0, 1, "W", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); + //TagManger.AddTag(new Tag("LV[V]", "LV[V]", "LV", "程序", "VW15022", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + ////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, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("环境温度", "环境温度[℃]", "EnvTemp", "程序", "VW15026", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + ////TagManger.AddTag(new Tag("环境湿度", "环境湿度[%]", "EnvRH", "程序", "VW15028", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1 }); + //TagManger.AddTag(new Tag("环境湿度", "环境湿度[%]", "EnvRH", "程序", "VW15028", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("OS1温度", "OS1温度[℃]", "OS1Temp", "程序", "VW15030", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("OS2温度", "OS2温度[℃]", "OS2Temp", "程序", "VW15032", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("COND2温度", "COND2温度[℃]", "Cond2Temp", "程序", "VW15034", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("EVAP出口温度", "EVAP出口温度[℃]", "EVAPExpTemp", "程序", "VW15036", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + ////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, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("润滑油流量", "润滑油流量[L/min]", "LubeFlow", "程序", "VW15040", 100, 0, 10, "L/min", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("排气温度", "排气温度[℃]", "ExTemp", "程序", "VW15042", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("膨胀阀前压力", "膨胀阀前压力[BarA]", "TxvFrPress", "程序", "VW15044", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("膨胀阀前温度", "膨胀阀前温度[℃]", "TxvFrTemp", "程序", "VW15046", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("EVAP出口压力", "EVAP出口压力[BarA]", "EVAPExpPress", "程序", "VW15048", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("腔内压力", "腔内压力[BarA]", "IntrplPress", "程序", "VW15050", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("压缩机表面温度", "压缩机表面温度[℃]", "CapSurfTemp", "程序", "VW15052", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("PTC流量", "PTC流量[L/min]", "PTCFlow", "程序", "VW15054", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("PTC入水温度", "PTC入水温度[℃]", "PTCEntTemp", "程序", "VW15056", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("PTC出水温度", "PTC出水温度[℃]", "PTCExpTemp", "程序", "VW15058", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" }); + //TagManger.AddTag(new Tag("通讯Cmp母线电流", "通讯Cmp母线电流[A]", "ComCapBusCur", "程序", "VW15060", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = false }); + //TagManger.AddTag(new Tag("通讯Cmp母线电压", "通讯Cmp母线电压[V]", "ComCapBusVol", "程序", "VW15062", 100, 0, 10, "V", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); + //TagManger.AddTag(new Tag("通讯Cmp逆变器温度", "通讯Cmp逆变器温度[℃]", "ComCapInvTemp", "程序", "VW15064", 100, 0, 1, "℃", new ShortTagValue(), false) { DecimalPoint = 0, IsMeter = false }); + //TagManger.AddTag(new Tag("通讯Cmp相电流", "通讯Cmp相电流[A]", "ComCapPhCur", "程序", "VW15066", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); + //TagManger.AddTag(new Tag("通讯Cmp功率", "通讯Cmp功率[W]", "ComCapPw", "程序", "VW15068", 100, 0, 1, "W", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); + //TagManger.AddTag(new Tag("通讯Cmp芯片温度", "通讯Cmp芯片温度[℃]", "ComCapChipTemp", "程序", "VW15070", 100, 0, 1, "℃", new ShortTagValue(), false) { DecimalPoint = 0, IsMeter = false }); + //TagManger.AddTag(new Tag("通讯PTC入水温度", "通讯PTC入水温度[℃]", "ComPTCEntTemp", "程序", "VW15072", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); + //TagManger.AddTag(new Tag("通讯PTC出水温度", "通讯PTC出水温度[℃]", "ComPTCExpTemp", "程序", "VW15074", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); + //TagManger.AddTag(new Tag("通讯PTC峰值电流", "通讯PTC峰值电流[A]", "ComPTCPeakCur", "程序", "VW15076", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); + //TagManger.AddTag(new Tag("通讯PTC母线电流", "通讯PTC母线电流[A]", "ComPTCBusCur", "程序", "VW15078", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false }); + //TagManger.AddTag(new Tag("通讯PTC膜温", "通讯PTC膜温[℃]", "ComPTCFlmTemp", "程序", "VW15080", 100, 0, 1, "℃", new ShortTagValue(), false) { DecimalPoint = 0, IsMeter = false }); + //TagManger.AddTag(new Tag("通讯PTC模块温度", "通讯PTC模块温度[℃]", "ComPTCMdTemp", "程序", "VW15082", 100, 0, 1, "℃", new ShortTagValue(), false) { DecimalPoint = 0, IsMeter = false }); + + //转速 + TagManger.AddTag(new ShortControlTag() + { + Id = 1, + Name = "转速[rpm]", + NameNoUnit = "转速", + EnName = "Speed", + Group = "程序", + MinValue = 0, + MaxValue = 12000, + IsMeter = true, + DecimalPoint = 0, + Precision = 1, + Unit = "rpm", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW100", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 0 }, + SVModel = new MeterValueAttrCell() { Address = "VW400", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 0 }, + MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 0, Enable = false }, + MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "MVAM", BlockIndex = 1, Enable = false }, + //AutoHandSwitchAddress = "",//仪表不控制转速,PC直接控制转速 + + Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + + }); + + //排气压力 + TagManger.AddTag(new ShortControlTag() + { + Id = 2, + Name = "排气压力[BarA]", + NameNoUnit = "排气压力", + EnName = "ExPress", + Group = "程序", + MinValue = 0, + MaxValue = 40, + IsMeter = true, + DecimalPoint = 2, + Precision = 100, + Unit = "BarA", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW102", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 2 }, + SVModel = new MeterValueAttrCell() { Address = "VW402", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 2 }, + MVModel = new MeterValueAttrCell() { Address = "VW702", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 2 }, + MVAutoHandModel = new MvAmAttrCell() { Address = "VW700", EngValueStr = "", Block = "MVAM", BlockIndex = 0 }, + + Pid_PModel = new MeterExdAttrCell() { Address = "VW704", EngValue = 0, EngValueStr = "", }, + Pid_IModel = new MeterExdAttrCell() { Address = "VW706", EngValue = 0, EngValueStr = "", }, + Pid_DModel = new MeterExdAttrCell() { Address = "VW708", EngValue = 0, EngValueStr = "", }, + Limit_UpModel = new MeterExdAttrCell() { Address = "VW710", EngValue = 0, EngValueStr = "", }, + Limit_DownModel = new MeterExdAttrCell() { Address = "VW712", EngValue = 0, EngValueStr = "", }, + AlarmModel = new MeterExdAttrCell() { Address = "VW714", EngValue = 0, EngValueStr = "", }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + //吸气压力 + TagManger.AddTag(new ShortControlTag() + { + Id = 3, + Name = "吸气压力[BarA]", + NameNoUnit = "吸气压力", + EnName = "InhPress", + Group = "程序", + MinValue = 0, + MaxValue = 16, + IsMeter = true, + DecimalPoint = 2, + Precision = 100, + Unit = "BarA", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW104", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 4 }, + SVModel = new MeterValueAttrCell() { Address = "VW404", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 4 }, + MVModel = new MeterValueAttrCell() { Address = "VW724", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 24 }, + MVAutoHandModel = new MvAmAttrCell() { Address = "VW722", EngValueStr = "", Block = "MVAM", BlockIndex = 22 }, + + Pid_PModel = new MeterExdAttrCell() { Address = "VW726", EngValue = 0, EngValueStr = "", }, + Pid_IModel = new MeterExdAttrCell() { Address = "VW728", EngValue = 0, EngValueStr = "", }, + Pid_DModel = new MeterExdAttrCell() { Address = "VW730", EngValue = 0, EngValueStr = "", }, + Limit_UpModel = new MeterExdAttrCell() { Address = "VW732", EngValue = 0, EngValueStr = "", }, + Limit_DownModel = new MeterExdAttrCell() { Address = "VW734", EngValue = 0, EngValueStr = "", }, + AlarmModel = new MeterExdAttrCell() { Address = "VW736", EngValue = 0, EngValueStr = "", }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + //吸气温度 + TagManger.AddTag(new ShortControlTag() + { + Id = 4, + Name = "吸气温度[℃]", + NameNoUnit = "吸气温度", + EnName = "InhTemp", + Group = "程序", + MinValue = -50, + MaxValue = 200, + IsMeter = true, + DecimalPoint = 1, + Precision = 10, + Unit = "℃", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW106", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 6 }, + SVModel = new MeterValueAttrCell() { Address = "VW406", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 6 }, + MVModel = new MeterValueAttrCell() { Address = "VW746X", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 46 }, + MVAutoHandModel = new MvAmAttrCell() { Address = "VW744", EngValueStr = "", Block = "MVAM", BlockIndex = 44 }, + + Pid_PModel = new MeterExdAttrCell() { Address = "VW748", EngValue = 0, EngValueStr = "", }, + Pid_IModel = new MeterExdAttrCell() { Address = "VW750", EngValue = 0, EngValueStr = "", }, + Pid_DModel = new MeterExdAttrCell() { Address = "VW752", EngValue = 0, EngValueStr = "", }, + Limit_UpModel = new MeterExdAttrCell() { Address = "VW754", EngValue = 0, EngValueStr = "", }, + Limit_DownModel = new MeterExdAttrCell() { Address = "VW756", EngValue = 0, EngValueStr = "", }, + AlarmModel = new MeterExdAttrCell() { Address = "VW758", EngValue = 0, EngValueStr = "", }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + //COND1温度 + TagManger.AddTag(new ShortControlTag() + { + Id = 5, + Name = "COND1温度[℃]", + NameNoUnit = "COND1温度", + EnName = "Cond1Temp", + Group = "程序", + MinValue = -50, + MaxValue = 200, + IsMeter = true, + DecimalPoint = 1, + Precision = 10, + Unit = "℃", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW108", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 8 }, + SVModel = new MeterValueAttrCell() { Address = "VW408", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 8 }, + MVModel = new MeterValueAttrCell() { Address = "VW768", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 68 }, + MVAutoHandModel = new MvAmAttrCell() { Address = "VW766", EngValueStr = "", Block = "MVAM", BlockIndex = 66 }, + + Pid_PModel = new MeterExdAttrCell() { Address = "VW770", EngValue = 0, EngValueStr = "", }, + Pid_IModel = new MeterExdAttrCell() { Address = "VW772", EngValue = 0, EngValueStr = "", }, + Pid_DModel = new MeterExdAttrCell() { Address = "VW774", EngValue = 0, EngValueStr = "", }, + Limit_UpModel = new MeterExdAttrCell() { Address = "VW776", EngValue = 0, EngValueStr = "", }, + Limit_DownModel = new MeterExdAttrCell() { Address = "VW778", EngValue = 0, EngValueStr = "", }, + AlarmModel = new MeterExdAttrCell() { Address = "VW780", EngValue = 0, EngValueStr = "", }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + //润滑油压力 + TagManger.AddTag(new ShortControlTag() + { + Id = 6, + Name = "润滑油压力[BarA]", + NameNoUnit = "润滑油压力", + EnName = "LubePress", + Group = "程序", + MinValue = 0, + MaxValue = 40, + IsMeter = true, + DecimalPoint = 2, + Precision = 100, + Unit = "BarA", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW110", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 10 }, + SVModel = new MeterValueAttrCell() { Address = "VW410", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 10 }, + MVModel = new MeterValueAttrCell() { Address = "VW790", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 90 }, + MVAutoHandModel = new MvAmAttrCell() { Address = "VW788", EngValueStr = "", Block = "MVAM", BlockIndex = 88 }, + + Pid_PModel = new MeterExdAttrCell() { Address = "VW792", EngValue = 0, EngValueStr = "", }, + Pid_IModel = new MeterExdAttrCell() { Address = "VW794", EngValue = 0, EngValueStr = "", }, + Pid_DModel = new MeterExdAttrCell() { Address = "VW796", EngValue = 0, EngValueStr = "", }, + Limit_UpModel = new MeterExdAttrCell() { Address = "VW798", EngValue = 0, EngValueStr = "", }, + Limit_DownModel = new MeterExdAttrCell() { Address = "VW800", EngValue = 0, EngValueStr = "", }, + AlarmModel = new MeterExdAttrCell() { Address = "VW802", EngValue = 0, EngValueStr = "", }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + + //COND2压力 + TagManger.AddTag(new ShortControlTag() + { + Id = 7, + Name = "COND2压力[BarA]", + NameNoUnit = "COND2压力", + EnName = "Cond2Press", + Group = "程序", + MinValue = 0, + MaxValue = 40, + IsMeter = true, + DecimalPoint = 2, + Precision = 100, + Unit = "BarA", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW112", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 12 }, + SVModel = new MeterValueAttrCell() { Address = "VW412", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 12 }, + MVModel = new MeterValueAttrCell() { Address = "VW812", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 112 }, + MVAutoHandModel = new MvAmAttrCell() { Address = "VW810", EngValueStr = "", Block = "MVAM", BlockIndex = 110 }, + + Pid_PModel = new MeterExdAttrCell() { Address = "VW814", EngValue = 0, EngValueStr = "", }, + Pid_IModel = new MeterExdAttrCell() { Address = "VW816", EngValue = 0, EngValueStr = "", }, + Pid_DModel = new MeterExdAttrCell() { Address = "VW818", EngValue = 0, EngValueStr = "", }, + Limit_UpModel = new MeterExdAttrCell() { Address = "VW820", EngValue = 0, EngValueStr = "", }, + Limit_DownModel = new MeterExdAttrCell() { Address = "VW822", EngValue = 0, EngValueStr = "", }, + AlarmModel = new MeterExdAttrCell() { Address = "VW824", EngValue = 0, EngValueStr = "", }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + //OCR + TagManger.AddTag(new ShortControlTag() + { + Id = 8, + Name = "OCR[%]", + NameNoUnit = "OCR", + EnName = "OCR", + Group = "程序", + MinValue = 0, + MaxValue = 100, + IsMeter = true, + DecimalPoint = 1, + Precision = 10, + Unit = "%", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW114", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 14 }, + SVModel = new MeterValueAttrCell() { Address = "VW414", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 14 }, + MVModel = new MeterValueAttrCell() { Address = "VW834", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 134 }, + MVAutoHandModel = new MvAmAttrCell() { Address = "VW832", EngValueStr = "", Block = "MVAM", BlockIndex = 132 }, + + Pid_PModel = new MeterExdAttrCell() { Address = "VW836", EngValue = 0, EngValueStr = "", }, + Pid_IModel = new MeterExdAttrCell() { Address = "VW838", EngValue = 0, EngValueStr = "", }, + Pid_DModel = new MeterExdAttrCell() { Address = "VW840", EngValue = 0, EngValueStr = "", }, + Limit_UpModel = new MeterExdAttrCell() { Address = "VW842", EngValue = 0, EngValueStr = "", }, + Limit_DownModel = new MeterExdAttrCell() { Address = "VW844", EngValue = 0, EngValueStr = "", }, + AlarmModel = new MeterExdAttrCell() { Address = "VW846", EngValue = 0, EngValueStr = "", }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + //HV + TagManger.AddTag(new ShortControlTag() + { + Id = 9, + Name = "HV[V]", + NameNoUnit = "HV[V]", + EnName = "HV", + Group = "程序", + MinValue = 0, + MaxValue = 1500, + IsMeter = true, + DecimalPoint = 1, + Precision = 10, + Unit = "V", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW116", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 16 }, + SVModel = new MeterValueAttrCell() { Address = "VW416", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 16 }, + MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 1, Enable = false }, + MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "MVAM", BlockIndex = 1, Enable = false }, + + Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + //HV[A] 采集 + TagManger.AddTag(new ShortValueTag() + { + Id = 10, + Name = "HV[A]", + NameNoUnit = "HV[A]", + EnName = "HVCur", + Group = "采集", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 10, + Unit = "A", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW118", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 18 }, + //SVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "Pro", BlockIndex = 1, Enable = false }, + //MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "Pro", BlockIndex = 1, Enable = false }, + //MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "Pro", BlockIndex = 1, Enable = false }, + + //Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //AutoHandState = false, + + RWInfo = RWInfo.PLCRead, + }); + //HV[W] 采集 + TagManger.AddTag(new ShortValueTag() + { + Id = 11, + Name = "HV[W]", + NameNoUnit = "HV[W]", + EnName = "HVPw", + Group = "采集", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 0, + Precision = 1, + Unit = "W", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW120", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 20 }, + //SVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "Pro", BlockIndex = 1, Enable = false }, + //MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "Pro", BlockIndex = 1, Enable = false }, + //MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "Pro", BlockIndex = 1, Enable = false }, + + //Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //AutoHandState = false, + + RWInfo = RWInfo.PLCRead, + }); + //LV[V] + TagManger.AddTag(new ShortControlTag() + { + Id = 12, + Name = "LV[V]", + NameNoUnit = "LV[V]", + EnName = "LV", + Group = "程序", + MinValue = 0, + MaxValue = 30, + IsMeter = true, + DecimalPoint = 1, + Precision = 10, + Unit = "V", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW122", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 22 }, + SVModel = new MeterValueAttrCell() { Address = "VW418", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 18 }, + MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 1, Enable = false }, + MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "MVAM", BlockIndex = 1, Enable = false }, + + Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + //LV[A] 采集 + TagManger.AddTag(new ShortValueTag() + { + Id = 13, + Name = "LV[A]", + NameNoUnit = "LV[A]", + EnName = "LVCur", + Group = "采集", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 10, + Unit = "A", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW124", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 24 }, + //SVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "Pro", BlockIndex = 1, Enable = false }, + //MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "Pro", BlockIndex = 1, Enable = false }, + //MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "Pro", BlockIndex = 1, Enable = false }, + + //Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + //AutoHandState = false, + + RWInfo = RWInfo.PLCRead, + }); + //环境温度 + TagManger.AddTag(new ShortControlTag() + { + Id = 14, + Name = "环境温度[℃]", + NameNoUnit = "环境温度", + EnName = "EnvTemp", + Group = "程序", + MinValue = -50, + MaxValue = 150, + IsMeter = true, + DecimalPoint = 1, + Precision = 10, + Unit = "℃", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW126", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 26 }, + SVModel = new MeterValueAttrCell() { Address = "VW420", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 20 }, + MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 1, Enable = false }, + MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "MVAM", BlockIndex = 1, Enable = false }, + + Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + //环境湿度 + TagManger.AddTag(new ShortControlTag() + { + Id = 15, + Name = "环境湿度[%]", + NameNoUnit = "环境湿度", + EnName = "EnvRH", + Group = "程序", + MinValue = 0, + MaxValue = 100, + IsMeter = true, + DecimalPoint = 1, + Precision = 10, + Unit = "%", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW128", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 28 }, + SVModel = new MeterValueAttrCell() { Address = "VW422", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 22 }, + MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 1, Enable = false }, + MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "MVAM", BlockIndex = 1, Enable = false }, + + Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + //OS1温度 + TagManger.AddTag(new ShortControlTag() + { + Id = 16, + Name = "OS1温度[℃]", + NameNoUnit = "OS1温度", + EnName = "OS1Temp", + Group = "程序", + MinValue = -50, + MaxValue = 150, + IsMeter = true, + DecimalPoint = 1, + Precision = 10, + Unit = "℃", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW130", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 30 }, + SVModel = new MeterValueAttrCell() { Address = "VW424", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 24 }, + MVModel = new MeterValueAttrCell() { Address = "VW856", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 156 }, + MVAutoHandModel = new MvAmAttrCell() { Address = "VW854", EngValueStr = "", Block = "MVAM", BlockIndex = 154 }, + + Pid_PModel = new MeterExdAttrCell() { Address = "VW858", EngValue = 0, EngValueStr = "", }, + Pid_IModel = new MeterExdAttrCell() { Address = "VW860", EngValue = 0, EngValueStr = "", }, + Pid_DModel = new MeterExdAttrCell() { Address = "VW862", EngValue = 0, EngValueStr = "", }, + Limit_UpModel = new MeterExdAttrCell() { Address = "VW864", EngValue = 0, EngValueStr = "", }, + Limit_DownModel = new MeterExdAttrCell() { Address = "VW866", EngValue = 0, EngValueStr = "", }, + AlarmModel = new MeterExdAttrCell() { Address = "VW868", EngValue = 0, EngValueStr = "", }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + //OS2温度 + TagManger.AddTag(new ShortControlTag() + { + Id = 17, + Name = "OS2温度[℃]", + NameNoUnit = "OS2温度", + EnName = "OS2Temp", + Group = "程序", + MinValue = -50, + MaxValue = 150, + IsMeter = true, + DecimalPoint = 1, + Precision = 10, + Unit = "℃", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW132", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 32 }, + SVModel = new MeterValueAttrCell() { Address = "VW426", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 26 }, + MVModel = new MeterValueAttrCell() { Address = "VW878", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 178 }, + MVAutoHandModel = new MvAmAttrCell() { Address = "VW876", EngValueStr = "", Block = "MVAM", BlockIndex = 176 }, + + Pid_PModel = new MeterExdAttrCell() { Address = "VW880", EngValue = 0, EngValueStr = "", }, + Pid_IModel = new MeterExdAttrCell() { Address = "VW882", EngValue = 0, EngValueStr = "", }, + Pid_DModel = new MeterExdAttrCell() { Address = "VW884", EngValue = 0, EngValueStr = "", }, + Limit_UpModel = new MeterExdAttrCell() { Address = "VW886", EngValue = 0, EngValueStr = "", }, + Limit_DownModel = new MeterExdAttrCell() { Address = "VW888", EngValue = 0, EngValueStr = "", }, + AlarmModel = new MeterExdAttrCell() { Address = "VW890", EngValue = 0, EngValueStr = "", }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + //COND2温度 + TagManger.AddTag(new ShortControlTag() + { + Id = 18, + Name = "COND2温度[℃]", + NameNoUnit = "COND2温度", + EnName = "Cond2Temp", + Group = "程序", + MinValue = -50, + MaxValue = 150, + IsMeter = true, + DecimalPoint = 1, + Precision = 10, + Unit = "℃", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW134", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 34 }, + SVModel = new MeterValueAttrCell() { Address = "VW428", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 28 }, + MVModel = new MeterValueAttrCell() { Address = "VW900", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 200 }, + MVAutoHandModel = new MvAmAttrCell() { Address = "VW898", EngValueStr = "", Block = "MVAM", BlockIndex = 198 }, + + Pid_PModel = new MeterExdAttrCell() { Address = "VW902", EngValue = 0, EngValueStr = "", }, + Pid_IModel = new MeterExdAttrCell() { Address = "VW904", EngValue = 0, EngValueStr = "", }, + Pid_DModel = new MeterExdAttrCell() { Address = "VW906", EngValue = 0, EngValueStr = "", }, + Limit_UpModel = new MeterExdAttrCell() { Address = "VW908", EngValue = 0, EngValueStr = "", }, + Limit_DownModel = new MeterExdAttrCell() { Address = "VW910", EngValue = 0, EngValueStr = "", }, + AlarmModel = new MeterExdAttrCell() { Address = "VW912", EngValue = 0, EngValueStr = "", }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + //EVAP出口温度 + TagManger.AddTag(new ShortControlTag() + { + Id = 19, + Name = "EVAP出口温度[℃]", + NameNoUnit = "EVAP出口温度", + EnName = "EVAPExpTemp", + Group = "程序", + MinValue = -50, + MaxValue = 150, + IsMeter = true, + DecimalPoint = 1, + Precision = 10, + Unit = "℃", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW136", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 36 }, + SVModel = new MeterValueAttrCell() { Address = "VW430", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 30 }, + MVModel = new MeterValueAttrCell() { Address = "VW922", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 222 }, + MVAutoHandModel = new MvAmAttrCell() { Address = "VW920", EngValueStr = "", Block = "MVAM", BlockIndex = 220 }, + + Pid_PModel = new MeterExdAttrCell() { Address = "VW924", EngValue = 0, EngValueStr = "", }, + Pid_IModel = new MeterExdAttrCell() { Address = "VW926", EngValue = 0, EngValueStr = "", }, + Pid_DModel = new MeterExdAttrCell() { Address = "VW928", EngValue = 0, EngValueStr = "", }, + Limit_UpModel = new MeterExdAttrCell() { Address = "VW930", EngValue = 0, EngValueStr = "", }, + Limit_DownModel = new MeterExdAttrCell() { Address = "VW932", EngValue = 0, EngValueStr = "", }, + AlarmModel = new MeterExdAttrCell() { Address = "VW934", EngValue = 0, EngValueStr = "", }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + + //PTC功率 控制但非仪表控制 + TagManger.AddTag(new ShortControlTag() + { + Id = 20, + Name = "PTC功率[W]", + NameNoUnit = "PTC功率", + EnName = "PTCPw", + Group = "程序", + MinValue = 0, + MaxValue = 150, + IsMeter = true, + DecimalPoint = 1, + Precision = 10, + Unit = "W", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 0, Enable = false }, + SVModel = new MeterValueAttrCell() { Address = "VW432", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 32 }, + MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 1, Enable = false }, + MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "MVAM", BlockIndex = 1, Enable = false }, + + Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + + //PTC流量 控制但非仪表控制 + TagManger.AddTag(new ShortControlTag() + { + Id = 21, + Name = "PTC流量[L/min]", + NameNoUnit = "PTC流量", + EnName = "PTCFlow", + Group = "程序", + MinValue = 0, + MaxValue = 150, + IsMeter = true, + DecimalPoint = 1, + Precision = 1, + Unit = "L/min", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW138", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 38 }, + SVModel = new MeterValueAttrCell() { Address = "VW436", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 36 }, + MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 1, Enable = false }, + MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "MVAM", BlockIndex = 1, Enable = false }, + + Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + }); + + //PTC入口水温 控制但非仪表控制 + TagManger.AddTag(new ShortControlTag() + { + Id = 22, + Name = "PTC入口水温[℃]", + NameNoUnit = "PTC入口水温", + EnName = "PTCEntTemp", + Group = "程序", + MinValue = 0, + MaxValue = 100, + IsMeter = true, + DecimalPoint = 1, + Precision = 10, + Unit = "℃", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW140", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 40 }, + SVModel = new MeterValueAttrCell() { Address = "VW438", EngValue = 0, EngValueStr = "", Block = "SV", BlockIndex = 38 }, + MVModel = new MeterValueAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Block = "MV", BlockIndex = 1, Enable = false }, + MVAutoHandModel = new MvAmAttrCell() { Address = "", EngValueStr = "", Block = "MVAM", BlockIndex = 1, Enable = false }, + + Pid_PModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_IModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Pid_DModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_UpModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + Limit_DownModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AlarmModel = new MeterExdAttrCell() { Address = "", EngValue = 0, EngValueStr = "", Enable = false }, + AutoHandState = false, + + RWInfo = RWInfo.Control, + + }); + + + + + + + //冷媒流量 采集 + TagManger.AddTag(new ShortValueTag() + { + Id = 23, + Name = "冷媒流量[kg/h]", + NameNoUnit = "冷媒流量", + EnName = "VRV", + Group = "采集", + MinValue = 0, + MaxValue = 800, + IsMeter = false, + DecimalPoint = 1, + Precision = 10, + Unit = "kg/h", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW144", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 44 }, + + RWInfo = RWInfo.PLCRead, + }); + //润滑油流量 采集 + TagManger.AddTag(new ShortValueTag() + { + Id = 24, + Name = "润滑油流量[kg/h]", + NameNoUnit = "润滑油流量", + EnName = "LubeFlow", + Group = "采集", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 10, + Unit = "kg/h", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW142", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 42 }, + + RWInfo = RWInfo.PLCRead, + }); + //排气温度 采集 + TagManger.AddTag(new ShortValueTag() + { + Id = 25, + Name = "排气温度[℃]", + NameNoUnit = "排气温度", + EnName = "ExTemp", + Group = "采集", + MinValue = -50, + MaxValue = 200, + IsMeter = false, + DecimalPoint = 1, + Precision = 10, + Unit = "℃", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW146", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 46 }, + + RWInfo = RWInfo.PLCRead, + }); + + + //阀前压力P3 采集 + TagManger.AddTag(new ShortValueTag() + { + Id = 26, + Name = "阀前压力P3[BarA]", + NameNoUnit = "阀前压力P3", + EnName = "TxvFrPressP3", + Group = "采集", + MinValue = 0, + MaxValue = 40, + IsMeter = false, + DecimalPoint = 2, + Precision = 100, + Unit = "BarA", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW184", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 84 }, + + RWInfo = RWInfo.PLCRead, + }); + //EVAP出口压力P6 采集 + TagManger.AddTag(new ShortValueTag() + { + Id = 27, + Name = "EVAP出口压力P6[BarA]", + NameNoUnit = "EVAP出口压力P6", + EnName = "EVAPExpTempP6", + Group = "采集", + MinValue = 0, + MaxValue = 40, + IsMeter = false, + DecimalPoint = 2, + Precision = 100, + Unit = "BarA", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW186", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 86 }, + + RWInfo = RWInfo.PLCRead, + }); + //背压压力P8 采集 + TagManger.AddTag(new ShortValueTag() + { + Id = 28, + Name = "背压压力P8[BarA]", + NameNoUnit = "背压压力P8", + EnName = "BackPressP8", + Group = "采集", + MinValue = 0, + MaxValue = 40, + IsMeter = false, + DecimalPoint = 2, + Precision = 100, + Unit = "BarA", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW188", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 88 }, + + RWInfo = RWInfo.PLCRead, + }); + //阀前温度T3 采集 + TagManger.AddTag(new ShortValueTag() + { + Id = 29, + Name = "阀前温度T3[℃]", + NameNoUnit = "阀前温度T3", + EnName = "TxvFrPressT3", + Group = "采集", + MinValue = -50, + MaxValue = 200, + IsMeter = false, + DecimalPoint = 1, + Precision = 10, + Unit = "℃", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW190", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 90 }, + + RWInfo = RWInfo.PLCRead, + }); + //COND1入口温度T4 采集 + TagManger.AddTag(new ShortValueTag() + { + Id = 30, + Name = "COND1入口温度T4[℃]", + NameNoUnit = "COND1入口温度T4", + EnName = "Cond1TempT4", + Group = "采集", + MinValue = -50, + MaxValue = 200, + IsMeter = false, + DecimalPoint = 1, + Precision = 10, + Unit = "℃", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW192", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 92 }, + + RWInfo = RWInfo.PLCRead, + }); + //EVAP出口温度T6 采集 + TagManger.AddTag(new ShortValueTag() + { + Id = 31, + Name = "EVAP出口温度T6[℃]", + NameNoUnit = "EVAP出口温度T6", + EnName = "EVAPExpTempT6", + Group = "采集", + MinValue = -50, + MaxValue = 200, + IsMeter = false, + DecimalPoint = 1, + Precision = 10, + Unit = "℃", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW194", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 94 }, + + RWInfo = RWInfo.PLCRead, + }); + //压缩机表面温度T11 采集 + TagManger.AddTag(new ShortValueTag() + { + Id = 32, + Name = "压缩机表面温度T11[℃]", + NameNoUnit = "压缩机表面温度T11", + EnName = "CapSufTempT11", + Group = "采集", + MinValue = -50, + MaxValue = 200, + IsMeter = false, + DecimalPoint = 1, + Precision = 10, + Unit = "℃", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW196", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 96 }, + + RWInfo = RWInfo.PLCRead, + }); + + //Qcool_5K 计算 + TagManger.AddTag(new ShortValueTag() + { + Id = 33, + Name = "Qcool_5K[W]", + NameNoUnit = "Qcool_5K", + EnName = "Qcool_5K", + Group = "计算", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "W", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW208", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 0 }, + + RWInfo = RWInfo.PCCalcu, + }); + + //Qcool_Customer 计算 + TagManger.AddTag(new ShortValueTag() + { + Id = 34, + Name = "Qcool_Customer[W]", + NameNoUnit = "Qcool_Customer", + EnName = "Qcool_Customer", + Group = "计算", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "W", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW210", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 1 }, + + RWInfo = RWInfo.PCCalcu, + }); + + //Qheat 计算 + TagManger.AddTag(new ShortValueTag() + { + Id = 35, + Name = "Qheat[W]", + NameNoUnit = "Qheat", + EnName = "Qheat", + Group = "计算", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "W", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW212", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 1 }, + + RWInfo = RWInfo.PCCalcu, + }); + + //COP_Cooling_5K 计算 + TagManger.AddTag(new ShortValueTag() + { + Id = 36, + Name = "COP_Cooling_5K[W]", + NameNoUnit = "COP_Cooling_5K", + EnName = "COP_Cooling_5K", + Group = "计算", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "W", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW214", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 1 }, + + RWInfo = RWInfo.PCCalcu, + }); + + //COP_Cooling_Customer 计算 + TagManger.AddTag(new ShortValueTag() + { + Id = 37, + Name = "COP_Cooling_Customer[W]", + NameNoUnit = "COP_Cooling_Customer", + EnName = "COP_Cooling_Customer", + Group = "计算", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "W", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW216", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 1 }, + + RWInfo = RWInfo.PCCalcu, + }); + + //COP_Heating 计算 + TagManger.AddTag(new ShortValueTag() + { + Id = 38, + Name = "COP_Heating[W]", + NameNoUnit = "COP_Heating", + EnName = "COP_Heating", + Group = "计算", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "W", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW218", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 1 }, + + RWInfo = RWInfo.PCCalcu, + }); + + //VolumeEfficiency 计算 + TagManger.AddTag(new ShortValueTag() + { + Id = 39, + Name = "VolumeEfficiency[%]", + NameNoUnit = "VolumeEfficiency", + EnName = "VolumeEfficiency", + Group = "计算", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "%", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW220", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 1 }, + + RWInfo = RWInfo.PCCalcu, + }); + + //IsentropyEfficiency 计算 + TagManger.AddTag(new ShortValueTag() + { + Id = 40, + Name = "IsentropyEfficiency[%]", + NameNoUnit = "IsentropyEfficiency", + EnName = "IsentropyEfficiency", + Group = "计算", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "%", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW222", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 1 }, + + RWInfo = RWInfo.PCCalcu, + }); + + + //IsentropyEfficiency 计算 + TagManger.AddTag(new ShortValueTag() + { + Id = 41, + Name = "IsentropyEfficiency[%]", + NameNoUnit = "IsentropyEfficiency", + EnName = "IsentropyEfficiency", + Group = "计算", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "%", + DataType = TagDataType.Short, + PVModel = new MeterValueAttrCell() { Address = "VW222", EngValue = 0, EngValueStr = "", Block = "PV", BlockIndex = 1 }, + + RWInfo = RWInfo.PCCalcu, + }); + + + // 过冷度 计算 + TagManger.AddTag(new CalcTag() + { + Id = 42, + Name = "过冷度[K]", + NameNoUnit = "过冷度", + EnName = "Subcooling", + Group = "计算", + MinValue = -50, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "K", + DataType = TagDataType.Double, + PVModel = new QuickAttrCell() { Address = "VW224", EngValue = 0, EngValueStr = "", }, + + RWInfo = RWInfo.PCCalcu, + }); + // 过热度 计算 + TagManger.AddTag(new CalcTag() + { + Id = 43, + Name = "过热度[K]", + NameNoUnit = "过热度", + EnName = "Superheat", + Group = "计算", + MinValue = -50, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "K", + DataType = TagDataType.Double, + PVModel = new QuickAttrCell() { Address = "VW226", EngValue = 0, EngValueStr = "", }, + + RWInfo = RWInfo.PCCalcu, + }); + // 干度 计算 + TagManger.AddTag(new CalcTag() + { + Id = 44, + Name = "干度[%]", + NameNoUnit = "干度", + EnName = "Dryness", + Group = "计算", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "%", + DataType = TagDataType.Double, + PVModel = new QuickAttrCell() { Address = "VW228", EngValue = 0, EngValueStr = "", }, + + RWInfo = RWInfo.PCCalcu, + }); + + + + //压缩机采集的数据 + + // 通讯母线电流 压缩机 + TagManger.AddTag(new CapTag() + { + Id = 45, + Name = "通讯母线电流[A]", + NameNoUnit = "通讯母线电流", + EnName = "ComCapBusCur", + Group = "压缩机", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 2, + Precision = 1, + Unit = "A", + DataType = TagDataType.Double, + PVModel = new QuickAttrCell() { Address = "VW270", EngValue = 0, EngValueStr = "", }, + + RWInfo = RWInfo.CapRead, + }); + // 通讯母线电压 压缩机 + TagManger.AddTag(new CapTag() + { + Id = 46, + Name = "通讯母线电压[V]", + NameNoUnit = "通讯母线电压", + EnName = "ComCapBusCur", + Group = "压缩机", + MinValue = 0, + MaxValue = 200, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "V", + DataType = TagDataType.Double, + PVModel = new QuickAttrCell() { Address = "VW272", EngValue = 0, EngValueStr = "", }, + + RWInfo = RWInfo.CapRead, + }); + // 通讯相电流 压缩机 + TagManger.AddTag(new CapTag() + { + Id =47, + Name = "通讯相电流[A]", + NameNoUnit = "通讯相电流", + EnName = "ComCapPhCur", + Group = "压缩机", + MinValue = 0, + MaxValue = 200, + IsMeter = false, + DecimalPoint = 2, + Precision = 1, + Unit = "A", + DataType = TagDataType.Double, + PVModel = new QuickAttrCell() { Address = "VW274", EngValue = 0, EngValueStr = "", }, + + RWInfo = RWInfo.CapRead, + }); + // 通讯功率 压缩机 + TagManger.AddTag(new CapTag() + { + Id = 48, + Name = "通讯功率[W]", + NameNoUnit = "通讯功率", + EnName = "ComCapPw", + Group = "压缩机", + MinValue = 0, + MaxValue = 1000, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "W", + DataType = TagDataType.Double, + PVModel = new QuickAttrCell() { Address = "VW276", EngValue = 0, EngValueStr = "", }, + + RWInfo = RWInfo.CapRead, + }); + // 通讯逆变器温度 压缩机 + TagManger.AddTag(new CapTag() + { + Id = 49, + Name = "通讯逆变器温度[℃]", + NameNoUnit = "通讯逆变器温度", + EnName = "ComCapInverterTemp", + Group = "压缩机", + MinValue = 0, + MaxValue = 150, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "℃", + DataType = TagDataType.Double, + PVModel = new QuickAttrCell() { Address = "VW278", EngValue = 0, EngValueStr = "", }, + + RWInfo = RWInfo.CapRead, + }); + // 通讯芯片温度 压缩机 + TagManger.AddTag(new CapTag() + { + Id = 50, + Name = "通讯芯片温度[℃]", + NameNoUnit = "通讯芯片温度", + EnName = "ComCapChipTemp", + Group = "压缩机", + MinValue = 0, + MaxValue = 150, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "℃", + DataType = TagDataType.Double, + PVModel = new QuickAttrCell() { Address = "VW280", EngValue = 0, EngValueStr = "", }, + + RWInfo = RWInfo.CapRead, + }); + + + + + + // 通讯PTC入水温度 压缩机 + TagManger.AddTag(new CapTag() + { + Id = 51, + Name = "通讯PTC入水温度[℃]", + NameNoUnit = "通讯PTC入水温度", + EnName = "CapPTCInWaterTemp", + Group = "压缩机", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "℃", + DataType = TagDataType.Double, + PVModel = new QuickAttrCell() { Address = "VW302", EngValue = 0, EngValueStr = "", }, + + RWInfo = RWInfo.CapRead, + }); + + // 通讯PTC出水温度 压缩机 + TagManger.AddTag(new CapTag() + { + Id = 52, + Name = "通讯PTC出水温度[℃]", + NameNoUnit = "通讯PTC出水温度", + EnName = "CapPTCOutWaterTemp", + Group = "压缩机", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "℃", + DataType = TagDataType.Double, + PVModel = new QuickAttrCell() { Address = "VW304", EngValue = 0, EngValueStr = "", }, + + RWInfo = RWInfo.CapRead, + }); + + // 通讯PTC峰值电流 压缩机 + TagManger.AddTag(new CapTag() + { + Id = 53, + Name = "通讯PTC峰值电流[A]", + NameNoUnit = "通讯PTC峰值电流", + EnName = "CapPTCPeakCur", + Group = "程压缩机序", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 2, + Precision = 1, + Unit = "A", + DataType = TagDataType.Double, + PVModel = new QuickAttrCell() { Address = "VW306", EngValue = 0, EngValueStr = "", }, + + RWInfo = RWInfo.CapRead, + }); + + // 通讯PTC母线电流 + TagManger.AddTag(new CapTag() + { + Id = 54, + Name = "通讯PTC母线电流[A]", + NameNoUnit = "通讯PTC母线电流", + EnName = "CapPTCBusCur", + Group = "压缩机", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 2, + Precision = 1, + Unit = "A", + DataType = TagDataType.Double, + PVModel = new QuickAttrCell() { Address = "VW308", EngValue = 0, EngValueStr = "", }, + + RWInfo = RWInfo.CapRead, + }); + + // 通讯PTC膜温 压缩机 + TagManger.AddTag(new CapTag() + { + Id = 55, + Name = "通讯PTC膜温[℃]", + NameNoUnit = "通讯PTC膜温", + EnName = "CapPTCFilmTemp", + Group = "压缩机", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "℃", + DataType = TagDataType.Double, + PVModel = new QuickAttrCell() { Address = "VW310", EngValue = 0, EngValueStr = "", }, + + RWInfo = RWInfo.CapRead, + }); + + // 通讯PTC功率模块温度 压缩机 + TagManger.AddTag(new CapTag() + { + Id = 56, + Name = "通讯PTC功率模块温度[℃]", + NameNoUnit = "通讯PTC功率模块温度", + EnName = "CapPTCPwMdTemp", + Group = "压缩机", + MinValue = 0, + MaxValue = 100, + IsMeter = false, + DecimalPoint = 1, + Precision = 1, + Unit = "℃", + DataType = TagDataType.Double, + PVModel = new QuickAttrCell() { Address = "VW310", EngValue = 0, EngValueStr = "", }, + + RWInfo = RWInfo.CapRead, + }); + + //精度和小数点数据的属性数据初始化 + foreach (var itemTag in TagManger.DicTags) + { + if (TagManger.TryGetShortControlTagByName(itemTag.Key, out ShortControlTag? shortControlTag)) + { + shortControlTag!.UpdateInit(); + continue; + } + + if (TagManger.TryGetShortTagByName(itemTag.Key, out ShortValueTag? shortValueTag)) + { + shortValueTag!.UpdateInit(); + continue; + } + } #endregion @@ -856,6 +2224,8 @@ namespace CapMachine.Wpf.Services 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}"; @@ -1055,14 +2425,6 @@ namespace CapMachine.Wpf.Services //IsValueShow = !IsValueShow; } - private Tag _TagInfo; - - public Tag TagInfo - { - get { return _TagInfo; } - set { _TagInfo = value; RaisePropertyChanged(); } - } - /// /// 初始化PLC通信 @@ -1146,6 +2508,21 @@ namespace CapMachine.Wpf.Services /// private Stopwatch DiagnosticsTime { get; set; } = new Stopwatch(); + /// + /// PV整块读取数据 + /// + private OperateResult OperateResultBlockPVRead { get; set; } + + /// + /// SV整块读取数据 + /// + private OperateResult OperateResultBlockSVRead { get; set; } + + /// + /// MV整块读取数据 + /// + private OperateResult OperateResultBlockMVRead { get; set; } + /// /// PLC扫描线程 /// @@ -1167,242 +2544,140 @@ namespace CapMachine.Wpf.Services 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) + + //CANLIN数据读取到TagManger.DicTags数据中心中,上面的操作是itemWrite反写到PLC中 + foreach (var itemCanLinGroup 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) + //只处理CANLIN的数据 + if (itemCanLinGroup.Value.Group == "CANLIN") { - //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中叫做【通讯转速】 + if (itemCanLinGroup.Value.NameNoUnit == "转速") + { + switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) { - //反写CANLIN速度数据到PLC,提前写入PLC,后面会回读PV值 - if (itemTag.Value.NameNoUnit == "转速") - { - switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) + case CanLinEnum.Can: + //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC 取消XXX + if (TagManger.TryGetPVModel(itemCanLinGroup.Key, out MeterValueAttrCell? CanpVModel)) { - case CanLinEnum.Can: - //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC 取消XXX - //SiemensDrive.Write(itemTag.Value.PVAddress, (short)CanDriveService.GetDbcSpeedValueBySpeedName("通讯转速")); - //itemTag.Value.EngPvValue = 0; - break; - case CanLinEnum.Lin: - //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC 取消XXX - //SiemensDrive.Write(itemTag.Value.PVAddress, (short)LinDriveService.GetLdfSpeedValueBySpeedName("通讯转速")); - //itemTag.Value.EngPvValue = 0; - break; - default: - break; + CanpVModel!.EngValue = CanDriveService.GetDbcSpeedValueBySpeedName("通讯转速"); + SiemensDrive.Write(CanpVModel!.Address, (short)CanDriveService.GetDbcSpeedValueBySpeedName("通讯转速")); + //pVModel.EngSrcValue = 0; } - } - else if (itemTag.Value.NameNoUnit == "通讯母线电压") - { - switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) + break; + case CanLinEnum.Lin: + //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC 取消XXX + if (TagManger.TryGetPVModel(itemCanLinGroup.Key, out MeterValueAttrCell? LinpVModel)) { - case CanLinEnum.Can: - //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC 取消XXX - //SiemensDrive.Write(itemTag.Value.PVAddress, (short)(CanDriveService.GetDbcValueByName("通讯母线电压") * itemTag.Value.Precision)); - //itemTag.Value.EngPvValue = 0; - break; - case CanLinEnum.Lin: - //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC 取消XXX - //SiemensDrive.Write(itemTag.Value.PVAddress, (short)(LinDriveService.GetLdfValueByName("通讯母线电压") * itemTag.Value.Precision)); - //itemTag.Value.EngPvValue = 0; - break; - default: - break; + LinpVModel!.EngValue = LinDriveService.GetLdfSpeedValueBySpeedName("通讯转速"); + SiemensDrive.Write(LinpVModel!.Address, (short)LinDriveService.GetLdfSpeedValueBySpeedName("通讯转速")); } - } - else if (itemTag.Value.NameNoUnit == "通讯母线电流") - { - switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) - { - case CanLinEnum.Can: - //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC 取消XXX - //SiemensDrive.Write(itemTag.Value.PVAddress, (short)(CanDriveService.GetDbcValueByName("通讯母线电流") * itemTag.Value.Precision)); - //itemTag.Value.EngPvValue = 0; - break; - case CanLinEnum.Lin: - //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC 取消XXX - //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 取消XXX - //SiemensDrive.Write(itemTag.Value.PVAddress, (short)(CanDriveService.GetDbcValueByName("通讯相电流") * itemTag.Value.Precision)); - //itemTag.Value.EngPvValue = 0; - break; - case CanLinEnum.Lin: - //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC 取消XXX - //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 取消XXX - //SiemensDrive.Write(itemTag.Value.PVAddress, (short)(CanDriveService.GetDbcValueByName("通讯功率") * itemTag.Value.Precision)); - //itemTag.Value.EngPvValue = 0; - break; - case CanLinEnum.Lin: - //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC 取消XXX - //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 取消XXX - //SiemensDrive.Write(itemTag.Value.PVAddress, (short)(CanDriveService.GetDbcValueByName("通讯芯片温度") * itemTag.Value.Precision)); - //itemTag.Value.EngPvValue = 0; - break; - case CanLinEnum.Lin: - //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC 取消XXX - //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(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.Lin: - //LIN数据读取 //回读LIN通信的数据到集合中 - //LIN组合并且在循环接收数据中时,才读取数据 - if (itemTag.Value.Group == "CANLIN") - { - //回读LIN通信的DBC集合数据到集合中 - itemTag.Value.EngPvValue = LinDriveService.GetLdfValueByName(itemTag.Value.NameNoUnit); - } - break; - default: - break; - } + break; + default: + break; } - else //地址为空,PLC驱动不读取数据 + //找到后继续下一个 + continue; + } + + //尝试获取模型信息 + if (TagManger.TryGetPVModel(itemCanLinGroup.Key, out MeterValueAttrCell? pVModel)) + { + switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) { - + case CanLinEnum.Can: + //取得压缩机的CANLIN数据到数据集合中 + pVModel!.EngValue = CanDriveService.GetDbcValueByName(itemCanLinGroup.Value.NameNoUnit); + //写入到PLC中 + SiemensDrive.Write(pVModel!.Address, (short)(CanDriveService.GetDbcValueByName(itemCanLinGroup.Value.NameNoUnit) * pVModel.Precision)); + break; + case CanLinEnum.Lin: + //取得压缩机的CANLIN数据 + pVModel!.EngValue = LinDriveService.GetLdfValueByName(itemCanLinGroup.Value.NameNoUnit); + //写入到PLC中 + SiemensDrive.Write(pVModel!.Address, (short)(LinDriveService.GetLdfValueByName(itemCanLinGroup.Value.NameNoUnit) * pVModel.Precision)); + break; + case CanLinEnum.No: + break; + default: + break; } + } + } - 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; + } - } - 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; - } - } + //PV批量读取 + OperateResultBlockPVRead = SiemensDrive.Read("VW100", 200); + if (OperateResultBlockPVRead.IsSuccess) + { + foreach (var itemBlockReadTag in TagManger.DicTags) + { + if (itemBlockReadTag.Key.Contains("转速")) + { + var dd = 1; + } + //需要从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; + } + //SV批量读取 + OperateResultBlockSVRead = SiemensDrive.Read("VW400", 200); + if (OperateResultBlockSVRead.IsSuccess) + { + foreach (var itemBlockReadTag in TagManger.DicTags) + { + //需要从PLC读取的标签才算 + if (itemBlockReadTag.Value.RWInfo == RWInfo.PLCRead && TagManger.TryGetSVModel(itemBlockReadTag.Key, out MeterValueAttrCell sVModel)) + { + //地址为空的话则下一个 + if (string.IsNullOrEmpty(sVModel!.Address)) continue; + //给SvModel的原始属性赋值 + sVModel!.EngSrcValue = SiemensDrive.ByteTransform.TransInt16(OperateResultBlockSVRead.Content, sVModel.BlockIndex); + } + } + } + //MV批量读取 + OperateResultBlockMVRead = SiemensDrive.Read("VW700", 230); + if (OperateResultBlockMVRead.IsSuccess) + { + foreach (var itemBlockReadTag in TagManger.DicTags) + { + //MV 设置值 + //需要从PLC读取的标签才算 只有控制才有MV控制 + if (itemBlockReadTag.Value.RWInfo == RWInfo.Control && TagManger.TryGetMVModel(itemBlockReadTag.Key, out MeterValueAttrCell mVModel)) + { + //地址为空的话则下一个 + if (string.IsNullOrEmpty(mVModel!.Address)) continue; + //给MvModel的原始属性赋值 + mVModel!.EngSrcValue = SiemensDrive.ByteTransform.TransInt16(OperateResultBlockMVRead.Content, mVModel.BlockIndex); + } - ////手自动切换按钮条件 取消XXX - //AutoHandSwtichConditionState.AlarmStateResult = SiemensDrive.ReadBool(AutoHandSwtichConditionState.AlarmAddress); - //AutoHandSwtichConditionState.HandStateResult = SiemensDrive.ReadBool(AutoHandSwtichConditionState.HandStateAddress); - //AutoHandSwtichConditionState.SumResult(); - - break; - default: - break; + //MV 手自动切换 只有控制才有MVAM控制 + if (itemBlockReadTag.Value.RWInfo == RWInfo.Control && TagManger.TryGetMVAmModel(itemBlockReadTag.Key, out MvAmAttrCell mVAmModel)) + { + //地址为空的话则下一个 + if (string.IsNullOrEmpty(mVAmModel!.Address)) continue; + //给mVAmModel的原始属性赋值 + mVAmModel!.EngSrcValue = SiemensDrive.ByteTransform.TransInt16(OperateResultBlockMVRead.Content, mVAmModel.BlockIndex); + } } } diff --git a/CapMachine.Wpf/Services/PPCService.cs b/CapMachine.Wpf/Services/PPCService.cs index 4ebc71d..0d1e713 100644 --- a/CapMachine.Wpf/Services/PPCService.cs +++ b/CapMachine.Wpf/Services/PPCService.cs @@ -56,21 +56,48 @@ namespace CapMachine.Wpf.Services //SpeedTag = TagManager.DicTags.GetValueOrDefault("转速[rpm]"); //ExPressTag = TagManager.DicTags.GetValueOrDefault("排气压力[BarA]"); //ExTempTag = TagManager.DicTags.GetValueOrDefault("排气温度[℃]"); - InhPressTag = TagManager.DicTags.GetValueOrDefault("吸气压力[BarA]")!; - InhTempTag = TagManager.DicTags.GetValueOrDefault("吸气温度[℃]")!; + if (TagManager.TryGetShortControlTagByName("吸气压力[BarA]",out ShortControlTag? InhPressShortControlTag)) + { + InhPressTag = InhPressShortControlTag!; + } + if (TagManager.TryGetShortControlTagByName("吸气温度[℃]", out ShortControlTag? InhTempShortControlTag)) + { + InhTempTag = InhTempShortControlTag!; + } + + //InhTempTag = TagManager.DicTags.GetValueOrDefault("吸气温度[℃]")!; //ComCapBusVolTag = TagManager.DicTags.GetValueOrDefault("通讯母线电压[V]"); //ComCapBusCurTag = TagManager.DicTags.GetValueOrDefault("通讯母线电流[A]"); //ComCapPwTag = TagManager.DicTags.GetValueOrDefault("通讯功率[W]"); //OS2TempTag = TagManager.DicTags.GetValueOrDefault("吸气混合器温度[℃]"); - TxvFrTempTag = TagManager.DicTags.GetValueOrDefault("膨胀阀前温度[℃]")!; - TxvFrPressTag = TagManager.DicTags.GetValueOrDefault("膨胀阀前压力[BarA]")!; + + //TxvFrTempTag = TagManager.DicTags.GetValueOrDefault("膨胀阀前温度[℃]")!; + //TxvFrPressTag = TagManager.DicTags.GetValueOrDefault("膨胀阀前压力[BarA]")!; + + if (TagManager.TryGetShortTagByName("膨胀阀前温度[℃]", out ShortValueTag? TxvFrTempShortTag)) + { + TxvFrTempTag = TxvFrTempShortTag!; + } + if (TagManager.TryGetShortTagByName("膨胀阀前压力[BarA]", out ShortValueTag? TxvFrPressShortTag)) + { + TxvFrPressTag = TxvFrPressShortTag!; + } + //Cond1TempTag = TagManager.DicTags.GetValueOrDefault("冷凝器出口水温[℃]"); //CondInTempTag = TagManager.DicTags.GetValueOrDefault("冷凝器进口温度[℃]"); - Superheat = TagManager.DicTags.GetValueOrDefault("过热度[K]"); - Subcool = TagManager.DicTags.GetValueOrDefault("过冷度[K]"); + //Superheat = TagManager.DicTags.GetValueOrDefault("过热度[K]"); + //Subcool = TagManager.DicTags.GetValueOrDefault("过冷度[K]"); + + if (TagManager.TryGetShortTagByName("过热度[K]", out ShortValueTag? SuperheatShortTag)) + { + Superheat = SuperheatShortTag!; + } + if (TagManager.TryGetShortTagByName("过冷度[K]", out ShortValueTag? SubcoolShortTag)) + { + Subcool = SubcoolShortTag!; + } - SuperHeatCoolConfig.FluidsPath = ConfigHelper.GetValue("FluidsPath"); SuperHeatCoolConfig.Cryogen = ConfigHelper.GetValue("Cryogen"); @@ -95,32 +122,32 @@ namespace CapMachine.Wpf.Services /// /// 吸气压力 /// - public ITag InhPressTag { get; set; } + public ShortControlTag InhPressTag { get; set; } /// /// 吸气温度 /// - public ITag InhTempTag { get; set; } + public ShortControlTag InhTempTag { get; set; } /// /// 膨胀阀前温度 /// - public ITag TxvFrTempTag { get; set; } + public ShortValueTag TxvFrTempTag { get; set; } /// /// 膨胀阀前压力 /// - public ITag TxvFrPressTag { get; set; } + public ShortValueTag TxvFrPressTag { get; set; } /// /// 过热度 /// - public ITag Superheat { get; set; } + public ShortValueTag Superheat { get; set; } /// /// 过冷度 /// - public ITag Subcool { get; set; } + public ShortValueTag Subcool { get; set; } ///// @@ -229,25 +256,25 @@ namespace CapMachine.Wpf.Services IRefProp64.WMOLdll(x, ref wm); //p = Convert.ToDouble(textBox2.Text) * 1000.0;//textBox2 Comp.吸气压力(Mpa) - p = (InhPressTag.EngPvValue) * 1000.0;//textBox2 Comp.吸气压力(Mpa) + p = (InhPressTag.PVModel.EngValue) * 1000.0;//textBox2 Comp.吸气压力(Mpa) kph = 1; - p1 = (TxvFrPressTag.EngPvValue) * 1000.0;//textBox3 Evap.膨胀阀前压力(Mpa) + p1 = (TxvFrPressTag.PVModel.EngValue) * 1000.0;//textBox3 Evap.膨胀阀前压力(Mpa) //p1 = Convert.ToDouble(textBox3.Text) * 1000.0;//textBox3 Evap.膨胀阀前压力(Mpa) IRefProp64.SATPdll(ref p, x, ref kph, ref te, ref Dl, ref Dv, xliq, xvap, ref iErr, ref herr, ref herrLen); if (iErr == 0) - Superheat.EngPvValue = InhTempTag.EngPvValue - (te - 273.15); + Superheat.PVModel.EngValue = InhTempTag.PVModel.EngValue - (te - 273.15); //textBox5.Text = String.Format("{0:n4}", Convert.ToDouble(textBox1.Text) - (te - 273.15));//textBox1 Comp.吸气温度(℃) else - Superheat.EngPvValue = 0; + Superheat.PVModel.EngValue = 0; IRefProp64.SATPdll(ref p1, x, ref kph, ref te1, ref Dl, ref Dv, xliq, xvap, ref iErr, ref herr, ref herrLen); if (iErr == 0) - Subcool.EngPvValue = TxvFrTempTag.EngPvValue - (te1 - 273.15);//textBox4 Evap.膨胀阀前温度(℃) + Subcool.PVModel.EngValue = TxvFrTempTag.PVModel.EngValue - (te1 - 273.15);//textBox4 Evap.膨胀阀前温度(℃) //GuoLengDu = (te1 - 273.15) - ListKRLogCellValue.Find(a => a.Name == "膨胀阀前温度").Value;//textBox4 Evap.膨胀阀前温度(℃) //textBox6.Text = String.Format("{0:n4}", Convert.ToDouble(textBox4.Text) - (te1 - 273.15));//textBox4 Evap.膨胀阀前温度(℃) else - Subcool.EngPvValue = 0; + Subcool.PVModel.EngValue = 0; } catch (Exception ex) { @@ -328,11 +355,11 @@ namespace CapMachine.Wpf.Services //p = Convert.ToDouble(textBox2.Text) * 1000.0;//textBox2 Comp.吸气压力(Mpa) //p = (ListRtKPMeter.Find(a => a.MeterName == "吸入压力").RtPV) * 1000.0;//textBox2 Comp.吸气压力(Mpa) - p = (InhPressTag.EngPvValue) * 1000.0;//textBox2 Comp.吸气压力(Mpa) + p = (InhPressTag.PVModel.EngValue) * 1000.0;//textBox2 Comp.吸气压力(Mpa) kph = 1; //p1 = (ListKRLogCellValue.Find(a => a.Name == "膨胀阀前压力").Value) * 1000.0;//textBox3 Evap.膨胀阀前压力(Mpa) - p1 = (TxvFrPressTag.EngPvValue) * 1000.0;//textBox3 Evap.膨胀阀前压力(Mpa) + p1 = (TxvFrPressTag.PVModel.EngValue) * 1000.0;//textBox3 Evap.膨胀阀前压力(Mpa) //p1 = Convert.ToDouble(textBox3.Text) * 1000.0;//textBox3 Evap.膨胀阀前压力(Mpa) @@ -341,20 +368,20 @@ namespace CapMachine.Wpf.Services if (iErr == 0) //GuoReDu = ListRtKPMeter.Find(a => a.MeterName == "吸入温度").RtPV - (te - 273.15); - Superheat.EngPvValue = InhTempTag.EngPvValue - (te - 273.15); + Superheat.PVModel.EngValue = InhTempTag.PVModel.EngValue - (te - 273.15); //textBox5.Text = String.Format("{0:n4}", Convert.ToDouble(textBox1.Text) - (te - 273.15));//textBox1 Comp.吸气温度(℃) else - Superheat.EngPvValue = 0; + Superheat.PVModel.EngValue = 0; IRefProp64.SATPdll(ref p1, x, ref kph, ref te1, ref Dl, ref Dv, xliq, xvap, ref iErr, ref herr, ref herrLen); if (iErr == 0) //GuoLengDu = ListKRLogCellValue.Find(a => a.Name == "膨胀阀前温度").Value - (te1 - 273.15);//textBox4 Evap.膨胀阀前温度(℃) - Subcool.EngPvValue = TxvFrTempTag.EngPvValue - (te1 - 273.15);//textBox4 Evap.膨胀阀前温度(℃) + Subcool.PVModel.EngValue = TxvFrTempTag.PVModel.EngValue - (te1 - 273.15);//textBox4 Evap.膨胀阀前温度(℃) //textBox6.Text = String.Format("{0:n4}", Convert.ToDouble(textBox4.Text) - (te1 - 273.15));//textBox4 Evap.膨胀阀前温度(℃) else - Subcool.EngPvValue = 0; + Subcool.PVModel.EngValue = 0; } catch (Exception ex) diff --git a/CapMachine.Wpf/Services/ProRuntimeService.cs b/CapMachine.Wpf/Services/ProRuntimeService.cs index f195d22..f15df5d 100644 --- a/CapMachine.Wpf/Services/ProRuntimeService.cs +++ b/CapMachine.Wpf/Services/ProRuntimeService.cs @@ -165,12 +165,12 @@ namespace CapMachine.Wpf.Services ListPlcLoadConfigCell.Add(new PlcLoadConfigCell() { Name = itemKeyValue.Key, - SvAddress = itemKeyValue.Value.SVAddress, - Limit_UpAddress = itemKeyValue.Value.Limit_UpAddress, - Limit_DownAddress = itemKeyValue.Value.Limit_DownAddress, - Pid_PAddress = itemKeyValue.Value.Pid_PAddress, - Pid_IAddress = itemKeyValue.Value.Pid_IAddress, - Pid_DAddress = itemKeyValue.Value.Pid_DAddress, + SvAddress = MachineRtDataService.TagManger.TryGetSVModel(itemKeyValue.Value.Name,out MeterValueAttrCell? controlAttrCell)==true? controlAttrCell!.Address:"", + Limit_UpAddress = MachineRtDataService.TagManger.TryGetLimitUpModel(itemKeyValue.Value.Name, out MeterExdAttrCell? controlAttrCell2) == true ? controlAttrCell2!.Address : "", + Limit_DownAddress = MachineRtDataService.TagManger.TryGetLimitDownModel(itemKeyValue.Value.Name, out MeterExdAttrCell? controlAttrCell3) == true ? controlAttrCell3!.Address : "", + Pid_PAddress = MachineRtDataService.TagManger.TryGetPidPModel(itemKeyValue.Value.Name, out MeterExdAttrCell? controlAttrCell4) == true ? controlAttrCell4!.Address : "", + Pid_IAddress = MachineRtDataService.TagManger.TryGetPidIModel(itemKeyValue.Value.Name, out MeterExdAttrCell? controlAttrCell5) == true ? controlAttrCell5!.Address : "", + Pid_DAddress = MachineRtDataService.TagManger.TryGetPidDModel(itemKeyValue.Value.Name, out MeterExdAttrCell? controlAttrCell6) == true ? controlAttrCell6!.Address : "", Precision = itemKeyValue.Value.Precision, }); diff --git a/CapMachine.Wpf/ViewModels/MonitorViewModel.cs b/CapMachine.Wpf/ViewModels/MonitorViewModel.cs index d8ec9ab..b53122e 100644 --- a/CapMachine.Wpf/ViewModels/MonitorViewModel.cs +++ b/CapMachine.Wpf/ViewModels/MonitorViewModel.cs @@ -50,14 +50,18 @@ namespace CapMachine.Wpf.ViewModels //赋值实例化 ListHandSwitchData = MachineRtDataService.ListHandSwitchData; - ListTag = new ObservableCollection(TagManager.DicTags.Values.ToList()); - ListMeterTag = TagManager.DicTags.Values.Where(a => a.IsMeter == true).ToList(); + + //ListTag = new ObservableCollection(TagManager.DicTags.Values.ToList()); + RefreshListTag(); + + ListMeterTag = TagManager.DicTags.Values.Where(a => a.Group == "程序").OrderBy(a=>a.Id).Take(11).ToList(); SpeedTag = TagManager.DicTags.GetValueOrDefault("转速[rpm]"); ExPressTag = TagManager.DicTags.GetValueOrDefault("排气压力[BarA]"); ExTempTag = TagManager.DicTags.GetValueOrDefault("排气温度[℃]"); InhPressTag = TagManager.DicTags.GetValueOrDefault("吸气压力[BarA]"); InhTempTag = TagManager.DicTags.GetValueOrDefault("吸气温度[℃]"); + ComCapBusVolTag = TagManager.DicTags.GetValueOrDefault("通讯母线电压[V]"); ComCapBusCurTag = TagManager.DicTags.GetValueOrDefault("通讯母线电流[A]"); ComCapPwTag = TagManager.DicTags.GetValueOrDefault("通讯功率[W]"); @@ -89,6 +93,34 @@ namespace CapMachine.Wpf.ViewModels new ChartRtValue(){ Name="湿度",Value=12.3,Unit="%"}, }; + + private List _FilterGroups = new List { "程序", "采集", "压缩机" }; + /// + /// 动态过滤(支持运行时更改过滤条件) + /// + public List FilterGroups + { + get => _FilterGroups; + set + { + _FilterGroups = value; + RaisePropertyChanged(); + RefreshListTag(); // 更新ListTag + } + } + + /// + /// 动态过滤ListTag(支持运行时更改过滤条件) + /// + private void RefreshListTag() + { + ListTag = new ObservableCollection( + TagManager.DicTags.Values.Where(tag => + FilterGroups.Contains(tag.Group) || FilterGroups.Count == 0 + ).OrderBy(a => a.Id).ToList() + ); + } + private ObservableCollection _ListTag; /// /// 标签集合信息 @@ -241,7 +273,7 @@ namespace CapMachine.Wpf.ViewModels MachineRtDataService.SysStart(); //开始记录数据 DataRecordService.StartRecord(); - + } break; @@ -389,6 +421,7 @@ namespace CapMachine.Wpf.ViewModels return _AutoHandCmd; } } + /// /// 操作指令执行方法 /// @@ -404,11 +437,15 @@ namespace CapMachine.Wpf.ViewModels // foreach (var item in TagManager.DicTags) { + //用无单位的比较 if (item.Value.NameNoUnit == MeterControl.MeterName) { - if (!string.IsNullOrEmpty(item.Value.AutoHandSwitchAddress)) + if (TagManager.TryGetShortControlTagByName(item.Value.Name, out ShortControlTag? shortControlTag)) { - var Result = MachineRtDataService.SiemensDrive.Write(item.Value.AutoHandSwitchAddress, MeterControl.AutoHandState == true ? (short)1 : (short)0); + if (!string.IsNullOrEmpty(shortControlTag!.MVAutoHandModel.Address)) + { + var Result = MachineRtDataService.SiemensDrive.Write(shortControlTag!.MVAutoHandModel.Address, MeterControl.AutoHandState == true ? (short)1 : (short)0); + } } break; } @@ -450,22 +487,29 @@ namespace CapMachine.Wpf.ViewModels // foreach (var item in TagManager.DicTags) { + //用无单位的比较 if (item.Value.NameNoUnit == ChannelValue.Name) { switch (ChannelValue.Type) { case "MV"://10的倍率 - if (!string.IsNullOrEmpty(item.Value.MVAddress)) + if (TagManager.TryGetMVModel(item.Value.Name, out MeterValueAttrCell? MvcontrolAttrCell)) { - var Result = MachineRtDataService.SiemensDrive.Write(item.Value.MVAddress, (short)((double)ChannelValue.Value * 10)); - break; + if (!string.IsNullOrEmpty(MvcontrolAttrCell!.Address)) + { + var Result = MachineRtDataService.SiemensDrive.Write(MvcontrolAttrCell!.Address, (short)((double)ChannelValue.Value * 10)); + break; + } } break; case "SV": - if (!string.IsNullOrEmpty(item.Value.SVAddress)) + if (TagManager.TryGetSVModel(item.Value.Name, out MeterValueAttrCell? sVcontrolAttrCell)) { - var Result = MachineRtDataService.SiemensDrive.Write(item.Value.SVAddress, (short)((double)ChannelValue.Value * item.Value.Precision)); - break; + if (!string.IsNullOrEmpty(sVcontrolAttrCell!.Address)) + { + var Result = MachineRtDataService.SiemensDrive.Write(sVcontrolAttrCell!.Address, (short)((double)ChannelValue.Value * item.Value.Precision)); + break; + } } break; default: diff --git a/CapMachine.Wpf/Views/MonitorView.xaml b/CapMachine.Wpf/Views/MonitorView.xaml index facf221..b0619ef 100644 --- a/CapMachine.Wpf/Views/MonitorView.xaml +++ b/CapMachine.Wpf/Views/MonitorView.xaml @@ -168,12 +168,12 @@ AutoHandCommand="{Binding Source={StaticResource Proxy}, Path=Data.AutoHandCmd}" AutoHandState="False" HandValueCommand="{Binding Source={StaticResource Proxy}, Path=Data.HandValueCmd}" - HandValueMVParameter="{Binding EngMvValue}" - HandValueSVParameter="{Binding EngSvValue}" - IsEnabled="False" + HandValueMVParameter="{Binding PVModel.EngValue}" + HandValueSVParameter="{Binding SVModel.EngValue}" + IsEnabled="True" MeterName="{Binding NameNoUnit}" - PVValue="{Binding EngPvValue}" - SVValue="{Binding EngSvValue}" + PVValue="{Binding PVModel.EngValueStr}" + SVValue="{Binding SVModel.EngValueStr}" Unit="{Binding Unit}" /> @@ -1146,7 +1146,7 @@ - +