标题：管式换热器的VisualBasic模拟
引言
列管式换热器是工业生产特别是热原料热设备温度调节应用普适单元，其模拟原理是基于热传导三种基本方式：传导（conduction），对流（convection）以及辐射（rayonnement）的算法方程来构建的。该模拟可用于在确定出，如口温度和列管规格的前提下，计算所需长度，或根据已知列管长度，规格，入口温度推算出口温度。
问题阐述
举例：氮气冷却试验
列管管路规格：管外径 De，管壁厚度 e，环境空气温度 Tamb，入口温度Tentrée，出口温度 Tsortie，气体流量Debit_M(Kg/h）——直观条件
管内：强制对流
管外：自然对流
标准大气压下空气及氮气比热Cp，导热系数lamda，黏度&micro;，密度rho，beta随温度变化关系——间接条件须检索
所用管材外壁黑度与温度变化关系——间接条件须检索
目标：
求得各分段管内壁温度Tpi
求得各分段管外壁温度Tpe
求得达到各分段所需温度列管长度
求得达到T sortie 所需总管路长度
模拟步骤与算法
1.分段处理
由于气体物性（比热Cp，导热系数lamda，黏度&micro;，密度rho）在管路中随温度变化显著，为了模拟的精确并兼顾程序计算速度要求，即以总温度范围均匀有限分段，取每段平均温度代表物性变化特征温度，把每段求得长度叠加就可得到总管长。
2.单段求解方法
i. 在温度取值确定以后，气体物性（比热Cp，导热系数lamda，黏度&micro;，密度rho）可由已知方程得到，气体在该段流速可由质量流量，密度以及列管规格求得。
ii. 计算管路特性条件需要管路长度L这一必要条件，这里采用试差法，Visual Basic 中先给L赋初值，添加循环，进行数值比较的语句为 Do until......Loop，解得管内管路特性系数Re，Pr，Gr。
iii. 由Re值范围确定传热方程。其中，对于层流传热（Re<2300情况）中需要的管壁温度Tpi下的氮气黏度亦可利用试差法解决。最终由求得的Nusselt准数算出对流传热系数alpha.
iv. 由每段进，出口温度求得应散热量Q0。
以下是该模拟理论核心关系式：
Q0=Q convection d'azote=Q conduction=Q convection extérieure+ Q rayonnement
管内氮气对流传热量 =  管壁传导热量 =  管外壁空气对流传热量+管壁辐射传热量
v. 由以上关系式，可由对流传热方程求出Tpi，由热传导方程求出管外壁温度Tpe。
已知Tpe：
利用管外空气自然对流方程求得Q convection extérieure
关于辐射传导，可以根据管束与环境角度情况改变应用方程，本例中设角系数为1（管路被无限大空间包围情况）
以及最终管外壁总散热量（Q convection extérieure+ Q rayonnement)
Q0，Q convection extérieure+ Q rayonnement的数值差异就是前面步骤ii 提到的逻辑比较。
vi. 由分段长度L叠加就得到列管总长度。
假设与扩展
本模型是列管式换热器中最简单的情况，其中分段热传导未考虑氮气传导方向的管壁传导传热，并且在以下举例中，管材黑度为定值。
其他复杂列管式换热器可以根据实际情况改动应用方程或算法，也可有限度地改变已知条件种类，这是其可重建性优势。
程序源码
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim SurS As Single   '截面积
Dim Nu As Single      '纽塞尔准数
Dim Surpi As Single     '管内表面积
Dim Surpe As Single      '管外表面积
Dim L As Single          '分段长度
Dim TpiH As Single   '假设管内壁温度
Dim mu2 As Double    '管内壁温度下氮气黏度
Public Const n As Integer = 20
Public Const p As Integer = 10
Public Const m As Integer = 1000
Public ro(1 To n) As Double    '氮气密度
Public mu(1 To n) As Double    '氮气黏度
Public Cp(1 To n) As Double    '氮气比热
Public lambda(1 To n) As Double   '氮气导热系数
Public beta(1 To n) As Double   '温度倒数
Public T(1 To n) As Single         '分段温度（在Excel 表格中写入各分段入口温度及出口温度中间值，由VB读入）
Public Re(1 To n) As Single   '雷诺准数
Public Pr(1 To n) As Single    '普朗特准数
Public Gr(1 To n) As Single    '格拉绍夫准数
Public h(1 To n) As Single    '对流传热系数 同“alpha”
Public V(1 To n) As Single     '氮气流量
Public Tpi(1 To n) As Single     '管内壁温度
Public Tpe(1 To n) As Single     '管外壁温度
Public Tair(1 To n) As Single     '空气温度
Public roa(1 To n) As Double     '空气密度
Public mua(1 To n) As Double     '空气黏度
Public Cpa(1 To n) As Double      '空气比热
Public lambdaa(1 To n) As Double   '空气导热系数
Public betaa(1 To n) As Double
Public Rea(1 To n) As Single
Public Pra(1 To n) As Single
Public Gra(1 To n) As Single
Public ha(1 To n) As Single
Public Flux1(1 To n) As Double      'Q0
Public Flux2(1 To n) As Double      'Q convection d'azote
Public Flux3(1 To n) As Double
Public ReThP(1 To n) As Single     '管壁热阻
'Constants
Public Const Debit_M As Single = 0.005138        '质量流量
Public Const De As Single = 0.1143          '管外径
Public Const Di As Single = 0.1053           '管内径
Public Const delta_T As Single = 76         '氮气从1600摄氏度降温到80摄氏度分为20段，每段降温76度
Public Const lamdap As Single = 15         '管壁导热系数
Public Const Cpp As Single = 500            '管壁热容
Public Const Tamb As Single = 20            '环境温度
Public Const emis As Single = 0.6             '管壁黑度
Public Sub evaluation()
SurS = 3.141592653 * (Di / 2) ^ 2
For i = 1 To n
T(i) = Sheets("Simul").Cells(2 + i, 2)
ro(i) = -0.000000001 * T(i) ^ 3 + 0.000003 * T(i) ^ 2 - 0.0026 * T(i) + 1.1279
mu(i) = 0.000000000000007 * T(i) ^ 3 - 0.00000000002 * T(i) ^ 2 + 0.00000004 * T(i) + 0.00002
Cp(i) = -0.0000002 * T(i) ^ 3 + 0.0004 * T(i) ^ 2 + 0.002 * T(i) + 1038.3
lambda(i) = 0.00000000002 * T(i) ^ 3 - 0.00000004 * T(i) ^ 2 + 0.0000735 * T(i) + 0.023934
V(i) = Debit_M / (SurS * ro(i))
beta(i) = 1 / T(i)
Re(i) = ro(i) * Di * V(i) / mu(i)
Pr(i) = Cp(i) * mu(i) / lambda(i)
Flux1(i) = Cp(i) * Debit_M * delta_T
'parametres physiqes et conditions donnees
L = 8
Do Until Abs(Flux1(i) - (Flux2(i) + Flux3(i))) < 60
If Re(i) <= 2100 Then
TpiH = 70
Do Until Abs(Tpi(i) - TpiH) < 20
mu2 = 0.000000000000007 * TpiH ^ 3 - 0.00000000003 * TpiH ^ 2 + 0.00000006 * TpiH + 0.000003
Nu = 1.86 * ((Re(i) * Pr(i)) / (L / Di)) ^ (1 / 3) * ((mu(i) / mu2) ^ 0.14)
h(i) = Nu * lambda(i) / Di
Surpi = 3.141592653 * Di * L
Tpi(i) = T(i) - Flux1(i) / (h(i) * Surpi)
TpiH = TpiH + 5
Loop
ElseIf 2100 < Re(i) And Re(i) < 10000 Then
Nu = (0.023 * Re(i) ^ (4 / 5) * Pr(i) ^ 0.3) * (1 - 600000 / (Re(i) ^ 1.8))
h(i) = Nu * lambda(i) / Di
Surpi = 3.141592653 * Di * L
Tpi(i) = T(i) - Flux1(i) / (h(i) * Surpi)
Else
End If
ReThP(i) = Application.WorksheetFunction.Ln(De / Di) / (2 * 3.141592653 * L * lamdap)
Tpe(i) = Tpi(i) - Flux1(i) * ReThP(i)
Tair(i) = (Tpe(i) - Tamb) / 2 + Tamb
roa(i) = 0.000000000002 * Tair(i) ^ 4 - 0.000000005 * Tair(i) ^ 3 + 0.000006 * Tair(i) ^ 2 - 0.0036 * Tair(i) + 1.2594
Cpa(i) = 0.0000000002 * Tair(i) ^ 4 - 0.0000006 * Tair(i) ^ 3 + 0.0006 * Tair(i) ^ 2 + 0.0189 * Tair(i) + 1002.7
lambdaa(i) = 0.00000000000004 * Tair(i) ^ 4 - 0.00000000007 * Tair(i) ^ 3 + 0.00000003 * Tair(i) ^ 2 + 0.00006 * Tair(i) + 0.0255
mua(i) = 9E-18 * Tair(i) ^ 4 - 0.00000000000002 * Tair(i) ^ 3 - 0.000000000001 * Tair(i) ^ 2 + 0.00000004 * Tair(i) + 0.00002
betaa(i) = 1 / Tair(i)
Gra(i) = betaa(i) * 9.81 * (Tpe(i) - Tamb) * De ^ 3 * roa(i) / mua(i) ^ 2
Pra(i) = Cpa(i) * mua(i) / lambdaa(i)
Surpe = 3.141592653 * De * L
If 1 < Gra(i) * Pra(i) < 10 ^ 4 Then
Nu2 = 1.09 * (Gra(i) * Pra(i)) ^ 0.2
ha(i) = Nu2 * lambdaa(i) / De
Flux2(i) = ha(i) * (Tpe(i) - Tamb) * Surpe
ElseIf 10 ^ 4 < Gra(i) * Pra(i) < 10 ^ 9 Then
Nu2 = 0.53 * (Gra(i) * Pra(i)) ^ 0.25
ha(i) = Nu2 * lambdaa(i) / De
Flux2(i) = ha(i) * (Tpe(i) - Tamb) * Surpe
ElseIf 10 ^ 9 < Gra(i) * Pra(i) < 10 ^ 12 Then
Nu2 = 0.13 * (Gra(i) * Pra(i)) ^ 0.33
ha(i) = Nu2 * lambdaa(i) / De
Flux2(i) = ha(i) * (Tpe(i) - Tamb) * Surpe
End If
Flux3(i) = emis * 5.669 * 1 * Surpe * (((Tpe(i) + 273) / 100) ^ 4 - ((Tamb + 273) / 100) ^ 4)
L = L - 0.01
Loop
ThisWorkbook.Worksheets("Simul").Cells(2 + i, 4) = L   ' 结果写入与定位
Next
End Sub