📄 form3.frm
字号:
VERSION 5.00
Begin VB.Form Form3
AutoRedraw = -1 'True
BackColor = &H00C0C0C0&
Caption = "程序计算"
ClientHeight = 2835
ClientLeft = 60
ClientTop = 345
ClientWidth = 4380
LinkTopic = "Form3"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 2835
ScaleWidth = 4380
StartUpPosition = 2 '屏幕中心
Begin VB.CommandButton Command2
BackColor = &H00FFC0C0&
Caption = "返回上一级"
BeginProperty Font
Name = "宋体"
Size = 12
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 400
Left = 2400
Style = 1 'Graphical
TabIndex = 8
Top = 2280
Width = 1815
End
Begin VB.CommandButton Command1
BackColor = &H00FFC0C0&
Caption = "确定并显示结果"
Default = -1 'True
BeginProperty Font
Name = "宋体"
Size = 12
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 400
Left = 120
Style = 1 'Graphical
TabIndex = 6
Top = 2280
Width = 1935
End
Begin VB.Frame Frame1
BackColor = &H00C0C0C0&
Caption = "请选择计算方程"
BeginProperty Font
Name = "楷体_GB2312"
Size = 12
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 1815
Left = 240
TabIndex = 0
Top = 240
Width = 3855
Begin VB.OptionButton Option6
BackColor = &H00C0C0C0&
Caption = "普遍化压缩因子"
Height = 375
Left = 1920
TabIndex = 7
Top = 1320
Width = 1575
End
Begin VB.OptionButton Option5
BackColor = &H00C0C0C0&
Caption = "维里方程"
Height = 375
Left = 360
TabIndex = 5
Top = 1320
Width = 1575
End
Begin VB.OptionButton Option4
BackColor = &H00C0C0C0&
Caption = "P-R方程"
Height = 375
Left = 1920
TabIndex = 4
Top = 840
Width = 1215
End
Begin VB.OptionButton Option3
BackColor = &H00C0C0C0&
Caption = "S-R-K方程"
Height = 375
Left = 360
TabIndex = 3
Top = 840
Width = 1335
End
Begin VB.OptionButton Option2
BackColor = &H00C0C0C0&
Caption = "R-K方程"
Height = 375
Left = 1920
TabIndex = 2
Top = 360
Width = 1215
End
Begin VB.OptionButton Option1
BackColor = &H00C0C0C0&
Caption = "范德法方程"
Height = 375
Left = 360
TabIndex = 1
Top = 360
Width = 1335
End
End
End
Attribute VB_Name = "Form3"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Command1_Click()
Dim STR1, STR2, STR5 As String
Dim a, b As Double '常数
Dim V0, V1 As Double, strs As String
Dim T0, T1 As Double, P1, P0 As Double, a1, a2 As Double
Dim B0, m, B1, B2 As Double
Const R = 8.314
'以下是判断计算的类型(纯的还是混合流体)
If Form1.Option1 = True Then
STR1 = "这是" + Form1.Option1.Caption
Else
STR1 = "这是" + Form1.Option2.Caption
End If
STR2 = "你选择的物质是" + Form2.Combo1.Text '输出所计算的物质
intt = Form2.Combo1.ListIndex '判断所选的物质的索引号的返回值
'以下是输出流体的临界常数
STR5 = "流体常数:" + Chr(13) + Chr(10) + " Tc=" + Str(Tc1) + "K " + "Pc=" + Str(Pc1) + "MPa " + "Vc=" + Str(Vc1) + "cm3/mol " + Chr(13) + Chr(10) + " Zc=" + Str(Zc1) + " " + "偏心因子w=" + Str(w1)
STR6 = "流体常数:" + Chr(13) + Chr(10) + " Tc=" + Str(Tc1) + "K " + "Pc=" + Str(Pc1) + "MPa " + "Vc=" + Str(Vc1) + "cm3/mol " + Chr(13) + Chr(10) + " Zc=" + Str(Zc1) + " " + "偏心因子w=" + Str(w1)
On Error GoTo a0
If Form3.Option1 = True Then '以下是范德乏方程的计算
a = 27 * R ^ 2 * Tc1 ^ 2 / (64 * Pc1 * 1000000)
b = R * Tc1 / (8 * (Pc1 * 1000000)) '常数
strs = "用" + Form3.Option1.Caption + "计算的结果:"
If Form2.Option1 = True Then
P = R * T / (V - b) - a / V ^ 2 'vdW方程
HH(1) = P
ElseIf Form2.Option2 = True Then
T = (P + a / V ^ 2) * (V - b) / R
HH(1) = T
ElseIf Form2.Option3 = True Then
V0 = R * T / P
Do While 1
V1 = b + R * T / P - a * (V0 - b) / (P * V0 ^ 2)
If Abs(V1 - V0) < 0.0000000001 Then Exit Do
V0 = V1
Loop
V = V1
HH(1) = V
End If '以上是范德乏方程的计算到此结束
Z = P * V / R / T
Yidu = Exp(Z - Log(Z - b / R / T) - a / T / R / V)
Han = (Z - 1) * R * T - a / V
San = R * Log(P) + R * Log(V - b)
ElseIf Form3.Option2 = True Then '以下是R-K方程的计算
a = 0.42748 * R ^ 2 * Tc1 ^ 2.5 / (Pc1 * 1000000)
b = 0.08664 * R * Tc1 / (Pc1 * 1000000)
strs = "这是用" + Form3.Option2.Caption + "计算的结果"
If Form2.Option1 = True Then
P = R * T / (V - b) - a / (Sqr(T) * V * (V + b)) 'R-K方程
HH(2) = P
ElseIf Form2.Option2 = True Then
T0 = P * V / R
Do While 1
T1 = P * (V - b) / R + a * (V - b) / (Sqr(T0) * V * (V + b) * R) '迭代方程式
If Abs(T0 - T1) < 0.00001 Then Exit Do
T0 = T1
Loop
T = T1
HH(2) = T
ElseIf Form2.Option3 = True Then
V0 = R * T / P
Do While 1
V1 = (b + R * T / P) - a * (V0 - b) / (Sqr(T) * V0 * (V0 + b) * P) '迭代方程式
If Abs(V0 - V1) < 0.0000000001 Then Exit Do
V0 = V1
Loop
V = V1
HH(2) = V
End If '以上是用R-K方程计算
Z = P * V / R / T
Han = (Z - 1) * R * T - 1.5 * a / b / T ^ 0.5 * Log(1 + b / V)
San = R * Log(P * (V - b) / R / T) - 0.5 * a / b / T ^ 1.5 * Log(1 + b / V)
Yidu = Exp(Z - 1 - Log(Z - b * P / R / T) - a / R / T ^ 1.5 / b * Log(1 + b / V))
ElseIf Form3.Option3 = True Then '以下是S-R-K方程的计算
a1 = 0.42748 * R ^ 2 * Tc1 ^ 2 / (Pc1 * 1000000)
b = 0.08664 * R * Tc1 / (Pc1 * 1000000)
strs = "这是用" + Form3.Option3.Caption + "计算的结果"
If Form2.Option1 = True Then
a2 = (1 + (0.48 + 1.574 * w1 - 0.176 * w1 ^ 2) * (1 - (T / Tc1) ^ 0.5)) ^ 2
a = a1 * a2
P = R * T / (V - b) - a / (V * (V + b)) 'S-R-K方程
HH(3) = P
ElseIf Form2.Option2 = True Then
T0 = P * V / R
Do While 1
a2 = (1 + (0.48 + 1.574 * w1 - 0.176 * w1 ^ 2) * (1 - (T0 / Tc1) ^ 0.5)) ^ 2
a = a1 * a2
T1 = ((V - b) / R) * (P + a / (V * (V + b))) '迭代方程式
If Abs(T0 - T1) < 0.0000000001 Then Exit Do
T0 = T1
Loop
T = T1
HH(3) = T
ElseIf Form2.Option3 = True Then
a2 = (1 + (0.48 + 1.574 * w1 - 0.176 * w1 ^ 2) * (1 - (T / Tc1) ^ 0.5)) ^ 2
a = a1 * a2
V0 = R * T / P
Do While 1
V1 = (b + R * T / P) - a * (V0 - b) / (V0 * (V0 + b) * P) '迭代方程式
If Abs(V0 - V1) < 0.0000000001 Then Exit Do
V0 = V1
Loop
V = V1
HH(3) = V
End If '以上是用S-R-K方程计算
Z = P * V / R / T '压缩因子
m = 0.5 * Tc1 ^ 0.75 / T ^ 0.75
Han = (Z - 1) * R * T - (a + T * m * a1 / (T * Tc1) ^ 0.5 / b * (1 + m * (1 - T ^ 0.5 / Tc1 ^ 0.5)) * Log(1 + b / V))
San = R * Log(Z - b * P / R / T) + m * a1 / b / (T * Tc1) ^ 0.5 * (1 + m * (1 - T ^ 0.5 / Tc1 ^ 0.5) * Log(1 + b / V))
Yidu = Exp(Z - 1 - Log(Z - b * P / R / T) - a / b / R / T * Log(1 + b / V))
ElseIf Form3.Option4 = True Then '以下是P-R方程的计算
a1 = 0.457235 * R ^ 2 * Tc1 ^ 2 / (Pc1 * 1000000)
b = 0.077796 * R * Tc1 / (Pc1 * 1000000)
m = 0.37646 + 1.54226 * w1 - 0.26992 * w1 ^ 2
strs = "这是用" + Form3.Option4.Caption + "计算的结果"
If Form2.Option1 = True Then
a2 = (1 + m * (1 - (T / Tc1) ^ 0.5)) ^ 2
a = a1 * a2
P = R * T / (V - b) - a / (V * (V + b) + b * (V - b)) 'P-R方程
HH(4) = P
ElseIf Form2.Option2 = True Then
T0 = P * V / R
Do While 1
a2 = (1 + m * (1 - (T0 / Tc1) ^ 0.5)) ^ 2
a = a1 * a2
T1 = ((V - b) / R) * (P + a / (V * (V + b) + b * (V - b))) '迭代方程式
If Abs(T0 - T1) < 0.0000000001 Then Exit Do
T0 = T1
Loop
T = T1
HH(4) = T
ElseIf Form2.Option3 = True Then
a2 = (1 + m * (1 - (T / Tc1) ^ 0.5)) ^ 2
a = a1 * a2
'##################add 06-11-12
am = a: bm = b
k = bm - R * T / P
m = am / P - 2 * bm * R * T / P - 3 * bm ^ 2
n = bm * (bm * R * T / P + bm ^ 2 - am / P)
L1 = m / 3 - (k / 3) ^ 3
L2 = (k / 3) * (L1 + m / 6) - n / 2
h = (L1) ^ 3 + (L2) ^ 2
V0 = 1 'R * T / P
Do While 1
f = V0 ^ 3 + k * V0 ^ 2 + m * V0 + n
ff = 2 * V0 ^ 2 + 2 * k * V0 + m
V = V0 - f / ff
If Abs(V0 - V) < 0.0000001 Then Exit Do
V0 = V
Loop
Form4.Print "V="; V
f1 = V ^ 3 + k * V ^ 2 + m * V + n
Form4.Print "f1="; f1
'#############################################
V0 = R * T / P
Do While 1
V1 = (b + R * T / P) - a * (V0 - b) / P / (V0 * (V0 + b) + b * (V0 - b)) '迭代方程式
If Abs(V0 - V1) < 0.0000000001 Then Exit Do
V0 = V1
Loop
V = V1
HH(4) = V
End If '以上是用P-R方程计算
Z = P * V / R / T
Yidu = Exp(Z - 1 - Log(Z - b * P / R / T) - a / Sqr(8) / R / T / b * Log((V + (1 + Sqr(2)) * b) / (V + (1 - Sqr(2)) * b)))
Han = (Z - 1) * R * T - R * T / b / Sqr(8) / P * (m * a1 * T ^ 0.5 / Tc1 ^ 0.5 * (1 + m * (1 - T ^ 0.5 / Tc1 ^ 0.5)) + a) * Log((V + (1 + Sqr(2)) * b) / (V + (1 - Sqr(2)) * b))
San = R * Log(Z - b * P / R / T) + R * T ^ 0.5 / Sqr(8) / b / P * m * a1 / Tc1 ^ 0.5 * (1 + m * (1 - T ^ 0.5 / Tc1 ^ 0.5)) * Log((V + (1 + Sqr(2)) * b) / (V + (1 - Sqr(2)) * b))
ElseIf Form3.Option5 = True Then '以下是维里方程的计算
strs = "这是用" + Form3.Option5.Caption + "计算的结果"
If Form2.Option1 = True Then
B1 = 0.083 - 0.422 * Tc1 ^ 1.6 / T ^ 1.6
B2 = 0.139 - 0.172 * Tc1 ^ 4.2 / T ^ 4.2
B0 = R * Tc1 / (1000000 * Pc1) * (B1 + w1 * B2)
P = R * T / V * (1 + B0 / V)
HH(5) = P
ElseIf Form2.Option2 = True Then
Z0 = 1
Do While 1
T0 = P * V / (R * Z0)
B1 = 0.083 - 0.422 * Tc1 ^ 1.6 / (Abs(T0)) ^ 1.6
B2 = 0.139 - 0.172 * Tc1 ^ 4.2 / (Abs(T0)) ^ 4.2
B0 = R * Tc1 * (B1 + w1 * B2) / (1000000 * Pc1)
Z1 = 1 + B0 * P / (R * T0)
If Abs(Z0 - Z1) < 0.00001 Then Exit Do
Z0 = Z1
Loop
Z = Z1
T = P * V / R / Z
HH(5) = T
ElseIf Form2.Option3 = True Then
B1 = 0.083 - 0.422 * Tc1 ^ 1.6 / T ^ 1.6
B2 = 0.139 - 0.172 * Tc1 ^ 4.2 / T ^ 4.2
B0 = R * Tc1 / (1000000 * Pc1) * (B1 + w1 * B2)
V = (R * T / P) * (1 + B0 * P / (R * T))
HH(5) = V
End If '以上是用维里方程计算
Z = P * V / R / T
Yidu = Exp(Z - 1)
Han = R * Tc1 * P / (1000000 * Pc1) * (0.083 - 1.097 * Tc1 ^ 1.6 / T ^ 1.6 + w1 * (0.139 - 0.894 * Tc1 ^ 4.2 / T ^ 4.2))
San = -R * P / (1000000 * Pc1) * (0.675 * Tc1 ^ 2.6 / T ^ 2.6 + w1 * 0.722 * Tc1 ^ 5.2 / T ^ 5.2)
End If
'以下是结果输出的打印
If Form3.Option6 = True Then
MsgBox "对不起!普遍化压缩因子方法还未能使用!", vbOKOnly + vbQuestion, "程序"
Else
If Form2.Option1 = True Then
Form3.Hide
Form4.Show
Form4.Print STR1
Form4.Print STR2
Form4.Print STR3
Form4.Print STR5
Form4.Print strs
Form4.Print " 压强等于:" + Format(P / 1000000, "###.##########") + "MPa"
Form4.Print " 剩余熵等于:" + Format(San, "###.####") + "J/mol "
Form4.Print " 剩余焓等于:" + Format(Han, "###.####") + "J/mol"
Form4.Print " 逸度系数等于:" + Format(Yidu, "###.####")
ElseIf Form2.Option2 = True Then
Form3.Hide
Form4.Show
Form4.Print STR1
Form4.Print STR2
Form4.Print STR3
Form4.Print STR5
Form4.Print strs
Form4.Print " 温度等于:" + Format(T, "###.####") + "K"
Form4.Print " 剩余熵等于:" + Format(San, "###.####") + "J/mol "
Form4.Print " 剩余焓等于:" + Format(Han, "###.####") + "J/mol"
Form4.Print " 逸度系数等于:" + Format(Yidu, "###.####")
ElseIf Form2.Option3 = True Then
Form3.Hide
Form4.Show
Form4.Print STR1
Form4.Print STR2
Form4.Print STR3
Form4.Print STR5
Form4.Print strs
Form4.Print " 体积等于:" + Format(V, "###.########") + "m3/mol"
Form4.Print " 剩余熵等于:" + Format(San, "###.####") + "J/mol "
Form4.Print " 剩余焓等于:" + Format(Han, "###.####") + "J/mol"
Form4.Print " 逸度系数等于:" + Format(Yidu, "###.####")
End If '以上是结果输出
End If
Exit Sub
a0:
MsgBox "对不起,你的初始数据用此方法计算不符合!" & Chr(13) + Chr(10) & "它将产生错误的结果!" & Chr(13) + Chr(10) & "请选择其他方法计算!谢谢", vbYes + vbQuestion, "程序"
Form4.Command4.Enabled = False
End Sub
Private Sub Command2_Click()
Unload Me
Form2.Show
End Sub
Private Sub Form_Load()
Form4.Command4.Enabled = True
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -