添加项目文件。

This commit is contained in:
xyy
2026-01-08 21:12:15 +08:00
parent 7069ab7be2
commit 52bb93826f
22 changed files with 10856 additions and 0 deletions

30
App.config Normal file
View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
<appSettings>
<add key="PLC_IP" value="192.168.2.1"/>
<add key="COM" value="COM2"/>
</appSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-8.0.0.2" newVersion="8.0.0.2"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Security.Cryptography.Pkcs" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-8.0.0.1" newVersion="8.0.0.1"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-8.0.0.2" newVersion="8.0.0.2"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

9
App.xaml Normal file
View File

@@ -0,0 +1,9 @@
<Application x:Class="WpfApp1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>

17
App.xaml.cs Normal file
View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace WpfApp1
{
/// <summary>
/// App.xaml 的交互逻辑
/// </summary>
public partial class App : Application
{
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,659 @@
using MathNet.Numerics.Interpolation;
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConductivityApp.GBStandard
{
/// <summary>
/// GB/T 32064-2015 标准计算器(严格遵循国标)
/// 瞬态平面热源测试法计算导热系数和热扩散系数
/// </summary>
public class GB32064Calculator
{
#region
public struct BridgeConfig
{
public double Rs { get; set; } // 串联电阻 (Ω)
public double RL { get; set; } // 引线电阻 (Ω)
}
public struct ProbeConfig
{
public double R0 { get; set; } // 初始电阻 (Ω)
public double Alpha { get; set; } // 电阻温度系数 (1/K)
public double RadiusMM { get; set; } // 探头半径 (mm)
public int CoilCount { get; set; } // 探头环数
}
public struct TestConfig
{
public double P0 { get; set; } // 输出功率 (W)
public double SampleDensity { get; set; } // 样品密度 (kg/m³)
}
public struct CalculationResult
{
public bool IsValid { get; set; }
public double ThermalConductivity { get; set; } // λ - W/(m·K)
public double ThermalDiffusivity { get; set; } // α - m²/s
public double SpecificHeatCapacity { get; set; } // Cp - J/(kg·K)
public double CorrectionTime { get; set; } // tc - s
public double RSquared { get; set; }
public string ValidationMessage { get; set; }
}
#endregion
#region GB/T 32064-2015
private const double TAU_MAX_SQUARED_LOWER = 0.3; // τ_max²的最小值国标5.3.4要求)
private const double TAU_MAX_SQUARED_UPPER = 1.0; // τ_max²的最大值国标5.3.4要求)
private const double PROBING_DEPTH_RATIO_LOWER = 1.1; // 探测深度/探头半径最小值
private const double PROBING_DEPTH_RATIO_UPPER = 2.0; // 探测深度/探头半径最大值
private const double MIN_DATA_COUNT = 100; // 最小数据点数国标5.3.3.3
private const double MIN_TIME_INTERVAL = 0.1; // 最小时间间隔(s)国标5.3.3.3
private double PI_POW_1_5 = Math.Pow(Math.PI, 1.5); // π^(3/2)
#endregion
#region
private readonly BridgeConfig _bridge;
private readonly ProbeConfig _probe;
private readonly TestConfig _test;
private IInterpolation _tauDInterpolation;
#endregion
#region
public GB32064Calculator(BridgeConfig bridge, ProbeConfig probe, TestConfig test)
{
_bridge = bridge;
_probe = probe;
_test = test;
ValidateConfigurations();
InitializeTauDTable();
}
#endregion
#region
private void ValidateConfigurations()
{
var errors = new List<string>();
if (_probe.R0 <= 0) errors.Add("探头初始电阻R0必须大于0");
if (_probe.Alpha <= 0) errors.Add("探头温度系数α必须大于0");
if (_probe.RadiusMM <= 0) errors.Add("探头半径必须大于0");
if (_probe.CoilCount < 1) errors.Add("探头环数应大于0");
if (_bridge.Rs <= 0) errors.Add("串联电阻Rs必须大于0");
if (_bridge.RL < 0) errors.Add("引线电阻RL不能为负");
if (_test.P0 <= 0) errors.Add("输出功率P0必须大于0");
if (_test.SampleDensity <= 0) errors.Add("样品密度必须大于0");
if (errors.Count > 0)
{
throw new ArgumentException($"配置验证失败:\n{string.Join("\n", errors)}");
}
}
#endregion
#region
public CalculationResult Calculate(double[] timeArray, double[] deltaUArray, double currentMA = 120.0)
{
try
{
// 1. 数据验证
if (!ValidateInputData(timeArray, deltaUArray))
{
return InvalidResult("输入数据验证失败");
}
double I0 = currentMA / 1000.0; // mA转A
// 2. 计算ΔT(t) - 国标公式(3)
double[] deltaT = CalculateTemperatureIncrements(deltaUArray, I0);
// 3. 迭代求解热扩散系数α和校正时间tc
var (alpha, tc) = IterateThermalDiffusivity(timeArray, deltaT);
// 4. 验证τ_max²是否符合国标要求
double r = _probe.RadiusMM / 1000.0;
double tmax = timeArray.Max();
double tauMaxSquared = CalculateTauMaxSquared(tmax, tc, alpha, r);
if (tauMaxSquared < TAU_MAX_SQUARED_LOWER || tauMaxSquared > TAU_MAX_SQUARED_UPPER)
{
return InvalidResult($"τ_max²({tauMaxSquared:F3})不在国标要求范围[{TAU_MAX_SQUARED_LOWER}, {TAU_MAX_SQUARED_UPPER}]内,测试无效");
}
// 5. 计算导热系数λ - 国标公式(4)
double lambda = CalculateThermalConductivity(timeArray, deltaT, alpha, tc);
// 6. 计算比热容Cp - Cp = λ / (ρ × α)
double cp = CalculateSpecificHeatCapacity(lambda, alpha);
// 7. 验证测试结果有效性
var validation = ValidateTestResults(timeArray, alpha, tc, tauMaxSquared);
// 8. 计算R²
double rSquared = CalculateRSquared(timeArray, deltaT, alpha, tc, lambda);
return new CalculationResult
{
IsValid = validation.IsValid,
ThermalConductivity = lambda,
ThermalDiffusivity = alpha,
SpecificHeatCapacity = cp,
CorrectionTime = tc,
RSquared = rSquared,
ValidationMessage = string.Join("\n", validation.Messages)
};
}
catch (Exception ex)
{
return InvalidResult($"计算失败: {ex.Message}");
}
}
/// <summary>
/// 计算温度增量ΔT(t) - 国标公式(3)
/// </summary>
private double[] CalculateTemperatureIncrements(double[] deltaUArray, double I0)
{
double[] deltaT = new double[deltaUArray.Length];
for (int i = 0; i < deltaUArray.Length; i++)
{
double deltaU = deltaUArray[i];
// 国标公式(3): ΔT(t) = (Rs + RL + R0) × ΔU(t) / [(I0 × Rs - ΔU(t)) × α × R0]
double numerator = (_bridge.Rs + _bridge.RL + _probe.R0) * deltaU;
double denominator = (I0 * _bridge.Rs - deltaU) * _probe.Alpha * _probe.R0;
if (Math.Abs(denominator) < 1e-12)
{
throw new InvalidOperationException($"分母接近0无法计算ΔT(t)");
}
deltaT[i] = numerator / denominator;
}
return deltaT;
}
/// <summary>
/// 迭代求解热扩散系数α和校正时间tc
/// </summary>
private (double alpha, double tc) IterateThermalDiffusivity(double[] timeArray, double[] deltaT)
{
// 初始猜测值
double bestAlpha = 1e-6; // 常见建筑材料的热扩散系数
//double bestAlpha = 3.58e-7; // 常见建筑材料的热扩散系数
double bestTc = timeArray.Max() * 0.01; // 测试时间的1%作为初始校正时间
double bestError = double.MaxValue;
// 使用最小二乘法迭代优化
int maxIterations = 200;
double convergenceThreshold = 1e-8;
for (int iteration = 0; iteration < maxIterations; iteration++)
{
double alphaStep = bestAlpha * 0.1 / (iteration + 1);
double tcStep = 0.001 / (iteration + 1);
var candidates = new List<(double alpha, double tc, double error)>
{
(bestAlpha, bestTc, CalculateFitError(timeArray, deltaT, bestAlpha, bestTc)),
(bestAlpha + alphaStep, bestTc, CalculateFitError(timeArray, deltaT, bestAlpha + alphaStep, bestTc)),
(bestAlpha - alphaStep, bestTc, CalculateFitError(timeArray, deltaT, bestAlpha - alphaStep, bestTc)),
(bestAlpha, bestTc + tcStep, CalculateFitError(timeArray, deltaT, bestAlpha, bestTc + tcStep)),
(bestAlpha, bestTc - tcStep, CalculateFitError(timeArray, deltaT, bestAlpha, bestTc - tcStep))
};
var bestCandidate = candidates.OrderBy(c => c.error).First();
double improvement = bestError - bestCandidate.error;
if (improvement > 0)
{
bestAlpha = bestCandidate.alpha;
bestTc = bestCandidate.tc;
bestError = bestCandidate.error;
}
// 收敛条件
if (Math.Abs(improvement) < convergenceThreshold && iteration > 20)
{
break;
}
}
return (bestAlpha, bestTc);
}
/// <summary>
/// 计算拟合误差
/// </summary>
private double CalculateFitError(double[] timeArray, double[] deltaT, double alpha, double tc)
{
double totalError = 0;
int count = 0;
double r = _probe.RadiusMM / 1000.0;
for (int i = 0; i < timeArray.Length; i++)
{
if (timeArray[i] > tc)
{
double tau = CalculateTau(timeArray[i], tc, alpha, r);
if (tau >= TAU_MAX_SQUARED_LOWER && tau <= TAU_MAX_SQUARED_UPPER)
{
try
{
double dTau = _tauDInterpolation.Interpolate(tau);
// 理论ΔT = [P0 / (π^(3/2) × r × λ)] × D(τ)
// 这里假设λ=1因为我们只关心相对误差
double theoreticalDeltaT = _test.P0 * dTau / (PI_POW_1_5 * r);
double error = Math.Pow(deltaT[i] - theoreticalDeltaT, 2);
totalError += error;
count++;
}
catch
{
continue;
}
}
}
}
return count > 0 ? Math.Sqrt(totalError / count) : double.MaxValue;
}
/// <summary>
/// 计算导热系数λ - 国标公式(4),使用国标范围内的数据
/// </summary>
private double CalculateThermalConductivity(double[] timeArray, double[] deltaT, double alpha, double tc)
{
double r = _probe.RadiusMM / 1000.0;
var validPoints = new List<(double dTau, double deltaT)>();
// 收集有效数据点(严格按国标τ范围筛选)
int validCount = 0;
int totalCount = 0;
for (int i = 0; i < timeArray.Length; i++)
{
totalCount++;
// 只使用校正后的数据t > t_c
if (timeArray[i] > tc)
{
double tau = CalculateTau(timeArray[i], tc, alpha, r);
// 只使用τ在国标要求范围内的数据点
if (tau >= TAU_MAX_SQUARED_LOWER && tau <= TAU_MAX_SQUARED_UPPER)
{
try
{
double dTau = _tauDInterpolation.Interpolate(tau);
validPoints.Add((dTau, deltaT[i]));
validCount++;
}
catch
{
continue;
}
}
}
}
if (validPoints.Count < 10)
{
throw new InvalidOperationException(
$"有效数据点不足({validPoints.Count}),无法计算导热系数\n" +
$"国标要求:在τ范围[{TAU_MAX_SQUARED_LOWER}, {TAU_MAX_SQUARED_UPPER}]内应有足够数据点");
}
// 线性回归ΔT(τ) = [P₀ / (π^(3/2) × r × λ)] × D(τ)
double[] dTauArray = validPoints.Select(p => p.dTau).ToArray();
double[] deltaTArray = validPoints.Select(p => p.deltaT).ToArray();
var (slope, intercept) = LinearRegression(dTauArray, deltaTArray);
// 检查斜率是否合理
if (Math.Abs(slope) < 1e-12)
{
throw new InvalidOperationException("回归斜率接近0计算结果不可靠");
}
// 计算导热系数 λ = P₀ / (π^(3/2) × r × slope) - 国标公式(4)
double lambda = _test.P0 / (PI_POW_1_5 * r * slope);
return lambda;
}
/// <summary>
/// 计算无量纲时间τ - 国标公式(5)
/// τ = √[(t - t_c) / (r²/a)]
/// 等价于:τ = √[(t - t_c) * a / r²]
/// </summary>
private double CalculateTau(double time, double tc, double alpha, double r)
{
if (time <= tc)
{
return 0;
}
// 国标公式(5): τ = √[(t - t_c) / (r²/a)]
double theta = (r * r) / alpha; // 特征时间 θ = r²/a
double tau = Math.Sqrt((time - tc) / theta);
return tau;
}
/// <summary>
/// 计算比热容Cp - Cp = λ / (ρ × α)
/// </summary>
private double CalculateSpecificHeatCapacity(double lambda, double alpha)
{
if (alpha <= 0 || _test.SampleDensity <= 0)
{
throw new InvalidOperationException("热扩散系数或密度无效,无法计算比热容");
}
double cp = lambda / (_test.SampleDensity * alpha);
return cp;
}
/// <summary>
/// 验证测试结果 - 严格遵循国标5.3.4节要求
/// </summary>
private ValidationResult ValidateTestResults(double[] timeArray, double alpha, double tc, double tauMaxSquared)
{
var result = new ValidationResult { IsValid = true };
double r = _probe.RadiusMM / 1000.0; // 转换为米
double tmax = timeArray.Max();
// 1. 验证τ_max²是否满足国标要求
if (tauMaxSquared < TAU_MAX_SQUARED_LOWER)
{
result.IsValid = false;
result.Messages.Add($"τ_max²({tauMaxSquared:F3}) < {TAU_MAX_SQUARED_LOWER},测试时间不足,结果无效");
}
else if (tauMaxSquared > TAU_MAX_SQUARED_UPPER)
{
result.IsValid = false;
result.Messages.Add($"τ_max²({tauMaxSquared:F3}) > {TAU_MAX_SQUARED_UPPER},测试时间过长,结果无效");
}
else
{
result.Messages.Add($"τ_max²({tauMaxSquared:F3})满足国标要求[{TAU_MAX_SQUARED_LOWER}, {TAU_MAX_SQUARED_UPPER}]");
}
// 2. 计算探测深度 ΔP_probe = 2√(a·t_max) 国标5.3.4
double probingDepth = 2 * Math.Sqrt(alpha * tmax);
double probingDepthRatio = probingDepth / r;
// 3. 验证探测深度是否满足国标要求
if (probingDepthRatio < PROBING_DEPTH_RATIO_LOWER)
{
result.IsValid = false;
result.Messages.Add($"探测深度/探头半径({probingDepthRatio:F2}) < {PROBING_DEPTH_RATIO_LOWER},样品厚度可能不足");
}
else if (probingDepthRatio > PROBING_DEPTH_RATIO_UPPER)
{
result.IsValid = false;
result.Messages.Add($"探测深度/探头半径({probingDepthRatio:F2}) > {PROBING_DEPTH_RATIO_UPPER},可能超出测试范围");
}
else
{
result.Messages.Add($"探测深度/探头半径({probingDepthRatio:F2})满足国标要求[{PROBING_DEPTH_RATIO_LOWER}, {PROBING_DEPTH_RATIO_UPPER}]");
}
// 4. 验证数据点数量国标5.3.3.3要求采集次数大于100次
if (timeArray.Length < MIN_DATA_COUNT)
{
result.Messages.Add($"警告:采集次数({timeArray.Length})少于国标要求的{MIN_DATA_COUNT}次");
}
else
{
result.Messages.Add($"采集次数({timeArray.Length})满足国标要求(≥{MIN_DATA_COUNT}次)");
}
// 5. 验证数据采集间隔国标5.3.3.3要求不小于0.1s
if (timeArray.Length > 1)
{
double minInterval = timeArray[1] - timeArray[0];
for (int i = 2; i < timeArray.Length; i++)
{
double interval = timeArray[i] - timeArray[i - 1];
if (interval < minInterval) minInterval = interval;
}
if (minInterval < MIN_TIME_INTERVAL)
{
result.Messages.Add($"警告:数据采集间隔({minInterval:F3}s)小于国标要求的{MIN_TIME_INTERVAL}s");
}
else
{
result.Messages.Add($"数据采集间隔({minInterval:F3}s)满足国标要求(≥{MIN_TIME_INTERVAL}s)");
}
}
// 6. 生成详细验证报告
result.Messages.Insert(0, $"【国标GB/T 32064-2015测试结果有效性验证】");
result.Messages.Insert(1, $"测试总时间: {tmax:F2}s校正时间: {tc:F4}s");
result.Messages.Insert(2, $"热扩散系数α: {alpha:E6} m²/s");
result.Messages.Insert(3, $"探头半径r: {r * 1000:F2}mm探测深度: {probingDepth * 1000:F2}mm");
result.Messages.Insert(4, $"验证依据5.3.4节 测试结果有效性验证");
return result;
}
/// <summary>
/// 计算τ_max²
/// </summary>
private double CalculateTauMaxSquared(double tmax, double tc, double alpha, double r)
{
// 国标公式τ_max² = (t_max - t_c) × a / r²
if (r <= 0) throw new ArgumentException("探头半径必须大于0");
if (tmax <= tc) return 0;
double tauMaxSquared = (tmax - tc) * alpha / (r * r);
return tauMaxSquared;
}
/// <summary>
/// 计算R²拟合优度
/// </summary>
private double CalculateRSquared(double[] timeArray, double[] deltaT, double alpha, double tc, double lambda)
{
var observed = new List<double>();
var predicted = new List<double>();
double r = _probe.RadiusMM / 1000.0;
for (int i = 0; i < timeArray.Length; i++)
{
if (timeArray[i] > tc)
{
double tau = CalculateTau(timeArray[i], tc, alpha, r);
if (tau >= TAU_MAX_SQUARED_LOWER && tau <= TAU_MAX_SQUARED_UPPER)
{
try
{
double dTau = _tauDInterpolation.Interpolate(tau);
double theoretical = _test.P0 * dTau / (PI_POW_1_5 * r * lambda);
observed.Add(deltaT[i]);
predicted.Add(theoretical);
}
catch
{
continue;
}
}
}
}
if (observed.Count < 2) return 0;
double meanObserved = observed.Average();
double ssTotal = observed.Sum(o => Math.Pow(o - meanObserved, 2));
double ssResidual = observed.Zip(predicted, (o, p) => Math.Pow(o - p, 2)).Sum();
if (Math.Abs(ssTotal) < 1e-12) return 0;
double rSquared = 1 - (ssResidual / ssTotal);
return rSquared;
}
#endregion
#region
private CalculationResult InvalidResult(string message)
{
return new CalculationResult
{
IsValid = false,
ValidationMessage = message,
ThermalConductivity = 0,
ThermalDiffusivity = 0,
SpecificHeatCapacity = 0,
CorrectionTime = 0,
RSquared = 0
};
}
private bool ValidateInputData(double[] timeArray, double[] deltaUArray)
{
if (timeArray == null || deltaUArray == null)
{
throw new ArgumentNullException("时间和电压数据不能为空");
}
if (timeArray.Length != deltaUArray.Length)
{
throw new ArgumentException("时间和电压数据长度不一致");
}
if (timeArray.Length < 20)
{
throw new ArgumentException($"数据点数量({timeArray.Length})不足至少需要20个点");
}
// 检查时间单调递增
for (int i = 1; i < timeArray.Length; i++)
{
if (timeArray[i] <= timeArray[i - 1])
{
throw new ArgumentException($"时间数据必须严格单调递增,第{i}点不符合要求");
}
}
return true;
}
private (double slope, double intercept) LinearRegression(double[] x, double[] y)
{
if (x.Length != y.Length || x.Length < 2)
throw new ArgumentException("线性回归需要至少2个数据点且x、y长度相等");
double xAvg = x.Average();
double yAvg = y.Average();
double numerator = 0;
double denominator = 0;
for (int i = 0; i < x.Length; i++)
{
numerator += (x[i] - xAvg) * (y[i] - yAvg);
denominator += (x[i] - xAvg) * (x[i] - xAvg);
}
if (Math.Abs(denominator) < 1e-12)
throw new InvalidOperationException("数据方差太小,无法进行线性回归");
double slope = numerator / denominator;
double intercept = yAvg - slope * xAvg;
return (slope, intercept);
}
#endregion
#region τ-D(τ)
private void InitializeTauDTable()
{
// 使用国标理论公式计算 D(τ) = (√(τ²+1) - 1) / τ
var tauList = new List<double>();
var dList = new List<double>();
// 根据国标要求τ范围通常为0.01-3.0
for (double tau = 0.01; tau <= 3.0; tau += 0.01)
{
tauList.Add(tau);
double d = (Math.Sqrt(tau * tau + 1.0) - 1.0) / tau;
dList.Add(d);
}
double[] tauValues = tauList.ToArray();
double[] dValues = dList.ToArray();
_tauDInterpolation = CubicSpline.InterpolateAkimaSorted(tauValues, dValues);
}
#endregion
#region
private class ValidationResult
{
public bool IsValid { get; set; }
public List<string> Messages { get; } = new List<string>();
}
#endregion
#region
/// <summary>
/// 用于土壤测试的参数设置建议(仅建议,不影响计算)
/// </summary>
public static class SoilTestRecommendations
{
/// <summary>
/// 根据土壤类型获取建议的测试参数
/// </summary>
/// <param name="soilType">土壤类型(干土、湿土、冻土等)</param>
/// <returns>建议的测试时间范围</returns>
public static (double minTime, double maxTime) GetRecommendedTestTime(string soilType)
{
// 土壤热扩散系数典型范围1e-7 到 1e-6 m²/s
// 使用典型探头半径6.4mm计算
double r = 0.0064; // 米
// 根据τ_max² = (t * a) / r²反推时间
// t = τ_max² * r² / a
// 对于导热系数较低的土壤(干土、冻土)
if (soilType.Contains("冻土") || soilType.Contains("干土"))
{
double alpha = 0.5e-6; // 较低的热扩散系数
double t_min = TAU_MAX_SQUARED_LOWER * r * r / alpha;
double t_max = TAU_MAX_SQUARED_UPPER * r * r / alpha;
return (t_min, t_max);
}
// 对于导热系数较高的土壤(湿土)
else if (soilType.Contains("湿土"))
{
double alpha = 1.2e-6; // 较高的热扩散系数
double t_min = TAU_MAX_SQUARED_LOWER * r * r / alpha;
double t_max = TAU_MAX_SQUARED_UPPER * r * r / alpha;
return (t_min, t_max);
}
// 默认值
else
{
double alpha = 1e-6; // 典型热扩散系数
double t_min = TAU_MAX_SQUARED_LOWER * r * r / alpha;
double t_max = TAU_MAX_SQUARED_UPPER * r * r / alpha;
return (t_min, t_max);
}
}
}
#endregion
}
}

1713
GB32064Calculator.cs Normal file

File diff suppressed because it is too large Load Diff

BIN
IMG/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

410
MainWindow.xaml Normal file
View File

@@ -0,0 +1,410 @@
<Window x:Class="ConductivityApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:oxy="http://oxyplot.org/wpf"
mc:Ignorable="d"
Title="GB/T 32064-2015 导热系数测试系统"
Height="700" Width="1015"
WindowStartupLocation="CenterScreen"
Closing="Window_Closing">
<Window.Resources>
<Style TargetType="GroupBox">
<Setter Property="Margin" Value="5"/>
<Setter Property="Padding" Value="5"/>
</Style>
<Style TargetType="Label">
<Setter Property="Margin" Value="2"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style TargetType="TextBox">
<Setter Property="Margin" Value="2"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="MinWidth" Value="80"/>
</Style>
<Style TargetType="Button">
<Setter Property="Margin" Value="5,2"/>
<Setter Property="Padding" Value="10,5"/>
<Setter Property="MinWidth" Value="80"/>
</Style>
<!-- 仅美化下拉项的基础样式 -->
<Style x:Key="NormalComboBoxItemStyle" TargetType="ComboBoxItem">
<Setter Property="Width" Value="120"/>
<Setter Property="Height" Value="25"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Padding" Value="8,2"/>
<!-- 仅保留基础悬停/选中反馈 -->
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="LightPink"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#0078D7"/>
<Setter Property="Foreground" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
<!-- ComboBox主样式接近原生仅调整基础外观 -->
<Style x:Key="NormalComboBoxStyle" TargetType="ComboBox">
<Setter Property="Width" Value="120"/>
<Setter Property="Height" Value="25"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Padding" Value="8,0"/>
<Setter Property="ItemContainerStyle" Value="{StaticResource NormalComboBoxItemStyle}"/>
<!-- 仅调整边框和背景,不修改核心模板 -->
<Setter Property="BorderBrush" Value="#CCCCCC"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Background" Value="White"/>
<!-- 基础悬停反馈 -->
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" Value="#0078D7"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- 标题栏 -->
<Border Grid.Row="0" Background="#007ACC" Padding="10">
<StackPanel Orientation="Horizontal">
<TextBlock Text="GB/T 32064-2015 瞬态平面热源测试系统"
FontSize="18" FontWeight="Bold"
Foreground="White" VerticalAlignment="Center"/>
<TextBlock Text="Version 1.0" Margin="20,0,0,0"
Foreground="White" VerticalAlignment="Center" Opacity="0.8"/>
</StackPanel>
</Border>
<!-- 主内容区 -->
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- 左侧控制面板 -->
<ScrollViewer Grid.Column="0" VerticalScrollBarVisibility="Auto">
<StackPanel>
<!-- 探头参数 -->
<GroupBox Header="探头参数" FontWeight="Bold">
<StackPanel>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" Visibility="Collapsed">探头类型</Label>
<ComboBox Width="130" Grid.Row="0" Visibility="Collapsed" SelectionChanged="cmbtt_SelectionChanged" Grid.Column="1" x:Name="cmbtt"
SelectedIndex="1" Style="{StaticResource NormalComboBoxStyle}">
<ComboBoxItem Content="请选择探头类型"/>
<ComboBoxItem Content="17.45mm" />
<ComboBoxItem Content="6.4mm" />
</ComboBox>
<Label Grid.Row="1" Grid.Column="0">初始电阻 R₀ (Ω):</Label>
<TextBox IsEnabled="False" Grid.Row="1" Grid.Column="1" x:Name="txtProbeR0" Text="34.7"/>
<Label Grid.Row="2" Grid.Column="0">温度系数 α (1/K):</Label>
<TextBox IsEnabled="False" Grid.Row="2" Grid.Column="1" x:Name="txtProbeAlpha" Text="0.008"/>
<Label Grid.Row="3" Grid.Column="0">探头半径 (mm):</Label>
<TextBox IsEnabled="False" Grid.Row="3" Grid.Column="1" x:Name="txtProbeRadius" Text="14"/>
<Label Grid.Row="4" Grid.Column="0">探头环数:</Label>
<TextBox IsEnabled="False" Grid.Row="4" Grid.Column="1" x:Name="txtProbeCoils" Text="27"/>
</Grid>
</StackPanel>
</GroupBox>
<!-- 电桥参数 -->
<GroupBox Header="电桥参数" FontWeight="Bold" >
<StackPanel>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0">串联电阻 Rₛ (Ω):</Label>
<TextBox Grid.Row="0" Grid.Column="1" x:Name="txtBridgeRs" IsReadOnly="true" IsEnabled="False" Text="34.7"/>
<Label Grid.Row="1" Grid.Column="0">引线电阻 Rₗ (Ω):</Label>
<TextBox Grid.Row="1" Grid.Column="1" x:Name="txtBridgeRL" IsReadOnly="true" IsEnabled="False" Text="0.0267"/>
</Grid>
</StackPanel>
</GroupBox>
<!-- 样品参数 -->
<GroupBox Header="样品参数" FontWeight="Bold">
<StackPanel>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Name ="name0" Grid.Row="0" Grid.Column="0">查看样品对应功率:</Label>
<Button x:Name="name1" Content="查看"
Click="name1_Click" Margin="5"
Background="#FF5722" Foreground="White" FontWeight="Bold" Grid.Row="0" Grid.Column="1"/>
<Label Grid.Row="1" Grid.Column="0">材料类型</Label>
<ComboBox Width="110" Grid.Row="1" Grid.Column="1" x:Name="cmbSampleType"
SelectedIndex="0" SelectionChanged="cmbSampleType_SelectionChanged" Style="{StaticResource NormalComboBoxStyle}">
<ComboBoxItem Content="样本类型"/>
<ComboBoxItem Content="干土" />
<ComboBoxItem Content="湿土"/>
<ComboBoxItem Content="冻土"/>
<ComboBoxItem Content="不锈钢"/>
<ComboBoxItem Content="自定义"/>
</ComboBox>
<Label Visibility="Collapsed" Grid.Row="2" Grid.Column="0" x:Name="txtyangpin0">样品迭代初始值 (m²/s):</Label>
<TextBox Visibility="Collapsed" Grid.Row="2" Grid.Column="1" x:Name="txtyangpin" Text="0"/>
<Label Grid.Row="3" Grid.Column="0">样品密度 (kg/m³):</Label>
<TextBox Grid.Row="3" Grid.Column="1" x:Name="txtSampleDensity" Text="1000"/>
<Label Grid.Row="4" Grid.Column="0">比热容 J/(kg·K):</Label>
<TextBox Grid.Row="4" IsReadOnly="True" IsEnabled="False" Grid.Column="1" x:Name="txtSampleSpecificHeat" Text="0"/>
<Label Grid.Row="5" Grid.Column="0">电流 (mA):</Label>
<TextBox Grid.Row="5" Grid.Column="1" x:Name="txtCurrent" Text="120" TextChanged="txtdianliu_TextChanged"/>
<Label Grid.Row="6" Grid.Column="0">测试功率 (W):</Label>
<TextBox Grid.Row="6" Grid.Column="1" x:Name="txtTestPower" IsEnabled="False" IsReadOnly="True" Text="0.5184"/>
</Grid>
</StackPanel>
</GroupBox>
<!-- 采集参数 -->
<GroupBox Header="采集参数" FontWeight="Bold">
<StackPanel>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0">采集点数:</Label>
<TextBox Grid.Row="0" Grid.Column="1" x:Name="txtSampleCount" Text="180"/>
<Label Grid.Row="1" Grid.Column="0">采集间隔 (s):</Label>
<TextBox Grid.Row="1" Grid.Column="1" x:Name="txtSampleInterval" Text="0.8"/>
</Grid>
</StackPanel>
</GroupBox>
<!-- 测试控制 -->
<GroupBox Header="测试控制" FontWeight="Bold">
<StackPanel>
<Button x:Name="btnStartTest" Content="开始测试"
Click="btnStartTest_Click" Background="#4CAF50" Foreground="White"/>
<Button x:Name="btnStopTest" Content="停止测试"
Click="btnStopTest_Click" Background="#F44336" Foreground="Black" IsEnabled="False"/>
<Button x:Name="btnStartTest1" Content="夹紧"
Click="btnStartTest1_Click" Background="Pink" Foreground="Black"/>
<Button x:Name="btnStartTest2" Content="放松"
Click="btnStartTest2_Click" Background="SaddleBrown" Foreground="White"/>
<Button x:Name="btnCalculate" Content="计算结果"
Click="btnCalculate_Click" Background="#2196F3" Foreground="White"/>
<Button x:Name="btnShowLog" Content="查看日志"
Click="btnShowLog_Click" Margin="5"
Background="#FF5722" Foreground="White" FontWeight="Bold"/>
</StackPanel>
</GroupBox>
<!-- 实时数据显示 -->
<GroupBox Header="实时数据" FontWeight="Bold">
<StackPanel>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0">时间 (s):</Label>
<TextBox Grid.Row="0" Grid.Column="1" x:Name="txtCurrentTime" IsReadOnly="True" Background="#F5F5F5"/>
<Label Grid.Row="1" Grid.Column="0">电压 (V):</Label>
<TextBox Grid.Row="1" Grid.Column="1" x:Name="txtCurrentVoltage" IsReadOnly="True" Background="#F5F5F5"/>
<Label Grid.Row="2" Grid.Column="0">压力 (N):</Label>
<TextBox Grid.Row="2" Grid.Column="1" x:Name="txtCurrentPressure" IsReadOnly="True" Background="#F5F5F5"/>
<Label Grid.Row="3" Grid.Column="0">温度变化 (K):</Label>
<TextBox Grid.Row="3" Grid.Column="1" x:Name="txtCurrentTemperature" IsReadOnly="True" Background="#F5F5F5"/>
</Grid>
</StackPanel>
</GroupBox>
</StackPanel>
</ScrollViewer>
<!-- 右侧内容区 -->
<Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- 图表显示 -->
<GroupBox Grid.Row="0" Header="温度-时间曲线" FontWeight="Bold">
<oxy:PlotView x:Name="plotView"/>
</GroupBox>
<!-- 结果和日志 -->
<TabControl Grid.Row="1">
<TabItem Header="计算结果">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel Margin="10">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Row="0" Grid.Column="0" FontWeight="Bold">导热系数 λ (W/(m·K)):</Label>
<TextBox Grid.Row="0" Grid.Column="1" x:Name="txtConductivity" IsReadOnly="True" Background="#F5F5F5"/>
<Label Grid.Row="1" Grid.Column="0" FontWeight="Bold">热扩散系数 a (m²/s):</Label>
<TextBox Grid.Row="1" Grid.Column="1" x:Name="txtDiffusivity" IsReadOnly="True" Background="#F5F5F5"/>
<Label Grid.Row="2" Grid.Column="0" FontWeight="Bold">校正时间 t_c (s):</Label>
<TextBox Grid.Row="2" Grid.Column="1" x:Name="txtCorrectionTime" IsReadOnly="True" Background="#F5F5F5"/>
<Label Grid.Row="3" Grid.Column="0" FontWeight="Bold" Visibility="Collapsed">拟合优度 R²:</Label>
<TextBox Grid.Row="3" Grid.Column="1" x:Name="txtRSquared" Visibility="Collapsed" IsReadOnly="True" Background="#F5F5F5"/>
<Label Grid.Row="4" Grid.Column="0" FontWeight="Bold">验证状态:</Label>
<TextBox Grid.Row="4" Grid.Column="1" x:Name="txtValidation" IsReadOnly="True" Background="#F5F5F5"/>
</Grid>
</StackPanel>
</ScrollViewer>
</TabItem>
<TabItem Header="测试报告">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox Grid.Row="0" x:Name="txtReport"
IsReadOnly="True" VerticalScrollBarVisibility="Auto"
TextWrapping="Wrap" FontFamily="Consolas" FontSize="11"/>
<Button Grid.Row="1" x:Name="btnExportReport"
Content="导出报告" Click="btnExportReport_Click"
HorizontalAlignment="Right" Margin="5"/>
</Grid>
</TabItem>
<TabItem Header="系统日志">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox Grid.Row="0" x:Name="txtLog"
IsReadOnly="True" VerticalScrollBarVisibility="Auto"
FontFamily="Consolas" FontSize="10"/>
<Button Grid.Row="1" x:Name="btnClearLog"
Content="清空日志" Click="btnClearLog_Click"
HorizontalAlignment="Right" Margin="5"/>
</Grid>
</TabItem>
<TabItem Header="逆向分析">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!--<TextBox Grid.Row="0" x:Name="txtLog2"
IsReadOnly="True" VerticalScrollBarVisibility="Auto"
FontFamily="Consolas" FontSize="10"/>-->
<Button Grid.Row="1" x:Name="btnInverseAnalysis"
Content="逆向分析" Click="OnParameterAnalysisClick"
HorizontalAlignment="Right" Margin="5" ToolTip="从测试结果反推输入参数范围"/>
</Grid>
</TabItem>
</TabControl>
</Grid>
</Grid>
<!-- 状态栏 -->
<StatusBar Grid.Row="2" Background="#E0E0E0">
<StatusBarItem>
<TextBlock x:Name="txtStatus" Text="就绪"/>
</StatusBarItem>
<Separator/>
<StatusBarItem>
<TextBlock Text="数据点数: 0"/>
</StatusBarItem>
<Separator/>
<StatusBarItem>
<TextBlock Text="测试状态: 停止"/>
</StatusBarItem>
</StatusBar>
</Grid>
</Window>

2709
MainWindow.xaml.cs Normal file

File diff suppressed because it is too large Load Diff

49
MultiTextWriter.cs Normal file
View File

@@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WpfApp1
{
// 这个类能让日志同时输出到多个地方
public class MultiTextWriter : TextWriter
{
private readonly TextWriter[] _writers;
public MultiTextWriter(params TextWriter[] writers)
{
_writers = writers;
}
public override void Write(char value)
{
foreach (var writer in _writers) writer.Write(value);
}
public override void Write(string value)
{
foreach (var writer in _writers) writer.Write(value);
}
public override void WriteLine(string value)
{
foreach (var writer in _writers) writer.WriteLine(value);
}
public override Encoding Encoding => Encoding.UTF8;
}
public class TestDataJsonModel
{
public double[] TimeArray { get; set; }
public double[] DeltaUArray { get; set; }
// 可选:保存电流值,方便加载时直接使用
public double CurrentMA { get; set; }
}
}

View File

@@ -0,0 +1,52 @@
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("WpfApp1")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("WpfApp1")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
//若要开始生成可本地化的应用程序,请设置
//.csproj 文件中的 <UICulture>CultureYouAreCodingWith</UICulture>
//在 <PropertyGroup> 中。例如,如果你使用的是美国英语。
//使用的是美国英语,请将 <UICulture> 设置为 en-US。 然后取消
//对以下 NeutralResourceLanguage 特性的注释。 更新
//以下行中的“en-US”以匹配项目文件中的 UICulture 设置。
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //主题特定资源词典所处位置
//(未在页面中找到资源时使用,
//或应用程序资源字典中找到时使用)
ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置
//(未在页面中找到资源时使用,
//、应用程序或任何主题专用资源字典中找到时使用)
)]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

63
Properties/Resources.Designer.cs generated Normal file
View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace 2_0.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("材料热传导系数2_0.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

117
Properties/Resources.resx Normal file
View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

26
Properties/Settings.Designer.cs generated Normal file
View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace 2_0.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

32
packages.config Normal file
View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Accord" version="3.8.0" targetFramework="net48" />
<package id="Accord.Math" version="3.8.0" targetFramework="net48" />
<package id="BouncyCastle.Cryptography" version="2.4.0" targetFramework="net48" />
<package id="iTextSharp" version="5.5.13.4" targetFramework="net48" />
<package id="MathNet.Numerics" version="5.0.0" targetFramework="net48" />
<package id="Microsoft.Bcl.AsyncInterfaces" version="8.0.0" targetFramework="net48" />
<package id="Microsoft.Extensions.DependencyInjection" version="8.0.1" targetFramework="net48" />
<package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="8.0.2" targetFramework="net48" />
<package id="Microsoft.Extensions.Logging" version="8.0.1" targetFramework="net48" />
<package id="Microsoft.Extensions.Logging.Abstractions" version="8.0.2" targetFramework="net48" />
<package id="Microsoft.Extensions.Options" version="8.0.2" targetFramework="net48" />
<package id="Microsoft.Extensions.Primitives" version="8.0.0" targetFramework="net48" />
<package id="Microsoft.NETFramework.ReferenceAssemblies" version="1.0.2" targetFramework="net48" developmentDependency="true" />
<package id="Microsoft.NETFramework.ReferenceAssemblies.net48" version="1.0.3" targetFramework="net48" developmentDependency="true" />
<package id="Newtonsoft.Json" version="13.0.4" targetFramework="net48" />
<package id="NModbus4" version="2.1.0" targetFramework="net48" />
<package id="OxyPlot.Core" version="2.2.0" targetFramework="net48" />
<package id="OxyPlot.Wpf" version="2.2.0" targetFramework="net48" />
<package id="OxyPlot.Wpf.Shared" version="2.2.0" targetFramework="net48" />
<package id="PDFsharp" version="6.2.3" targetFramework="net48" />
<package id="S7netplus" version="0.20.0" targetFramework="net48" />
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
<package id="System.Diagnostics.DiagnosticSource" version="8.0.1" targetFramework="net48" />
<package id="System.Memory" version="4.5.5" targetFramework="net48" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net48" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net48" />
<package id="System.Security.Cryptography.Pkcs" version="8.0.1" targetFramework="net48" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net48" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net48" />
</packages>

View File

@@ -0,0 +1,239 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{BD9D02BC-C0AC-4F99-951F-C170BD02F9BC}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>材料热传导系数2_0</RootNamespace>
<AssemblyName>材料热传导系数2_0</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Accord, Version=3.8.0.0, Culture=neutral, PublicKeyToken=fa1a88e29555ccf7, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Accord.3.8.0\lib\net462\Accord.dll</HintPath>
</Reference>
<Reference Include="Accord.Math, Version=3.8.0.0, Culture=neutral, PublicKeyToken=fa1a88e29555ccf7, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Accord.Math.3.8.0\lib\net462\Accord.Math.dll</HintPath>
</Reference>
<Reference Include="Accord.Math.Core, Version=3.8.0.0, Culture=neutral, PublicKeyToken=fa1a88e29555ccf7, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Accord.Math.3.8.0\lib\net462\Accord.Math.Core.dll</HintPath>
</Reference>
<Reference Include="BouncyCastle.Cryptography, Version=2.0.0.0, Culture=neutral, PublicKeyToken=072edcf4a5328938, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\BouncyCastle.Cryptography.2.4.0\lib\net461\BouncyCastle.Cryptography.dll</HintPath>
</Reference>
<Reference Include="itextsharp, Version=5.5.13.4, Culture=neutral, PublicKeyToken=8354ae6d2174ddca, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\iTextSharp.5.5.13.4\lib\net461\itextsharp.dll</HintPath>
</Reference>
<Reference Include="MathNet.Numerics, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\MathNet.Numerics.5.0.0\lib\net48\MathNet.Numerics.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.DependencyInjection, Version=8.0.0.1, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Microsoft.Extensions.DependencyInjection.8.0.1\lib\net462\Microsoft.Extensions.DependencyInjection.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.2, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Microsoft.Extensions.DependencyInjection.Abstractions.8.0.2\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.Logging, Version=8.0.0.1, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Microsoft.Extensions.Logging.8.0.1\lib\net462\Microsoft.Extensions.Logging.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.2, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Microsoft.Extensions.Logging.Abstractions.8.0.2\lib\net462\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.Options, Version=8.0.0.2, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Microsoft.Extensions.Options.8.0.2\lib\net462\Microsoft.Extensions.Options.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Microsoft.Extensions.Primitives.8.0.0\lib\net462\Microsoft.Extensions.Primitives.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Newtonsoft.Json.13.0.4\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="NModbus4, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\NModbus4.2.1.0\lib\net40\NModbus4.dll</HintPath>
</Reference>
<Reference Include="OxyPlot, Version=2.2.0.0, Culture=neutral, PublicKeyToken=638079a8f0bd61e9, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\OxyPlot.Core.2.2.0\lib\net462\OxyPlot.dll</HintPath>
</Reference>
<Reference Include="OxyPlot.Wpf, Version=2.2.0.0, Culture=neutral, PublicKeyToken=75e952ba404cdbb0, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\OxyPlot.Wpf.2.2.0\lib\net462\OxyPlot.Wpf.dll</HintPath>
</Reference>
<Reference Include="OxyPlot.Wpf.Shared, Version=2.2.0.0, Culture=neutral, PublicKeyToken=75e952ba404cdbb0, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\OxyPlot.Wpf.Shared.2.2.0\lib\net462\OxyPlot.Wpf.Shared.dll</HintPath>
</Reference>
<Reference Include="PdfSharp, Version=6.2.3.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\PDFsharp.6.2.3\lib\netstandard2.0\PdfSharp.dll</HintPath>
</Reference>
<Reference Include="PdfSharp.BarCodes, Version=6.2.3.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\PDFsharp.6.2.3\lib\netstandard2.0\PdfSharp.BarCodes.dll</HintPath>
</Reference>
<Reference Include="PdfSharp.Charting, Version=6.2.3.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\PDFsharp.6.2.3\lib\netstandard2.0\PdfSharp.Charting.dll</HintPath>
</Reference>
<Reference Include="PdfSharp.Cryptography, Version=6.2.3.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\PDFsharp.6.2.3\lib\netstandard2.0\PdfSharp.Cryptography.dll</HintPath>
</Reference>
<Reference Include="PdfSharp.Quality, Version=6.2.3.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\PDFsharp.6.2.3\lib\netstandard2.0\PdfSharp.Quality.dll</HintPath>
</Reference>
<Reference Include="PdfSharp.Shared, Version=6.2.3.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\PDFsharp.6.2.3\lib\netstandard2.0\PdfSharp.Shared.dll</HintPath>
</Reference>
<Reference Include="PdfSharp.Snippets, Version=6.2.3.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\PDFsharp.6.2.3\lib\netstandard2.0\PdfSharp.Snippets.dll</HintPath>
</Reference>
<Reference Include="PdfSharp.System, Version=6.2.3.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\PDFsharp.6.2.3\lib\netstandard2.0\PdfSharp.System.dll</HintPath>
</Reference>
<Reference Include="PdfSharp.WPFonts, Version=6.2.3.0, Culture=neutral, PublicKeyToken=f94615aa0424f9eb, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\PDFsharp.6.2.3\lib\netstandard2.0\PdfSharp.WPFonts.dll</HintPath>
</Reference>
<Reference Include="ReachFramework" />
<Reference Include="S7.Net, Version=0.20.0.0, Culture=neutral, PublicKeyToken=d5812d469e84c693, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\S7netplus.0.20.0\lib\net462\S7.Net.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Configuration" />
<Reference Include="System.Data" />
<Reference Include="System.Diagnostics.DiagnosticSource, Version=8.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\System.Diagnostics.DiagnosticSource.8.0.1\lib\net462\System.Diagnostics.DiagnosticSource.dll</HintPath>
</Reference>
<Reference Include="System.Drawing" />
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Printing" />
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Security" />
<Reference Include="System.Security.Cryptography.Pkcs, Version=8.0.0.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\System.Security.Cryptography.Pkcs.8.0.1\lib\net462\System.Security.Cryptography.Pkcs.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\..\材料热传导系数1.0\材料热传导系数1.0\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath>
</Reference>
<Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
</ItemGroup>
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Page Include="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="GB32064Calculator.cs" />
<Compile Include="MultiTextWriter.cs" />
<Compile Include="MainWindow.xaml.cs">
<DependentUpon>MainWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<WCFMetadata Include="Connected Services\" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<Resource Include="IMG\1.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Resource>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Microsoft.NETFramework.ReferenceAssemblies.net48.1.0.2\build\Microsoft.NETFramework.ReferenceAssemblies.net48.targets" Condition="Exists('..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Microsoft.NETFramework.ReferenceAssemblies.net48.1.0.2\build\Microsoft.NETFramework.ReferenceAssemblies.net48.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Microsoft.NETFramework.ReferenceAssemblies.net48.1.0.2\build\Microsoft.NETFramework.ReferenceAssemblies.net48.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Microsoft.NETFramework.ReferenceAssemblies.net48.1.0.2\build\Microsoft.NETFramework.ReferenceAssemblies.net48.targets'))" />
<Error Condition="!Exists('..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Accord.3.8.0\build\Accord.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Accord.3.8.0\build\Accord.targets'))" />
<Error Condition="!Exists('packages\Microsoft.NETFramework.ReferenceAssemblies.net48.1.0.3\build\Microsoft.NETFramework.ReferenceAssemblies.net48.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Microsoft.NETFramework.ReferenceAssemblies.net48.1.0.3\build\Microsoft.NETFramework.ReferenceAssemblies.net48.targets'))" />
</Target>
<Import Project="..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Accord.3.8.0\build\Accord.targets" Condition="Exists('..\..\材料热传导系数1.0\材料热传导系数1.0\packages\Accord.3.8.0\build\Accord.targets')" />
<Import Project="packages\Microsoft.NETFramework.ReferenceAssemblies.net48.1.0.3\build\Microsoft.NETFramework.ReferenceAssemblies.net48.targets" Condition="Exists('packages\Microsoft.NETFramework.ReferenceAssemblies.net48.1.0.3\build\Microsoft.NETFramework.ReferenceAssemblies.net48.targets')" />
</Project>

View File

@@ -0,0 +1,25 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.14.36327.8 d17.14
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "材料热传导系数2.0", "材料热传导系数2.0.csproj", "{BD9D02BC-C0AC-4F99-951F-C170BD02F9BC}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{BD9D02BC-C0AC-4F99-951F-C170BD02F9BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BD9D02BC-C0AC-4F99-951F-C170BD02F9BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BD9D02BC-C0AC-4F99-951F-C170BD02F9BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BD9D02BC-C0AC-4F99-951F-C170BD02F9BC}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {34228025-0568-4616-A98D-ECD92728CD85}
EndGlobalSection
EndGlobal

Binary file not shown.