sábado, 1 de marzo de 2008

AUTOMATIZACION DE REACTOR QUIMICO EMPLEANDO VERILOG QUARTUS II (CONTINUACION)

Verilog es un lenguaje de descripción de hardware (HDL, del Inglés Hardware Description Language) que se empleará para automatizar el Reactor Químico presentado en el blog Automatización del Reactor Químico.

Pasos de funcionamiento:

a. Al pulsar el pulsador de arranque se introduce el reactivo alcalino.b. Al alcanzar el nivel H2 se cierra la válvula de reactivo alcalino y se comienza a verter el reactivo ácido hasta llegar al nivel H3. Mientras se introduce los componentes de la mezcla, la válvula de escape permanece abierta.c. Una vez alcanzado el nivel H3 se cierra la válvula de escape y comienza el proceso de calentamiento de la mezcla y el agitador comienza el proceso de movimiento.d. Cuando el sensor de temperatura (T) alcanza los 100°C se interrumpe el proceso de calentamiento y agitación y se abre la válvula de escape y salida normal.e. Cuando el nivel en el tanque baja por debajo de H1 se cierra la válvula de salida normal y se detiene el proceso.f. Si en algún momento se activa el sensor de máxima presión (P), se abre la válvula de escape, se para el proceso de calentamiento y agitación, se vacía el deposito a través de la válvula de salida defectuosa hasta que el nivel baja por debajo de H1 y el sistema se va a situación de parado.g. Una vez terminado el proceso bien sea de vaciado normal o máxima presión, es necesario dar un nuevo Start para reinicial el proceso.
El diagrama de flujo y la tabla de la verdad que describe el funcionamiento del sistema ya fue presentado en la parte 1 de este blog donde se desarrollo la automatizacion el leguaje simbolico.
Para el desarrollo de la programacion tambien es necesario conocer el funcionamiento basico del verilog el cual tambien fue presentado en este blog.

A continuación se muestra la programación en verilog que permite la automatización del sistema.

Como se puede observar lo primero que se estable es el módulo principal del programa llamado reactor2.

module reactor2(ral,rac,ve,c_a,vsn,vsd,t,p,s1,h1,h2,h3,r,clk);


output ral,rac,ve,c_a,vsn,vsd; Se definen las salidas del sistema


input s1,h1,h2,h3,r,t,p,clk;Se definen las entradas del sistema, h1 a h3 son los nivel del tanque, t es la temperatura y p la presión máxima del tanque


wire n1,n2,n3,n4,n5,n6,n7;Se definen las conexiones internas
wire r_g,s_g,qb,qa,r_g1,s_g1,r_g2,s_g2,ta,tb,ta1,pa,pa1,pb; Se definen las conexiones internas

//valvula reactivo alcalino; lógica que permite controlar cuando la válvula de reáctivo alcalino se activará (ral)
and(n2,h1,h2);
not(n1,n2);
not(n3,h3);
and(ral,n1,n3,qa);

//rs flip flop start; lógica que permite construir un flip-flop a partir de compuertas or y and para generar la señal de control start (qb)
and(r_g,r,clk);
and(s_g,s1,clk);
nor(qa,r_g,qb);
nor(qb,s_g,qa);

//válvula reactivo acido; lógica que permite controlar cuando la válvula de reactivo ácido se activará (rac)
and(rac,qa,n2,n3);

//válvula de escape; lógica que permite controlar cuando la válvula de escape se activará (ve)
and(n4,h1,h2,h3);
not(n5,n4);
and(n6,qa,n5);
or(ve,n6,pa,ta);

//flip flop temperatura, lógica que permite controlar el sistema cuando la señal de temperatura t se activa

and(r_g1,r,clk);
and(s_g1,t,clk);
nor(ta,r_g1,tb);
nor(tb,s_g1,ta);

//flip flop presion; lógica que permite controlar el sistema cuando la señal de presión p se activa
and(r_g2,r,clk);
and(s_g2,p,clk);
nor(pa,r_g2,pb);
nor(pb,s_g2,pa);

//calentamiento/agitador; lógica que permite controlar cuando el calentador-agitador (c_a) se activará
not(ta1,ta);
and(c_a,qa,ta1,n4);

//valvula salida normal; lógica que permite controlar cuando la válvula de salida normal (vsn) se activará

not(n8,pa);
or(n7,h1,h2,h3);
and(vsn,ta,n7,n8);

//valvula defectuosa; lógica que permite controlar cuando la válvula defectuosa (vsd) se activará
and(vsd,n7,pa);

endmodule; fin de la lógica de control

Luego de haber compilado y simulado el programa las respuesta obtenida es la esperada, como se puede observar a continuacion:


Al activar el boton de start (s) se abre la válvula de reactivo alcalino (ral) hasta alcanzar el nivel h2, en ese momento es cerrada esta válvula y abierta la válvula de reáctivo ácido (rac). Cuando es alcanzado el nivel h3 se cierra la válvula (rac), la válvula de escape (ve) y activado el calentador-agitador (c_a). Esta condición ocurre hasta que la temperatura t alcanza 100ºC, en ese momento es abierta la válvula (ve), apagado el (c_a) y abierta la válvula de salida normal (vsn). Si por alguna razón es alcanzada la presión máxima p el sistema abre la válvula (ve) y abre la válvula de salida defectuosa (vsd).


Conclusiones
Como se puede concluir indistintamente del lenguaje empleado para la programacion del control de un sistema, el resultado debe ser el mismo, obteniendo la mismas respuestas deseas .
El lenguaje verilog puede ser de mucha utilidad para desarrollos complejo porque permite una programacion sencilla con menor tiempo de ejecucion si se compara con el leguaje simbolico del Quartus II.
El simulador permite verificar de manera mas precisa el funcionamiento de la lógica programa y corregir y depurar los errores que existan en la misma.
Con el desarrollo de una lógica en Quartus II, ya sea empleando lenguaje simbolico o verilog, para ser implementada en un dispositivo com un PDL o FPGA se logra simplificar de manera significativa los espacios en hardware que ocuparían éstas lógicas si se desarrollaran con circuito convencionales. Por otra parte, se logran reducir los tiempos de ejecución y respuesta del sistema.

Con estas herramiente y un hardware adecuado se pueden desarrollar una gama muy amplia de equipos electrónicos para cualquier aplicación posibles disminuyendo los costos y tiempos de desarrollo.