Cod Ej 3
Cod Ej 3
R = 0.08314 REM atm y K , el fluido es propeno Const Tc = 273.15 + 91.85, Pc = 46.2, w = 0.148 REM temperatura critica es 90C y Pc=46,6 bar Const b = 0.08664 * R * Tc / Pc REM constantes del propeno para SRK Const a = 0.42748 * R ^ 2 * Tc ^ 2 / Pc Const Const Const Const Const Tref = 298 Tmax = 90 + 273 Tmin = -50 + 273 paso = 1 n = -(Tmin - Tmax) / paso
Dim TAB(n, 8) As Double Private Sub curvasat() REM Calculo de curva de saturacion de propeno puro mediante la EOS SRK Dim beta, alfa, q, P, T As Double Dim Parr, err As Double Dim i As Integer = 0 Parr = 0.9 For T = Tmin To Tmax Step paso alfa = (1 + (0.48 + 1.574 * w - 0.716 * w ^ 2) * (1 - (T / Tc) ^ 0.5)) ^ 2 q = a * alfa / (b * R * (T)) P = Parr Do beta = b * P / (R * T) calculoz(beta, q) calculofi(Zv, Zl, beta, q) Err = Lnfil - Lnfiv If err < 0.001 Then Exit Do End If P = P + 0.005 Loop calculoentalpia(T, Zv, Zl, beta, q, il, iv) TAB(i, TAB(i, TAB(i, TAB(i, TAB(i, TAB(i, TAB(i, TAB(i, TAB(i, 0) 1) 2) 3) 4) 5) 6) 7) 8) = = = = = = = = = P T Zl Zv Lnfil Lnfiv Hliqsat - deltaHid Hvapsat - deltaHid deltaHid
Next Generartabla()
MsgBox("Arrancando") Case Math.Round(3 * n / 4) MsgBox("Voy por la mitad") Case n MsgBox("Exporto tabla") End Select
End Sub Function calculoz(ByVal beta As Double, ByVal q As Double) Dim zold, znew As Double Dim s As Integer znew = 0 s = 0 Do zold = znew znew = beta + zold * (zold + beta) * ((1 + beta - zold) / (q * beta)) s = s + 1 Loop Until Math.Abs(znew - zold) < 0.001 Or s > 50 If s > 50 Then Zl = 0 Else Zl = znew End If s = 0 znew = 1 Do zold = znew znew = 1 + beta - q * beta * (zold - beta) / (zold * (zold + s = s + 1 Loop Until Math.Abs(znew - zold) < 0.001 Or s > 50 If s > 50 Then Zv = 0 Else Zv = znew End If Return Zl Return Zv End Function Function calculofi(ByVal zv As Double, ByVal zl As Double, ByVal beta As Double, ByVal q As Double) il = Math.Log((zl + beta) / zl) iv = Math.Log((zv + beta) / zv) Lnfil = zl - 1 - Math.Log((zl - beta)) - q * il Lnfiv = zv - 1 - Math.Log((zv - beta)) - q * iv Return il Return iv Return Lnfil Return lnfiv End Function
beta))
Function calculoentalpia(ByVal T, ByVal Zv, ByVal ByVal q, ByVal il, ByVal iv) Dim Hr, derivadaalfa, A, B, C As Double A = 1.637 * (T - Tref) B = 0.001 * 22.706 / 2 * (T ^ 2 - Tref ^ 2) C = (0.000001 * (-6.9159) / 3 * (T ^ 3 - Tref deltaHid = 8.314 * (A + B + C) A = Math.Log((1 + (0.48 + 1.574 * w - 0.716 * Tc) * 1.01) ^ 0.5) ^ 2) B = Math.Log((1 + (0.48 + 1.574 * w - 0.716 * Tc) * 0.99) ^ 0.5) ^ 2) C = Math.Log((T / Tc) * 1.01) - Math.Log((T / derivadaalfa = (A - B) / C A = (Zl - 1 + (derivadaalfa - 1) * q * il) Hr = 8.314 * T * A REM J/ mol Hliqsat = deltaHid + Hr A = (Zv - 1 + (derivadaalfa - 1) * q * iv) Hr = 8.314 * T * A Hvapsat = deltaHid + Hr Return Hliqsat Return Hvapsat Return deltaHid End Function Private Sub Generartabla() Dim objexcel As Object objexcel = CreateObject("Excel.application") Dim i As Integer
With objexcel .workbooks.add() For i = n To 0 Step -1 .cells(1, 1) = " Curva de saturacion Propeno-SRK " .cells(1, 4) = " referencia a 25C " .cells(2, 1) = " Psat (bar) " .cells(2, 2) = " Tsat (C) " .cells(2, 3) = "Pr" .cells(2, 4) = "Tr" .cells(2, 5) = "zl" .cells(2, 6) = "zv" .cells(2, 7) = "lnfil" .cells(2, 8) = "lnfiv" .cells(2, 9) = "Hrliq" .cells(2, 10) = "Hrvap" .cells(2, 11) = "deltaHid" .cells(2, 12) = "lambdavap" .cells(3 + i, 1) = TAB(i, 0) .cells(3 + i, 2) = TAB(i, 1) - 273 .cells(3 + i, 3) = TAB(i, 0) / Pc .cells(3 + i, 4) = TAB(i, 1) / Tc .cells(3 + i, 5) = TAB(i, 2) .cells(3 + i, 6) = TAB(i, 3) .cells(3 + i, 7) = TAB(i, 4) .cells(3 + i, 8) = TAB(i, 5) .cells(3 + i, 9) = TAB(i, 6) .cells(3 + i, 10) = TAB(i, 7) .cells(3 + i, 11) = TAB(i, 8)
.cells(3 + i, 12) = TAB(i, 7) - TAB(i, 6) Next End With objexcel.visible = True End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load curvasat() End End Sub End Class