6个物性公式的更改

This commit is contained in:
2026-04-13 10:09:30 +08:00
parent 4ec6acde8f
commit 5088ec4a0e
7 changed files with 367 additions and 62 deletions

View File

@@ -57,6 +57,12 @@ namespace CapMachine.Model
[Column(Name = "CapNo", IsNullable = true, StringLength = 150)] [Column(Name = "CapNo", IsNullable = true, StringLength = 150)]
public string? CapNo { get; set; } public string? CapNo { get; set; }
/// <summary>
/// 压缩机排量
/// </summary>
[Column(Name = "CapDisplacement", IsNullable = true, StringLength = 100)]
public string? CapDisplacement { get; set; }
/// <summary> /// <summary>
/// 制冷剂 /// 制冷剂
/// </summary> /// </summary>

View File

@@ -92,6 +92,16 @@ namespace CapMachine.Wpf.Dtos
set { _CapNo = value; RaisePropertyChanged(); } set { _CapNo = value; RaisePropertyChanged(); }
} }
private string? _CapDisplacement;
/// <summary>
/// 压缩机排量
/// </summary>
public string? CapDisplacement
{
get { return _CapDisplacement; }
set { _CapDisplacement = value; RaisePropertyChanged(); }
}
private string? _RfNo; private string? _RfNo;
/// <summary> /// <summary>
/// 制冷剂 /// 制冷剂

View File

@@ -385,6 +385,42 @@ namespace CapMachine.Wpf.Models
[Name("过热度[K]")] [Name("过热度[K]")]
public double Superheat { get; set; } public double Superheat { get; set; }
/// <summary>
/// 制热量Qh[W]
/// </summary>
[Name("制热量Qh[W]")]
public double HeatingCapacity { get; set; }
/// <summary>
/// 压缩机性能系数(制热)
/// </summary>
[Name("压缩机性能系数(制热)")]
public double COPHeat { get; set; }
/// <summary>
/// 等熵效率ns[%]
/// </summary>
[Name("等熵效率ns[%]")]
public double IsentrpEff { get; set; }
/// <summary>
/// 制冷量Qc[W]
/// </summary>
[Name("制冷量Qc[W]")]
public double CoolCapacity { get; set; }
/// <summary>
/// 压缩机性能系数(制冷)
/// </summary>
[Name("压缩机性能系数(制冷)")]
public double COPCool { get; set; }
/// <summary>
/// 容积效率nv[%]
/// </summary>
[Name("容积效率nv[%]")]
public double VoltricEff { get; set; }
/// <summary> /// <summary>
/// 创建时间 /// 创建时间
/// </summary> /// </summary>

View File

@@ -77,6 +77,13 @@ namespace CapMachine.Wpf.Models
Map(m => m.Dryness).Name("干度[%]"); Map(m => m.Dryness).Name("干度[%]");
Map(m => m.Subcooling).Name("过冷度[K]"); Map(m => m.Subcooling).Name("过冷度[K]");
Map(m => m.Superheat).Name("过热度[K]"); Map(m => m.Superheat).Name("过热度[K]");
Map(m => m.HeatingCapacity).Name("制热量Qh[W]").TypeConverterOption.Format("0");
Map(m => m.COPHeat).Name("压缩机性能系数(制热)").TypeConverterOption.Format("0.0");
Map(m => m.IsentrpEff).Name("等熵效率ns[%]").TypeConverterOption.Format("0.0");
Map(m => m.CoolCapacity).Name("制冷量Qc[W]").TypeConverterOption.Format("0");
Map(m => m.COPCool).Name("压缩机性能系数(制冷)").TypeConverterOption.Format("0.0");
Map(m => m.VoltricEff).Name("容积效率nv[%]").TypeConverterOption.Format("0.0");
Map(m => m.CreateTime).Name("时间"); Map(m => m.CreateTime).Name("时间");

View File

@@ -10,8 +10,10 @@ using Prism.Events;
using Prism.Mvvm; using Prism.Mvvm;
using Prism.Services.Dialogs; using Prism.Services.Dialogs;
using SixLabors.ImageSharp.ColorSpaces; using SixLabors.ImageSharp.ColorSpaces;
using System.Globalization;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
namespace CapMachine.Wpf.Services namespace CapMachine.Wpf.Services
{ {
@@ -23,7 +25,7 @@ namespace CapMachine.Wpf.Services
/// <summary> /// <summary>
/// 计算扫描 Task /// 计算扫描 Task
/// </summary> /// </summary>
private static Task CalcTask { get; set; } private static Task CalcTask { get; set; } = Task.CompletedTask;
public ConfigService ConfigService { get; } public ConfigService ConfigService { get; }
private IEventAggregator _EventAggregator { get; set; } private IEventAggregator _EventAggregator { get; set; }
@@ -93,7 +95,8 @@ namespace CapMachine.Wpf.Services
//TxvFrTempTag = TagManager.DicTags.GetValueOrDefault("膨胀阀前温度[℃]")!; //TxvFrTempTag = TagManager.DicTags.GetValueOrDefault("膨胀阀前温度[℃]")!;
//TxvFrPressTag = TagManager.DicTags.GetValueOrDefault("膨胀阀前压力[BarA]")!; //TxvFrPressTag = TagManager.DicTags.GetValueOrDefault("膨胀阀前压力[BarA]")!;
if (TagManager.TryGetShortTagByName("SUBCOOL出口温度[℃]", out ShortValueTag? TxvFrTempShortTag)) if (TagManager.TryGetShortTagByName("膨胀阀前温度[℃]", out ShortValueTag? TxvFrTempShortTag) ||
TagManager.TryGetShortTagByName("SUBCOOL出口温度[℃]", out TxvFrTempShortTag))
{ {
TxvFrTempTag = TxvFrTempShortTag!; TxvFrTempTag = TxvFrTempShortTag!;
} }
@@ -150,6 +153,31 @@ namespace CapMachine.Wpf.Services
DrynessTag = drynessPct!; DrynessTag = drynessPct!;
} }
if (TagManager.TryGetShortTagByName("制热量Qh[W]", out ShortValueTag? heatingCapacityTag))
{
HeatingCapacityTag = heatingCapacityTag!;
}
if (TagManager.TryGetShortTagByName("压缩机性能系数(制热)", out ShortValueTag? copHeatTag))
{
COPHeatTag = copHeatTag!;
}
if (TagManager.TryGetShortTagByName("等熵效率ns[%]", out ShortValueTag? isentrpEffTag))
{
IsentrpEffTag = isentrpEffTag!;
}
if (TagManager.TryGetShortTagByName("制冷量Qc[W]", out ShortValueTag? coolCapacityTag))
{
CoolCapacityTag = coolCapacityTag!;
}
if (TagManager.TryGetShortTagByName("压缩机性能系数(制冷)", out ShortValueTag? copCoolTag))
{
COPCoolTag = copCoolTag!;
}
if (TagManager.TryGetShortTagByName("容积效率nv[%]", out ShortValueTag? voltricEffTag))
{
VoltricEffTag = voltricEffTag!;
}
SuperHeatCoolConfig.FluidsPath = ConfigHelper.GetValue("FluidsPath"); SuperHeatCoolConfig.FluidsPath = ConfigHelper.GetValue("FluidsPath");
SuperHeatCoolConfig.Cryogen = ConfigHelper.GetValue("Cryogen"); SuperHeatCoolConfig.Cryogen = ConfigHelper.GetValue("Cryogen");
@@ -166,14 +194,14 @@ namespace CapMachine.Wpf.Services
/// </summary> /// </summary>
public void SaveSuperHeatCoolConfig() public void SaveSuperHeatCoolConfig()
{ {
ConfigHelper.SetValue("FluidsPath", SuperHeatCoolConfig.FluidsPath); ConfigHelper.SetValue("FluidsPath", SuperHeatCoolConfig.FluidsPath ?? string.Empty);
ConfigHelper.SetValue("Cryogen", SuperHeatCoolConfig.Cryogen); ConfigHelper.SetValue("Cryogen", SuperHeatCoolConfig.Cryogen ?? string.Empty);
} }
/// <summary> /// <summary>
/// 吸气压力 /// 吸气压力
/// </summary> /// </summary>
public ShortValueTag InhPressTag { get; set; } public ShortValueTag InhPressTag { get; set; } = null!;
/// <summary> /// <summary>
/// 转速标签 /// 转速标签
@@ -198,32 +226,44 @@ namespace CapMachine.Wpf.Services
/// <summary> /// <summary>
/// 吸气温度 /// 吸气温度
/// </summary> /// </summary>
public ShortValueTag InhTempTag { get; set; } public ShortValueTag InhTempTag { get; set; } = null!;
/// <summary> /// <summary>
/// 液体阀前温度 /// 液体阀前温度
/// </summary> /// </summary>
public ShortValueTag TxvFrTempTag { get; set; } public ShortValueTag TxvFrTempTag { get; set; } = null!;
/// <summary> /// <summary>
/// 液体阀前压力 /// 液体阀前压力
/// </summary> /// </summary>
public ShortValueTag TxvFrPressTag { get; set; } public ShortValueTag TxvFrPressTag { get; set; } = null!;
/// <summary> /// <summary>
/// 过热度 /// 过热度
/// </summary> /// </summary>
public ShortValueTag Superheat { get; set; } public ShortValueTag Superheat { get; set; } = null!;
/// <summary> /// <summary>
/// 过冷度 /// 过冷度
/// </summary> /// </summary>
public ShortValueTag Subcool { get; set; } public ShortValueTag Subcool { get; set; } = null!;
/// <summary> /// <summary>
/// 干度(无量纲 [-] /// 干度(无量纲 [-]
/// </summary> /// </summary>
public ShortValueTag DrynessTag { get; set; } public ShortValueTag DrynessTag { get; set; } = null!;
public ShortValueTag? HeatingCapacityTag { get; set; }
public ShortValueTag? COPHeatTag { get; set; }
public ShortValueTag? IsentrpEffTag { get; set; }
public ShortValueTag? CoolCapacityTag { get; set; }
public ShortValueTag? COPCoolTag { get; set; }
public ShortValueTag? VoltricEffTag { get; set; }
private double _DrynessTag2Value; private double _DrynessTag2Value;
/// <summary> /// <summary>
@@ -238,28 +278,28 @@ namespace CapMachine.Wpf.Services
/// <summary> /// <summary>
/// 气路阀前压力BarA /// 气路阀前压力BarA
/// </summary> /// </summary>
public ShortValueTag GasPreValvePressTag { get; set; } public ShortValueTag GasPreValvePressTag { get; set; } = null!;
/// <summary> /// <summary>
/// 气路阀前温度(℃) /// 气路阀前温度(℃)
/// </summary> /// </summary>
public ShortValueTag GasPreValveTempTag { get; set; } public ShortValueTag GasPreValveTempTag { get; set; } = null!;
/// <summary> /// <summary>
/// 冷媒流量kg/h /// 冷媒流量kg/h
/// </summary> /// </summary>
public ShortValueTag VRVTag { get; set; } public ShortValueTag VRVTag { get; set; } = null!;
/// <summary> /// <summary>
/// 液体流量kg/h /// 液体流量kg/h
/// 液冷媒流量kg/h=液体流量kg/h /// 液冷媒流量kg/h=液体流量kg/h
/// </summary> /// </summary>
public ShortValueTag LiqRefFlowTag { get; set; } public ShortValueTag LiqRefFlowTag { get; set; } = null!;
/// <summary> /// <summary>
/// 润滑油流量kg/h /// 润滑油流量kg/h
/// </summary> /// </summary>
public ShortValueTag LubeFlowTag { get; set; } public ShortValueTag LubeFlowTag { get; set; } = null!;
/// <summary> /// <summary>
/// 风量数据-乘以系数的后的最终结果 /// 风量数据-乘以系数的后的最终结果
@@ -448,25 +488,25 @@ namespace CapMachine.Wpf.Services
// 处理 err2 // 处理 err2
} }
//if (TryUpdateThermodynamicSixResults(out var thermoErr)) if (TryUpdateThermodynamicSixResults(out var thermoErr))
//{ {
// if (!string.IsNullOrWhiteSpace(thermoErr)) if (!string.IsNullOrWhiteSpace(thermoErr))
// { {
// Logger?.Error($"六个物性结果计算警告: {thermoErr}"); Logger?.Error($"六个物性结果计算警告: {thermoErr}");
// } }
//} }
//else else
//{ {
// if (!string.IsNullOrWhiteSpace(thermoErr)) if (!string.IsNullOrWhiteSpace(thermoErr))
// { {
// Logger?.Error($"六个物性结果计算失败: {thermoErr}"); Logger?.Error($"六个物性结果计算失败: {thermoErr}");
// } }
//} }
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.Error(String.Format("ErrSource : {0} ErrMsg : {1}", ex.StackTrace.ToString(), ex.Message.ToString())); Logger.Error(String.Format("ErrSource : {0} ErrMsg : {1}", ex.StackTrace ?? string.Empty, ex.Message));
} }
} }
}); });
@@ -1159,6 +1199,17 @@ namespace CapMachine.Wpf.Services
{ {
error = string.Empty; error = string.Empty;
if (InhPressTag == null || InhTempTag == null)
{
error = "缺少吸气压力/吸气温度标签";
return false;
}
if (TxvFrPressTag == null || TxvFrTempTag == null)
{
error = "缺少膨胀阀前压力/膨胀阀前温度标签";
return false;
}
if (!TryGetCompressorPower_kW(out var w_kW, out var wErr)) if (!TryGetCompressorPower_kW(out var w_kW, out var wErr))
{ {
error = wErr; error = wErr;
@@ -1217,6 +1268,27 @@ namespace CapMachine.Wpf.Services
COPCooling = copC; COPCooling = copC;
IsentropicEfficiencyPct = etaS_pct; IsentropicEfficiencyPct = etaS_pct;
if (HeatingCapacityTag != null)
{
HeatingCapacityTag.PVModel.EngValue = HeatingCapacityQh_kW * 1000.0;
}
if (COPHeatTag != null)
{
COPHeatTag.PVModel.EngValue = COPHeating;
}
if (IsentrpEffTag != null)
{
IsentrpEffTag.PVModel.EngValue = IsentropicEfficiencyPct;
}
if (CoolCapacityTag != null)
{
CoolCapacityTag.PVModel.EngValue = CoolingCapacityQc_kW * 1000.0;
}
if (COPCoolTag != null)
{
COPCoolTag.PVModel.EngValue = COPCooling;
}
if (!TryComputeVolumetricEfficiencyPct(mRef_kg_s, v1_m3kg, out var etaV_pct, out var etaVErr)) if (!TryComputeVolumetricEfficiencyPct(mRef_kg_s, v1_m3kg, out var etaV_pct, out var etaVErr))
{ {
VolumetricEfficiencyPct = double.NaN; VolumetricEfficiencyPct = double.NaN;
@@ -1225,6 +1297,11 @@ namespace CapMachine.Wpf.Services
} }
VolumetricEfficiencyPct = etaV_pct; VolumetricEfficiencyPct = etaV_pct;
if (VoltricEffTag != null)
{
VoltricEffTag.PVModel.EngValue = VolumetricEfficiencyPct;
}
return true; return true;
} }
@@ -1269,6 +1346,17 @@ namespace CapMachine.Wpf.Services
mRef_kg_s = double.NaN; mRef_kg_s = double.NaN;
error = string.Empty; error = string.Empty;
if (VRVTag == null)
{
error = "缺少总流量(冷媒流量)标签";
return false;
}
if (LubeFlowTag == null)
{
error = "缺少油流量标签";
return false;
}
double mTotal_kg_h = VRVTag.PVModel.EngValue; double mTotal_kg_h = VRVTag.PVModel.EngValue;
double mOil_kg_h = LubeFlowTag.PVModel.EngValue; double mOil_kg_h = LubeFlowTag.PVModel.EngValue;
@@ -1634,26 +1722,49 @@ namespace CapMachine.Wpf.Services
displacement_cc = double.NaN; displacement_cc = double.NaN;
error = string.Empty; error = string.Empty;
const double defaultDisplacementCc = 35d;
if (ConfigService?.CurExpInfo != null &&
TryParseCompressorDisplacementTextToCc(ConfigService.CurExpInfo.CapDisplacement, out var expCc) &&
expCc > 0)
{
displacement_cc = expCc;
return true;
}
const string key = "CompressorDisplacementCc"; const string key = "CompressorDisplacementCc";
if (!ConfigHelper.IsExist(key)) if (ConfigHelper.IsExist(key) && TryParseCompressorDisplacementTextToCc(ConfigHelper.GetValue(key), out var cfgCc) && cfgCc > 0)
{
displacement_cc = cfgCc;
return true;
}
displacement_cc = defaultDisplacementCc;
return true;
}
private static bool TryParseCompressorDisplacementTextToCc(string? text, out double displacementCc)
{
displacementCc = double.NaN;
if (string.IsNullOrWhiteSpace(text))
{ {
error = $"未配置压缩机排量,请在 App.config/appSettings 增加 {key}(单位 cc";
return false; return false;
} }
string v = ConfigHelper.GetValue(key); var normalized = text.Trim().ToLowerInvariant();
if (!double.TryParse(v, out displacement_cc)) normalized = normalized.Replace(',', '.');
var match = Regex.Match(normalized, @"[-+]?\d+(\.\d+)?");
if (!match.Success)
{ {
error = $"压缩机排量配置无法解析: {v}";
return false; return false;
} }
if (displacement_cc <= 0) if (!double.TryParse(match.Value, NumberStyles.Float, CultureInfo.InvariantCulture, out var v))
{ {
error = $"压缩机排量<=0: {displacement_cc}";
return false; return false;
} }
displacementCc = v;
return true; return true;
} }

View File

@@ -506,28 +506,28 @@
"BlockIndex": 44 "BlockIndex": 44
} }
}, },
// { {
// "Id": 240, "Id": 240,
// "Name": "膨胀阀前温度[℃]", "Name": "膨胀阀前温度[℃]",
// "NameNoUnit": "膨胀阀前温度", "NameNoUnit": "膨胀阀前温度",
// "EnName": "TxvFrTemp", "EnName": "TxvFrTemp",
// "Group": "采集", "Group": "采集",
// "MinValue": 0, "MinValue": 0,
// "MaxValue": 10000, "MaxValue": 10000,
// "IsMeter": false, "IsMeter": false,
// "DecimalPoint": 1, "DecimalPoint": 1,
// "Precision": 10, "Precision": 10,
// "Unit": "℃", "Unit": "℃",
// "DataType": "Short", "DataType": "Short",
// "RWInfo": "PLCRead", "RWInfo": "PLCRead",
// "PVModel": { "PVModel": {
// "Address": "VW15046", "Address": "VW15046",
// "EngValue": 0, "EngValue": 0,
// "EngValueStr": "", "EngValueStr": "",
// "Block": "PV", "Block": "PV",
// "BlockIndex": 46 "BlockIndex": 46
// } }
// }, },
{ {
"Id": 250, "Id": 250,
"Name": "EVAP出口压力[BarA]", "Name": "EVAP出口压力[BarA]",
@@ -1265,6 +1265,137 @@
"Block": "PV", "Block": "PV",
"BlockIndex": 112 "BlockIndex": 112
} }
},
{
"Id": 560,
"Name": "制热量Qh[W]",
"NameNoUnit": "制热量Qh",
"EnName": "HeatingCapacity",
"Group": "计算",
"MinValue": 0,
"MaxValue": 1000000,
"IsMeter": false,
"DecimalPoint": 0,
"Precision": 1,
"Unit": "W",
"DataType": "Short",
"RWInfo": "PCCalcu",
"PVModel": {
"Address": "",
"EngValue": 0,
"EngValueStr": "",
"Block": "PV",
"BlockIndex": 0
}
},
{
"Id": 570,
"Name": "压缩机性能系数(制热)",
"NameNoUnit": "压缩机性能系数(制热)",
"EnName": "COPHeat",
"Group": "计算",
"MinValue": 0,
"MaxValue": 1000,
"IsMeter": false,
"DecimalPoint": 3,
"Precision": 1,
"Unit": "",
"DataType": "Short",
"RWInfo": "PCCalcu",
"PVModel": {
"Address": "",
"EngValue": 0,
"EngValueStr": "",
"Block": "PV",
"BlockIndex": 0
}
},
{
"Id": 580,
"Name": "等熵效率ns[%]",
"NameNoUnit": "等熵效率ns",
"EnName": "IsentrpEff",
"Group": "计算",
"MinValue": 0,
"MaxValue": 100,
"IsMeter": false,
"DecimalPoint": 2,
"Precision": 1,
"Unit": "%",
"DataType": "Short",
"RWInfo": "PCCalcu",
"PVModel": {
"Address": "",
"EngValue": 0,
"EngValueStr": "",
"Block": "PV",
"BlockIndex": 0
}
},
{
"Id": 590,
"Name": "制冷量Qc[W]",
"NameNoUnit": "制冷量Qc",
"EnName": "CoolCapacity",
"Group": "计算",
"MinValue": 0,
"MaxValue": 1000000,
"IsMeter": false,
"DecimalPoint": 0,
"Precision": 1,
"Unit": "W",
"DataType": "Short",
"RWInfo": "PCCalcu",
"PVModel": {
"Address": "",
"EngValue": 0,
"EngValueStr": "",
"Block": "PV",
"BlockIndex": 0
}
},
{
"Id": 600,
"Name": "压缩机性能系数(制冷)",
"NameNoUnit": "压缩机性能系数(制冷)",
"EnName": "COPCool",
"Group": "计算",
"MinValue": 0,
"MaxValue": 1000,
"IsMeter": false,
"DecimalPoint": 3,
"Precision": 1,
"Unit": "",
"DataType": "Short",
"RWInfo": "PCCalcu",
"PVModel": {
"Address": "",
"EngValue": 0,
"EngValueStr": "",
"Block": "PV",
"BlockIndex": 0
}
},
{
"Id": 610,
"Name": "容积效率nv[%]",
"NameNoUnit": "容积效率nv",
"EnName": "VoltricEff",
"Group": "计算",
"MinValue": 0,
"MaxValue": 100,
"IsMeter": false,
"DecimalPoint": 2,
"Precision": 1,
"Unit": "%",
"DataType": "Short",
"RWInfo": "PCCalcu",
"PVModel": {
"Address": "",
"EngValue": 0,
"EngValueStr": "",
"Block": "PV",
"BlockIndex": 0
}
} }
] ]

View File

@@ -125,6 +125,10 @@
Binding="{Binding CapNo}" Binding="{Binding CapNo}"
Header="压缩机编号" Header="压缩机编号"
IsReadOnly="{Binding Source={StaticResource Proxy}, Path=Data.IsComplete}" /> IsReadOnly="{Binding Source={StaticResource Proxy}, Path=Data.IsComplete}" />
<DataGridTextColumn
Binding="{Binding CapDisplacement}"
Header="压缩机排量"
IsReadOnly="{Binding Source={StaticResource Proxy}, Path=Data.IsComplete}" />
<DataGridTextColumn <DataGridTextColumn
Binding="{Binding RfNo}" Binding="{Binding RfNo}"
Header="制冷剂" Header="制冷剂"