- Justificación
- Objetivos
- Elementos Conceptuales
- Diseño del programa
- Procedimiento
- Conclusiones
- Recomendaciones
- Bibliografía
- Anexo. Simulación de un circuito de molienda clasificación directa
1.1-Contexto:
- Tendencias vigentes de la tecnología
- Optimización de operaciones metalúrgicas
- Extensión y detalle del documento
- Proyecto de investigación
- Este simulador no es dinámico, se aplica al estado estacionario.
- Los cálculos dependen del tonelaje de alimentación fresca y de las dimensiones y parámetros de operación del molino así como de las propiedades del mineral.
Todos los procesos necesarios en la industria de procesamiento de minerales son importantes debido a que cada uno contribuye para la obtención del producto deseado.
Sin embargo los procesos de conminución de mineral juegan un rol trascendental en la recuperación de elementos valiosos desde sus menas. Dentro de ellos la molienda tiene importancia especial, no solamente por sus altos costos operativos, sino también al hecho de que las propiedades físicas y mineralógicas del producto molido resultante es determinante en gran medida de la efectividad de las siguientes etapas. Es por eso que la optimización de esta operación unitaria disminuiría considerablemente los costos de operación.
1.3-Objetivos:
- Desarrollar un simulador de un circuito de molienda-clasificación directa en Visual Basic.
- Se aplicara el método del Punto Fijo para la simulación.
- Obtener los Balance de materia del circuito, carga circulante, potencia del molino, eficiencia del Hidrociclón.
El circuito de molienda-clasificación que se permite simular es el siguiente:
Figura 1
Este sistema tiene tres subsistemas (S1, S2, S3), los cuales nos permitirán realizar los cálculos para la simulación.
1.4.1-El subsistema (S1) esta conformado por el Hidrociclón, este subsistema nos permitirá calcular: El porcentaje acumulado retenido del Underflow; tonelaje de salida del Underflow, cuyos modelos matemáticos son:
(1)
(2)
(3)
(4)
(5)
(6)
(7)
Donde,
a1, a2, a3, a4, son constantes del Hidrociclón.
Qf, Flujo volumétrico de pulpa en la alimentación del Hidrociclón, m3/hr.
H, presión en la alimentación del Hidrociclón, expresada en pies equivalentes en la pulpa de alimentación, ft.
, Fracción sólidos por volumen alimentación del Hidrociclón, %.
DC, diámetro del Hidrociclón, in.
h, altura del Hidrociclón, definida como la distancia del fondo (Vortex) a la parte superior (apex), in.
DI, Diámetro de la entrada de la alimentación del Hidrociclón (área equivalente si la entrada es rectangular), in.
DO, Diámetro del vortex Hidrociclón (Overflow), in.
DU, Diámetro apex Ciclón (Underflow), in.
, Tamaño Corre del corte de la partícula que permite un cociente de peso 50:50 entre el Overflow y Underflow.
S, distribución de los caudales volumétricos (flor split) de rebalse y descarga del Hidrociclón.
m, parámetro de plit’s nunca es mayor que 4.
, Eficacia Corregida de Clasificación.
, By_pass finos.
, By_pass del agua.
1.4.2-El subsistema (S2) esta conformado por la unión de flujos del Underflow; del Hidrociclón y la alimentación fresca, este subsistema permite realizar el calculo de: El porcentaje acumulado retenido de la alimentación al molino, alimentación total al molino; los modelos matemáticos son:
(8 y 9)
Donde
Fj, Flujo seco total de alimentación fresca al sistema tons/hr.
U, toneladas del Underflow del Hidrociclón, tons/hr.
Fm, flujo total de alimentación al molino (incluye carga circulante), tons/h.
fm, porcentaje acumulada retenida de sólidos en la alimentación compuesta al molino, %.
fu, porcentaje acumulada retenida de sólidos en el Underflow del Hidrociclón,%.
fsf, porcentaje acumulada retenida de sólidos en la alimentación fresca al circuito,%.
1.4.3-El subsistema (S3) esta conformado por el molino, este subsistema permite calcular el porcentaje acumulado retenido en la descarga del molino; los modelos matemáticos son:
(10)
Donde:
fm:= {fi |i=1,2,…n} vector producto (descarga) del molino, cuyos elementos representan la distribución granulométrica parcial del producto
fd= { fd |i=1,2,…n} vector de alimentación al molino, cuyos elementos representan la distribución granulométrica parcial de la alimentación al equipo
T es la matriz triangular inferior (nxn), cuyos elementos Tij están dados:
Tij =
e
(11)
Donde:
Es la función de fractura en su forma acumulada retenida.
Es la función de selección específica.
J es la matriz diagonal (nxn), cuyos elementos Jij están dados por:
Jij =
(12)
(13) (14)
(15)
(16)
(17)
Donde:
D, Diámetro interior molino,ft.
L, Largo interior molino, ft.
J, Nivel llenado aparente. Carga volumétrica aparente llenado (incluyendo bolas y exceso pulpa sobre bolas cargadas, mas pulpa en espacios intersticiales entre bolas), porcentaje ocupa carga relación volumen interno total molino, %.
m, Densidad Mineral, ton/m3.
ap, Densidad aparente carga molino (incluyendo espacios intersticiales), ton/m3.
Pneta, Potencia Neta Molino, kW.
, Angulo inclinación superficie carga durante operación, º.
P, Potencia real o total, kW.
Lw, Pérdidas potencia, %.
E, Energía por tonelada carga, kWh/ton.
Fm, Flujo seco total alimentación molino (incluye carga recirculada), tph.
La relación de las variables entre estos tres subsistemas es el siguiente:
Figura 2
4.1-Algoritmo de la simulación del circuito molienda-clasificación.
En la Figura 3 se indica el esquema seguido en el desarrollo del software:
4.2.1- Variables de Ingreso:
4.2.1.1-Parámetros del Molino
La figura 4 se representan las constante del molino, estas dependen solo del tipo de mineral que se va a reducir de tamaño
, constantes para hallar la función de selección especifica "SE"
constantes para hallar la función de fractura "B(i,j)"
dcrit, diámetro crítico al que se quiere llegar, micrones
Figura 4
La figura 5 se representa datos de operación del molino
Lw, Pérdidas potencia, %, (0→100)
, Angulo inclinación superficie carga durante operación, º, (0→180)
, porcentaje velocidad crítica utilizada, %
D, Diámetro interior molino ,ft
L, Largo interior molino, ft
Jp, Nivel llenado pulpa espacios intersticiales %
J, Nivel llenado aparente. Carga volumétrica aparente llenado (incluyendo bolas y exceso pulpa sobre bolas cargadas, mas pulpa en espacios intersticiales entre bolas), porcentaje ocupa carga relación volumen interno total molino, %
fsd, Fracción peso de los sólidos a la descarga del molino, %
JB, Nivel llenado bolas
fv, Fracción volumétrica espacios intersticiales entre bolas(aprox. 40% volumen aparente ocupado por carga).
B, Densidad bolas, ton/m3
m, Densidad Mineral, ton/m3
Figura 5
4.2.1.2- Parámetros del Hidrociclón
- La figura 6 se representa datos de operación del Hidrociclón
fus, Fracción Sólidos Underflow Ciclón, %.
fos, Fracción Sólidos Overflow Ciclón, %.
a1, a2, a3, a4son constantes del Hidrociclón
N, número de hidrociclones
DC, diámetro del Hidrociclón, in
h, altura del Hidrociclón, definida como la distancia del fondo (Vortex) a la parte superior (apex), in.
DI, Diámetro de la entrada de la alimentación del Hidrociclón (área equivalente si la entrada es rectangular), in
DO, Diámetro del vortex Hidrociclón (Overflow), in
DU, Diámetro apex Ciclón (Underflow), in
Figura 6
4.2.1.3-Alimentación Fresca
Esta parte de la ventana representa el análisis granulométrico % acumulado retenido de la alimentación fresca al circuito de molienda clasificación y el tonelaje seco de alimentación fresca.
Malla, representa el tipo de malla usada en el análisis granulométrico
Abertura, es el diámetro correspondiente al numero de malla en micrones
Figura 7
4.2.2- Proceso de Iteración.
El Método Numérico que se a empleado en el Programa en Método de Punto Fijo, la variable que se itera es la carga circulante cci = cc0
Se partirá asumiendo una Carga Circulante Inicial = 1, obteniendo la nueva carga circulante la que nos permite determinar:
- La masa en cada malla en la alimentación al Hidrociclón(c/U)
- La masa en cada malla en el overflow al Hidrociclón
- La masa en cada malla en el underflow del Hidrociclón
- % retenido underflow y overflow del Hidrociclón
- Masa total underfloW de cada Hidrociclón
- % retenido underflow y overflow de cada malla
- calculo de la fracción de sólidos acumulada retenida
- calculo de la matriz Tij
- calculo de la salida del molino
- Nueva Carga Circulante.
El proceso de iteración termina cuando TM de alimentación nueva = TM de alimentación asumida.
4.2.3- Resultados:
- Se obtiene los Balances de Matria en cada uno de los subsistemas.
- Se genera un Reporte en Excel , que nos permite evaluar el Proceso del circuito.
- Se trabajo con el método numérico de punto fijo el cual da una buena convergencia
- Para el criterio de convergencia se usa la variación de la carga circulante, asumiendo se una inicial de 1
- Se construyo el programa en Visual Basic 6.0, el cual permite predecir el porcentaje acumulado passing del molino así como también el balance de materia del circuito
- Este simulador no es dinámico, se aplica al estado estacionario.
- Los cálculos dependen del tonelaje de alimentación fresca y de las dimensiones y parámetros de operación del molino así como de las propiedades del mineral.
- Es importante saber las constantes del clasificador y del molino ya que este simulador no calcula las constantes.
- JOSE MANZANEDA CABALA "Procesamiento de minerales", Lima-Perú 1995
- FERNANDO AYRES HIDALGO "Técnicas matemáticas aplicadas al balance de materia circuitos de Chancado, molienda y flotación" 1998
- JAIME E. SEPULVEDA "Dimensionamiento y optimización de plantas concentradoras mediante técnicas de modelación matemática" Chile, 1986
- ANGEL EGAS SAENS "Evaluación de plantas concentradoras"
- JHON M. CURRIE "Operaciones Unitarias en el procesamiento de Minerales"
SIMULACIÓN DE UN CIRCUITO DE MOLIENDA CLASIFICACIÓN DIRECTA
I- CODIGO DEL PROGRAMA:
- Datos de Ingreso
frm Datos de Ingreso
Private Sub cmdaceptar_Click()
a01 = Val(txta01.Text)
a02 = Val(txta02.Text)
a11 = Val(txta11.Text)
a12 = Val(txta12.Text)
a2 = Val(txta2.Text)
dcrit = Val(txtdcrit.Text)
B00 = Val(txtb00.Text)
B01 = Val(txtb01.Text)
B1 = Val(txtb1.Text)
B2 = Val(txtb2.Text)
lw = Val(txtlw.Text)
angulo = Val(txta.Text)
phy = Val(txtphi.Text)
diametro = Val(txtdiametro.Text)
largo = Val(txtlongitud.Text)
Jp = Val(txtjp.Text)
tonff = Val(txtafrescacircuito.Text)
Jllenado = Val(txtj.Text)
Jbolas = Val(txtjb.Text)
fracv = Val(txtfv.Text)
dbolas = Val(txtdensidadbolas.Text)
dmineral = Val(txtdensidadmineral.Text)
fsd = Val(txtfsd.Text)
Rem hidrociclon
fus = Val(txtfus.Text)
fos = Val(txtfos.Text)
lambda = Val(txtlambda.Text)
ca1 = Val(txtca1.Text)
ca2 = Val(txtca2.Text)
ca3 = Val(txtca3.Text)
ca4 = Val(txtca4.Text)
NH = Val(txtNH.Text)
DCH = Val(txtDC.Text)
HC = Val(txtHC.Text)
DIH = Val(txtDI.Text)
DOH = Val(txtDO.Text)
DUH = Val(txtDU.Text)
cc0 = Val(txtCC0.Text)
'fasumido en la alimentacion del hidrociclon
fasumido(1) = 0: fasumido(10) = 2.971: fasumido(19) = 1
fasumido(2) = 0.632: fasumido(11) = 3.857
fasumido(3) = 1.397: fasumido(12) = 4.842
fasumido(4) = 1.384: fasumido(13) = 6.004
fasumido(5) = 1.272: fasumido(14) = 6.732
fasumido(6) = 1.344: fasumido(15) = 6.771
fasumido(7) = 1.568: fasumido(16) = 6.377
fasumido(8) = 1.857: fasumido(17) = 5.725
fasumido(9) = 2.475: fasumido(18) = 5.023
fasumido(19) = 4.164: fasumido(20) = 35.604
'recuperado los valores % retenido y abertura de las mallas
For i = 1 To 21
abertura(i) = Val(lblopen(i).Caption)
malla(i) = CStr(label1(i).Caption)
If i = 21 Then
Exit For
Else
faf(i) = Val(txtfaf(i).Text)
End If
Next i
Rem calculo del mid size y SE
For i = 2 To 21
If i <> 21 Then
d(i – 1) = Sqr(abertura(i) * abertura(i – 1))
ElseIf i = 21 Then
d(i – 1) = (abertura(i) + abertura(i – 1)) / 2
SE(i – 1) = 0: Exit For
End If
SE(i – 1) = (1 / (1 + a02 / a01)) * ((a01 * ((d(i – 1)) ^ a11) / (1 + (d(i – 1) / dcrit) ^ a2)) + a02 * (d(i – 1)) ^ a12)
Next i
'calulo de la potrencia del molino
Me.Hide
frmprincipal.Show
frmprincipal.cmdcalcular.Visible = True
End Sub
1.2- Hidrociclon
Frm Hidrociclón
Private Sub cmdaceptar_Click()
mdiprincipal.Enabled = True
Unload frmhidrociclon
End Sub
Private Sub Form_Activate()
Rem hidrocilon
TonF = TonFM
'overflow
txtfso.Text = Round(fos, 2) & " " & "%"
txtppo.Text = Round(densidad(fos), 2) & " " & "ton/m3"
txtTonO.Text = Round(Over * NH, 2) & " " & "ton/hr"
'underflow
txtfsu.Text = Round(fus, 2) & " " & "%"
txtppu.Text = Round(densidad(fus), 2) & " " & "ton/m3"
txttonU.Text = Round(TonFM – Over * NH, 2) & " " & "ton/Hr"
'alimentacion
Rem calculo de la fraccion de solidos a la alimentacion
fsf = TonF / (TonO / fos + TonU / fus)
txtfsf.Text = Round(fsf, 2) & " " & "%"
txtppf.Text = Round(densidad(fsf), 2) & " " & "ton/m3"
txtTonF.Text = Round(TonF, 2) & " " & "ton/hr"
txtNH.Text = NH
txtpresion.Text = Round(PHidrociclon / 2.31 * densidad(fsf), 2) & " " & "Psi"
txtbpw.Text = Round(Bpw, 2)
txtbpf = Round(Bpf, 2)
End Sub
Private Sub Timer1_Timer()
imghidrociclon.Visible = Not imghidrociclon.Visible
End Sub
1.3- Molino
Frm Molino
Private Sub cmdaceptar_Click()
mdiprincipal.Enabled = True
Unload frmmolino
End Sub
Private Sub Form_Load()
txtEnergia.Text = Round(E, 2) & " " & "KwHr/Ton"
'calculo del p80
For i = 1 To 19
If pfm(i) > 80 And pfm(i + 1) < 80 Then
P80M = abertura(i + 1) * Exp(Log(80 / pfm(i + 1)) * Log(abertura(i + 1) / abertura(i)) / Log(pfm(i + 1) / pfm(i)))
End If
Next i
For i = 1 To 19
If pd(i) > 80 And pd(i + 1) < 80 Then
P80D = abertura(i + 1) * Exp(Log(80 / pd(i + 1)) * Log(abertura(i + 1) / abertura(i)) / Log(pd(i + 1) / pd(i)))
End If
Next i
txtp80d.Text = Round(P80D, 2) & " " & "um"
txtp80m.Text = Round(P80M, 2) & " " & "um"
txtppd.Text = Round(densidad(fsd), 2) & " " & "ton/m3"
txtPR.Text = Round(Ereal, 2) & " " & "Kwhr"
txttonD.Text = Round(TonFM, 2) & " " & "ton/hr"
txtTonM.Text = Round(TonFM, 2) & " " & "ton/hr"
txtV.Text = Round(Nc, 2) & " " & "rpm"
txtWi.Text = Round(E / 10 / (1 / P80D ^ 0.5 – 1 / P80M ^ 0.5), 2) & " " & "KwHr/ton"
txtw.Text = Round(TonFM – TonFM / fsd, 2) & " " & "m3/hr"
End Sub
Private Sub Timer1_Timer()
imgtuberia2.Visible = Not imgtuberia2.Visible
imgmolino.Visible = Not imgmolino.Visible
imgsalida.Visible = Not imgsalida.Visible
End Sub
1.4- Frm Pozo
Private Sub cmdaceptar_Click()
mdiprincipal.Enabled = True
Unload frmpozo
End Sub
Private Sub Form_Load()
fsf = Round((TonO + TonU) / (TonO / fos + TonU / fus), 2)
txtd.Text = Round(TonFM, 2) & " " & "ton/hr"
txtpp1.Text = Round(densidad(fsd), 2) & " " & "m3/hr"
txtpp2.Text = Round(densidad(fsf), 2) & " " & "m3/hr"
txtps1.Text = Round(fsd, 2) & " " & "%"
txtps2.Text = Round(fsf, 2) & " " & "%"
txtw.Text = Round(TonFM – TonFM / fsd, 2) & " " & "m3/hr"
End Sub
Private Sub Timer1_Timer()
imgtuberia.Visible = Not imgtuberia.Visible
imgmsalida.Visible = Not imgmsalida.Visible
End Sub
1.5- Principal
Frm Principal
Dim fdescarga(1 To 20) As Double
Private Sub cmdcalcular_Click()
'la variable que se itera es la carga circulante
cci = cc0
ii = 1
For i = 1 To 20
fdescarga(i) = fasumido(i)
Next i
Do While ii < 1000
hidrociclon (cci)
calculos
If Gauss(mat(), inversa()) = True Then
If MULT(T(), Jm(), inversa(), fm(), fd()) = True Then
Else
MsgBox "Ha ocurrido un error." _
& Chr(13) & Chr(13) & "Error : " & Err.Number _
& Chr(13) & "Info : " & Err.Description _
& Chr(13) & "Objeto : " & Err.Source _
& Chr(13) & Chr(13) & "Envie este error a la dirección igorclm[arroba]hotmail.com " _
& "y le indicaran la solución a su problema.", vbCritical, "Error al"
End If
End If
'calculo de la nueva carga circulante
'hallamos la masa en cada malla en la alimentacion al hidrociclon(c/U)
For i = 1 To 20
mfi(i) = TonFM / NH * fd(i, 1) / 100
Next i
'hallamos la masa en cada malla en el overflow al hidrociclon
For i = 1 To 20
mui(i) = Ei(i) * mfi(i)
Next i
'hallamos la masa en cada malla en el underflow del hidrociclon
For i = 1 To 20
moi(i) = mfi(i) – mui(i)
Next i
'hallamos % retenido underflow y overflow del hidrociclon
For i = 1 To 20
'masa total underflon de cada hidrociclon
smui = smui + mui(i)
smoi = smoi + moi(i)
Next i
For i = 1 To 20
'% retenido underflow y overflow de cada hidrociclon
rfu(i) = mui(i) / smui * 100
rfo(i) = moi(i) / smoi * 100
Next i
cc = smui / smoi
If Abs(cci – cc) < 0.001 Then
mostrarpanel
Exit Sub
Else
cci = cc
End If
For i = 1 To 20
fdescarga(i) = fd(i, 1)
Next i
ii = ii + 1
Loop
End Sub
Sub mostrarpanel()
Pff(1) = 100: pfm(1) = 100: pd(1) = 100: paf(1) = 100
po(1) = 100: pu(1) = 100
For i = 1 To 20
Pff(i + 1) = Round(Pff(i) – faf(i), 2)
pfm(i + 1) = Round(pfm(i) – fm(i, 1), 2)
pd(i + 1) = Round(pd(i) – fd(i, 1), 2)
paf(i + 1) = Round(paf(i) – fd(i, 1), 2)
pu(i + 1) = Round(pu(i) – rfu(i), 2)
po(i + 1) = Round(po(i) – rfo(i), 2)
Next i
txtalifresca.Visible = True
txtover.Visible = True
txtalimolino.Visible = True
txtcc.Visible = True
Label1.Visible = True
Label2.Visible = True
Label3.Visible = True
Label4.Visible = True
lblmolino.Enabled = True
lblpozo.Enabled = True
lblhidrociclon.Enabled = True
cmdreporte.Visible = True
txtalifresca.Text = tonff & " " & "ton/hr"
txtover.Text = TonO & " " & "ton/hr"
txtalimolino.Text = Round(TonFM, 2) & " " & "ton/hr"
txtcc.Text = Round(cc, 4)
End Sub
Sub calculos()
Rem calculo de B0j
For i = 1 To 20
B0j(i) = B00 * (d(i) / d(1)) ^ (-B01)
If B0j(i) > 1 Then
B0j(i) = 1
ElseIf B0j(i) < 1 Then
B0j(i) = B0j(i)
End If
Next i
Rem calculo de Bij fraccion de solidos acumulada pasante
For i = 1 To 20
For j = 1 To 20
If i >= j Then
If i = 20 And j = 20 Then
B(i, j) = B0j(i) * (abertura(i) / abertura(j)) ^ B1 + (1 – B0j(i)) * (abertura(i) / abertura(j)) ^ B2
ElseIf i = j Then
B(i, j) = 1
ElseIf i > j Then
B(i, j) = B0j(i) * (abertura(i) / abertura(j + 1)) ^ B1 + (1 – B0j(i)) * (abertura(i) / abertura(j + 1)) ^ B2
End If
Else
B(i, j) = 0
End If
Next j
Next i
Rem calculo de la fraccion de solidos acumulada retenida baij
For i = 1 To 20
For j = 1 To 20
If i >= j Then
If i = j Then
ba(i, j) = 0
ElseIf i = 20 Then
ba(i, j) = B(i, j)
ElseIf i > j Then
ba(i, j) = B(i, j) – B(i + 1, j)
End If
End If
Next j
Next i
Rem caluculo de la matriz Tij
For j = 1 To 20
For i = 1 To 20
If i < j Then
T(i, j) = 0
ElseIf i = j Then
T(i, j) = 1
ElseIf i > j Then
T(i, j) = suma(i, j)
End If
Next i
Next j
'calculo de la matriz j
For i = 1 To 20
For j = 1 To 20
If i = j Then
Jm(i, j) = 1 / (1 + SE(i) * E / (largo / diametro)) ^ (largo / diametro)
ElseIf i <> j Then
Jm(i, j) = 0
End If
Next j
Next i
Rem calculo de la salida del molino
'creamos una matriz aumentada mat
For i = 1 To 20
For j = 1 To 40
If j = i + 20 And j > 20 Then
mat(i, j) = 1
End If
If j <= 20 Then
mat(i, j) = T(i, j)
End If
If j <> i + 20 And j > 20 Then
mat(i, j) = 0
End If
Next j
Next i
End Sub
Sub hidrociclon(cci)
Rem calculo delos valores
TonO = tonff ' alimentacion fresca
Over = TonO / NH
Under = cci * Over
Feed = Over + Under
Up = Under * 100 / fus 'mas de pulpa tons/hr
Op = Over * 100 / fos ' masa de pulpa tons/hr
Fp = Up + Op 'masa de pulpa tons/hr
Wf = Fp – Feed 'caudal de agua ton/hr
Wo = Op – Over 'caudal de agua ton/hr
Wu = Up – Under 'caudal de agua ton/hr
Qf = Feed / dmineral + Wf 'caudal de pulpa m3/hr
Qo = Over / dmineral + Wo 'caudal de pulpa m3/hr
Qu = Under / dmineral + Wu 'caudal de pulpa m3/hr
fphy = Feed / dmineral / Qf * 100
Bpw = Wu / Wf
Bpf = lambda * Bpw
'Public fus , fos lambda ca1 ca2 ca3 ca4 NH DC HC As Variant
PHidrociclon = ca1 * Qf ^ 1.46 * Exp(-7.63 * fphy / 100 + 10.79 * (fphy / 100) ^ 2) / (DCH ^ 0.2 * HC ^ 0.15 * DIH ^ 0.51 * DOH ^ 1.65 * DUH ^ 0.53)
d50 = ca2 * (DCH ^ 0.44 * DIH ^ 0.58 * DOH ^ 1.91 * Exp(11.12 * fphy / 100)) / (HC ^ 0.37 * DUH ^ 0.8 * Qf ^ 0.44 * (dmineral – 1) ^ 0.5)
Sp = ca3 * (HC ^ 0.19 * (DUH / DOH) ^ 2.64 * Exp(-4.33 * fphy / 100 + 0.77 * (fphy / 100) ^ 2)) / (HC ^ 0.54 * DCH ^ 0.38)
m = Exp(ca4 – 1.58 * (Sp / (1 + Sp))) * (DCH ^ 2 * HC / Qf) ^ 0.15
For i = 1 To 20
Eic(i) = 1 – Exp(-0.693 * (d(i) / d50) ^ m)
Next i
For i = 1 To 20
Ei(i) = Bpf + (1 – Bpf) * Eic(i)
Next i
'hallamos la masa en cada malla en la alimentacion al hidrociclon(c/U)
For i = 1 To 20
mfi(i) = Feed * fdescarga(i) / 100
Next i
'hallamos la masa en cada malla en el overflow al hidrociclon
For i = 1 To 20
mui(i) = Ei(i) * mfi(i)
Next i
'hallamos la masa en cada malla en el underflow al hidrociclon
For i = 1 To 20
moi(i) = mfi(i) – mui(i)
Next i
'hallamos % retenido underflow del hidrociclon
For i = 1 To 20
'masa total underflon de cada hidrociclon
smui = smui + mui(i)
Next i
For i = 1 To 20
'% retenido underflow de cada hidrociclon
fui(i) = mui(i) / smui * 100
Next i
'balance en el nodo de alimentacion del molino TonFM
TonU = smui * NH
TonFM = TonU + tonff
potencia
For i = 1 To 20
fm(i, 1) = (TonU * fui(i) + tonff * faf(i)) / (TonFM)
Next i
End Sub
Sub potencia()
Nc = 76.6 / diametro ^ 0.5 * phy / 100
ppd = densidad(fsd)
Vmolino = pi / 4 * (0.305 * diametro) ^ 2 * (0.305 * largo)
Vc = Vmolino * Jllenado / 100
VBolas = Vmolino * Jbolas / 100
MB = (1 – fracv) * dbolas * VBolas
MPEI = Jp / 100 * fracv * VBolas * ppd
JE = Jllenado – Jbolas
MPE = JE * Vmolino * ppd
pap = (MB + MPEI + MPE) / Vc
pneta = 0.238 * diametro ^ 3.5 * (largo / diametro) * phy / 100 * pap * (Jllenado / 100 – 1.064 * Jllenado ^ 2 / 10000) * Sin(angulo * pi / 180)
Ereal = pneta / (1 – lw / 100)
E = pneta / TonFM
End Sub
Private Sub cmdreporte_Click()
'calculo del p80
For i = 1 To 19
If pfm(i) > 80 And pfm(i + 1) < 80 Then
P80M = abertura(i + 1) * Exp(Log(80 / pfm(i + 1)) * Log(abertura(i + 1) / abertura(i)) / Log(pfm(i + 1) / pfm(i)))
End If
Next i
For i = 1 To 19
If pd(i) > 80 And pd(i + 1) < 80 Then
P80D = abertura(i + 1) * Exp(Log(80 / pd(i + 1)) * Log(abertura(i + 1) / abertura(i)) / Log(pd(i + 1) / pd(i)))
End If
Next i
dialogo.DialogTitle = "Destino – Seleccione el archivo de destino"
dialogo.Filter = "Archivos de Datos (*.csv)|*.csv|Archivos de Excel (*.xls)|*.xls|Todos los archivos (*.*)|*.*"
dialogo.ShowOpen
If dialogo.FileName <> "" Then
Open dialogo.FileName For Output As #1
Print #1, " " & ";" & "Simulador de Molienda de un Circuito Cerrado Convencional"
Print #1, ""
Print #1, " " & ";" & "Datos de la simulación"
Print #1, "Fecha" & " " & Date
Print #1, "Hora" & " " & Time
Print #1, " Autores" & ";" & "Veronica Charres & igor Cañapataña"
Print #1, " " & ";" & "Distribución de tamaños de particula"
Print #1, "malla" & ";" & "%pass" & ";" & "%pass" & ";" & "%pass" & ";" & "%pass" & ";" & "%pass" & ";" & "%pass"
Print #1, "Tyler#" & ";" & "Al. Fresca" & ";" & "al. Molino" & ";" & " Des. Molino" & ";" & "Al. Hidrociclon" & ";" & "Uderflow" & ";" & "Overflow"
For i = 1 To 20
Print #1, malla(i) & ";" & Pff(i) & ";" & pfm(i) & ";" & pd(i) & ";" & paf(i) & ";" & pu(i) & ";" & po(i)
Next i
Print #1, ""
Print #1, "Desempeño del molino de bolas"
Print #1, "Potencia Real" & ";" & Round(Ereal, 2) & "KWH "
Print #1, "Potencia Especifica" & ";" & Round(E, 2) & "KWH/Ton "
Print #1, "Velocidad del molino" & ";" & Round(Nc, 2) & " " & "rpm"
Print #1, "Work Index" & ";" & Round(E / 10 / (1 / P80D ^ 0.5 – 1 / P80M ^ 0.5), 2) & " " & "KwHr/ton"
Print #1, ""
Print #1, "datos del Hidrocilon"
Print #1, "Alimentación" & ";" & Round(Feed * NH, 2) & " " & "ton/Hr"
Print #1, "Presión" & ";" & Round(PHidrociclon / 2.31 * densidad(fsf), 2) & " " & "Psi"
Print #1, "d50" & ";" & Round(d50, 2) & " " & "micrones"
Print #1, "By-pass Agua" & ";" & Round(Bpw, 2)
Print #1, "By-pass Finos" & ";" & Round(Bpf, 2)
Print #1, "Carga Circulante" & ";" & Round(cc, 2)
Close #1
Dim Error As Integer
Error = ShellExecute(Me.hwnd, "Open", dialogo.FileName, " ", " ", 1)
End If
End Sub
Private Sub Form_Load()
txtalifresca.Visible = False
txtover.Visible = False
txtalimolino.Visible = False
txtcc.Visible = False
Label1.Visible = False
Label2.Visible = False
Label3.Visible = False
Label4.Visible = False
lblmolino.Enabled = False
lblpozo.Enabled = False
lblhidrociclon.Enabled = False
End Sub
Private Sub lblhidrociclon_Click()
mdiprincipal.Enabled = False
frmhidrociclon.Show
End Sub
Private Sub lblmolino_Click()
mdiprincipal.Enabled = False
frmmolino.Show
End Sub
Private Sub lblpozo_Click()
mdiprincipal.Enabled = False
frmpozo.Show
End Sub
Private Sub mdicontenido_Click()
frmayuda.Show
End Sub
Private Sub mdivaringreso_Click()
cmdreporte.Visible = False
frmprincipal.Hide
frmdatosdeingreso.WindowState = 2
frmdatosdeingreso.Show
End Sub
Private Sub Timer1_Timer()
imgmolino.Visible = Not imgmolino.Visible
imgsalida.Visible = Not imgsalida.Visible
imgtuberia.Visible = Not imgtuberia.Visible
imghidrociclon.Visible = Not imghidrociclon.Visible
imgtuberia2.Visible = Not imgtuberia2.Visible
End Sub
1.5- Módulo Principal
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Directorio As String
Public abertura(1 To 21) As Variant
Public d(1 To 20)
Public malla(1 To 21) As String
Public SE(1 To 20)
Public fm(1 To 20, 1) As Double
Public faf(1 To 20) As Single
Public B(1 To 20, 1 To 20)
Public B0j(1 To 20)
Public ba(1 To 20, 1 To 20)
Public Jdiag(1 To 20, 1 To 20)
Public T(1 To 20, 1 To 20) As Double
Public Jm(1 To 20, 1 To 20) As Double
Public mat(1 To 20, 1 To 40) As Double
Public dmineral
Public inversa(1 To 20, 1 To 20) As Double
Public fd(1 To 20, 1) As Double
Public E As Single
Public Const pi = 3.141592653589
Rem molino
Public a01 As Variant
Public a02 As Variant
Public a11 As Variant
Public a12 As Variant
Public a2 As Variant
Public dcrit As Variant
Public B00 As Variant
Public B01 As Variant
Public B1 As Variant
Public B2 As Variant
Public lw As Variant
Public angulo As Variant
Public phy As Variant
Public Ereal As Variant
Public diametro As Variant
Public largo As Variant
Public Jp As Variant
Public tonff As Variant
Public TonFM As Variant
Public Jllenado As Variant
Public Jbolas As Variant
Public fracv As Variant
Public dbolas As Variant
Public fsd As Variant
Public Nc As Variant
Rem porcentajes passing
Public Pff(1 To 21)
Public pfm(1 To 21)
Public pd(1 To 21)
Public paf(1 To 21)
Public pu(1 To 21)
Public po(1 To 21)
Public d50 As Single
Rem hicrocilon
'''''''''''''
Public fasumido(1 To 20) As Single
Public Eic(1 To 20) As Single
Public Ei(1 To 20) As Single
'masa en cada malla
Public moi(1 To 20) As Single
Public mui(1 To 20) As Single
Public mfi(1 To 20) As Single
'%retenidos en las mallas
Public fui(1 To 20) As Single
Public foi(1 To 20) As Single
Public ffi(1 To 20) As Single
Public rfo(1 To 20) As Single
Public rfu(1 To 20) As Single
Public TonU As Variant
Public TonO As Variant
Public TonF As Variant
Public PHidrociclon As Variant
'''''''''''''''''
Public fus As Variant
Public fos As Variant
Public fof As Variant
Public lambda As Variant
Public ca1 As Variant
Public ca2 As Variant
Public ca3 As Variant
Public ca4 As Variant
Public NH As Variant
Public DCH As Variant
Public HC As Variant
Public DIH As Variant
Public DOH As Variant
Public DUH As Variant
Public cc0 As Single
Public cc As Single
Public cci As Single
Public Bpw As Single
Public Bpf As Single
Public Under As Single
Public Over As Single
Public Feed As Single
Public ppd As Variant
Public Vmolino As Variant
Public Function MULT(ByRef A() As Double, ByRef B() As Double, ByRef invA() As Double, ByRef f0() As Double, ByRef f() As Double) As Boolean
Dim i, j, k, m
' On Error GoTo Gauss_Err
n = UBound(A)
'preimera multiplicacion T*J
ReDim c(1 To n, 1 To n) As Single
ReDim U(1 To n, 1 To n) As Single
For i = 1 To n
For j = 1 To n
c(i, j) = 0
For k = 1 To n
c(i, j) = c(i, j) + A(i, k) * B(k, j)
Next k
Next j
Next i
'segunda multiplicacion (T*J)*T-1
For i = 1 To n
For j = 1 To n
U(i, j) = 0
For k = 1 To n
U(i, j) = U(i, j) + c(i, k) * invA(k, j)
Next k
Next j
Next i
'hallando el producto
For i = 1 To n
For j = 1 To 1
f(i, j) = 0
For k = 1 To n
f(i, j) = f(i, j) + U(i, k) * f0(k, j)
Next k
Next j
Next i
MULT = True
Exit Function
Gauss_Err: MULT = False
End Function
Public Function Gauss(ByRef A() As Double, ByRef inv() As Double) As Boolean
Dim Temp As Single, i, j, k, m
On Error GoTo Gauss_Err
n = UBound(inv)
For k = 1 To n
Temp = A(k, k)
For j = 1 To 2 * n
A(k, j) = A(k, j) / Temp
Next j
For i = 1 To n – 1
If i = k Then
For m = i To n – 1
For j = k + 1 To 2 * n
A(m + 1, j) = A(m + 1, j) – A(m + 1, k) * A(i, j)
Next j
Next m
End If
Next i
Next k
Rem sacando elementos de la inversa
k = 1
For j = n + 1 To 2 * n
For i = 1 To n
inv(i, k) = A(i, j)
Next i
k = k + 1
Next j
Gauss = True
Exit Function
Gauss_Err: Gauss = False
End Function
Public Function suma(i, j)
suma = 0
For k = j To i – 1
suma = suma + (ba(i, k) * SE(k) * T(k, j)) / (SE(i) – SE(j))
Next k
End Function
Public Function densidad(s)
densidad = 1 / (s / 100 * 1 / dmineral + 1 – s / 100)
End Function
II- REPORTE EN EXCEL
Simulador de Molienda de un Circuito Cerrado Convencional | ||||||
Datos de la simulación | ||||||
Fecha 27/03/2006 | ||||||
Hora 15:33:39 | ||||||
Autores | Verónica Charres & igor Cañapataña | |||||
Distribución de tamaños de partícula | ||||||
malla | %pass | %pass | %pass | %pass | %pass | %pass |
Tyler# | Al. Fresca | al. Molino | Des. Molino | Al. Hidrociclón | Underflow | Overflow |
1 ' | 100 | 100 | 100 | 100 | 100 | 100 |
3/4 ' | 100 | 100 | 100 | 100 | 100 | 100 |
1/2 ' | 100 | 100 | 100 | 100 | 100 | 100 |
3/8 ' | 95 | 98,02 | 99,42 | 99,42 | 99,99 | 100 |
3 | 78,4 | 91,81 | 97,87 | 97,87 | 99,95 | 100 |
4 | 64,33 | 86,11 | 96,12 | 96,12 | 99,91 | 100 |
6 | 54 | 81,25 | 94,16 | 94,16 | 99,86 | 100 |
8 | 45,66 | 76,54 | 91,8 | 91,8 | 99,8 | 100 |
10 | 38,82 | 71,74 | 88,94 | 88,94 | 99,73 | 100 |
14 | 33,41 | 66,43 | 85,18 | 85,18 | 99,63 | 100 |
20 | 28,31 | 60,38 | 80,59 | 80,59 | 99,51 | 100 |
28 | 24,41 | 53,36 | 74,71 | 74,71 | 99,36 | 100 |
35 | 20,87 | 44,93 | 67,33 | 67,33 | 99,17 | 100 |
48 | 17,86 | 34,82 | 58,09 | 58,09 | 98,94 | 100 |
65 | 15,27 | 25,58 | 48,18 | 48,18 | 98,72 | 99,9 |
100 | 13,06 | 19,85 | 39,85 | 39,85 | 98,59 | 99,68 |
150 | 11,18 | 16,25 | 33,43 | 33,43 | 98,51 | 99,46 |
200 | 9,56 | 13,71 | 28,58 | 28,58 | 98,46 | 99,28 |
270 | 8,18 | 11,77 | 24,85 | 24,85 | 98,42 | 99,13 |
400 | 7 | 10,26 | 21,98 | 21,98 | 98,39 | 99,02 |
Desempeño del molino de bolas | ||||||
Potencia Real | 1031,6KWH | |||||
Potencia Especifica | 2,6KWH/Ton | |||||
Velocidad del molino | 15,92 rpm | |||||
Work Index | 15,45 KwHr/ton | |||||
datos del Hidrociclón | ||||||
Alimentación | 360,66 ton/Hr | |||||
Presión | 3,1 Psi | |||||
d50 | 206,47 micrones | |||||
By-pass Agua | 0,43 | |||||
By-pass Finos | 0,41 | |||||
Carga Circulante | 2,61 |
Autor:
Verónica Charres Choque
Igor Cañapataña Larico