Programas en scada oasys

Page 1

UNIVERSIDAD DE ORIENTE VI CERRECTORADO ACADÉMI CO CONSEJO DE ESTUDIOS DE POSTGRADO POSTGRADO EN I NFORMÁTI CA GERENCI AL NÚCLEO MONAGAS

IMPLEMENTACIÓN DE PROGRAMAS DENTRO DE LA APLICACIÓN SCADA - OASyS 6.0.6.

ING. JESUS MOTA

Maturín, enero de 2018


INTRODUCCION El OASyS Versión 6.0.6, es el sistema de supervisión, control y adquisición de datos (SCADA) que se utiliza dentro de la Estación Principal Jusepín 2 para llevar a cabo las funciones de monitoreo de las variables de proceso del Complejo Jusepín, así como el control de las operaciones en el mismo. La supervisión de las variables operacionales se lleva a cabo a través de despliegues, los cuales son la representación gráfica de los distintos procesos que se monitorean y controlan en el complejo. Las variables operacionales o variables de proceso, son mediciones de algún parámetro que interviene dentro de un proceso industrial, pueden ser de tipo analógica (presión, temperatura, nivel, flujo, volumen, etc.) o digital (estado de una bomba, válvula, motor, entre otros). En el argot de los SCADA’s se le denomina señal a una variable operacional y ésta se identifica dentro del sistema a través de un TAG (etiqueta). Las señales en el sistema SCADA pueden ser de tipo telemedidas o calculadas; las primeras provienen de algún Programmable Logic Controller (PLC) o Remote Terminal Unit (RTU), que interroga a la instrumentación de campo para obtener los datos; las segundas son generadas dentro del sistema, en base a cálculos y en función a ciertos parámetros de entrada. En SCADA OASyS, se pueden realizar cálculos de dos maneras distintas: 1. Mediante líneas de código en OBEL (OBject Embedded Language), asociadas al elemento (señal o variable de campo) dentro del despliegue; el programa se ejecuta cada vez que la señal actualiza su dato. 2. A través del lenguaje de programación BASIC, para programar el código que permita realizar el cálculo de una variable. Para este caso se debe generar el código correspondiente (dentro de una ruta determinada en el servidor) y compilar el programa; para posteriormente, a través del entrono gráfico del OASyS, realizar la configuración correspondiente, enviando al programa los parámetros (señales) de entrada, para este caso el programa se puede ejecutar por excepción, es decir cuando los parámetros de entrada actualicen su valor; o periódicamente en función al tiempo que se le configure. La diferencia, entre una forma y otra radica en el hecho de que la segunda, permite que el dato pueda ser configurado para que se generen históricos que puedan ser almacenados a fin de monitorear su comportamiento en el tiempo,


mientras que la primera forma solo permite la visualización del dato dentro del despliegue. Por medio del documento que se presenta a continuación, se pretende suministrar información, mediante la ejecución de un caso práctico, de la manera de realizar cálculos matemáticos dentro de la aplicación SCADA OASyS, para tal fin se describirán los siguientes aspectos: Descripción general del proceso industrial ejecutado dentro de la estación principal Jusepín 2. Presentación del despliegue que permite monitorear el manejo de fluidos dentro de la estación. Descripción de los cálculos involucrados dentro del despliegue. Información general de la programación en BASIC para SCADA OASyS. Documentación de programas.


DESCRIPCION GENERAL DEL PROCESO Dentro del complejo Jusepín, se procesa el crudo proveniente de los pozos de los Campos Furrial Este y Oeste, a fin de entregarlo a los patios de tanques en donde será almacenado para su posterior comercialización, manejando volúmenes de 94,6 Mil Barriles Por Día (MBPD) aproximadamente. El proceso al cual es sometido el crudo proveniente de los pozos, consiste en pasar por una fase de separación, durante la cual se “separa” el gas existente dentro del fluido, pasando por varias etapas de presión (alta, media y baja); el gas resultante es sometido a un proceso de depuración, mediante el cual, el condensado que se pueda encontrar dentro de la mezcla es enviado al proceso de separación de baja presión. Posteriormente todo el líquido, luego de pasar por un proceso de enfriamiento, es almacenado dentro de tanques de estabilización donde, como su nombre lo indica se procede a estabilizar el fluido existente enviando los vapores a las Recuperadoras de Vapor y el líquido hacia la Planta Deshidratadora. Finalmente se realiza la deshidratación del fluido, que consiste en extraer el agua que se mantenga dentro de fluido, para lo cual intervienen los tanques de lavado y deshidratadores, a fin de entregar un fluido libre de agua a Patio de Tanques. Para la empresa es de especial atención conocer el volumen de crudo con el cual se cuenta dentro de su inventario (Volúmenes acumulados), la ganancia o pérdida en el mismo (Volumetría), así como la proyección de la producción del día. Esta información es importante a fin de poder cumplir con la cuota de crudo establecida en el plan de producción, así como de mantener los volúmenes operacionales que garanticen el normal funcionamiento de la estación. Debido a que en el campo no existe instrumentación que permita escanear los volúmenes almacenados dentro de los equipos (tanques estabilizadores y de lavado), se generaron señales calculadas dentro del OASyS a fin de poder obtener dichos valores, que permitirán contabilizar los volúmenes existentes (acumulado y volumetría) dentro del complejo, y la proyección de producción.


DESPLIEGUE: ESTACIÓN PRINCIPAL JUSEPIN 2 – BALANCE DE FLUIDOS

Figura 1. Despliegue “Balance de Fluidos”. Fuente: SCADA OASyS (2018)

En la figura 1 se puede apreciar, el despliegue “Balance de Fluidos” implantado dentro de la Sala de Control del Centro de Supervisión y Control Operacional (CSCO) – Jusepín, con la finalidad de monitorear los niveles, flujos y volúmenes de fluidos (AGUA y CRUDO) generados luego de realizados los procesos de depuración y separación. Además, se puede monitorear la proyección de la producción, así como los volúmenes de crudo (acumulado y volumetría) del sistema. Dentro de los beneficios que trae consigo la implementación del despliegue, se pueden mencionar: Conocer en tiempo real el inventario existente en la estación. Consolidar en una sola vista la información de varios procesos de la estación. Toma de decisiones para controlar y corregir desviaciones en el proceso de manejo de fluidos. El despliegue se encuentra dividido en cinco (5) secciones, las cuales son descritas a continuación:


Sección 1: ESQUEMATICO ( Ver figura2) : Representa de manera gráfica el proceso de transporte del fluido desde los tanques estabilizadores hasta la salida de los deshidratadores. Es importante mencionar que existen un total de seis (6) tanques estabilizadores, dos (2) tanques de lavado y seis (6) deshidratadores.

Figura 2. Sección 1: Esquemático. Fuente: SCADA OASyS (2018)

El fluido almacenado dentro de los tanques estabilizadores (TK’s – 10000) es transportado a los tanques de lavado (TK’s – 55000) a través de las bombas P-100, 200 y 300 (es un máximo de 20 bombas que se pueden utilizar para enviar el fluido desde los tanques estabilizadores hasta los de lavado) El Nivel representado dentro del tanque identificado como TK’s-10000 es un punto calculado, que suma el nivel de todos los Tanques de Estabilización. El archivo asociado al punto calculado es add6.bas (Ver sección Documentación) De los tanques de lavado se bombea el fluido a través de las bombas P-01 (un máximo de 8 bombas), hacia los deshidratadores. Se puede apreciar el flujo de agua a la salida de los tanques de lavado la que se drena hacia la Fosa 24mil, y se bombea, a través de las bombas P-02 (un máximo de 6 bombas), hacia el Sistema de Aguas Efluentes Norte (SAEN). Los valores visualizados a la salida de los tanques de lavado son señales provenientes del PLC ubicado dentro de la Planta Deshidratadora. Del fluido que entra en los deshidratadores una vez realizado el proceso, el crudo es enviado hacia Patio de Tanques Jusepín; y el agua resultante es recirculada hacia los tanques de lavado. Las señales que visualizan provienen de instrumentos que transmiten datos al mismo PLC indicado en el ítem anterior


Sección 2: TABLA - TANQUES ESTABI LI ZADORES ( Ver figura 3) : Dentro de esta sección se supervisan los niveles y volúmenes de crudo dentro de los tanques estabilizadores (10001 – 10002 – 10003 – 10004 – 10005 – 10006) así como los Volúmenes Bruto y Neto totales de los mencionados tanques.

Figura 3. Sección 2: Tanques de Estabilización. Fuente: SCADA OASyS (2018)

Niveles: son señales provenientes de distintos PLC’s del Complejo Jusepín. Volumen: de cada Tanque Estabilizador, así como el Total Volumen Bruto, son puntos calculados dentro de la aplicación OASyS. Para lo cual se multiplica el nivel del tanque por una constante igual a 363,4; este valor es el equivalente, en barriles bruto, a cada pie de nivel existente dentro del tanque. El programa asociado a estos puntos calculados se encuentra dentro del archivo vol_estabilizad.bas (Ver sección Documentación) Volumen Neto: es un punto calculado dentro del OASyS que toma el volumen bruto, y realiza los ajustes por agua en crudo y corrección por temperatura. Estos ajustes son de 50% y 0.9667 respectivamente. El programa asociado a estos puntos calculados se encuentra dentro del archivo vol_estab_neto.bas (Ver sección Documentación)


Sección 3: TABLA - TANQUES DE LAVADO ( Ver figura 4) : Dentro de esta tabla se supervisan los niveles de crudo e interfaz (agua), volúmenes de agua y crudo con su respectivo total, así como los volúmenes totales por tanque. Adicionalmente se monitorea el volumen neto de los tanques. Es importante mencionar que cada tanque de lavado consta de un tanque externo (42,5 pies) con un tanque interno concéntrico de 19 pies de altura. El fluido recibido se va almacenando dentro del externo y por rebose (al llegar a los 19’) se comienza a llenar el tanque interno, quedando el agua en el fondo del recipiente.

Figura 4. Sección 3: Tanques de Lavado. Fuente: SCADA OASyS (2018)

Niveles ( externo e interfase): son señales provenientes del PLC de Planta Deshidratadora. Volumen de Agua: de los tanques 55004 y 55005 son puntos calculados en OASyS, que multiplican el nivel de interfaz del tanque por una constante igual a 948,5, que es el equivalente (en barriles) de agua por cada pie de nivel en el tanque externo. El archivo asociado a estos puntos calculados es vol_interfase.bas (Ver sección Documentación) Volumen de Crudo: de los tanques 55004 y 55005 son puntos calculados en OASyS, que multiplican la diferencia del nivel externo del tanque menos 19 pies (Nivel máximo del tanque interno) multiplicado por una constante igual a 1411 (equivalente en barriles por cada pie de nivel por encima del tanque interno) y lo suma a la multiplicación de la diferencia de 19 pies (Nivel máximo del tanque interno) menos el nivel de la interfase multiplicado por una constante igual a 948,5; para sumarlo a 8787,5 que es el volumen del tanque interno; la representación matemática para esta expresión sería: Volumen_Total = [(Nivel_Externo – 19)x1411] + [(19 – Nivel_Interfase) x 948,5] + 8787,5

El archivo asociado a este punto calculado es vol_externo.bas (Ver sección Documentación)


Volumen Total de Agua: es la suma de los volúmenes de agua de los tanques 55004 y 55005 mencionados anteriormente. El archivo asociado al punto calculado es add2.bas (Ver sección Documentación) Volumen Total de Crudo: es la suma de los volúmenes de Crudo de los tanques 55004 y 55005 mencionados anteriormente, este volumen se le considera volumen bruto ya que el fluido posee agua. El archivo asociado al punto calculado es add2.bas (Ver sección Documentación) Volumen Total del Tanque 55004: es la suma de los volúmenes de agua y crudo del tanque, mencionados anteriormente. El archivo asociado al punto calculado es add2.bas (Ver sección Documentación) Volumen Total del Tanque 55005: es la suma de los volúmenes de agua y crudo del tanque, mencionados anteriormente. El archivo asociado al punto calculado es add2.bas (Ver sección Documentación) Volumen Total de Tanques de Lavado: es la suma de los volúmenes Totales de los tanques 55004 y 55005, mencionados anteriormente. El archivo asociado al punto calculado es add2.bas (Ver sección Documentación) Volumen Total Neto de Crudo: es un punto calculado dentro del OASyS que toma el volumen total, en barriles brutos de los tanques de lavado, y realiza los ajustes por agua en crudo (17%) y corrección por temperatura (0,9667). El programa asociado a estos puntos calculados se encuentra dentro del archivo vol_exter_neto.bas (Ver sección Documentación)


Sección 4: Tabla - DESHIDRATADORES (Ver Figura 5): Dentro de esta tabla se supervisan los flujos instantáneos y totales de agua y crudo a la salida de los deshidratadores DE-201, 301, 401, 501, 601 y 701.

Figura 5. Sección 4: Deshidratadores. Fuente: SCADA OASyS (2018)

Todas las señales visualizadas (Flujos de Agua y Crudo, así como los totales) en esta sección provienen del PLC de Planta Deshidratadora.

Sección 5: Tabla - TANQUES DE ALMACENAMIENTO (Ver figura 6): En esta tabla se supervisa el estado, tasa de flujo y barriles acumulados con hora de corte de las 8:00 a.m. de los tanques 150006, 150008 y 150009 que son los que reciben el crudo proveniente de la Estación Principal Jusepín 2.

Figura 6. Sección 5: Tanques de Almacenamiento. Fuente: SCADA OASyS (2018)


Estado: es un cálculo realizado, en el despliegue, dentro del OBEL asociado a la rata de flujo de cada uno de los tanques a fin de identificar cual está RECIBIENDO, PARADO o BOMBEANDO, tomando en consideración: o Rata de Flujo mayor que cero (0): Tanque Recibe o Rata de Flujo menor que cero (0): Tanque Bombea o Rata de Flujo igual a cero (0): Tanque Parado El código OBEL para tal proceso es el siguiente: method Trigger onmsg: msg begin ‘Declaracion de variables estado: rata de flujo recibida del despliegue estadoStr: almacena estado del tanque’ | estado estadoStr | ‘asignacion del valor del objeto del despliegue a la variable estado’ estado = ( self getText ) int; ‘evaluación de la variable para determinar estado del tanque’ ( estado == 0 ) ifTrue: [ estadoStr = "PARADO" ]; ( estado < 0 ) ifTrue: [ estadoStr = "BOMBEANDO" ]; ( estado > 0 ) ifTrue: [ estadoStr = "RECIBIENDO" ]; ‘asignación de la variable estadoStr al objeto del despliegue self setText: estadoStr; ^true End Rata de Flujo: es una señal proveniente del Tank Master ubicado en sala de control de Patios de Tanques - Jusepín Volumen Acumulado: es el resultado de restar el volumen actual del tanque menos el volumen observado a las 8:00 a.m. El programa asociado a estos puntos calculados se encuentra dentro del archivo sub2.bas (Ver sección Documentación) Volumen observado a las 8:00 a.m.: aunque no se muestra en el despliegue fue integrado para poder calcular el volumen acumulado a las 8:00 a.m. El cálculo se ejecuta a la hora indicada y consiste en capturar el valor que tiene el volumen del tanque. El programa asociado a estos puntos calculados se encuentra dentro del archivo tomar_valor.bas (Ver sección Documentación)


Otros Datos (Ver figura 7): Dentro del despliegue existen otros datos de interés para la sala de control

Figura 7. Otros datos de interés. Fuente: SCADA OASyS (2018)

Acumulado Neto: es un punto calculado en el OASyS que suma los volúmenes acumulados netos de los tanques de estabilización y los tanques de lavado. Este dato es integrado con la finalidad de conocer el volumen con el cual se cuenta en inventario de manera instantánea. El programa asociado a estos puntos calculados se encuentra dentro del archivo add2.bas (Ver sección Documentación) Acumulado 8:00 a.m.: es un punto calculado en OASyS que toma el valor del Volumen Acumulado Neto cuando la hora del servidor SCADA sea 8:00 a.m. (hora de corte de producción dentro del complejo Operacional Jusepín). Dato de interés que permite tener información respecto al volumen de crudo existente a la hora del cierre de la producción. El programa asociado a este punto calculado se encuentra dentro del archivo tomar_valor.bas (Ver sección Documentación) Volumetría Actual: es la diferencia del volumen acumulado neto (instantáneo) menos el volumen acumulado a la 8:00 a.m. este dato tiene la finalidad de monitorear de manera instantánea la cantidad de barriles que se tienen de ganancia o pérdida en el inventario. El programa asociado a estos puntos calculados se encuentra dentro del archivo sub2.bas (Ver sección Documentación) Volumetría de Cierre: es el cálculo resultante de la diferencia del volumen acumulado neto (hoy) menos el volumen acumulado neto de ayer (8:00 a.m.). Dato mediante el cual se puede monitorear si hubo ganancia o pérdida de crudo en el inventario con respecto al día anterior. El programa asociado a estos puntos calculados se encuentra dentro del archivo sub2.bas (Ver sección Documentación) Proyección de la Producción: es un punto calculado en OASyS, el cual resulta al multiplicar la rata del flujo del tanque de almacenamiento que se encuentra recibiendo y multiplicarlo por las horas faltantes para llegar a la hora de cierre (8:00 a.m.), para luego sumarlo al volumen acumulado en dicho tanque. El programa asociado a este punto calculado se encuentra dentro del archivo proy_prod_EPJ2.bas (Ver sección Documentación)


DESCRIPCIÓN GENERAL DE CALCULOS Es importante mencionar que los cálculos realizados dentro de la aplicación SCADA OASyS Versión 6.0.6, aplican para la Estación Principal Jusepín 2 la cual posee condiciones operacionales específicas como son: Porcentaje de agua en crudo dentro de los tanques estabilizadores equivalente a un 50% del fluido. Porcentaje de agua en crudo dentro de los tanques de lavado equivalente a un 17%. Factor de corrección por temperatura dentro de los procesos de estabilización y lavado igual a 0,9667 Los porcentajes y factores indicados anteriormente son datos provenientes de diversas pruebas de laboratorio. A continuación, dentro de la tabla 1, se realiza la descripción de los cálculos utilizados para las señales dentro del despliegue descrito anteriormente, donde se indica el nombre del archivo que posee el código basic, así como una breve descripción del mismo, y la utilización dentro del esquemático.

Tabla 1. Descripción de cálculos dentro de despliegue Balance de Fluidos. Fuente: El autor (2018)

NOMBRE DEL ARCHIVO add2.bas

DESCRIPCIÓN Sumar dos (2) señales

add6.bas

Sumar seis (6) señales

sub2.bas

Restar dos (2) señales

UTILIZACIÓN Volumen Total de Agua Volumen Total de Crudo Volumen Total Tanque 55004 Volumen Total Tanque 55005 Volumen Total Tanques de Lavado Volumen Acumulado Neto Nivel Total en Tanques Estabilizadores Volumetría Actual Volumetría de Cierre Volumen Acumulado Tanques de Almacenamiento


vol_interfase.bas

vol_exetrno.bas

vol_estabilizad.bas

vol_estab_neto.bas

vol_exter_neto.bas

tomar_valor.bas

Calcular el volumen de interfase de un tanque de lavado Calcular el volumen bruto de crudo dentro de un tanque de lavado Calcular el volumen bruto dentro de un tanque estabilizador

Calcular el volumen neto dentro de los tanques estabilizadores Calcular el volumen neto dentro de los tanques de la lavado Tomar el valor de una señal a una hora determinada.

proy_prod_EPJ2.bas Calcular la proyección de la producción de la Estación Principal Jusepín 2.

Volumen de interfase (agua) en tanques de lavado 55004 y 55005 Volumen de crudo (Bruto) en tanques 55004 y 55005 Volumen bruto de crudo en tanques estabilizadores (10001, 10002, 10003, 10004, 10005 y 10006) Volumen Bruto Total en Tanques Estabilizadores Volumen neto de crudo existente dentro de los tanques estabilizadores Volumen neto de crudo existente dentro de los tanques de lavado Volumen observado a las 8:00 en tanques de Almacenamiento. Volumen acumulado neto a las 8:00 Proyección de la producción de la Estación Principal Jusepín 2


INFORMACIÓN DE INTERÉS (PROGRAMAS BASIC EN SCADA-OASYS) Las variables declaradas como tipo pntname, hacen referencia a los TAG’s de las señales del OASyS, siendo un TAG el identificador de una variable operacional de campo dentro del SCADA, que son enviadas como parámetros al procedimiento que se ejecuta dentro del programa. La expresión valor=DB("analog",punto_analogico,"curval") indica que a la variable valor se le asignará el dato que tenga la señal punto_analogico, siendo punto_analogico una variable de tipo pntname. Las palabras “analog” y “curval” indican que la señal se encuentra en la base de datos analog del sistema OASyS (la base de daros almacena información respecto a las señales de tipo analógico); y que el campo a tomar es el campo curval (valor actual de la señal – current value) La expresión DB("analog",EXEC_DBKEY$,"curval")=valor, indica que el TAG, desde donde se está llamando al programa Basic, tomará el dato que tenga la variable valor Cuando se configura una señal calculada dentro de OASyS, esta puede ser configurada “por excepción” o “periódica”; para el primer caso se deben indicar los disparadores (trigger) que permitirán que se ejecute el programa cuando ellos tengan una variación en su valor; para el segundo caso se debe indicar el tiempo durante el cual se debe realizar el cálculo, así como su frecuencia. Para ambos casos se indican los parámetros a enviar al programa Basic. En las figuras 8 y 9 se muestran ejemplo de la configuración de una señal calculada en ambos casos respectivamente.


TAG de la señal calculada

Nombre del programa Basic

Disparadores

Parámetros enviados al programa

Figura 8. Configuración de una señal calculada “Por Excepción” en OASyS. Fuente: SCADA OASyS (2018)


Figura 9. Configuración de una señal calculada “Periódica” en OASyS. Fuente: SCADA OASyS (2018)


ANEXO (DOCUMENTACIÓN DE PROGRAMAS) CODIGO:

SCADA-01

ENUNCIADO:

NOMBRE:

ADD2

Se requiere sumar dos (2) señales analógicas provenientes del SCADA OASyS, instalado en la Estación Principal Jusepín 2 ANALISIS DEL PROBLEMA

DATOS DE ENTRADA: DATOS DE SALIDA: DATOS AUXILIARES:

Señales analógicas. Resultado de la suma de las señales analógicas. Variable para almacenar el TAG de las señales de entrada (punto_analogico) Variable para almacenar el dato de las señales de entrada (valor)

CONDICIONES O RESTRICCIONES:

Ninguna

PROCESO:

Inicio 1. Declarar variables a utilizar (punto1, punto2, suma) 2. Leer variables de entrada (punto1, punto2) 3. Realizar la suma suma = punto1 + punto2 4. Enviar variable suma a BD del SCADA Fin DISEÑO

PSEUDO-CODIGO:

1. INICIO 2. Leer punto1, punto2 3. punto_analogico punto1 4. Ir a 11 5. suma valor 6. punto_analogico punto2 7. Ir a 11 8. suma suma + valor 9. DB("analog",EXEC_DBKEY$,"curval") = suma 10. FIN 11. valor DB("analog",punto_analogico,"curval") 12. Retornar IMPLEMENTACIÓN

CODIGO:

10 REM Sumar 2 Señales 20 PROCEDURE add2(punto1,punto2) 30 DECLARE pntname punto1 40 DECLARE pntname punto2 50 DECLARE pntname punto_analogico 60 DECLARE float valor 70 DECLARE float suma 80 punto_analogico=punto1 90 GOSUB 160 100 suma=valor


110 punto_analogico=punto2 120 GOSUB 160 130 suma=suma+valor 140 DB("analog",EXEC_DBKEY$,"curval")=suma 150 END 160 REM Subrutina para asignar el valor de la señal a la variable valor 170 valor=DB("analog",punto_analogico,"curval") 180 RETURN

CODIGO:

SCADA-02

ENUNCIADO:

NOMBRE:

ADD6

Se requiere sumar seis (6) señales analógicas provenientes del SCADA OASyS, instalado en la Estación Principal Jusepín 2 ANALISIS DEL PROBLEMA

DATOS DE ENTRADA: DATOS DE SALIDA: DATOS AUXILIARES:

Señales analógicas. Resultado de la suma de las señales analógicas. Variable para almacenar el TAG de las señales de entrada (punto_analogico) Variable para almacenar el dato de las señales de entrada (valor)

CONDICIONES O RESTRICCIONES:

Ninguna

PROCESO:

Inicio 1. Declarar variables a utilizar (punto1, punto2, punto3, punto4, punto5, punto6, suma) 2. Leer variables de entrada (punto1, punto2, punto3, punto4, punto5, punto6) 3. Realizar la suma suma = punto1+punto2+punto3+punto4+punto5+punto6 4. Enviar variable suma a BD del SCADA Fin DISEÑO

PSEUDO-CODIGO:

1. INICIO 2. Leer punto1, punto2, punto3, punto4, punto5, punto6 3. punto_analogico punto1 4. Ir a 23 5. suma valor 6. punto_analogico punto2 7. Ir a 23 8. suma suma + valor 9. punto_analogico punto3 10. Ir a 23 11. suma suma + valor 12. punto_analogico punto4 13. Ir a 23 14. suma suma + valor


15. punto_analogico punto5 16. Ir a 23 17. suma suma + valor 18. punto_analogico punto6 19. Ir a 23 20. suma suma + valor 21. DB("analog",EXEC_DBKEY$,"curval") = suma 22. FIN 23. valor DB("analog",punto_analogico,"curval") 24. Retornar IMPLEMENTACIÓN

CODIGO:

10 REM Sumar 6 señales 20 PROCEDURE add6(punto1,punto2,punto3,punto4,punto5,punto6) 30 DECLARE pntname punto1 40 DECLARE pntname punto2 50 DECLARE pntname punto3 60 DECLARE pntname punto4 70 DECLARE pntname punto5 80 DECLARE pntname punto6 90 DECLARE pntname punto_analogico 100 DECLARE float valor 110 DECLARE float suma 120 punto_analogico=punto1 130 GOSUB 240 140 suma=valor 150 punto_analogico=punto2 160 GOSUB 240 170 suma = suma +valor 180 punto_analogico=punto3 190 GOSUB 240 120 suma= suma+ valor 130 punto_analogico=punto4 140 GOSUB 240 150 suma= suma+ valor 160 punto_analogico=punto5 170 GOSUB 240 180 suma= suma+ valor 190 punto_analogico=punto6 200 GOSUB 240 210 suma=suma+ valor 220 DB("analog",EXEC_DBKEY$,"curval")= suma 230 END 240 REM Subrutina para asignar el valor de la señal a la variable valor 250 valor=DB("analog",punto_analogico,"curval") 260 RETURN


CODIGO:

SCADA-03

ENUNCIADO:

NOMBRE:

VOL_INTERFASE

Se requiere calcular el volumen de interfase o agua dentro de los tanques de lavado de la planta deshidratadora de la Estación Principal Jusepín 2 ANALISIS DEL PROBLEMA

DATOS DE ENTRADA: DATOS DE SALIDA: DATOS AUXILIARES: CONDICIONES O RESTRICCIONES:

PROCESO:

Señal analógica (nivel de interfase del tanque de lavado) Volumen de agua dentro del tanque de lavado. Variable para almacenar el TAG de la señal de entrada (NivelInterfase) Variable para almacenar el dato de la señal de entrada (Nivel) Cada pie de nivel de interfase dentro del tanque equivale a 948,5 barriles de agua. Inicio 1. Declarar variables a utilizar (NivelInterfase, volumen) 2. Leer variable de entrad (NivelInterfase) 3. Realizar el cálculo del volumen Volumen = NivelInterfase * 948,5 4. Enviar variable Volumen a BD del SCADA Fin DISEÑO

PSEUDO-CODIGO:

1. 2. 3. 4. 5. 6.

INICIO Leer NivelInterfase nivel DB("analog",NivelInterfase,"curval") volumen nivel * 948,5 DB("analog",EXEC_DBKEY$,"curval") = volumen FIN IMPLEMENTACIÓN

CODIGO:

10 REM Calcular volumen de interfase los Tanques de Lavado de PDE 20 PROCEDURE VolumenInterfase(NivelInterfase) 30 DECLARE pntname NivelInterfase 40 DECLARE float Volumen 50 DECLARE float Nivel 60 Nivel=DB("analog",NivelInterfase,"curval") 70 Volumen=(Nivel*948.5) 80 DB("analog",EXEC_DBKEY$,"curval")=Volumen 90 END


CODIGO:

SCADA-04

ENUNCIADO:

NOMBRE:

VOL_EXTERNO

Se requiere calcular el volumen bruto de crudo dentro de los tanques de lavado de la planta deshidratadora de la Estación Principal Jusepín 2 ANALISIS DEL PROBLEMA

DATOS DE ENTRADA: DATOS DE SALIDA:

DATOS AUXILIARES:

CONDICIONES O RESTRICCIONES:

PROCESO:

Señales analógica (niveles externo y de interfase del tanque de lavado) Volumen bruto de crudo dentro del tanque de lavado. Variable para almacenar el TAG de las señales de entrada (NivelExterno, NivelInterfase) Variable para almacenar el dato de las señales de entrada (Nivel1, Nivel2) Variable para almacenar el dato del volumen asociado a los niveles auxiliares (volumen1, volumen2) El volumen bruto total dentro de un tanque de lavado resulta de multiplicar la diferencia del nivel externo del tanque menos 19 pies (Nivel máximo del tanque interno) multiplicado por una constante igual a 1411 (equivalente en barriles de crudo por cada pie de nivel por encima del tanque interno) y lo suma a la multiplicación de la diferencia de 19 pies (Nivel máximo del tanque interno) menos el nivel de la interfase multiplicado por una constante igual a 948,5 (equivalente en barriles de crudo por cada pie de nivel dentro del tanque externo y por debajo del nivel interno); para luego sumarlo a 8787,5 que es el volumen del tanque interno. Inicio 1. Declarar variables a utilizar (NivelExterno, NivelInterfase, volumen1, volumen2, volumenT) 2. Leer variable de entrada (NivelExterno) 3. Leer variable de entrada (NivelInterfase) 4. Realizar el cálculo del volumen auxiliar1 Volumen1 = (NivelExterno - 19) * 1411 5. Realizar el cálculo del volumen auxiliar2 Volumen2 = (19 - NivelInterfase) * 948,5 6. Realizar el cálculo del volumen Total VolumenT = Volumen1 + Volumen2 + 8787,5 7. Enviar variable VolumenT a BD del SCADA Fin DISEÑO

PSEUDO-CODIGO:

1. 2. 3. 4. 5. 6. 7.

INICIO Leer NivelExterno Leer NivelInterfase Nivel1 DB("analog",NivelExterno,"curval") Nivel2 DB("analog",NivelInterfase,"curval") Volumen1 (Nivel1-19) * 1411 Volumen2 (19-Nivel2) * 948,5


8. VolumenT Volumen1 + Volumen2 + 8787,5 9. DB("analog",EXEC_DBKEY$,"curval") = VolumenT 10. FIN IMPLEMENTACIÓN 10 REM Calcular volumen externo de Tanques de Lavado de PDE 20 PROCEDURE VolumenExterno(NivelExterno,NivelInterfase) 30 DECLARE pntname NivelExterno 40 DECLARE pntname NivelInterfase 50 DECLARE float Volumen1 60 DECLARE float Volumen2 70 DECLARE float VolumenT 80 DECLARE float Nivel1 90 DECLARE float Nivel2 100 Nivel1=DB("analog",NivelExterno,"curval") 110 Nivel2=DB("analog",NivelInterfase,"curval") 120 Volumen1=(Nivel1-19)*1411 130 Volumen2=(19-Nivel2)*948.5 140 VolumenT=Volumen1+Volumen2+8787.5 150 DB("analog",EXEC_DBKEY$,"curval")=VolumenT 160 END

CODIGO:

CODIGO:

SCADA-05

ENUNCIADO:

NOMBRE:

VOL_ESTABILIZAD

Se requiere calcular el volumen de crudo existente dentro de un tanque estabilizador de la Estación Principal Jusepín 2 ANALISIS DEL PROBLEMA

DATOS DE ENTRADA: DATOS DE SALIDA: DATOS AUXILIARES: CONDICIONES O RESTRICCIONES:

PROCESO:

Señal analógica (nivel de tanque estabilizador) Volumen de crudo en tanque de estabilización. Variable para almacenar el TAG de la señal de entrada (NivelTanque) Variable para almacenar el dato de la señal de entrada (Nivel) Cada pie de nivel de un tanque estabilizador equivale a 363,4 barriles de crudo. Inicio 1. Declarar variables a utilizar (NivelTanque, volumen) 2. Leer variable de entrada (NivelTanque) 3. Realizar el cálculo del volumen Volumen = NivelTanque * 363,4 4. Enviar variable Volumen a BD del SCADA Fin DISEÑO

PSEUDO-CODIGO:

1. INICIO 2. Leer NivelTanque 3. nivel DB("analog",NivelTanque,"curval")


4. volumen nivel * 363,4 5. DB("analog",EXEC_DBKEY$,"curval") = volumen 6. FIN IMPLEMENTACIÓN 10 REM Calcular Volumen de Tanques Estabilizadores 20 PROCEDURE Volumen(NivelTanque) 30 DECLARE pntname NivelTanque 40 DECLARE float VolumenT 50 DECLARE float Nivel 60 Nivel=DB("analog",NivelTanque,"curval") 70 VolumenT=(Nivel*363.4) 80 DB("analog",EXEC_DBKEY$,"curval")=VolumenT 90 END

CODIGO:

CODIGO:

SCADA-06

ENUNCIADO:

NOMBRE:

VOL_ESTAB_NETO

Se requiere calcular el volumen neto de crudo existente dentro de los tanques estabilizadores de la Estación Principal Jusepín 2 ANALISIS DEL PROBLEMA

DATOS DE ENTRADA: DATOS DE SALIDA: DATOS AUXILIARES:

CONDICIONES O RESTRICCIONES:

PROCESO:

Señal analógica (Volumen Bruto en tanques estabilizadores) Volumen de crudo neto dentro de los tanques de estabilización. Variable para almacenar el TAG de la señal de entrada (VolumenBruto) Variable para almacenar el dato de la señal de entrada (Volumen) Para el cálculo del volumen neto dentro de los tanques de estabilización, al volumen bruto se le deben hacer ajustes de 50% de agua en crudo y ajuste de temperatura, equivalente a 0,9667. Estos ajustes se corresponden a datos arrojados en pruebas de laboratorio. Inicio 1. Declarar variables a utilizar (VolumenBruto, VolumenNeto) 2. Leer variable de entrada (VolumenBruto) 3. Realizar el cálculo del volumen VolumenNeto = VolumenBruto * 0,5 * 0,9667 4. Enviar variable VolumenNeto a BD del SCADA Fin DISEÑO

PSEUDO-CODIGO:

1. 2. 3. 4. 5. 6.

INICIO Leer VolumenBruto Volumen DB("analog",VolumenBruto,"curval") VolumenNeto Volumen * 0,5 * 0,9667 DB("analog",EXEC_DBKEY$,"curval") = VolumenNeto FIN IMPLEMENTACIÓN


10 REM Calcular volumen Neto de los Tanques de Estabilizadores 20 PROCEDURE Volumen(VolumenBruto) 30 DECLARE pntname VolumenBruto 40 DECLARE float VolumenNeto 50 DECLARE float Volumen 60 Volumen=DB("analog",VolumenBruto,"curval") 70 VolumenT=(Volumen*0.5*0.9667) 80 DB("analog",EXEC_DBKEY$,"curval")=VolumenT 90 END

CODIGO:

CODIGO:

SCADA-07

ENUNCIADO:

NOMBRE:

VOL_EXTER_NETO

Se requiere calcular el volumen neto de crudo existente dentro de los tanques de lavado de la planta deshidratadora de la Estación Principal Jusepín 2 ANALISIS DEL PROBLEMA

DATOS DE ENTRADA: DATOS DE SALIDA: DATOS AUXILIARES:

CONDICIONES O RESTRICCIONES:

PROCESO:

Señal analógica (Volumen Bruto en tanques de lavado) Volumen de crudo neto dentro de los tanques de lavado. Variable para almacenar el TAG de la señal de entrada (VolumenBruto) Variable para almacenar el dato de la señal de entrada (Volumen) Para el cálculo del volumen neto dentro de los tanques de lavado, al volumen bruto se le deben hacer ajustes de 17% de agua en crudo y ajuste de temperatura, equivalente a 0,9667. Estos ajustes se corresponden a datos arrojados en pruebas de laboratorio. Inicio 1. Declarar variables a utilizar (VolumenBruto, VolumenNeto) 2. Leer variable de entrada (VolumenBruto) 3. Realizar el cálculo del volumen VolumenNeto = VolumenBruto * 0,83 * 0,9667 4. Enviar variable VolumenBruto a BD del SCADA Fin DISEÑO

PSEUDO-CODIGO:

1. 2. 3. 4. 5. 6.

INICIO Leer VolumenBruto Volumen DB("analog",VolumenBruto,"curval") VolumenNeto Volumen * 0,83 * 0,9667 DB("analog",EXEC_DBKEY$,"curval") = VolumenNeto FIN IMPLEMENTACIÓN

CODIGO:

10 REM Calcular volumen Neto de los Tanques de Lavado 20 PROCEDURE Volumen(VolumenBruto) 30 DECLARE pntname VolumenBruto 40 DECLARE float VolumenNeto


50 DECLARE float Volumen 60 Volumen= DB("analog",VolumenBruto,"curval") 70 VolumenNeto=(Volumen * 0.83 * 0.9667) 80 DB("analog",EXEC_DBKEY$,"curval")=VolumenNeto 90 END CODIGO:

SCADA-08

ENUNCIADO:

NOMBRE:

TOMAR_VALOR

Se requiere copiar el valor que tiene una señal del SCADA-OASyS a una hora determinada dentro de otra variable ANALISIS DEL PROBLEMA

DATOS DE ENTRADA: DATOS DE SALIDA: DATOS AUXILIARES: CONDICIONES O RESTRICCIONES:

PROCESO:

Señal analógica Valor de la señal analógica a una hora determinada. Variable para almacenar el TAG de la señal de entrada (punto) Variable para almacenar el dato de la señal de entrada (valor) La hora a la que se ejecutara el programa es definido dentro de la configuración de la señal en SCADA OASyS. Inicio 1. Declarar variables a utilizar (punto) 2. Leer variable de entrada (punto) 3. Realizar la captura del dato Valor = punto 4. Enviar variable Valor a BD del SCADA Fin DISEÑO

PSEUDO-CODIGO:

1. 2. 3. 4. 5.

INICIO Leer punto valor DB("analog",punto,"curval") DB("analog",EXEC_DBKEY$,"curval") FIN

valor

IMPLEMENTACIÓN

CODIGO:

10 REM Capturar el valor de una señal 20 PROCEDURE tomar_valor(punto) 30 DECLARE pntname punto 40 DECLARE float Valor 50 Valor= DB("analog",punto,"curval") 60 DB("analog",EXEC_DBKEY$,"curval")=Valor 70 END


CODIGO:

SCADA-09

ENUNCIADO:

NOMBRE:

SUB2

Se requiere restar dos (2) señales analógicas provenientes del SCADA OASyS, instalado en la Estación Principal Jusepín 2 ANALISIS DEL PROBLEMA

DATOS DE ENTRADA: DATOS DE SALIDA: DATOS AUXILIARES:

Señales analógicas. Resultado de la resta de las señales analógicas. Variable para almacenar el TAG de las señales de entrada (punto_analogico) Variable para almacenar el dato de las señales de entrada (valor)

CONDICIONES O RESTRICCIONES:

Ninguna

PROCESO:

Inicio 1. Declarar variables a utilizar (punto1, punto2, resta) 2. Leer variables de entrada (punto1, punto2) 3. Realizar la resta resta = punto1 – punto2 4. Enviar variable resta a BD del SCADA Fin DISEÑO

PSEUDO-CODIGO:

1. INICIO 2. Leer punto1, punto2 3. punto_analogico punto1 4. Ir a 10 5. resta valor 6. punto_analogico punto2 7. Ir a 10 8. resta resta – valor 9. DB("analog",EXEC_DBKEY$,"curval") = resta 10. FIN 11. valor DB("analog",punto_analogico,"curval") 12. Retornar IMPLEMENTACIÓN

CODIGO:

10 REM Restar dos señales 20 PROCEDURE resta(punto1, punto2) 30 DECLARE pntname punto1 40 DECLARE pntname punto2 50 DECLARE pntname punto_analogico 60 DECLARE float valor 70 DECLARE float resta 80 punto_analogico=punto1 90 GOSUB 160 100 resta=valor 110 punto_analogico=punto2 120 GOSUB 160


130 resta=resta-valor 140 DB("analog",EXEC_DBKEY$,"curval")=resta 150 END 160 REM Subrutina para tomar el valor del punto y asignarlo a la variable valor 170 valor=DB("analog",punto_analogico,"curval") 180 RETURN

CODIGO:

SCADA-10

ENUNCIADO:

NOMBRE:

PROY_PROD_EPJ2

Se requiere calcular la proyección de la producción diaria de la Estación Principal Jusepín 2 ANALISIS DEL PROBLEMA

DATOS DE ENTRADA: DATOS DE SALIDA:

DATOS AUXILIARES:

CONDICIONES O RESTRICCIONES:

PROCESO:

Señales analógicas (Tasas de flujo y volúmenes acumulados de los tanques de almacenamiento) Proyección de la producción. Variable para almacenar los TAG’s de las señales de entrada (TasaTanque1, TasaTanque2, TasaTanque3, AcumTanque1, AcumTanque2, AcumTanque3) Variables para almacenar el dato de las señales de entrada (Tasa1, Tasa2, Tasa3, ValorAcum) Hora actual del sistema (HoraActual) Minutos actuales del sistema (MinutoActual) Horas restantes para la hora de cierre (HorasRestantes) Minutos restantes para la hora de cierre (MinutoRestante) Tiempo Faltante para la hora de cierre (TiempoFaltante) Tasa de flujo del tanque que se encuentra recibiendo (TasaPuntual) La proyección de la producción será el resultado de multiplicar la tasa de flujo, del tanque de almacenamiento que se encuentra recibiendo crudo, por el tiempo faltante para la hora de cierre y sumarlo al volumen acumulado que tiene el tanque. El tiempo faltante para la hora de cierre es expresado en minutos Si la Tasa de Flujo de un tanque es mayos que cero (0) significa que dicho tanque se encuentra recibiendo crudo Nunca podrá estar más de un tanque recibiendo crudo. Inicio 1. Declarar variables a utilizar (TasaTanque1, TasaTanque2, TasaTanque3, AcumTanque1, AcumTanque2, AcumTanque3, Tasa1, Tasa2, Tasa3, TasaPuntual, HorasRestantes, ValorAcum, HoraActual, MinutoActual, MinutoRestante, TiempoFaltante, Proyeccion) 2. Leer variables de entrada (TasaTanque1, TasaTanque2, TasaTanque3, AcumTanque1, AcumTanque2, AcumTanque3) 3. Determinar tanque que está recibiendo y asignar a la variable TasaPuntual, su tasa de flujo, y a la variable ValorAcum su


4.

5.

6. 7. Fin

volumen acumulado 3.1. Si TasaTanque1 > 0 entonces 3.1.1. TasaPuntual = Tasa Tanque1 3.1.2. ValorAcum = AcumTanque1 3.2. Fin Si 3.3. Si TasaTanque2 > 0 entonces 3.3.1. TasaPuntual = Tasa Tanque2 3.3.2. ValorAcum = AcumTanque2 3.4. Fin Si 3.5. Si TasaTanque3 > 0 entonces 3.5.1. TasaPuntual = Tasa Tanque3 3.5.2. ValorAcum = AcumTanque3 3.6. Fin Si Obtener del sistema los datos de hora y minutos actuales 4.1. HoraActual = TIME(HORA) 4.2. MinutoActual = TIME(MINUTO) Calcular el Tiempo Faltante para la hora de cierre 5.1. Si (HoraActual>=8) y (HoraActual<=23) entonces 5.1.1. HorasRestantes = 24 – HoraActual + 8 5.2. Sino 5.2.1. Si (HoraActual>=0) y (HoraActual<8) entonces 5.2.1.1. HorasRestantes = 8 – HoraActual 5.2.2. Fin Si 5.3. Fin Si 5.4. MinutoRestante = 1 – (MinutoActual/60) 5.5. Si MinutoRestante > 0 entonces 5.5.1. TiempoFaltante = (HorasRestantes - 1) + MinutoRestante 5.6. Sino 5.6.1. TiempoFaltante = HorasRestantes 5.7. Fin Si Calcular la proyección de la producción Proyeccion = (TasaPuntual * TiempoFaltante) + ValorAcum Enviar variable Proyeccion a BD del SCADA DISEÑO

PSEUDO-CODIGO:

1. INICIO 2. Leer TasaTanque1, TasaTanque2, TasaTanque3, AcumTanque1, AcumTanque2, AcumTanque3 3. Tasa1 DB("analog",TasaTanque1,"curval") 4. Tasa2 DB("analog",TasaTanque2,"curval") 5. Tasa3 DB("analog",TasaTanque3,"curval") 6. Si Tasa1 > 0 entonces 6.1. TasaPuntual Tasa1 6.2. ValorAcum DB("analog",AcumTanque1,"curval") 7. Fin Si 8. Si Tasa2 > 0 entonces


8.1. TasaPuntual Tasa2 8.2. ValorAcum DB("analog",AcumTanque2,"curval") 9. Fin Si 10. Si Tasa3 > 0 entonces 10.1. TasaPuntual Tasa3 10.2. ValorAcum DB("analog",AcumTanque3,"curval") 11. Fin Si 12. HoraActual TIME(Hora) 13. Si (HoraActual>=8) Y (HoraActual<=23) Entonces 13.1. HorasRestantes 24 – HoraActual + 8 14. Sino 14.1. Si (HoraActual>=0) Y (HoraActual<8) Entonces 14.1.1. HorasRestantes 8 – HoraActual 14.2. Fin Si 15. Fin Si 16. MinutoActual TIME(Minuto) 17. MinutoRestante 1 - (MinutoActual/60) 18. Si MinutoRestante > 0 Entonces 18.1. TiempoFaltante (HorasRestantes 1) MinutoRestante 19. Sino 19.1. TiempoFaltante HorasRestantes 20. Fin Si 21. Proyeccion (TasaPuntual * TiempoFaltante) + ValorAcum 22. DB("analog",EXEC_DBKEY$,"curval") Proyeccion 23. FIN IMPLEMENTACIÓN

CODIGO:

10 REM Calcular proyección de producción 20 REM asociada a los tanques 150006, 150008 y 150009 30 PROCEDURE Calculo(TasaTanque1,TasaTanque2,TasaTanque3,AcumTanque1,Acu mTanque2,AcumTanque3) 40 DECLARE pntname TasaTanque1 50 DECLARE pntname TasaTanque2 60 DECLARE pntname TasaTanque3 70 DECLARE pntname AcumTanque1 80 DECLARE pntname AcumTanque2 90 DECLARE pntname AcumTanque3 110 DECLARE float Tasa1 120 DECLARE float Tasa2 130 DECLARE float Tasa3 140 DECLARE float TasaPuntual 150 DECLARE float HorasRestantes 160 DECLARE float ValorAcum 170 DECLARE float HoraActual 180 DECLARE float MinutoActual 190 DECLARE float MinutoRestante

+


200 DECLARE float TiempoFaltante 210 DECLARE float Proyeccion 220 Tasa1=DB("analog",TasaTanque1,"curval") 230 Tasa2=DB("analog",TasaTanque2,"curval") 240 Tasa3=DB("analog",TasaTanque3,"curval") 250 IF Tasa1>0 THEN 260 TasaPuntual=Tasa1 270 ValorAcum=DB("analog",AcumTanque1,"curval") 280 END IF 290 IF Tasa2>0 THEN 300 TasaPuntual=Tasa2 310 ValorAcum=DB("analog",AcumTanque2,"curval") 320 END IF 330 IF Tasa3>0 THEN 340 TasaPuntual=Tasa3 350 ValorAcum=DB("analog",AcumTanque3,"curval") 360 END IF 370 HoraActual=VAL(MID$(TIME$,1,2)) 380 IF (HoraActual>=8) AND (HoraActual<=23) THEN 390 HorasRestantes=24-HoraActual+8 400 ELSE 410 IF (HoraActual>=0) AND (HoraActual<8) THEN 420 HorasRestantes=8-HoraActual 430 END IF 440 END IF 450 MinutoActual=VAL(MID$(TIME$,4,2)) 460 MinutoRestante=1-(MinutoActual/60) 470 IF MinutoRestante>0 THEN 480 TiempoFaltante=(HorasRestantes-1)+MinutoRestante 490 ELSE 500 TiempoFaltante=HorasRestantes 510 END IF 520 Proyeccion=(TasaPuntual*TiempoFaltante)+ValorAcum 530 DB("analog",EXEC_DBKEY$,"curval")=Proyeccion 540 END


IMPLEMENTACIÓN DE PROGRAMAS DENTRO DE LA APLICACIÓN SCADA - OASyS 6.0.6.

Elaborado por: ING. JESUS MOTA MAESTRANTE SECCION 03 – INFORMATICA GERENCIAL UNIVERSIDAD DE ORIENTE

Maturín, enero de 2018


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.