物性更改2
一些已知的更改
This commit is contained in:
@@ -123,13 +123,14 @@ namespace CapMachine.Wpf.Services
|
||||
new Columns(){ Name="OS2温度[℃]",MapType=typeof(float).ToString(),IsIdentity=false,IsPrimary=false},
|
||||
new Columns(){ Name="COND2温度[℃]",MapType=typeof(float).ToString(),IsIdentity=false,IsPrimary=false},
|
||||
new Columns(){ Name="EVAP出口温度[℃]",MapType=typeof(float).ToString(),IsIdentity=false,IsPrimary=false},
|
||||
new Columns(){ Name="吸气电加热温度[℃]",MapType=typeof(float).ToString(),IsIdentity=false,IsPrimary=false},
|
||||
new Columns(){ Name="冷媒流量[kg/h]",MapType=typeof(float).ToString(),IsIdentity=false,IsPrimary=false},
|
||||
new Columns(){ Name="润滑油流量[kg/h]",MapType=typeof(float).ToString(),IsIdentity=false,IsPrimary=false},
|
||||
new Columns(){ Name="排气温度[℃]",MapType=typeof(float).ToString(),IsIdentity=false,IsPrimary=false},
|
||||
new Columns(){ Name="膨胀阀前压力[BarA]",MapType=typeof(float).ToString(),IsIdentity=false,IsPrimary=false},
|
||||
new Columns(){ Name="膨胀阀前温度[℃]",MapType=typeof(float).ToString(),IsIdentity=false,IsPrimary=false},
|
||||
new Columns(){ Name="EVAP出口压力[BarA]",MapType=typeof(float).ToString(),IsIdentity=false,IsPrimary=false},
|
||||
new Columns(){ Name="腔内压力[BarA]",MapType=typeof(float).ToString(),IsIdentity=false,IsPrimary=false},
|
||||
new Columns(){ Name="背压压力[BarA]",MapType=typeof(float).ToString(),IsIdentity=false,IsPrimary=false},
|
||||
new Columns(){ Name="压缩机表面温度[℃]",MapType=typeof(float).ToString(),IsIdentity=false,IsPrimary=false},
|
||||
new Columns(){ Name="PTC流量[L/min]",MapType=typeof(float).ToString(),IsIdentity=false,IsPrimary=false},
|
||||
new Columns(){ Name="PTC入水温度[℃]",MapType=typeof(float).ToString(),IsIdentity=false,IsPrimary=false},
|
||||
|
||||
@@ -162,7 +162,8 @@ namespace CapMachine.Wpf.Services
|
||||
TagManger.AddTag(new Tag<short>("OS1温度", "OS1温度[℃]", "OS1Temp", "程序", "VW15030", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
TagManger.AddTag(new Tag<short>("OS2温度", "OS2温度[℃]", "OS2Temp", "程序", "VW15032", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
TagManger.AddTag(new Tag<short>("COND2温度", "COND2温度[℃]", "Cond2Temp", "程序", "VW15034", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
TagManger.AddTag(new Tag<short>("EVAP出口温度", "EVAP出口温度[℃]", "EVAPExpTemp", "程序", "VW15036", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
TagManger.AddTag(new Tag<short>("吸气电加热温度", "吸气电加热温度[℃]", "InhEleHeatTemp", "程序", "VW15036", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
TagManger.AddTag(new Tag<short>("EVAP出口温度", "EVAP出口温度[℃]", "EVAPExpTemp", "程序", "VW15104", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("冷媒流量", "冷媒流量[L/min]", "VRV", "程序", "VW15038", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
TagManger.AddTag(new Tag<short>("冷媒流量", "冷媒流量[kg/h]", "VRV", "程序", "VW15038", 100, 0, 10, "kg/h", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
TagManger.AddTag(new Tag<short>("润滑油流量", "润滑油流量[kg/h]", "LubeFlow", "程序", "VW15040", 100, 0, 10, "kg/h", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
@@ -170,7 +171,7 @@ namespace CapMachine.Wpf.Services
|
||||
TagManger.AddTag(new Tag<short>("膨胀阀前压力", "膨胀阀前压力[BarA]", "TxvFrPress", "程序", "VW15044", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2 });
|
||||
TagManger.AddTag(new Tag<short>("膨胀阀前温度", "膨胀阀前温度[℃]", "TxvFrTemp", "程序", "VW15046", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
TagManger.AddTag(new Tag<short>("EVAP出口压力", "EVAP出口压力[BarA]", "EVAPExpPress", "程序", "VW15048", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2 });
|
||||
TagManger.AddTag(new Tag<short>("腔内压力", "腔内压力[BarA]", "IntrplPress", "程序", "VW15050", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2 });
|
||||
TagManger.AddTag(new Tag<short>("背压压力", "背压压力[BarA]", "IntrplPress", "程序", "VW15050", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2 });
|
||||
TagManger.AddTag(new Tag<short>("压缩机表面温度", "压缩机表面温度[℃]", "CapSurfTemp", "程序", "VW15052", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
TagManger.AddTag(new Tag<short>("PTC流量", "PTC流量[L/min]", "PTCFlow", "程序", "VW15054", 100, 0, 100, "L/min", new ShortTagValue(), false) { DecimalPoint = 2 });
|
||||
TagManger.AddTag(new Tag<short>("PTC入水温度", "PTC入水温度[℃]", "PTCEntTemp", "程序", "VW15056", 100, 0, 100, "℃", new ShortTagValue(), false) { DecimalPoint = 2 });
|
||||
@@ -197,642 +198,14 @@ namespace CapMachine.Wpf.Services
|
||||
TagManger.AddTag(new Tag<short>("过冷度", "过冷度[K]", "Subcooling", "程序", string.Empty, 100, 0, 1, "K", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
|
||||
TagManger.AddTag(new Tag<short>("制热量Qh", "制热量Qh[W]", "HeatingCapacity", "程序", string.Empty, 1000, 0, 1, "W", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
TagManger.AddTag(new Tag<short>("压缩机性能系数(制热COP)", "压缩机性能系数(制热COP)", "COPHeat", "程序", string.Empty, 1000, 0, 1, "K", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
TagManger.AddTag(new Tag<short>("压缩机性能系数(制热COP)", "压缩机性能系数(制热COP)", "COPHeat", "程序", string.Empty, 1000, 0, 1, "", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
TagManger.AddTag(new Tag<short>("等熵效率ns", "等熵效率ns[%]", "IsentrpEff", "程序", string.Empty, 1000, 0, 1, "%", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
TagManger.AddTag(new Tag<short>("制冷量Qc", "制冷量Qc[W]", "CoolCapacity", "程序", string.Empty, 1000, 0, 1, "W", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
TagManger.AddTag(new Tag<short>("压缩机性能系数(制冷COP)", "压缩机性能系数(制冷COP)", "COPCool", "程序", string.Empty, 1000, 0, 1, "K", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
TagManger.AddTag(new Tag<short>("压缩机性能系数(制冷COP)", "压缩机性能系数(制冷COP)", "COPCool", "程序", string.Empty, 1000, 0, 1, "", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
TagManger.AddTag(new Tag<short>("容积效率nv", "容积效率nv[%]", "VoltricEff", "程序", string.Empty, 1000, 0, 1, "%", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region SongZhi
|
||||
|
||||
////【SongZhi】
|
||||
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "转速[rpm]",//名称带单位
|
||||
// NameNoUnit = "转速",//无单位名称
|
||||
// EnName = "Speed",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "rpm",
|
||||
// PVAddress = "VW100",//地址信息
|
||||
// SVAddress = "VW200",
|
||||
// MVAddress = "VW242",
|
||||
// IsMeter = true,
|
||||
// AutoHandSwitchAddress = "VW240",
|
||||
// Precision = 1,
|
||||
// DecimalPoint = 0,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "排气压力[MpaA]",//名称带单位
|
||||
// NameNoUnit = "排气压力",//无单位名称
|
||||
// EnName = "ExPress",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "MpaA",
|
||||
// PVAddress = "VW102",//地址信息
|
||||
// SVAddress = "VW202",
|
||||
// MVAddress = "VW242",
|
||||
// IsMeter = true,
|
||||
// AutoHandSwitchAddress = "VW240",
|
||||
// Precision = 1000,
|
||||
// DecimalPoint = 3,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "吸气压力[MpaA]",//名称带单位
|
||||
// NameNoUnit = "吸气压力",//无单位名称
|
||||
// EnName = "InhPress",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "MpaA",
|
||||
// PVAddress = "VW104",//地址信息
|
||||
// SVAddress = "VW204",
|
||||
// MVAddress = "VW246",
|
||||
// IsMeter = true,
|
||||
// AutoHandSwitchAddress = "VW244",
|
||||
// Precision = 1000,
|
||||
// DecimalPoint = 3,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "吸气温度[℃]",//名称带单位
|
||||
// NameNoUnit = "吸气温度",//无单位名称
|
||||
// EnName = "InhTemp",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "℃",
|
||||
// PVAddress = "VW106",//地址信息
|
||||
// SVAddress = "VW206",
|
||||
// MVAddress = "VW250",
|
||||
// IsMeter = true,
|
||||
// AutoHandSwitchAddress = "VW248",
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "冷凝器出口水温[℃]",//名称带单位 COND1水温
|
||||
// NameNoUnit = "冷凝器出口水温",//无单位名称
|
||||
// EnName = "Cond1Temp",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "℃",
|
||||
// PVAddress = "VW108",//地址信息
|
||||
// SVAddress = "VW208",
|
||||
// MVAddress = "VW254",
|
||||
// IsMeter = true,
|
||||
// AutoHandSwitchAddress = "VW252",
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "吸气混合器温度[℃]",//名称带单位 OS2温度
|
||||
// NameNoUnit = "吸气混合器温度",//无单位名称 OS2温度
|
||||
// EnName = "OS2Temp",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "℃",
|
||||
// PVAddress = "VW110",//地址信息
|
||||
// SVAddress = "VW210",
|
||||
// MVAddress = "VW258",
|
||||
// IsMeter = true,
|
||||
// AutoHandSwitchAddress = "VW256",
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "HV_V[V]",//名称带单位
|
||||
// NameNoUnit = "HV_V",//无单位名称
|
||||
// EnName = "HV_V",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "V",
|
||||
// PVAddress = "VW112",//地址信息
|
||||
// SVAddress = "VW212",
|
||||
// MVAddress = "VW262",
|
||||
// IsMeter = true,
|
||||
// AutoHandSwitchAddress = "VW260",
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "HV_A[A]",//名称带单位
|
||||
// NameNoUnit = "HV_A",//无单位名称
|
||||
// EnName = "HV_A",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "A",
|
||||
// PVAddress = "VW114",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 100,
|
||||
// DecimalPoint = 2,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "HV_W[W]",//名称带单位
|
||||
// NameNoUnit = "HV_W",//无单位名称
|
||||
// EnName = "HV_W",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "W",
|
||||
// PVAddress = "VW116",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 1,
|
||||
// DecimalPoint = 0,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "LV_V[V]",//名称带单位
|
||||
// NameNoUnit = "LV_V",//无单位名称
|
||||
// EnName = "LV_V",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "V",
|
||||
// PVAddress = "VW118",//地址信息
|
||||
// SVAddress = "VW214",
|
||||
// MVAddress = "",
|
||||
// IsMeter = true,
|
||||
// AutoHandSwitchAddress = "",
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "LV_A[A]",//名称带单位
|
||||
// NameNoUnit = "LV_A",//无单位名称
|
||||
// EnName = "LV_A",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "A",
|
||||
// PVAddress = "VW120",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 100,
|
||||
// DecimalPoint = 2,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "试验箱温度[℃]",//名称带单位
|
||||
// NameNoUnit = "试验箱温度",//无单位名称
|
||||
// EnName = "EnvTemp",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "℃",
|
||||
// PVAddress = "VW122",//地址信息
|
||||
// SVAddress = "VW216",
|
||||
// MVAddress = "",
|
||||
// IsMeter = true,
|
||||
// AutoHandSwitchAddress = "",
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "试验箱湿度[%]",//名称带单位
|
||||
// NameNoUnit = "试验箱湿度",//无单位名称
|
||||
// EnName = "EnvRH",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "%",
|
||||
// PVAddress = "VW124",//地址信息
|
||||
// SVAddress = "VW218",
|
||||
// MVAddress = "",
|
||||
// IsMeter = true,
|
||||
// AutoHandSwitchAddress = "",
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "排气温度[℃]",//名称带单位
|
||||
// NameNoUnit = "排气温度",//无单位名称
|
||||
// EnName = "ExTemp",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "℃",
|
||||
// PVAddress = "VW126",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "膨胀阀前温度[℃]",//名称带单位
|
||||
// NameNoUnit = "膨胀阀前温度",//无单位名称
|
||||
// EnName = "TxvFrTemp",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "℃",
|
||||
// PVAddress = "VW128",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "膨胀阀前压力[MpaA]",//名称带单位
|
||||
// NameNoUnit = "膨胀阀前压力",//无单位名称
|
||||
// EnName = "TxvFrPress",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "MpaA",
|
||||
// PVAddress = "VW130",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 1000,
|
||||
// DecimalPoint = 3,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "冷凝器进口温度[℃]",//名称带单位
|
||||
// NameNoUnit = "冷凝器进口温度",//无单位名称
|
||||
// EnName = "CondInTemp",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "℃",
|
||||
// PVAddress = "VW132",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "冷凝器进口压力[MpaA]",//名称带单位
|
||||
// NameNoUnit = "冷凝器进口压力",//无单位名称
|
||||
// EnName = "CondInPress",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "MpaA",
|
||||
// PVAddress = "VW134",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 1000,
|
||||
// DecimalPoint = 3,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "水箱进水温度[℃]",//名称带单位
|
||||
// NameNoUnit = "水箱进水温度",//无单位名称
|
||||
// EnName = "WaterTankInTemp",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// Unit = "℃",
|
||||
// MaxValue = 100,
|
||||
// PVAddress = "VW136",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "水加热温度H1[℃]",//名称带单位
|
||||
// NameNoUnit = "水加热温度H1",//无单位名称
|
||||
// EnName = "WaterHeatTempH1",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "℃",
|
||||
// PVAddress = "VW138",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "压缩机表面温度1[℃]",//名称带单位
|
||||
// NameNoUnit = "压缩机表面温度1",//无单位名称
|
||||
// EnName = "CapSurfTemp1",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "℃",
|
||||
// PVAddress = "VW140",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "压缩机表面温度2[℃]",//名称带单位
|
||||
// NameNoUnit = "压缩机表面温度2",//无单位名称
|
||||
// EnName = "CapSurfTemp2",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "℃",
|
||||
// PVAddress = "VW142",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "压缩机表面温度3[℃]",//名称带单位
|
||||
// NameNoUnit = "压缩机表面温度3",//无单位名称
|
||||
// EnName = "CapSurfTemp3",//英文名称
|
||||
// Group = "程序",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "℃",
|
||||
// PVAddress = "VW144",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "通讯母线电压[V]",//名称带单位
|
||||
// NameNoUnit = "通讯母线电压",//无单位名称
|
||||
// EnName = "ComCapBusVol",//英文名称
|
||||
// Group = "CANLIN",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "V",
|
||||
// PVAddress = "VW146",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "通讯母线电流[A]",//名称带单位
|
||||
// NameNoUnit = "通讯母线电流",//无单位名称
|
||||
// EnName = "ComCapBusCur",//英文名称
|
||||
// Group = "CANLIN",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "A",
|
||||
// PVAddress = "VW148",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 100,
|
||||
// DecimalPoint = 2,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "通讯相电流[A]",//名称带单位
|
||||
// NameNoUnit = "通讯相电流",//无单位名称
|
||||
// EnName = "ComCapPhCur",//英文名称
|
||||
// Group = "CANLIN",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "A",
|
||||
// PVAddress = "VW150",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 100,
|
||||
// DecimalPoint = 2,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "通讯功率[W]",//名称带单位
|
||||
// NameNoUnit = "通讯功率",//无单位名称
|
||||
// EnName = "ComCapPw",//英文名称
|
||||
// Group = "CANLIN",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "W",
|
||||
// PVAddress = "VW152",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 1000,
|
||||
// DecimalPoint = 2,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "通讯芯片温度[℃]",//名称带单位
|
||||
// NameNoUnit = "通讯芯片温度",//无单位名称
|
||||
// EnName = "ComCapChipTemp",//英文名称
|
||||
// Group = "CANLIN",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "℃",
|
||||
// PVAddress = "VW154",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "过冷度[K]",//名称带单位
|
||||
// NameNoUnit = "过冷度",//无单位名称
|
||||
// EnName = "Subcooling",//英文名称
|
||||
// Group = "计算",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "K",
|
||||
// PVAddress = "",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
//TagManger.AddTag(new Tag<short>(new ShortTagValue())
|
||||
//{
|
||||
// Name = "过热度[K]",//名称带单位
|
||||
// NameNoUnit = "过热度",//无单位名称
|
||||
// EnName = "Superheat",//英文名称
|
||||
// Group = "计算",//分组
|
||||
// MinValue = 0,
|
||||
// MaxValue = 100,
|
||||
// Unit = "K",
|
||||
// PVAddress = "",//地址信息
|
||||
// SVAddress = "",
|
||||
// MVAddress = "",
|
||||
// IsMeter = false,
|
||||
// Precision = 10,
|
||||
// DecimalPoint = 1,
|
||||
// Samp = 1,
|
||||
// ValueType = typeof(short),
|
||||
// Index = "",
|
||||
//});
|
||||
|
||||
//#endregion
|
||||
|
||||
//TagManger.AddTag(new Tag<short>("OCR", "OCR[%]", "OCR", "程序", "VW15014", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("HV[V]", "HV[V]", "HV", "程序", "VW15016", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("HV[A]", "HV[A]", "HVCur", "程序", "VW15018", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("HV[W]", "HV[W]", "HVPw", "程序", "VW15020", 100, 0, 1, "W", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("LV[V]", "LV[V]", "LV", "程序", "VW15022", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1 });
|
||||
////TagManger.AddTag(new Tag<short>("LV[A]", "LV[A]", "LVCur", "程序", "VW15024", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("LV[A]", "LV[A]", "LVCur", "程序", "VW15024", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2 });
|
||||
//TagManger.AddTag(new Tag<short>("环境温度", "环境温度[℃]", "EnvTemp", "程序", "VW15026", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1 });
|
||||
////TagManger.AddTag(new Tag<short>("环境湿度", "环境湿度[%]", "EnvRH", "程序", "VW15028", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("环境湿度", "环境湿度[%]", "EnvRH", "程序", "VW15028", 100, 0, 1, "%", new ShortTagValue(), true) { DecimalPoint = 0 });
|
||||
//TagManger.AddTag(new Tag<short>("OS1温度", "OS1温度[℃]", "OS1Temp", "程序", "VW15030", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("OS2温度", "OS2温度[℃]", "OS2Temp", "程序", "VW15032", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("COND2温度", "COND2温度[℃]", "Cond2Temp", "程序", "VW15034", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("EVAP出口温度", "EVAP出口温度[℃]", "EVAPExpTemp", "程序", "VW15036", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
////TagManger.AddTag(new Tag<short>("冷媒流量", "冷媒流量[L/min]", "VRV", "程序", "VW15038", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("冷媒流量", "冷媒流量[L/min]", "VRV", "程序", "VW15038", 100, 0, 10, "L/min", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("润滑油流量", "润滑油流量[L/min]", "LubeFlow", "程序", "VW15040", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("排气温度", "排气温度[℃]", "ExTemp", "程序", "VW15042", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("膨胀阀前压力", "膨胀阀前压力[MpaA]", "TxvFrPress", "程序", "VW15044", 100, 0, 100, "MpaA", new ShortTagValue(), false) { DecimalPoint = 2 });
|
||||
//TagManger.AddTag(new Tag<short>("膨胀阀前温度", "膨胀阀前温度[℃]", "TxvFrTemp", "程序", "VW15046", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("EVAP出口压力", "EVAP出口压力[MpaA]", "EVAPExpPress", "程序", "VW15048", 100, 0, 100, "MpaA", new ShortTagValue(), false) { DecimalPoint = 2 });
|
||||
//TagManger.AddTag(new Tag<short>("腔内压力", "腔内压力[MpaA]", "IntrplPress", "程序", "VW15050", 100, 0, 100, "MpaA", new ShortTagValue(), false) { DecimalPoint = 2 });
|
||||
//TagManger.AddTag(new Tag<short>("压缩机表面温度", "压缩机表面温度[℃]", "CapSurfTemp", "程序", "VW15052", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("PTC流量", "PTC流量[L/min]", "PTCFlow", "程序", "VW15054", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("PTC入水温度", "PTC入水温度[℃]", "PTCEntTemp", "程序", "VW15056", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("PTC出水温度", "PTC出水温度[℃]", "PTCExpTemp", "程序", "VW15058", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("通讯Cmp母线电流", "通讯Cmp母线电流[A]", "ComCapBusCur", "程序", "VW15060", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("通讯Cmp母线电压", "通讯Cmp母线电压[V]", "ComCapBusVol", "程序", "VW15062", 100, 0, 10, "V", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("通讯Cmp逆变器温度", "通讯Cmp逆变器温度[℃]", "ComCapInvTemp", "程序", "VW15064", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("通讯Cmp相电流", "通讯Cmp相电流[A]", "ComCapPhCur", "程序", "VW15066", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("通讯Cmp功率", "通讯Cmp功率[W]", "ComCapPw", "程序", "VW15068", 100, 0, 1, "W", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("通讯Cmp芯片温度", "通讯Cmp芯片温度[℃]", "ComCapChipTemp", "程序", "VW15070", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("通讯PTC入水温度", "通讯PTC入水温度[℃]", "ComPTCEntTemp", "程序", "VW15072", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("通讯PTC出水温度", "通讯PTC出水温度[℃]", "ComPTCExpTemp", "程序", "VW15074", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("通讯PTC峰值电流", "通讯PTC峰值电流[A]", "ComPTCPeakCur", "程序", "VW15076", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("通讯PTC母线电流", "通讯PTC母线电流[A]", "ComPTCBusCur", "程序", "VW15078", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("通讯PTC膜温", "通讯PTC膜温[℃]", "ComPTCFlmTemp", "程序", "VW15080", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
//TagManger.AddTag(new Tag<short>("通讯PTC模块温度", "通讯PTC模块温度[℃]", "ComPTCMdTemp", "程序", "VW15082", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1 });
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
ListHandSwitchData = new List<HandSwitchData>()
|
||||
{
|
||||
|
||||
@@ -11,7 +11,9 @@ using Prism.Mvvm;
|
||||
using Prism.Services.Dialogs;
|
||||
using SixLabors.ImageSharp.ColorSpaces;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace CapMachine.Wpf.Services
|
||||
{
|
||||
@@ -37,6 +39,11 @@ namespace CapMachine.Wpf.Services
|
||||
private readonly PPCThermodynamicSixResultsCalculator _thermodynamicSixResultsCalculator;
|
||||
private readonly EnthalpyDrynessCalculator _enthalpyDrynessCalculator;
|
||||
|
||||
private DateTime _lastSuperheatSubcoolErrorLogAt = DateTime.MinValue;
|
||||
private string _lastSuperheatSubcoolErrorText = string.Empty;
|
||||
|
||||
private int _hvZeroStreak;
|
||||
|
||||
/// <summary>
|
||||
/// 标签中心
|
||||
/// </summary>
|
||||
@@ -120,7 +127,7 @@ namespace CapMachine.Wpf.Services
|
||||
|
||||
SuperHeatCoolConfig.FluidsPath = ConfigHelper.GetValue("FluidsPath");
|
||||
SuperHeatCoolConfig.Cryogen = ConfigHelper.GetValue("Cryogen");
|
||||
_superheatSubcoolCalculator = new PPCSuperheatSubcoolCalculator();
|
||||
_superheatSubcoolCalculator = new PPCSuperheatSubcoolCalculator(_refpropLock);
|
||||
_thermodynamicSixResultsCalculator = new PPCThermodynamicSixResultsCalculator(_refpropLock);
|
||||
_enthalpyDrynessCalculator = new EnthalpyDrynessCalculator(_refpropLock);
|
||||
ReloadTherdyH3TempOffset();
|
||||
@@ -337,14 +344,19 @@ namespace CapMachine.Wpf.Services
|
||||
{
|
||||
while (RtCalcEnable)
|
||||
{
|
||||
await Task.Delay(100);
|
||||
await Task.Delay(300);
|
||||
try
|
||||
{
|
||||
if (!TryUpdateSuperheatAndSubcool(out var superheatSubcoolErr))
|
||||
_ = TryUpdateSuperheatAndSubcool(out var superheatSubcoolErr);
|
||||
if (!string.IsNullOrWhiteSpace(superheatSubcoolErr))
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(superheatSubcoolErr))
|
||||
var now = DateTime.UtcNow;
|
||||
if (!string.Equals(superheatSubcoolErr, _lastSuperheatSubcoolErrorText, StringComparison.Ordinal)
|
||||
|| (now - _lastSuperheatSubcoolErrorLogAt) >= TimeSpan.FromSeconds(5))
|
||||
{
|
||||
Logger?.Error($"过热度/过冷度计算失败: {superheatSubcoolErr}");
|
||||
_lastSuperheatSubcoolErrorLogAt = now;
|
||||
_lastSuperheatSubcoolErrorText = superheatSubcoolErr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -363,7 +375,6 @@ namespace CapMachine.Wpf.Services
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
if (TryUpdateThermodynamicSixResults(out var thermoErr))
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(thermoErr))
|
||||
@@ -400,7 +411,7 @@ namespace CapMachine.Wpf.Services
|
||||
}
|
||||
else if (_superheatSubcoolCalculator.TryCalculateSuperheatK(InhPressTag.EngPvValue, InhTempTag.EngPvValue, out var superheatValue, out var superheatErr))
|
||||
{
|
||||
Superheat.EngPvValue = superheatValue;
|
||||
Superheat.EngPvValue = Math.Abs(superheatValue);
|
||||
updated = true;
|
||||
}
|
||||
else
|
||||
@@ -414,7 +425,7 @@ namespace CapMachine.Wpf.Services
|
||||
}
|
||||
else if (_superheatSubcoolCalculator.TryCalculateSubcoolK(TxvFrPressTag.EngPvValue, TxvFrTempTag.EngPvValue, out var subcoolValue, out var subcoolErr))
|
||||
{
|
||||
Subcool.EngPvValue = subcoolValue;
|
||||
Subcool.EngPvValue = Math.Abs(subcoolValue);
|
||||
updated = true;
|
||||
}
|
||||
else
|
||||
@@ -521,6 +532,52 @@ namespace CapMachine.Wpf.Services
|
||||
{
|
||||
error = string.Empty;
|
||||
|
||||
double w_W = HVPwTag?.EngPvValue ?? double.NaN;
|
||||
if (!double.IsNaN(w_W) && !double.IsInfinity(w_W) && w_W == 0)
|
||||
{
|
||||
_hvZeroStreak = Math.Min(_hvZeroStreak + 1, 1000);
|
||||
if (_hvZeroStreak < 3)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
HeatingCapacityQh_kW = 0;
|
||||
CoolingCapacityQc_kW = 0;
|
||||
COPHeating = 0;
|
||||
COPCooling = 0;
|
||||
IsentropicEfficiencyPct = 0;
|
||||
VolumetricEfficiencyPct = 0;
|
||||
|
||||
if (HeatingCapacity != null)
|
||||
{
|
||||
HeatingCapacity.EngPvValue = 0;
|
||||
}
|
||||
if (COPHeat != null)
|
||||
{
|
||||
COPHeat.EngPvValue = 0;
|
||||
}
|
||||
if (IsentrpEff != null)
|
||||
{
|
||||
IsentrpEff.EngPvValue = 0;
|
||||
}
|
||||
if (CoolCapacity != null)
|
||||
{
|
||||
CoolCapacity.EngPvValue = 0;
|
||||
}
|
||||
if (COPCool != null)
|
||||
{
|
||||
COPCool.EngPvValue = 0;
|
||||
}
|
||||
if (VoltricEff != null)
|
||||
{
|
||||
VoltricEff.EngPvValue = 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
_hvZeroStreak = 0;
|
||||
|
||||
// 先把本周期所需的标签值组装为输入模型。
|
||||
// PPCService 在这里负责完成“标签 -> 领域输入对象”的映射,
|
||||
// 从而把计算类和 UI/标签层解耦。
|
||||
@@ -672,29 +729,50 @@ namespace CapMachine.Wpf.Services
|
||||
displacement_cc = double.NaN;
|
||||
error = string.Empty;
|
||||
|
||||
displacement_cc = 35;
|
||||
return true;
|
||||
|
||||
const double defaultDisplacementCc = 35d;
|
||||
const string key = "CompressorDisplacementCc";
|
||||
//if (!ConfigHelper.IsExist(key))
|
||||
//{
|
||||
// error = $"未配置压缩机排量,请在 App.config/appSettings 增加 {key}(单位 cc)";
|
||||
// return false;
|
||||
//}
|
||||
|
||||
string v = ConfigHelper.GetValue(key);
|
||||
if (!double.TryParse(v, out displacement_cc))
|
||||
static bool TryParseDisplacementCc(string? text, out double displacementCc)
|
||||
{
|
||||
error = $"压缩机排量配置无法解析: {v}";
|
||||
return false;
|
||||
displacementCc = double.NaN;
|
||||
if (string.IsNullOrWhiteSpace(text))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var normalized = text.Trim().ToLowerInvariant();
|
||||
normalized = normalized.Replace(',', '.');
|
||||
|
||||
var match = Regex.Match(normalized, @"[-+]?\d+(\.\d+)?");
|
||||
if (!match.Success)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!double.TryParse(match.Value, NumberStyles.Float, CultureInfo.InvariantCulture, out var v))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
displacementCc = v;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (displacement_cc <= 0)
|
||||
try
|
||||
{
|
||||
error = $"压缩机排量<=0: {displacement_cc}";
|
||||
return false;
|
||||
string raw = ConfigHelper.GetValue(key);
|
||||
if (TryParseDisplacementCc(raw, out var cfgCc) && cfgCc > 0)
|
||||
{
|
||||
displacement_cc = cfgCc;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// 忽略配置读取异常,走默认回退值
|
||||
}
|
||||
|
||||
displacement_cc = defaultDisplacementCc;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,9 +85,9 @@ namespace CapMachine.Wpf.Services
|
||||
/// <summary>
|
||||
/// 初始化过热度 / 过冷度计算类。
|
||||
/// </summary>
|
||||
public PPCSuperheatSubcoolCalculator()
|
||||
public PPCSuperheatSubcoolCalculator(object refpropLock)
|
||||
{
|
||||
_support = new LocalCalculationSupport();
|
||||
_support = new LocalCalculationSupport(refpropLock);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -149,6 +149,12 @@ namespace CapMachine.Wpf.Services
|
||||
superheatK = double.NaN;
|
||||
error = string.Empty;
|
||||
|
||||
if (double.IsNaN(suctionPressureBarA) || double.IsInfinity(suctionPressureBarA) || suctionPressureBarA <= 0)
|
||||
{
|
||||
error = "吸气压力无效";
|
||||
return false;
|
||||
}
|
||||
|
||||
// REFPROP 相关函数调用前先做幂等初始化。
|
||||
if (!_support.EnsureRefpropInitialized(out var initErr))
|
||||
{
|
||||
@@ -159,6 +165,12 @@ namespace CapMachine.Wpf.Services
|
||||
// 现有物性 helper 约定输入压力为 MPa,因此这里把 BarA 转成 MPa。
|
||||
double pressureMPa = suctionPressureBarA * 0.1;
|
||||
|
||||
if (pressureMPa <= 0)
|
||||
{
|
||||
error = "吸气压力无效";
|
||||
return false;
|
||||
}
|
||||
|
||||
// 按压力求饱和温度。
|
||||
// 本计算只关心 Tsat,因此 Dl/Dv 结果不使用,用 out _ 丢弃。
|
||||
if (!_support.TrySATP_SaturationByP_MPa(pressureMPa, out var tSatK, out _, out _, out var satErr))
|
||||
@@ -178,6 +190,12 @@ namespace CapMachine.Wpf.Services
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Math.Abs(superheatK) > 100.0)
|
||||
{
|
||||
error = $"过热度结果超范围: {superheatK}";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -200,6 +218,12 @@ namespace CapMachine.Wpf.Services
|
||||
subcoolK = double.NaN;
|
||||
error = string.Empty;
|
||||
|
||||
if (double.IsNaN(liquidPressureBarA) || double.IsInfinity(liquidPressureBarA) || liquidPressureBarA <= 0)
|
||||
{
|
||||
error = "液路压力无效";
|
||||
return false;
|
||||
}
|
||||
|
||||
// REFPROP 相关函数调用前先做幂等初始化。
|
||||
if (!_support.EnsureRefpropInitialized(out var initErr))
|
||||
{
|
||||
@@ -210,6 +234,12 @@ namespace CapMachine.Wpf.Services
|
||||
// 现有 SATP helper 约定压力单位为 MPa,因此先由 BarA 转成 MPa。
|
||||
double pressureMPa = liquidPressureBarA * 0.1;
|
||||
|
||||
if (pressureMPa <= 0)
|
||||
{
|
||||
error = "液路压力无效";
|
||||
return false;
|
||||
}
|
||||
|
||||
// 查询该液路压力下的饱和温度 Tsat。
|
||||
if (!_support.TrySATP_SaturationByP_MPa(pressureMPa, out var tSatK, out _, out _, out var satErr))
|
||||
{
|
||||
@@ -227,6 +257,12 @@ namespace CapMachine.Wpf.Services
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Math.Abs(subcoolK) > 100.0)
|
||||
{
|
||||
error = $"过冷度结果超范围: {subcoolK}";
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -239,9 +275,14 @@ namespace CapMachine.Wpf.Services
|
||||
/// </remarks>
|
||||
private sealed class LocalCalculationSupport : IPPCCalculationSupport
|
||||
{
|
||||
private static readonly object _refpropLock = new object();
|
||||
private readonly object _refpropLock;
|
||||
private static volatile bool _rpInitialized;
|
||||
|
||||
public LocalCalculationSupport(object refpropLock)
|
||||
{
|
||||
_refpropLock = refpropLock ?? throw new ArgumentNullException(nameof(refpropLock));
|
||||
}
|
||||
|
||||
public bool EnsureRefpropInitialized(out string error)
|
||||
{
|
||||
error = string.Empty;
|
||||
|
||||
@@ -461,29 +461,21 @@ namespace CapMachine.Wpf.Services
|
||||
/// <param name="error">失败原因。</param>
|
||||
/// <returns>是否计算成功。</returns>
|
||||
/// <remarks>
|
||||
/// 当前流程:
|
||||
/// 1. BarA -> MPa
|
||||
/// 2. 用气相 TPRHO 求摩尔密度 D
|
||||
/// 3. 用 THERM 求焓
|
||||
/// 当前流程(与 HASCO_KR26001_Fr25002 保持一致):
|
||||
/// 1. 使用 TPFLSH 一次计算得到 h
|
||||
/// </remarks>
|
||||
private bool TryGetVaporPointEnthalpy_ByTP_BarA_C(double pressureBarA, double temperatureC, out double h_kJkg, out string error)
|
||||
{
|
||||
h_kJkg = double.NaN;
|
||||
error = string.Empty;
|
||||
|
||||
// 物性 helper 的压力输入单位是 MPa,因此先换算。
|
||||
double pMPa = pressureBarA * 0.1;
|
||||
|
||||
// 先求气相摩尔密度 D。
|
||||
if (!_support.TryTPRHO_VaporDensity_ByTP_MPa_C(pMPa, temperatureC, out var d_molL, out var dErr))
|
||||
if (!_support.TryTPFLSH_ByTP_BarA_C(pressureBarA, temperatureC, out _, out var h_Jmol, out _, out _, out var flashErr))
|
||||
{
|
||||
error = dErr;
|
||||
error = flashErr;
|
||||
return false;
|
||||
}
|
||||
|
||||
// THERM helper 的温度输入为 K,因此把 ℃ 转成 K 后再求焓。
|
||||
double tK = temperatureC + 273.15;
|
||||
if (!_support.TryTHERM_Enthalpy_kJkg_ByT_K_D(tK, d_molL, out h_kJkg, out var hErr))
|
||||
if (!_support.TryConvertH_Jmol_To_kJkg(h_Jmol, out h_kJkg, out var hErr))
|
||||
{
|
||||
error = hErr;
|
||||
return false;
|
||||
@@ -535,6 +527,10 @@ namespace CapMachine.Wpf.Services
|
||||
/// <param name="v_m3kg">输出比容,单位 m³/kg。</param>
|
||||
/// <param name="error">失败原因。</param>
|
||||
/// <returns>是否计算成功。</returns>
|
||||
/// <remarks>
|
||||
/// 当前流程(与 HASCO_KR26001_Fr25002 保持一致):
|
||||
/// 1. 使用 TPFLSH 一次计算得到 d, h, s
|
||||
/// </remarks>
|
||||
private bool TryGetVaporPointState_ByTP_BarA_C(double pressureBarA, double temperatureC, out double h_kJkg, out double s_kJkgK, out double v_m3kg, out string error)
|
||||
{
|
||||
h_kJkg = double.NaN;
|
||||
@@ -542,32 +538,25 @@ namespace CapMachine.Wpf.Services
|
||||
v_m3kg = double.NaN;
|
||||
error = string.Empty;
|
||||
|
||||
// 第一步:BarA -> MPa。
|
||||
double pMPa = pressureBarA * 0.1;
|
||||
|
||||
// 第二步:由气相 TPRHO 求摩尔密度 D。
|
||||
if (!_support.TryTPRHO_VaporDensity_ByTP_MPa_C(pMPa, temperatureC, out var d_molL, out var dErr))
|
||||
if (!_support.TryTPFLSH_ByTP_BarA_C(pressureBarA, temperatureC, out var d_molL, out var h_Jmol, out var s_JmolK, out _, out var flashErr))
|
||||
{
|
||||
error = dErr;
|
||||
error = flashErr;
|
||||
return false;
|
||||
}
|
||||
|
||||
// 第三步:用 THERM 求吸气点比焓 h1。
|
||||
double tK = temperatureC + 273.15;
|
||||
if (!_support.TryTHERM_Enthalpy_kJkg_ByT_K_D(tK, d_molL, out h_kJkg, out var hErr))
|
||||
if (!_support.TryConvertH_Jmol_To_kJkg(h_Jmol, out h_kJkg, out var hErr))
|
||||
{
|
||||
error = hErr;
|
||||
return false;
|
||||
}
|
||||
|
||||
// 第四步:用 THERM 求吸气点比熵 s1。
|
||||
if (!_support.TryTHERM_VaporEntropy_ByTD(temperatureC, d_molL, out s_kJkgK, out var sErr))
|
||||
s_kJkgK = s_JmolK / _support.GetMolarMass() * 0.001;
|
||||
if (double.IsNaN(s_kJkgK) || double.IsInfinity(s_kJkgK))
|
||||
{
|
||||
error = sErr;
|
||||
error = "无效吸气熵 s1";
|
||||
return false;
|
||||
}
|
||||
|
||||
// 第五步:由摩尔密度换算为质量比容 v1。
|
||||
if (!_support.TryConvertMolarDensityToSpecificVolume(d_molL, out v_m3kg, out var vErr))
|
||||
{
|
||||
error = vErr;
|
||||
@@ -1089,6 +1078,7 @@ namespace CapMachine.Wpf.Services
|
||||
{
|
||||
private readonly object _refpropLock;
|
||||
private static volatile bool _rpInitialized;
|
||||
private static double _molarMassKgPerMol = double.NaN;
|
||||
|
||||
public LocalCalculationSupport(object refpropLock)
|
||||
{
|
||||
@@ -1100,6 +1090,39 @@ namespace CapMachine.Wpf.Services
|
||||
error = string.Empty;
|
||||
if (_rpInitialized)
|
||||
{
|
||||
if (!double.IsNaN(_molarMassKgPerMol) && !double.IsInfinity(_molarMassKgPerMol) && _molarMassKgPerMol > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
lock (_refpropLock)
|
||||
{
|
||||
if (!double.IsNaN(_molarMassKgPerMol) && !double.IsInfinity(_molarMassKgPerMol) && _molarMassKgPerMol > 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
double wmm = 0;
|
||||
double Trp = 0;
|
||||
double Tnbpt = 0;
|
||||
double Tc = 0;
|
||||
double Pc = 0;
|
||||
double Dc = 0;
|
||||
double Zc = 0;
|
||||
double acf = 0;
|
||||
double dip = 0;
|
||||
double Rgas = 0;
|
||||
long componentId = 1;
|
||||
|
||||
IRefProp64.INFOdll(ref componentId, ref wmm, ref Trp, ref Tnbpt, ref Tc, ref Pc, ref Dc, ref Zc, ref acf, ref dip, ref Rgas);
|
||||
_molarMassKgPerMol = wmm * 0.001;
|
||||
if (double.IsNaN(_molarMassKgPerMol) || double.IsInfinity(_molarMassKgPerMol) || _molarMassKgPerMol <= 0)
|
||||
{
|
||||
error = "无效的摩尔质量";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1155,6 +1178,30 @@ namespace CapMachine.Wpf.Services
|
||||
return false;
|
||||
}
|
||||
|
||||
if (double.IsNaN(_molarMassKgPerMol) || double.IsInfinity(_molarMassKgPerMol) || _molarMassKgPerMol <= 0)
|
||||
{
|
||||
double wmm = 0;
|
||||
double Trp = 0;
|
||||
double Tnbpt = 0;
|
||||
double Tc = 0;
|
||||
double Pc = 0;
|
||||
double Dc = 0;
|
||||
double Zc = 0;
|
||||
double acf = 0;
|
||||
double dip = 0;
|
||||
double Rgas = 0;
|
||||
long componentId = 1;
|
||||
|
||||
IRefProp64.INFOdll(ref componentId, ref wmm, ref Trp, ref Tnbpt, ref Tc, ref Pc, ref Dc, ref Zc, ref acf, ref dip, ref Rgas);
|
||||
_molarMassKgPerMol = wmm * 0.001;
|
||||
if (double.IsNaN(_molarMassKgPerMol) || double.IsInfinity(_molarMassKgPerMol) || _molarMassKgPerMol <= 0)
|
||||
{
|
||||
error = "无效的摩尔质量";
|
||||
_rpInitialized = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
_rpInitialized = true;
|
||||
return true;
|
||||
}
|
||||
@@ -1262,7 +1309,7 @@ namespace CapMachine.Wpf.Services
|
||||
double w = 0;
|
||||
double hjt = 0;
|
||||
|
||||
double molarMassKgPerMol = GetMolarMass();
|
||||
double molarMassKgPerMol = _molarMassKgPerMol;
|
||||
if (molarMassKgPerMol <= 0)
|
||||
{
|
||||
error = "无效的摩尔质量";
|
||||
@@ -1331,7 +1378,7 @@ namespace CapMachine.Wpf.Services
|
||||
double w = 0;
|
||||
double hjt = 0;
|
||||
|
||||
double molarMassKgPerMol = GetMolarMass();
|
||||
double molarMassKgPerMol = _molarMassKgPerMol;
|
||||
if (molarMassKgPerMol <= 0)
|
||||
{
|
||||
error = "无效的摩尔质量";
|
||||
@@ -1367,7 +1414,7 @@ namespace CapMachine.Wpf.Services
|
||||
double w = 0;
|
||||
double hjt = 0;
|
||||
|
||||
double molarMassKgPerMol = GetMolarMass();
|
||||
double molarMassKgPerMol = _molarMassKgPerMol;
|
||||
if (molarMassKgPerMol <= 0)
|
||||
{
|
||||
error = "无效的摩尔质量";
|
||||
@@ -1394,7 +1441,7 @@ namespace CapMachine.Wpf.Services
|
||||
return false;
|
||||
}
|
||||
|
||||
double molarMassKgPerMol = GetMolarMass();
|
||||
double molarMassKgPerMol = _molarMassKgPerMol;
|
||||
if (molarMassKgPerMol <= 0)
|
||||
{
|
||||
error = "无效的摩尔质量";
|
||||
@@ -1412,6 +1459,105 @@ namespace CapMachine.Wpf.Services
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool TryTPFLSH_ByTP_BarA_C(
|
||||
double pressureBarA,
|
||||
double temperatureC,
|
||||
out double d_molL,
|
||||
out double h_Jmol,
|
||||
out double s_JmolK,
|
||||
out double t_K,
|
||||
out string error)
|
||||
{
|
||||
d_molL = double.NaN;
|
||||
h_Jmol = double.NaN;
|
||||
s_JmolK = double.NaN;
|
||||
t_K = double.NaN;
|
||||
error = string.Empty;
|
||||
|
||||
if (!EnsureRefpropInitialized(out var initErr))
|
||||
{
|
||||
error = initErr;
|
||||
return false;
|
||||
}
|
||||
|
||||
double t = temperatureC + 273.15;
|
||||
double pKPa = pressureBarA * 100.0;
|
||||
|
||||
if (pKPa <= 0)
|
||||
{
|
||||
error = $"无效压力: {pressureBarA} BarA";
|
||||
return false;
|
||||
}
|
||||
|
||||
double[] x = new double[20];
|
||||
x[0] = 1.0;
|
||||
|
||||
double d = 0.0;
|
||||
double Dl = 0.0;
|
||||
double Dv = 0.0;
|
||||
double[] xliq = new double[20];
|
||||
double[] xvap = new double[20];
|
||||
double q = 0.0;
|
||||
double ee = 0.0;
|
||||
double h = 0.0;
|
||||
double ss = 0.0;
|
||||
double Cv = 0.0;
|
||||
double Cp = 0.0;
|
||||
double w = 0.0;
|
||||
long ierr = 0;
|
||||
long herrLen = 255;
|
||||
string herr = new string(' ', 255);
|
||||
|
||||
lock (_refpropLock)
|
||||
{
|
||||
IRefProp64.TPFLSHdll(ref t, ref pKPa, x, ref d, ref Dl, ref Dv, xliq, xvap, ref q, ref ee, ref h, ref ss, ref Cv, ref Cp, ref w, ref ierr, ref herr, ref herrLen);
|
||||
}
|
||||
|
||||
if (ierr != 0)
|
||||
{
|
||||
error = $"TPFLSH 错误: {herr.Trim()} (ierr={ierr})";
|
||||
return false;
|
||||
}
|
||||
|
||||
d_molL = d;
|
||||
h_Jmol = h;
|
||||
s_JmolK = ss;
|
||||
t_K = t;
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool TryConvertH_Jmol_To_kJkg(double h_Jmol, out double h_kJkg, out string error)
|
||||
{
|
||||
h_kJkg = double.NaN;
|
||||
error = string.Empty;
|
||||
|
||||
double molarMassKgPerMol = _molarMassKgPerMol;
|
||||
if (molarMassKgPerMol <= 0)
|
||||
{
|
||||
error = "无效的摩尔质量";
|
||||
return false;
|
||||
}
|
||||
|
||||
h_kJkg = (h_Jmol / molarMassKgPerMol) * 0.001;
|
||||
return true;
|
||||
}
|
||||
|
||||
public double GetMolarMass()
|
||||
{
|
||||
if (double.IsNaN(_molarMassKgPerMol) || double.IsInfinity(_molarMassKgPerMol) || _molarMassKgPerMol <= 0)
|
||||
{
|
||||
double wmm = 0, Trp = 0, Tnbpt = 0, Tc = 0, Pc = 0, Dc = 0, Zc = 0, acf = 0, dip = 0, Rgas = 0;
|
||||
long componentId = 1;
|
||||
|
||||
lock (_refpropLock)
|
||||
{
|
||||
IRefProp64.INFOdll(ref componentId, ref wmm, ref Trp, ref Tnbpt, ref Tc, ref Pc, ref Dc, ref Zc, ref acf, ref dip, ref Rgas);
|
||||
}
|
||||
_molarMassKgPerMol = wmm * 0.001;
|
||||
}
|
||||
return _molarMassKgPerMol;
|
||||
}
|
||||
|
||||
public bool TryGetIsentropicOutletEnthalpy_h2s_ByP2AndS1_BarA(double dischargePressureBarA, double suctionEntropy_kJkgK, out double h2s_kJkg, out string error)
|
||||
{
|
||||
h2s_kJkg = double.NaN;
|
||||
@@ -1469,46 +1615,12 @@ namespace CapMachine.Wpf.Services
|
||||
return TryConvertH_Jmol_To_kJkg(h, out h2s_kJkg, out error);
|
||||
}
|
||||
|
||||
private static double GetMolarMass()
|
||||
{
|
||||
double wmm = 0;
|
||||
double Trp = 0;
|
||||
double Tnbpt = 0;
|
||||
double Tc = 0;
|
||||
double Pc = 0;
|
||||
double Dc = 0;
|
||||
double Zc = 0;
|
||||
double acf = 0;
|
||||
double dip = 0;
|
||||
double Rgas = 0;
|
||||
long componentId = 1;
|
||||
|
||||
IRefProp64.INFOdll(ref componentId, ref wmm, ref Trp, ref Tnbpt, ref Tc, ref Pc, ref Dc, ref Zc, ref acf, ref dip, ref Rgas);
|
||||
return wmm * 0.001;
|
||||
}
|
||||
|
||||
private static bool TryConvertH_Jmol_To_kJkg(double h_Jmol, out double h_kJkg, out string error)
|
||||
{
|
||||
h_kJkg = double.NaN;
|
||||
error = string.Empty;
|
||||
|
||||
double molarMassKgPerMol = GetMolarMass();
|
||||
if (molarMassKgPerMol <= 0)
|
||||
{
|
||||
error = "无效的摩尔质量";
|
||||
return false;
|
||||
}
|
||||
|
||||
h_kJkg = (h_Jmol / molarMassKgPerMol) * 0.001;
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool TryConvertS_kJkgK_To_JmolK(double s_kJkgK, out double s_JmolK, out string error)
|
||||
{
|
||||
s_JmolK = double.NaN;
|
||||
error = string.Empty;
|
||||
|
||||
double molarMassKgPerMol = GetMolarMass();
|
||||
double molarMassKgPerMol = _molarMassKgPerMol;
|
||||
if (molarMassKgPerMol <= 0)
|
||||
{
|
||||
error = "无效的摩尔质量";
|
||||
|
||||
Reference in New Issue
Block a user