CAPÍTULO 7: CONCLUSIONES Y TRABAJOS FUTUROS
B.4 DESARROLLO DE EXTENSIONES DE GAMS A HSYSYS 150
B.4.1 ESTRATEGIA DE MIGRACIÓN DE MODELOS DE GAMS A HYSYS 150
B.4.1.1 DESARROLLO DE MÓDULOS COMPATIBLES CON CAPE-OPEN
Para llevar a cabo el desarrollo de un módulo compatible con CAPE-OPEN para una columna de destilación reactiva, se utilizó nuevamente la herramienta para Unidades de Operación desarrollado por el Proyecto CO (Köller and Töbermann, 2002). Como se vio
Apéndice B Extensión de las Facilidades de Simulación de HYSYS: Incorporación de Módulos Definidos Bajo el Estándar CAPE-OPEN
anteriormente, la misma genera un proyecto en Visual Basic que contiene el código fuente de la UO y el paquete de instalación para ser instalado en otras computadoras.
El primer paso para el desarrollo del módulo fue el modelado y programación de la columna en GAMS. Para el correcto funcionamiento del módulo, es imprescindible realizar una verificación rigurosa del correcto funcionamiento del modelo en forma independiente, tarea que fue realizada satisfactoriamente (Domancich y co.,2007; Domancich y co.,2009a) y descripta en detalle en el capítulo 5 de esta Tesis.
Debido a que el código fuente es generado por CO en lenguaje Visual Basic, se hizo necesario realizar una migración del mismo, de manera tal de integrar diferentes partes de código, implementadas en diversos lenguajes de programación. Para esto se debieron realizar al modelo de GAMS alguna modificaciones, permitiendo la obtención de datos para realizar la simulación desde una fuente externa, y a su vez transfiriendo resultados obtenidos a partir de la ejecución de la misma. Con esta finalidad, se hizo uso de las propiedades de los archivos con extensión GDX (GAMS Data Exchange). Un archivo GDX tiene como función grabar los valores de uno o más símbolos como son sets, parámetros, variables y ecuaciones.
GAMS posee una herramienta llamada GDXXRW, la cual tiene como función permitir la lectura de información desde un archivo de Excel, o la escritura en el mismo. GDXXRW tiene la posibilidad de leer múltiples hojas de un archivo Excel y escribir los datos en un archivo GDX. Por otro lado, también es posible recorrer el camino contrario. El código de la UO generado crea entonces un archivo Excel con todos lo datos necesarios y llama entonces a la rutina GDXXRW antes de resolver el modelo en GAMS, el cual al ser ejecutado utiliza como datos de entrada los que lee del archivo de Excel. Una vez que el modelo es resuelto, los resultados son grabados en un nuevo archivo GDX, el cual puede ser leído por el código Visual Basic de la Unidad de Operación. En la figura B.6 se incluye un esquema del proceso de lectura y transferencia de datos desde Visual Basic a GAMS.
Extensión de las Facilidades de Simulación de HYSYS Apéndice B Incorporación de Módulos Definidos Bajo el Estándar CAPE-OPEN
153
Figura B.6. Unidad de Operación CO incorporada a la simulación de la planta
En resumen, la UO de HYSYS, la cual fue programa en Visual Basic, llama a GAMS, donde el modelo matemático debe ser previamente introducido y testeado. Es importante resaltar que GAMS es el encargado de llevar a cabo la resolución matemática del modelo, y envía los resultados de la simulación nuevamente a HYSYS. Estos resultados son utilizados por HYSYS como entrada a cualquier otro equipo que forme parte del proceso industrial, de manera tal de continuar con la simulación completa de la planta.
B.4.1.2 DEFINICIÓN DE LOS PASOS A SEGUIR PARA DESARROLLAR
MÓDULOS COMPATIBLES CON CAPE OPEN A PARTIR DE MODELOS DESARROLLADOS EN GAMS
Para desarrollar una Unidad de Operación compatible con CO a partir de un modelo programado en GAMS, es necesario realizar algunas modificaciones al código original de GAMS. Una de ellas es lograr que todos los datos definidos por el usuario sean leídos por el modelo desde una fuente externa, siguiendo la metodología explicada anteriormente. Se creó entonces un archivo de Excel con todos los datos necesarios para llevar a cabo la simulación del modelo, generando luego un archivo GDX utilizando la herramienta GDXXRW. El código original de GAMS debe incluir las siguientes sentencias:
$GDXIN datain.gdx(carga el archivo GDX)
SET VAR1 (*) (define una variable)
$LOAD VAR1(carga el valor de la variable definida desde una fuente externa)
Una vez que el código de GAMS fue testeado con las modificaciones impuestas, el paso siguiente fue el desarrollo de la Unidad de Operación CO mediante la utilización de la
Apéndice B Extensión de las Facilidades de Simulación de HYSYS: Incorporación de Módulos Definidos Bajo el Estándar CAPE-OPEN
herramienta provista por CO. El código de Visual Basic generado fue modificado de manera tal de crear el archivo Excel con los datos de entrada y realizar la llamada a GAMS para llevar a cabo la resolución matemática del modelo. El código debe incluir las siguientes sentencias:
x = CreateProcessA(0&, "gams.exe model.gms", 0&, 0&, 1&,
NORMAL_PRIORITY_CLASS, 0&, 0&, NameStart, NameOfProc)
(llamada al modelo de GAMS)
x = WaitForSingleObject(NameOfProc.hProcess, INFINITE) x = CloseHandle(NameOfProc.hProcess)
En resumen, los pasos a seguir para desarrollar un modulo instalable en HYSYS a partir de un modelo matemático desarrollado en GAMS son:
A) Desarrollar y testear en GAMS el modelo matemático..
B) Utilizar la herramienta de CO para Unidades de Operación para generar un nuevo proyecto en Visual Basic que contenga:
-el código fuente de la Unidad de Operación
-el paquete de instalación necesario para llevar a cabo la instalación del mismo en cualquier máquina.
C) Modificar el código original de GAMS de manera tal de lograr obtener los datos para llevar a cabo la simulación del modelo desde una fuente externa. Para lograr esto debe ser utilizada la función GDX provista por GAMS.
D) La función GDX de GAMS provee una utilidad llamada GDXXRW que permite la lectura y escritura de datos de una hoja de datos contenida en un archivo Excel.