You are on page 1of 29

APENDICE C

Código de Fuente
APENDICE A
Diagrama de flujo
ANEXO C
Tabla de superficies y pesos de conductos rectangulares
Acero galvanizado (FK-FM)
Option Explicit
Dim reD As String
Dim dpexC() As Single, VelocidaD As Single
Dim CantTotaldeTramoS As Integer
Dim SWnuevO As Boolean
Private Sub cmbDuctos_Click()
Data1.Recordset.AbsolutePosition = cmbDuctos.ListIndex
TD.TextMatrix(1, 1) = Data1.Recordset.Fields("Tramo")
TD.TextMatrix(2, 1) = Data1.Recordset.Fields("Longitud")
TD.TextMatrix(3, 1) = Data1.Recordset.Fields("Caudal")
TD.TextMatrix(4, 1) = Data1.Recordset.Fields("FactorFricción")
TD.TextMatrix(5, 1) = Data1.Recordset.Fields("AlturaMaxima")
If Data1.Recordset.Fields("Ubicación") = "Interior" Then
Combo1.ListIndex = 0
ElseIf Data1.Recordset.Fields("Ubicación") = "Exterior" Then
Combo1.ListIndex = 1
Else
MsgBox "Debe asignar la Ubicación del ducto"
TD.TextMatrix(6, 1) = "Falta Dato"
End If
SSTab1.Tab = 0
End Sub
Private Sub cmdCalcular_Click()
CantTotaldeTramoS = Data1.Recordset.RecordCount
ReDim dpexC(CantTotaldeTramoS) As Single
dpexC(0) = 0
PrimerTramodelDuctoPrincipal
DimensionadodelConductoPrincipal
PerdidadePresionenelTramoPrincipal
DimensionamientodelosConductosSecundarios
MostrarResultados
End Sub
Private Sub cmdSistRecEst_Click()
Dim i As Integer, cRamal As Integer
Dim area_conducto As Single, caudal As Single, longitud As Single
Dim ancho As Single, altura As Single, factorfricción As Single, AlturaMaxima As
Single
Dim cp As Single, diametro_equivalente As Single, Perdida_Carga_Unitaria As
Single
Dim DECP As Single, AnchoCP As Single, VelCP As Single, AlturaCP As Single,
DETanteo As Single
Dim SWTanteo As Boolean, SWTerminar As Boolean

1
Dim clavei As Integer, clavef As Integer, clave As String
Dim letotal As Single, dptotal As Single, conttramosppales As Integer
Dim Le As Single, dp As Single
Dim clave1 As Integer, clave2 As Integer, clave3 As String, posic As Integer
Dim k As Single, c1 As Single, C2 As Single, r As Single
Dim n As Single, g As Single
Dim SWvuelta As Integer, Perdida_Carga_Unitaria_Tanteo As Single, dpre As
Single, dpder As Single
Dim swTanteo_Perdida_Carga_Unitaria As Boolean, swLe As Boolean
conttramosppales = 0
CantTotaldeTramoS = Data1.Recordset.RecordCount
ReDim dpexC(CantTotaldeTramoS) As Single
'dpexC(0) = 0
PrimerTramodelDuctoPrincipal 'Dimensionado del primer tramo del conducto
principal IGUAL QUE EL DE SIST DE PÉRDIDA DE PRESION CTTE
SWTerminar = True
clavei = "0"
clavef = "1"
c1 = VelocidaD
Do While SWTerminar = True
clave = Trim(clavei + 1) & "-" & Trim(clavef + 1)
Data1.Recordset.MoveFirst
Data1.Recordset.FindFirst "Tramo='" & clave & "'"
If Not Data1.Recordset.NoMatch Then
longitud = Data1.Recordset.Fields("Longitud")
swLe = True
Do While swLe = True
caudal = Data1.Recordset.Fields("Caudal")
factorfricción = Data1.Recordset.Fields("FactorFricción")
AlturaMaxima = Data1.Recordset.Fields("AlturaMaxima")
Dim SWveloc As Boolean, epsilon As Single
SWveloc = False
C2 = 1
VelCP = C2
epsilon = 1
Do While SWveloc = False '''tanteo de la velocidad
C2 = c1 / ((0.02461 * factorfricción * longitud * epsilon ^ 2.43 * VelCP ^
0.43) / (0.75 * 1.2 * caudal ^ 0.61) + 1) ^ 0.5
If AlturaMaxima = 0 Then
area_conducto = caudal / (3600 * C2) 'm²
AnchoCP = Sqr(area_conducto) 'mm
AlturaCP = AnchoCP
Else

2
AlturaCP = AlturaMaxima
area_conducto = caudal / (3600 * C2) 'm²
AnchoCP = area_conducto / AlturaCP 'mm
SWTanteo = True
End If
DECP = de(AlturaCP, AnchoCP)
Data1.Recordset.FindFirst "Tramo='" & clave & "'"
Data1.Recordset.Edit
Data1.Recordset.Fields("lecodos") = 0
Data1.Recordset.Fields("dpacc") = 0
Data1.Recordset.Fields("ancho") = Format(AnchoCP, "0.000")
Data1.Recordset.Update
If Not Data1.Recordset.NoMatch Then
Data2.RecordSource = "SELECT * FROM ACCESORIOS WHERE Tramo='"
& clave & "'"
Data2.Refresh
If Not Data2.Recordset.EOF Then '*****************Si tiene
accesorios*********
Data2.Recordset.MoveFirst
Do While Not Data2.Recordset.EOF
Accesorios Trim(Data2.Recordset.Fields("Tipo")), clavei, clavef, clave, Le,
dp
letotal = letotal + Le
dptotal = dptotal + dp
Le = 0: dp = 0
Data2.Recordset.MoveNext
Loop
End If
Data1.Recordset.Edit
Data1.Recordset.Fields("le") = Format(Data1.Recordset.Fields("longitud") +
letotal, "0.00")
Data1.Recordset.Fields("dp") = Format(Data1.Recordset.Fields("le") *
Data1.Recordset.Fields("dpl") + Data1.Recordset.Fields("dpder") +
Data1.Recordset.Fields("dpre") + Data1.Recordset.Fields("dprej"), "0.0")
Data1.Recordset.Update
letotal = 0: Le = 0: dptotal = 0: dp = 0
Else
SWTerminar = False
End If
epsilon = 31.3623 * AnchoCP * AlturaCP / (3.14 * DECP ^ 2)
If Abs(C2 - VelCP) <= 0.01 Then
conttramosppales = conttramosppales + 1
SWveloc = True

3
Else
VelCP = C2
End If
Loop
If Abs(Data1.Recordset.Fields("le") - longitud) <= 0.1 Then
swLe = False
Else
longitud = Format(longitud + 0.1, "0.0")
End If
Loop
AlturaCP = AlturaCP 'm
AnchoCP = AnchoCP 'm
' dpexC(0) = dpexC(0) + Data1.Recordset.Fields("dp")
Data1.Recordset.Edit
Data1.Recordset.Fields("Alto") = Format(AlturaCP, "0.000")
Data1.Recordset.Fields("Ancho") = Format(AnchoCP, "0.000")
Data1.Recordset.Fields("Velocidad") = Format(VelCP, "0.00")
c1 = VelCP
Data1.Recordset.Fields("Diametro_Equivalente") = Format(DECP, "0.0000")
cp = 4 * Data1.Recordset.Fields("Caudal") / (3600 * 3.14 *
Data1.Recordset.Fields("Diametro_Equivalente") ^ 2) 'm/s
Perdida_Carga_Unitaria = dp_l_2y10(Data1.Recordset.Fields("FactorFricción"),
Data1.Recordset.Fields("Diametro_Equivalente"), cp)
Data1.Recordset.Fields("dpl") = Format(Perdida_Carga_Unitaria, "0.000")
Data1.Recordset.Fields("dprej") = 0
Data1.Recordset.Fields("dpder") = 0
Data1.Recordset.Fields("dpacc") = 0
Data1.Recordset.Update
clavei = clavei + 1
clavef = clavef + 1
Else
SWTerminar = False
Data1.Recordset.Edit
Data1.Recordset.Fields("dprej") = 0
Data1.Recordset.Fields("dpder") = 0
Data1.Recordset.Fields("dpacc") = 0
Data1.Recordset.Update
End If
Loop
clave = Trim(clavei) & "-" & Trim(clavef)
Data1.Recordset.MoveFirst
Data1.Recordset.FindFirst "Tramo='" & clave & "'"
Data1.Recordset.Edit

4
Data1.Recordset.Fields("dprej") = 20
Data1.Recordset.Update
PerdidadePresionenelTramoPrincipal
DimensionamientodelosConductosSecundarios
MostrarResultados
End Sub
Private Sub Combo1_Click()
Data1.Recordset.MoveFirst
Data1.Recordset.FindFirst "Tramo='" & cmbDuctos.List(cmbDuctos.ListIndex) & "'"
Data1.Recordset.Edit
Data1.Recordset.Fields("Ubicación") = Combo1.List(Combo1.ListIndex)
Data1.Recordset.Update
TD.TextMatrix(6, 1) = Data1.Recordset.Fields("Ubicación")
Combo1.Visible = False
End Sub

Private Sub Form_Load()


Combo1.AddItem "Interior"
Combo1.AddItem "Exterior"
TD.ColWidth(0) = TD.Width / 2.1: TD.ColWidth(1) = TD.Width / 4.7
TxtDuct.Width = TD.ColWidth(0)
TD.TextMatrix(0, 0) = "Variable"
TD.TextMatrix(0, 1) = "Valor"
TD.TextMatrix(0, 2) = "Unidad"
TD.TextMatrix(1, 0) = "Tramo"
TD.TextMatrix(2, 0) = "Longitud": TD.TextMatrix(2, 2) = "[m]"
TD.TextMatrix(3, 0) = "Caudal": TD.TextMatrix(3, 2) = "[m³/hr]"
TD.TextMatrix(4, 0) = "Factor de Fricción": TD.TextMatrix(4, 2) = ""
TD.TextMatrix(5, 0) = "Limitar Altura": TD.TextMatrix(5, 2) = "[m]"
TD.TextMatrix(6, 0) = "Exterior/Interior"
Data1.DatabaseName = ARCHIVO
Data1.RecordSource = "DuctosPresiónCtte"
Data1.Refresh
Data2.DatabaseName = ARCHIVO
Data2.RecordSource = "Accesorios"
Data2.Refresh
If Not Data1.Recordset.EOF Then
Data1.Recordset.MoveFirst
Do While Not Data1.Recordset.EOF
cmbDuctos.AddItem Data1.Recordset.Fields("Tramo")
Data1.Recordset.MoveNext
Loop
cmbDuctos.ListIndex = 0

5
Else
SWnuevO = True
End If
End Sub
Private Sub TD_Click()
If TD.Row > 0 And TD.Row < 6 Then
If TD.Col = 1 Then
With TxtDuct
.Height = TD.CellHeight
.Width = TD.CellWidth * 0.96
.Left = TD.Left + TD.CellLeft
.Top = TD.Top + TD.CellTop
.Visible = True
.Text = TD.TextMatrix(TD.RowSel, TD.ColSel)
.SetFocus
.SelStart = 0
.SelLength = Len(TxtDuct.Text)
.SetFocus
.SelStart = 0
.SelLength = Len(TxtDuct.Text)
End With
Else
SSTab1.SetFocus
End If
Else
With Combo1
.Width = TD.CellWidth
.Left = TD.Left + TD.CellLeft
.Top = TD.Top + TD.CellTop
.Visible = True
End With
End If
End Sub
Private Sub TxtDuct_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case Asc("0") To Asc("9"), Asc("-"), 8 'Acepta valores numéricos del 0 al 9 y
BackSpace.
Case Asc("."), Asc(",")
If InStr(TxtDuct, ".") Or InStr(TxtDuct, ",") Then
KeyAscii = 0 'Acepta el punto decimal.
Else
If Mid$(Format$(0, "0.00"), 2, 1) = "," Then
TxtDuct = TxtDuct & ",": KeyAscii = 0: SendKeys "{end}"

6
Else
TxtDuct = TxtDuct & ".": KeyAscii = 0: SendKeys "{end}"
End If
End If
Case 13 'Tecla Enter
KeyAscii = 0
If Not Data1.Recordset.EOF Then
Data1.Recordset.MoveFirst
If TD.Row <> 1 Then
Data1.Recordset.FindFirst "Tramo='" & TD.TextMatrix(1, 1) & "'"
Else
Data1.Recordset.FindFirst "Tramo='" & TxtDuct & "'"
End If
If Data1.Recordset.NoMatch Then
SWnuevO = True
Else
Data1.Recordset.Edit
SWnuevO = False
End If
Else
SWnuevO = True
End If
Dim actualizacombo As Boolean
Select Case TD.Row
Case 1
Data1.Recordset.FindFirst "Tramo='" & TxtDuct & "'"
If Data1.Recordset.NoMatch Then
If SWnuevO Then
Data1.Recordset.AddNew
Else
Data1.Recordset.Edit
End If
Data1.Recordset.Fields("Tramo") = TxtDuct
actualizacombo = True
If SWnuevO Then
Data1.Recordset.Fields("Longitud") = "0"
Data1.Recordset.Fields("Caudal") = "0"
Data1.Recordset.Fields("FactorFricción") = "0"
Data1.Recordset.Fields("AlturaMaxima") = "0"
Data1.Recordset.Update
Data1.Recordset.MoveLast
TD.TextMatrix(1, 1) = Data1.Recordset.Fields("Tramo")
TD.TextMatrix(2, 1) = Data1.Recordset.Fields("Longitud")

7
TD.TextMatrix(3, 1) = Data1.Recordset.Fields("Caudal")
TD.TextMatrix(4, 1) = Data1.Recordset.Fields("FactorFricción")
TD.TextMatrix(5, 1) = Data1.Recordset.Fields("AlturaMaxima")
SWnuevO = False
Else
Data1.Recordset.Update
End If
Else
MsgBox "Nombre duplicado"
Exit Sub
End If
Case 2
Data1.Recordset.Fields("Longitud") = TxtDuct
Data1.Recordset.Update
Case 3
Data1.Recordset.Fields("Caudal") = TxtDuct
Data1.Recordset.Update
Case 4
Data1.Recordset.Fields("FactorFricción") = TxtDuct
Data1.Recordset.Update
Case 5
Data1.Recordset.Fields("AlturaMaxima") = TxtDuct
Data1.Recordset.Update
End Select
Dim posic As Integer
posic = Data1.Recordset.AbsolutePosition
If actualizacombo Then
cmbDuctos.Clear
Data1.Recordset.MoveFirst
Do While Not Data1.Recordset.EOF
cmbDuctos.AddItem Data1.Recordset.Fields("Tramo")
Data1.Recordset.MoveNext
Loop
cmbDuctos.ListIndex = posic
End If
Case Else
KeyAscii = 0 'El resto de los caracteres y símbolos especiales.
End Select
End Sub
Private Sub TxtDuct_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
TD.TextMatrix(TD.RowSel, TD.ColSel) = TxtDuct
TxtDuct.Visible = False

8
End If
End Sub
Private Sub TxtDuct_LostFocus()
TxtDuct.Visible = False
End Sub
Public Sub Accesorios(ByVal tipo As String, ByVal clavei, ByVal clavef, ByVal
clave As String, ByRef Le As Single, ByRef dp As Single)
Dim c1 As Single, C2 As Single, posic As Integer, clave1 As Integer, clave2 As
Integer, clave3 As String
Dim g As Single, n As Single, r As Single, k As Single
Select Case tipo
Case "Derivaciones"
c1 = Data1.Recordset.Fields("Velocidad")
posic = Data1.Recordset.AbsolutePosition
clave1 = clavei
clave2 = clavef
clave3 = clave1 & "-" & clave2
Data1.Recordset.FindFirst "Tramo='" & clave3 & "'"
C2 = Data1.Recordset.Fields("Velocidad")
dp = -0.75 * 1.2 * (C2 ^ 2 - c1 ^ 2) / 2
Data1.Recordset.AbsolutePosition = posic
Data1.Recordset.Edit
Data1.Recordset.Fields("dpre") = Format(-0.75 * 1.2 * (C2 ^ 2 - c1 ^ 2) / 2, "0.00")
Data1.Recordset.Update
Case "Codo Circular sin Guias" 'Necesita ángulo de giro y sentido de giro
If Data2.Recordset.Fields("giro") = 0 Then
g = Data1.Recordset.Fields("alto") 'm
n = Data1.Recordset.Fields("ancho") 'm
Else
g = Data1.Recordset.Fields("ancho") 'm
n = Data1.Recordset.Fields("alto") 'm
End If
Le = (Data2.Recordset.Fields("AngulodeGiro") / 90) * g * (0.33 * 1.25) ^ (-2.13 *
(n / g) ^ 0.126)
Data1.Recordset.Edit
Data1.Recordset.Fields("lecodos") = Format(Data1.Recordset.Fields("lecodos") +
Le, "0.00")
Data1.Recordset.Update
Case "Codo Recto sin Guias" 'Necesita sentido de giro
If Data2.Recordset.Fields("giro") = 0 Then
g = Data1.Recordset.Fields("alto")
Else
g = Data1.Recordset.Fields("ancho")

9
End If
Le = 60 * g
Data1.Recordset.Edit
Data1.Recordset.Fields("lecodos") = Format(Data1.Recordset.Fields("lecodos") +
60 * g, "0.00")
Data1.Recordset.Update
Case "Codo Recto con Guias"
If Data2.Recordset.Fields("giro") = 0 Then
g = Data1.Recordset.Fields("alto")
Else
g = Data1.Recordset.Fields("ancho")
End If
Le = 15 * g
Data1.Recordset.Edit
Data1.Recordset.Fields("lecodos") = Format(Data1.Recordset.Fields("lecodos") +
15 * g, "0.00")
Data1.Recordset.Update
Case "Transformación"
k = 0.04
dp = k * 1.2 * Data1.Recordset.Fields("Velocidad") / 2
Data1.Recordset.Fields("dpacc") = Data1.Recordset.Fields("dpacc") + Format(dp,
"0.00")
Case "Expansión" 'Necesita ángulo de expansión
c1 = Data1.Recordset.Fields("Velocidad")
posic = Data1.Recordset.AbsolutePosition
clave1 = clavei + 1
clave2 = clavef + 1
clave3 = clave1 & "-" & clave2
Data1.Recordset.FindFirst "Tramo='" & clave3 & "'"
C2 = Data1.Recordset.Fields("Velocidad")
If C2 / c1 <= 0.2 Then
Select Case Data2.Recordset.Fields("angulodeExpansion")
Case "5º"
k = 0.25
Case "10º"
k = 0.22
Case "15º"
k = 0.2
Case "20"
k = 0.18
Case "30º"
k = 0.15
Case "40º"

10
k = 0.13
End Select
ElseIf C2 / c1 <= 0.4 Then
Select Case Data2.Recordset.Fields("angulodeExpansion")
Case "5º"
k = 0.27
Case "10º"
k = 0.25
Case "15º"
k = 0.23
Case "20"
k = 0.22
Case "30º"
k = 0.2
Case "40º"
k = 0.19
End Select
Else
Select Case Data2.Recordset.Fields("angulodeExpansion")
Case "5º"
k = 0.28
Case "10º"
k = 0.26
Case "15º"
k = 0.25
Case "20"
k = 0.24
Case "30º"
k = 0.24
Case "40º"
k = 0.23
End Select
End If
dp = k * 1.2 * (c1 ^ 2 - C2 ^ 2) / 2
Data1.Recordset.AbsolutePosition = posic
Data1.Recordset.Fields("dpacc") = Data1.Recordset.Fields("dpacc") + Format(dp,
"0.00")
Case "Contracción"
Select Case Data2.Recordset.Fields("angulodecontraccion")
Case "30º"
k = 0.311
Case "45º"
k = 0.317

11
Case "60º"
k = 0.326
End Select
c1 = Data1.Recordset.Fields("Velocidad")
posic = Data1.Recordset.AbsolutePosition
clave1 = clavei + 1
clave2 = clavef + 1
clave3 = clave1 & "-" & clave2
Data1.Recordset.FindFirst "Tramo='" & clave & "'"
C2 = Data1.Recordset.Fields("Velocidad")
dp = k * 1.2 * (C2 ^ 2 - c1 ^ 2) / 2
Data1.Recordset.AbsolutePosition = posic
Data1.Recordset.Fields("dpacc") = Data1.Recordset.Fields("dpacc") + Format(dp,
"0.00")
Case "Entrada"
Select Case Data2.Recordset.Fields("tipodeentrada")
Case "Suave"
k = 0.1
Case "Brusca"
k = 0.009
Case "Reentrante"
k = 0.25
End Select
dp = k * 1.2 * Data1.Recordset.Fields("Velocidad") / 2
Data1.Recordset.Fields("dpacc") = Data1.Recordset.Fields("dpacc") + Format(dp,
"0.00")
Case "Salida"
Select Case Data2.Recordset.Fields("tipodesalida")
Case "Suave"
k=0
Case "Brusca"
k=0
Case "Orificio Redondo"
If Data2.Recordset.Fields("areadelorificio") / (3.14 *
Data1.Recordset.Fields("Diametro_Equivalente") / 4) <= 0.25 Then
k = 0.7
ElseIf Data2.Recordset.Fields("areadelorificio") / (3.14 *
Data1.Recordset.Fields("Diametro_Equivalente") / 4) <= 0.5 Then
k = 0.57
Else
k = 0.33
End If
End Select

12
dp = k * 1.2 * Data1.Recordset.Fields("Velocidad") / 2
Data1.Recordset.Fields("dpacc") = Data1.Recordset.Fields("dpacc") + Format(dp,
"0.00")
Case "Obstáculo Circular"
If Data2.Recordset.Fields("diametroObstaculocircular") /
Data1.Recordset.Fields("Alto") <= 0.1 Then
k = 0.06
ElseIf Data2.Recordset.Fields("diametroObstaculocircular") /
Data1.Recordset.Fields("Alto") <= 0.25 Then
k = 0.16
Else
k = 0.6
End If
dp = k * 1.2 * Data1.Recordset.Fields("Velocidad") / 2
Data1.Recordset.Fields("dpacc") = Data1.Recordset.Fields("dpacc") + Format(dp,
"0.00")
Case "Obstáculo Cuadrado"
If Data2.Recordset.Fields("altoObstaculocuadrado") /
Data1.Recordset.Fields("Alto") <= 0.1 Then
k = 0.21
ElseIf Data2.Recordset.Fields("altoObstaculocuadrado") /
Data1.Recordset.Fields("Alto") <= 0.25 Then
k = 0.42
Else
k = 1.21
End If
dp = k * 1.2 * Data1.Recordset.Fields("Velocidad") / 2
Data1.Recordset.Fields("dpacc") = Data1.Recordset.Fields("dpacc") + Format(dp,
"0.00")
Case "Obstáculo Aerodinámico"
If Data2.Recordset.Fields("altoObstaculoAerodinamico") /
Data1.Recordset.Fields("Alto") <= 0.1 Then
k = 0.02
ElseIf Data2.Recordset.Fields("altoObstaculoAerodinamico") /
Data1.Recordset.Fields("Alto") <= 0.25 Then
k = 0.07
Else
k = 0.27
End If
dp = k * 1.2 * Data1.Recordset.Fields("Velocidad") / 2
Data1.Recordset.Fields("dpacc") = Data1.Recordset.Fields("dpacc") + Format(dp,
"0.00")
Case "Pérdidas Particulares"

13
dp = Data2.Recordset.Fields("PerdidaParticular")
Data1.Recordset.Fields("dpacc") = Data1.Recordset.Fields("dpacc") + Format(dp,
"0.00")
End Select
End Sub
Public Function derivación(ByVal caudald As Single, ByVal caudalp As Single,
ByVal ad As Single, ByVal ap As Single, ByVal cd As Single, ByVal cp As Single)
Dim k(10, 7) As Single
k(1, 0) = 0.1
k(2, 0) = 0.2
k(3, 0) = 0.3
k(4, 0) = 0.4
k(5, 0) = 0.5
k(6, 0) = 0.6
k(7, 0) = 0.7
k(8, 0) = 0.8
k(9, 0) = 0.9
k(10, 0) = 1

k(0, 1) = 0.25
k(0, 2) = 0.3
k(0, 3) = 0.4
k(0, 4) = 0.5
k(0, 5) = 0.6
k(0, 6) = 0.75
k(0, 7) = 1

k(1, 1) = 0.382
k(2, 1) = 0.34
k(3, 1) = 0.477
k(4, 1) = 0.792
k(5, 1) = 1.285
k(6, 1) = 1.957
k(7, 1) = 2.808
k(8, 1) = 3.836
k(9, 1) = 5.043
k(10, 1) = 6.429

k(1, 2) = 0.398
k(2, 2) = 0.39
k(3, 2) = 0.493
k(4, 2) = 0.706
k(5, 2) = 1.03

14
k(6, 2) = 1.465
k(7, 2) = 2.01
k(8, 2) = 2.666
k(9, 2) = 3.432
k(10, 2) = 4.309

k(1, 3) = 0.435
k(2, 3) = 0.356
k(3, 3) = 0.377
k(4, 3) = 0.498
k(5, 3) = 0.719
k(6, 3) = 1.041
k(7, 3) = 1.462
k(8, 3) = 1.983
k(9, 3) = 2.604
k(10, 3) = 3.325

k(1, 4) = 0.588
k(2, 4) = 0.385
k(3, 4) = 0.269
k(4, 4) = 0.241
k(5, 4) = 0.3
k(6, 4) = 0.447
k(7, 4) = 0.682
k(8, 4) = 1.004
k(9, 4) = 1.413
k(10, 4) = 1.911

k(1, 5) = 0.681
k(2, 5) = 0.516
k(3, 5) = 0.409
k(4, 5) = 0.359
k(5, 5) = 0.367
k(6, 5) = 0.432
k(7, 5) = 0.555
k(8, 5) = 0.736
k(9, 5) = 0.974
k(10, 5) = 1.27

k(1, 6) = 0.64
k(2, 6) = 0.501
k(3, 6) = 0.404
k(4, 6) = 0.347

15
k(5, 6) = 0.332
k(6, 6) = 0.358
k(7, 6) = 0.425
k(8, 6) = 0.534
k(9, 6) = 0.684
k(10, 6) = 0.875
k(1, 7) = 0.724
k(2, 7) = 0.594
k(3, 7) = 0.486
k(4, 7) = 0.4
k(5, 7) = 0.336
k(6, 7) = 0.294
k(7, 7) = 0.274
k(8, 7) = 0.276
k(9, 7) = 0.3
k(10, 7) = 0.346
Dim y1 As Single, y2 As Single, y3 As Single
Dim i As Integer, l As Integer
If (caudald / caudalp) < 0.2 Then
i=2
ElseIf caudald / caudalp < 0.3 Then
i=3
ElseIf caudald / caudalp < 0.4 Then
i=4
ElseIf caudald / caudalp < 0.5 Then
i=5
ElseIf caudald / caudalp < 0.6 Then
i=6
ElseIf caudald / caudalp < 0.7 Then
i=7
ElseIf caudald / caudalp < 0.8 Then
i=8
ElseIf caudald / caudalp < 0.9 Then
i=9
Else
i = 10
End If
If (ad / ap) < 0.3 Then
l=2
ElseIf ad / ap < 0.4 Then
l=3
ElseIf ad / ap < 0.5 Then
l=4

16
ElseIf ad / ap < 0.6 Then
l=5
ElseIf ad / ap < 0.75 Then
l=6
Else
l=7
End If
y1 = k(i - 1, l - 1) + ((k(i, l - 1) - k(i - 1, l - 1)) / (k(i, 0) - k(i - 1, 0))) * ((caudald /
caudalp) - k(i - 1, 0))
y2 = k(i - 1, l) + ((k(i, l) - k(i - 1, l)) / (k(i, 0) - k(i - 1, 0))) * ((caudald / caudalp) - k(i
- 1, 0))
derivación = (y2 - y1) / (k(0, l) - k(0, l - 1)) * ((ad / ap) - k(0, l - 1)) + y1
End Function
Public Sub MostrarResultados()
Dim minveloc As Single, maxveloc As Single
Dim i As Integer, posminveloc As Integer, posmaxveloc As Integer
Dim sfml As Single, sfkl As Single, sfml2 As Single
Data3.DatabaseName = App.Path & "\Base de Datos\datos.mdb"
Data3.RecordSource = "datos"
Data3.Refresh
Data1.Recordset.MoveFirst
i=0
minveloc = 100
maxveloc = 0
With frmResultados
.TG.Rows = Data1.Recordset.RecordCount + 1
.TG.TextMatrix(0, 0) = "Tramo"
.TG.TextMatrix(0, 1) = "Longitud [m]"
.TG.TextMatrix(0, 2) = "Caudal [m³/h]"
.TG.TextMatrix(0, 3) = "Velocidad [m/s]"
.TG.TextMatrix(0, 4) = "FactorFricción"
.TG.TextMatrix(0, 5) = "AlturaMaxima [m]"
.TG.TextMatrix(0, 6) = "Diametro_Equivalente [mm]"
.TG.TextMatrix(0, 7) = "Ancho [mm]"
.TG.TextMatrix(0, 8) = "Alto [mm]"
.TG.TextMatrix(0, 9) = "lecodos [m]"
.TG.TextMatrix(0, 10) = "le [m]"
.TG.TextMatrix(0, 11) = "dpl [Pa/m]"
.TG.TextMatrix(0, 12) = "dpder [Pa]"
.TG.TextMatrix(0, 13) = "dpre [Pa]"
.TG.TextMatrix(0, 14) = "dpacc [Pa]"
.TG.TextMatrix(0, 15) = "dprej [Pa]"
.TG.TextMatrix(0, 16) = "dp [Pa]"

17
.TG.TextMatrix(0, 17) = "dpexc [Pa]"
.TG.TextMatrix(0, 18) = "Alto+Ancho"
.TG.TextMatrix(0, 19) = "FK"
.TG.TextMatrix(0, 20) = "FM"
.TG.TextMatrix(0, 21) = "A.G. FK*L[kg]"
.TG.TextMatrix(0, 22) = "F.V. FM*L[m²]"
.TG.TextMatrix(0, 23) = "A+M.R+P.C FM*L[m²]"
Do While Not Data1.Recordset.EOF
i=i+1
.TG.TextMatrix(i, 0) = Data1.Recordset.Fields("Tramo")
.TG.TextMatrix(i, 1) = Data1.Recordset.Fields("Longitud")
.TG.TextMatrix(i, 2) = Data1.Recordset.Fields("Caudal")
.TG.TextMatrix(i, 3) = Data1.Recordset.Fields("Velocidad")
If .TG.TextMatrix(i, 3) < minveloc Then
minveloc = .TG.TextMatrix(i, 3)
posminveloc = i
End If
If .TG.TextMatrix(i, 3) > maxveloc Then
maxveloc = .TG.TextMatrix(i, 3)
posmaxveloc = i
End If
.TG.TextMatrix(i, 4) = Data1.Recordset.Fields("FactorFricción")
.TG.TextMatrix(i, 5) = Data1.Recordset.Fields("AlturaMaxima")
.TG.TextMatrix(i, 6) = Data1.Recordset.Fields("Diametro_Equivalente") * 1000
'[mm]
.TG.TextMatrix(i, 7) = Data1.Recordset.Fields("Ancho") * 1000 '[mm]
.TG.TextMatrix(i, 8) = Data1.Recordset.Fields("Alto") * 1000 '[mm]
.TG.TextMatrix(i, 9) = Data1.Recordset.Fields("lecodos")
.TG.TextMatrix(i, 10) = Data1.Recordset.Fields("le")
.TG.TextMatrix(i, 11) = Data1.Recordset.Fields("dpl")
.TG.TextMatrix(i, 12) = Data1.Recordset.Fields("dpder")
.TG.TextMatrix(i, 13) = Data1.Recordset.Fields("dpre")
.TG.TextMatrix(i, 14) = Data1.Recordset.Fields("dpacc")
.TG.TextMatrix(i, 15) = Data1.Recordset.Fields("dprej")
.TG.TextMatrix(i, 16) = Data1.Recordset.Fields("dp")
.TG.TextMatrix(i, 17) = Format(dpexC(i - 1), "0.0")
.TG.TextMatrix(i, 18) = Int((Data1.Recordset.Fields("Ancho") +
Data1.Recordset.Fields("Alto")) / 0.0254)
Data3.Recordset.MoveFirst
Data3.Recordset.FindFirst "tres=" & CDbl(.TG.TextMatrix(i, 18))
.TG.TextMatrix(i, 19) = Data3.Recordset.Fields("cinco")
.TG.TextMatrix(i, 20) = Data3.Recordset.Fields("uno")

18
.TG.TextMatrix(i, 21) = Format(Val(.TG.TextMatrix(i, 1)) *
Val(.TG.TextMatrix(i, 19)), "0.00")
If Data1.Recordset.Fields("Ubicación") = "Interior" Then
.TG.TextMatrix(i, 22) = Format(Val(.TG.TextMatrix(i, 1)) *
Val(.TG.TextMatrix(i, 20)), "0.00")
.TG.TextMatrix(i, 23) = 0
Else
.TG.TextMatrix(i, 22) = 0
.TG.TextMatrix(i, 23) = Format(Val(.TG.TextMatrix(i, 1)) *
Val(.TG.TextMatrix(i, 20)), "0.00")
End If
sfkl = sfkl + .TG.TextMatrix(i, 21)
sfml = sfml + .TG.TextMatrix(i, 22)
sfml2 = sfml2 + .TG.TextMatrix(i, 23)
Data1.Recordset.MoveNext
Loop
.TG.Col = 3
.TG.Row = posminveloc
.TG.CellForeColor = vbRed 'Velocidad Menor
.TG.Col = 3
.TG.Row = posmaxveloc
.TG.CellForeColor = vbBlue 'Velocidad Mayor
.TG.Rows = .TG.Rows + 3
.TG.TextMatrix(i + 1, 20) = "Sub-Total"
.TG.TextMatrix(i + 1, 21) = sfkl
.TG.TextMatrix(i + 1, 22) = sfml
.TG.TextMatrix(i + 1, 23) = sfml2
.TG.TextMatrix(i + 2, 20) = "10% Desp."
.TG.TextMatrix(i + 2, 21) = Format(sfkl * 0.1, "0.00")
.TG.TextMatrix(i + 2, 22) = Format(sfml * 0.1, "0.00")
.TG.TextMatrix(i + 2, 23) = Format(sfml2 * 0.1, "0.00")
.TG.TextMatrix(i + 3, 20) = "Total"
.TG.TextMatrix(i + 3, 21) = CSng(.TG.TextMatrix(i + 1, 21)) +
CSng(.TG.TextMatrix(i + 2, 21))
.TG.TextMatrix(i + 3, 22) = CSng(.TG.TextMatrix(i + 1, 22)) +
CSng(.TG.TextMatrix(i + 2, 22))
.TG.TextMatrix(i + 3, 23) = CSng(.TG.TextMatrix(i + 1, 23)) +
CSng(.TG.TextMatrix(i + 2, 23))
End With
frmResultados.Show
End Sub
Public Sub PrimerTramodelDuctoPrincipal()
Dim area_conducto As Single, cp As Single

19
Data1.Recordset.MoveFirst
VelocidaD = Val(InputBox("Velocidad Recomendada para el Primer Tramo del
Conducto Principal"))
If VelocidaD = 0 Then Exit Sub
area_conducto = Data1.Recordset.Fields("Caudal") / (3600 * VelocidaD) 'Área del
conducto del tramo inicial
Data1.Recordset.Edit
If Data1.Recordset.Fields("AlturaMaxima") = 0 Then 'se suponen iguales el ancho y
la altura
Data1.Recordset.Fields("Ancho") = Format(Sqr(area_conducto), "0.00")
Data1.Recordset.Fields("AlturaMaxima") = Data1.Recordset.Fields("Ancho")
Else
Data1.Recordset.Fields("Ancho") = Format(area_conducto /
Data1.Recordset.Fields("AlturaMaxima"), "0.00") 'm
End If
'Se guardan los resultados'
Data1.Recordset.Fields("Velocidad") = Format(VelocidaD, "0.00")
Data1.Recordset.Fields("Diametro_Equivalente") =
Format(de(Data1.Recordset.Fields("AlturaMaxima"),
Data1.Recordset.Fields("Ancho")), "0.0000") '[m]
cp = 4 * Data1.Recordset.Fields("Caudal") / (3600 * 3.14 *
Data1.Recordset.Fields("Diametro_Equivalente") ^ 2) 'm/s
Data1.Recordset.Fields("dpl") =
Format(dp_l_2y10(Data1.Recordset.Fields("FactorFricción"),
Data1.Recordset.Fields("Diametro_Equivalente"), cp), "0.000") '[Pa/m]
Data1.Recordset.Fields("dpre") = 0
Data1.Recordset.Fields("dpacc") = 0
Data1.Recordset.Update
End Sub
Public Sub DimensionamientodelosConductosSecundarios()
'*******Dimensionamiento de los conductos secundarios********
Dim contdp As Integer, SWvuelta As Integer, clavei As Integer, clavef As Integer,
posic As Integer
Dim SWTerminar As Boolean, swTanteo_Perdida_Carga_Unitaria As Boolean,
SWTanteo As Boolean
Dim clave As String
Dim caudalcp As Single, hCP As Single, wCP As Single
Dim DECP As Single, AlturaCP As Single, AnchoCP As Single, DETanteo As
Single
Dim Perdida_Carga_Unitaria As Single, Perdida_Carga_Unitaria_Tanteo As Single,
VelCP As Single, c1 As Single
Dim dpre As Single, dpder As Single, letotal As Single, Le As Single, dp As Single,
dptotal As Single, cRamal As Integer

20
SWTerminar = True
clavei = "0": clavef = "1"
Do While SWTerminar = True
clave = Trim(clavei + 1) & "-" & Trim(clavef + 1)
Data1.Recordset.MoveFirst
Data1.Recordset.FindFirst "Tramo='" & clave & "'"
If Not Data1.Recordset.NoMatch Then
If SWvuelta = 1 Then '******* Tramo Ppal la primera
vuelta
Perdida_Carga_Unitaria = 10
Data1.Recordset.Edit
Data1.Recordset.Fields("dprej") = 20
Data1.Recordset.Update
contdp = contdp + 1
Perdida_Carga_Unitaria_Tanteo = dpexC(contdp) -
Data1.Recordset.Fields("dprej")
swTanteo_Perdida_Carga_Unitaria = True
Do While swTanteo_Perdida_Carga_Unitaria
DECP = de2(Data1.Recordset.Fields("FactorFricción"),
Data1.Recordset.Fields("Caudal"), Perdida_Carga_Unitaria)
If Data1.Recordset.Fields("AlturaMaxima") <> 0 Then
AlturaCP = Data1.Recordset.Fields("AlturaMaxima") * 1000 '[mm]
AnchoCP = AlturaCP '[mm]
SWTanteo = False '***** determinar dimensiones a partir del DE
tanteando
Do While AlturaCP <= Data1.Recordset.Fields("AlturaMaxima") * 1000
DETanteo = (1.3 * (AlturaCP * AnchoCP) ^ 0.625 / (AlturaCP + AnchoCP) ^
0.25) 'mm
If Abs(DETanteo > (DECP * 1000)) Then
SWTanteo = True
Exit Do
Else
AnchoCP = AnchoCP + 1
End If
Loop
Else 'Se supone cuadrado
AlturaCP = DECP / 1.0931 * 1000 'm
AnchoCP = AlturaCP 'mm
SWTanteo = True
End If
If SWTanteo = True Then
VelCP = Data1.Recordset.Fields("Caudal") / (3600 * AnchoCP / 1000 *
AlturaCP / 1000) '[m/s]

21
AlturaCP = AlturaCP / 1000 '[m]
AnchoCP = AnchoCP / 1000 '[m]
Data1.Recordset.Edit
Data1.Recordset.Fields("ancho") = Format(AnchoCP, "0.00")
Data1.Recordset.Update
posic = Data1.Recordset.AbsolutePosition
Data1.Recordset.FindFirst "Tramo='" & clavei & "-" & (clavei + 1) & "'"
c1 = Data1.Recordset.Fields("velocidad")
caudalcp = Data1.Recordset.Fields("caudal")
wCP = Data1.Recordset.Fields("ancho")
hCP = Data1.Recordset.Fields("alto")
Data1.Recordset.AbsolutePosition = posic
dpre = -0.75 * 1.2 * (c1 ^ 2 - VelCP ^ 2) / 2
dpder = derivación(Data1.Recordset.Fields("Caudal"), caudalcp, AlturaCP *
AnchoCP, wCP * hCP, VelCP, c1) * 1.2 * c1 ^ 2 / 2
Data2.RecordSource = "SELECT * FROM ACCESORIOS WHERE Tramo='"
& clave & "'"
Data2.Refresh
If Not Data2.Recordset.EOF Then
Data2.Recordset.MoveFirst
letotal = 0
Do While Not Data2.Recordset.EOF
Accesorios Trim(Data2.Recordset.Fields("Tipo")), clavei, clavef, clave, Le,
dp
letotal = letotal + Le
Le = 0
dptotal = dptotal + dp
dp = 0
Data2.Recordset.MoveNext
Loop
End If
Le = Data1.Recordset.Fields("longitud") + letotal
If ((Perdida_Carga_Unitaria * Le + dpder + dpre) <
Perdida_Carga_Unitaria_Tanteo) Then
Data1.Recordset.Edit
Data1.Recordset.Fields("Alto") = Format(AlturaCP, "0.000")
Data1.Recordset.Fields("Ancho") = Format(AnchoCP, "0.000")
Data1.Recordset.Fields("Velocidad") = Format(VelCP, "0.00")
Data1.Recordset.Fields("Diametro_Equivalente") = Format(DECP, "0.0000")
Data1.Recordset.Fields("lecodos") = Format(letotal, "0.0000")
Data1.Recordset.Fields("dpl") = Format(Perdida_Carga_Unitaria, "0.000")
Data1.Recordset.Fields("dpder") = Format(dpder, "0.00")
Data1.Recordset.Fields("dpre") = Format(dpre, "0.0")

22
Data1.Recordset.Fields("dpacc") = 0
Data1.Recordset.Fields("le") = Format(Le, "0.00")
Data1.Recordset.Fields("lecodos") = Format(letotal, "0.00")
letotal = 0
Data1.Recordset.Fields("dp") = Format(Data1.Recordset.Fields("le") *
Data1.Recordset.Fields("dpl") + Data1.Recordset.Fields("dpder") +
Data1.Recordset.Fields("dpre") + Data1.Recordset.Fields("dprej"), "0.0")
Data1.Recordset.Update
clavei = clavei + 1
clavef = clavef + 1
Exit Do
Else
Perdida_Carga_Unitaria = Format(Perdida_Carga_Unitaria - 0.001, "0.000")
End If
End If
Loop 'Tanteo de Perdida Carga Unitaria
Else
clavei = clavei + 1
clavef = clavef + 1
End If
Else 'No es secundario
Data1.Recordset.Edit
Data1.Recordset.Fields("dprej") = 0
Data1.Recordset.Fields("dpder") = 0
Data1.Recordset.Fields("dpacc") = 0
Data1.Recordset.Update
If clavef = Data1.Recordset.RecordCount Then Exit Do
clavei = cRamal 'se prueba con un ramal
cRamal = cRamal + 1
SWvuelta = 1
End If
Loop
End Sub
Public Sub PerdidadePresionenelTramoPrincipal()
'************Pérdida de Presión en el Tramo Principal
Dim clavei As Integer, clavef As Integer, i As Integer, conttramosppales As Integer
Dim Le As Single, dp As Single, dptotal As Single, letotal As Single
Dim clave As String
Dim SWTerminar As Boolean
SWTerminar = True
clavei = "-1": clavef = "0"
dpexC(0) = 0
Do While SWTerminar = True

23
clave = Trim(clavei + 1) & "-" & Trim(clavef + 1)
Data1.Recordset.MoveFirst
Data1.Recordset.FindFirst "Tramo='" & clave & "'"
Data1.Recordset.Edit
Data1.Recordset.Fields("lecodos") = 0
Data1.Recordset.Fields("dpacc") = 0
Data1.Recordset.Update
If Not Data1.Recordset.NoMatch Then
Data2.RecordSource = "SELECT * FROM ACCESORIOS WHERE Tramo='" &
clave & "'"
Data2.Refresh
If Not Data2.Recordset.EOF Then '*****************Si tiene
accesorios*********
Data2.Recordset.MoveFirst
Do While Not Data2.Recordset.EOF 'Todos los accesorios del tramo
Accesorios Trim(Data2.Recordset.Fields("Tipo")), clavei, clavef, clave, Le, dp
letotal = letotal + Le
dptotal = dptotal + dp
Le = 0: dp = 0
Data2.Recordset.MoveNext
Loop
End If
Data1.Recordset.Edit
Data1.Recordset.Fields("le") = Format(Data1.Recordset.Fields("longitud") +
letotal, "0.00")
Data1.Recordset.Fields("dp") = Format(Data1.Recordset.Fields("le") *
Data1.Recordset.Fields("dpl") + Data1.Recordset.Fields("dpder") +
Data1.Recordset.Fields("dpre") + Data1.Recordset.Fields("dprej"), "0.0")
dpexC(0) = dpexC(0) + Data1.Recordset.Fields("dp")
Data1.Recordset.Update
letotal = 0: Le = 0: dptotal = 0: dp = 0
clavei = clavei + 1: clavef = clavef + 1 'Se pasa al siguiente tramo
conttramosppales = conttramosppales + 1
Else
SWTerminar = False
End If
Loop ''''''Hasta Aqui Perdida de presión en los Tramos del Conducto
Principal**********
Data1.Recordset.MoveFirst
For i = 1 To conttramosppales - 1 '*********Presión en los nudos y en las bocas
*********
dpexC(i) = dpexC(i - 1) - Data1.Recordset.Fields("dp")
Data1.Recordset.MoveNext

24
Next i
End Sub
Public Sub DimensionadodelConductoPrincipal()
Dim SWTerminar As Boolean, SWTanteo As Boolean
Dim clavei As Integer, clavef As Integer
Dim clave As String
Dim DECP As Single, AlturaCP As Single, AnchoCP As Single, DETanteo As
Single, VelCP As Single, dplAux As Single
SWTerminar = True
clavei = "0": clavef = "1"
clave = Trim(clavei) & "-" & Trim(clavef)
Data1.Recordset.FindFirst "Tramo='" & clave & "'"
dplAux = Data1.Recordset.Fields("dpl") 'Pérdida de carga unitaria del primer tramo
del ducto principal
Do While SWTerminar = True '*******Dimensionado del conducto
principal***********
clave = Trim(clavei + 1) & "-" & Trim(clavef + 1)
Data1.Recordset.MoveFirst
Data1.Recordset.FindFirst "Tramo='" & clave & "'"
If Not Data1.Recordset.NoMatch Then
DECP = de2(Data1.Recordset.Fields("FactorFricción"),
Data1.Recordset.Fields("Caudal"), dplAux)
If Data1.Recordset.Fields("AlturaMaxima") <> 0 Then
AlturaCP = Data1.Recordset.Fields("AlturaMaxima") * 1000 'mm
AnchoCP = AlturaCP 'mm
SWTanteo = False
Do While SWTanteo = False 'determinar dimensiones a partir del De tanteando
DETanteo = (1.3 * (AlturaCP * AnchoCP) ^ 0.625 / (AlturaCP + AnchoCP) ^
0.25) 'mm
If Abs(DETanteo > (DECP * 1000)) Then
SWTanteo = True
Else
AnchoCP = AnchoCP + 1
End If
Loop
Else 'Se supone cuadrado
AlturaCP = DECP / 1.0931 * 1000 'm
AnchoCP = AlturaCP 'mm
SWTanteo = True
End If
If SWTanteo = True Then 'Se dimensiona el conducto principal
VelCP = Data1.Recordset.Fields("Caudal") / (3600 * AnchoCP / 1000 * AlturaCP
/ 1000) 'm/s

25
AlturaCP = AlturaCP / 1000 'm
AnchoCP = AnchoCP / 1000 'm
Data1.Recordset.Edit
Data1.Recordset.Fields("Alto") = Format(AlturaCP, "0.000")
Data1.Recordset.Fields("Ancho") = Format(AnchoCP, "0.000")
Data1.Recordset.Fields("Velocidad") = Format(VelCP, "0.00")
Data1.Recordset.Fields("Diametro_Equivalente") = Format(DECP, "0.0000")
Data1.Recordset.Fields("dpl") = Format(dplAux, "0.000")
Data1.Recordset.Fields("dprej") = 0
Data1.Recordset.Fields("dpder") = 0
Data1.Recordset.Fields("dpacc") = 0
Data1.Recordset.Update
clavei = clavei + 1: clavef = clavef + 1
End If
Else 'Se termino con la ducteria principal
SWTerminar = False
clave = Trim(clavei) & "-" & Trim(clavef)
Data1.Recordset.MoveFirst
Data1.Recordset.FindFirst "Tramo='" & clave & "'"
Data1.Recordset.Edit
Data1.Recordset.Fields("dprej") = 20 'rejillaal final del conducto principal
Data1.Recordset.Update
End If
Loop '*******Hasta aqui Dimensionado del conducto
principal*************************
End Sub

26

You might also like