APOYO Y SOPORTE TÉCNICO EN LA PROGRAMACIÓN DE UNA CALCULADORA
DE DERRAMES DE HIDROCARBUROS REALIZANDO SU IMPLEMENTACION
CON ARCMAP COMO UN ADD – IN DESARROLLADO BAJO EL LENGUAJE
PYTHON
JORGE EDUARDO BERMÚDEZ ARIAS
20101025010
INGENIERÍA CATASTRAL Y GEODESIA
UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS
BOGOTÁ 2017
2
APOYO Y SOPORTE TÉCNICO EN LA PROGRAMACIÓN DE UNA CALCULADORA
DE DERRAMES DE HIDROCARBUROS REALIZANDO SU IMPLEMENTACION
CON ARCMAP COMO UN ADD – IN DESARROLLADO BAJO EL LENGUAJE
PYTHON
JORGE EDUARDO BERMÚDEZ ARIAS
20101025010
Trabajo de grado mediante la modalidad de pasantía en Varichem de Colombia G.E.P.S
CARLOS GERMÁN RAMÍREZ
Director Interno
JAIRO ALEJANDRO AYALA RICO
Especialista SIG
Director Externo
INGENIERÍA CATASTRAL Y GEODESIA
UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS
BOGOTÁ 2017
3
TABLA DE CONTENIDO
3. INTRODUCCIÓN .................................................................................................................. 8
4. ANTECEDENTES ................................................................................................................. 9
5. JUSTIFICACIÓN ................................................................................................................. 10
6. PREGUNTAS E HIPÓTESIS............................................................................................... 11
6.1. Preguntas ........................................................................................................................ 11
6.2. Hipótesis ......................................................................................................................... 11
7. DECLARACIÓN DEL PROBLEMA .................................................................................. 12
8. OBJETIVOS ......................................................................................................................... 12
8.1. General ........................................................................................................................... 12
8.2. Específicos. .................................................................................................................... 12
9. MARCO DE REFERENCIA ................................................................................................ 13
9.1. MARCO TEÓRICO ....................................................................................................... 13
7.1.1 Lenguaje Python: ........................................................................................................ 13
7.1.2 Interfaz gráfica ............................................................................................................ 13
7.1.3 Tkinter ........................................................................................................................ 14
7.1.4 wxPython .................................................................................................................... 15
7.1.5 PyQt: ........................................................................................................................... 16
7.1.6 Add – In (Complemento) ............................................................................................ 16
7.1.7 Oleoducto.................................................................................................................... 16
7.1.8 Vasos comunicantes ................................................................................................... 17
7.1.9 ILI (In – line inspection) ............................................................................................. 18
7.1.10 Válvula de seccionamiento ......................................................................................... 18
7.1.11 Válvula de cheque ...................................................................................................... 18
7.1.12 IDE.............................................................................................................................. 19
4
7.1.13 Matplotlib ................................................................................................................... 19
10. MÉTODOS Y DATOS ...................................................................................................... 20
8. RESULTADOS..................................................................................................................... 43
10. BIBLIOGRAFÍA ............................................................................................................... 54
TABLA DE ILUSTRACIONES
Figura No.1 Vasos comunicantes ............................................................................................. 17
Figura No.2 Ubicación de la consola de comandos de Python ................................................. 20
Figura No.3 Hola mundo usando Tkinter ................................................................................. 20
Figura No.4. Error al ejecutar fracción de código de una interfaz ............................................ 21
Figura No.5. Formulario en Tkinter .......................................................................................... 21
Figura No.6. IDE Visual Python ............................................................................................... 22
Figura No.7. Hola mundo usando wxPython ............................................................................ 22
Figura No.8. IDE wxForm Builder ........................................................................................... 24
Figura No.9. Hola mundo usando PyQt .................................................................................... 24
Figura No.10. IDE QtDesigner ................................................................................................. 26
Figura No.11. Configuración de la variable de entorno............................................................ 27
Figura No.12. Archivos creados usando el asistente de Add – In para Python ........................ 28
Figura No.13. Visualización del Add – In instalado dentro e ArcMap .................................... 29
Figura No.14. Perfil usado para el análisis ............................................................................... 32
Figura No.15. Descripción del cálculo del volumen derramado .............................................. 33
Figura No.16. Volumen real derramado ................................................................................... 34
Figura No.17. Volumen cilindro inclinado ............................................................................... 35
Figura No.18. Caso número 1 ................................................................................................... 36
5
Figura No.19. Caso número 2 ................................................................................................... 37
Figura No.20. Caso número 3 ................................................................................................... 37
Figura No.21. Caso número 4 ................................................................................................... 38
Figura No.22. Caso número 5 ................................................................................................... 38
Figura No.23. Caso número 6 ................................................................................................... 39
Figura No.24. Caso número 7 ................................................................................................... 39
Figura No.25. Caso número 8 ................................................................................................... 40
Figura No.26. Caso número 9 ................................................................................................... 40
Figura No.27. Caso número 10 ................................................................................................. 40
Figura No.28. Desarrollo final de la interfaz gráfica ................................................................ 43
Figura No.29. Sección 1 interfaz gráfica .................................................................................. 44
Figura No.30. Sección 2 interfaz gráfica .................................................................................. 44
Figura No.31. Sección 3 interfaz gráfica .................................................................................. 45
Figura No.32. Sección 4 interfaz gráfica .................................................................................. 45
Figura No.33. Informe pdf generado usando reportlab............................................................. 46
Figura No.34. Informe Excel generado..................................................................................... 47
Figura No.35. Perfil de volúmenes de derrame ........................................................................ 48
Figura No.36. Comparación perfil volúmenes de derrame ....................................................... 49
Figura No.37. Selección de solo un tipo de válvula ................................................................. 49
6
1. RESUMEN
El desarrollo de este trabajo consistió en dar solución a dos problemas, poder integrar con
ArcMap una librería para desarrollar interfaces GUI usando el lenguaje Python y el segundo fue
calcular el hidrocarburo derramado cuando un poliducto u oleoducto sufra una rotura total en
alguna sección, se tuvo en cuenta parámetros como el espesor, diámetro, abscisado, cotas y
ubicación de válvulas de seccionamiento y de cheque; no se tuvieron en cuenta parámetros como
tipo de sustancia transportada, viscosidad de esta, presión de bombeo y demás parámetros físicos
que pudieran dar un resultado más preciso ya que se planteó que el derrame iba a ser total.
Para desarrollar la interfaz gráfica, se tuvieron en cuenta 3 librerías, Tkinter, PyQt, y
wxPython; se realizó una comparación entre estas 3 y se escogió PyQt, la cual se ajustaba mejor
para lo que se tenía pensado programar, a lo que respecta al cálculo del volumen aproximado
derramado se hizo uso del principio de vasos comunicantes, ya que el volumen que se va a
derramar va a ser el que pierda hasta que el sistema se encuentre en equilibrio, esto generó 10
posibles casos en que se puede derramar el hidrocarburo transportado, este volumen se calculó
usando una integral de volumen la cual depende de un ángulo de inclinación, la longitud de la
sección analizada y la altura del líquido, con esto se pudo obtener un valor aproximado de la
cantidad de hidrocarburo que se puede derramar, además con estos datos se pudieron crear dos
perfiles de derrame, uno sin las válvulas funcionando y otro con el funcionamiento de estas
Palabras clave
Poliducto, oleoducto, válvulas, derrame, hidrocarburo, abscisas, cota, diámetro, espesor,
calculadora
7
2. ABSTRACT
The development of this work was to solve two problems, to integrate with ArcMap a
library to develop GUI interfaces using the Python language and the second was to calculate the
hydrocarbon spilled when a pipeline or pipeline undergoes a total break in any section, In
account parameters such as thickness, diameter, abscissa, dimensions and location of sectioning
and check valves; No parameters were taken into account such as type of substance transported,
viscosity of this, pumping pressure and other physical parameters that could give a more precise
result.
To develop the graphical interface, we took into account 3 libraries, Tkinter, PyQt, and
wxPython; A comparison was made between these 3 and PyQt was chosen, which was better
adjusted for what was planned to be planned, as regards the calculation of the approximate
volume shed using the principle of communicating vessels, since the volume that is Is going to
be the one that loses until the system is in equilibrium, this generated 10 possible cases in which
the hydrocarbon can be transported, this volume was calculated using a volume integral which
depends on an angle of inclination, the Length of the analyzed section and the height of the
liquid, with this it was possible to obtain an approximate value of the amount of hydrocarbon
that can be spilled, besides with this data two profiles of spill could be created, one without the
valves in operation and another with the Operation of these
Keywords
Polyduct, pipeline, valves, spill, hydrocarbon, abscissa, dimension, diameter, thickness,
Calculator
8
3. INTRODUCCIÓN
Los oleoductos son la manera más óptima para el transporte de hidrocarburos en tierra, ya
que se puede llevar una gran cantidad de hidrocarburo de un lugar a otro a un bajo costo, en
comparación de otros medios de transporte como carro – tanques o ferrocarriles (resolución
72145. Ministerio de minas y energía. 7 de mayo de 2014); al construir estos sistemas, se pueden
hacer sobre la tierra, o dejarlos enterrados bajo la superficie alrededor de un metro, esto debido a
que están cerca de un área poblada, o con flora sensible.
En Colombia al tener un conflicto interno armado un atentado militar a este de tipo de
infraestructura resulta en desastres ecológicos y perdidas económicas enormes, pero el daño a los
oleoductos no solamente puede ser por este tipo de acciones, también se puede dar por
fenómeno de la naturaleza, como una remoción en masa o una inestabilidad en el terreno, a su
vez por un fallo técnico en el sistema, como lo puede ser una rotura en este, un taponamiento, un
daño en las válvulas de regulación o hasta por la perforación para poder hurtar el hidrocarburo
en el cual se puede generar un daño mayor al oleoducto. Esto nos hace pensar que cuando pase
algún evento de los mencionados, cuánto hidrocarburo se puede derramar en el punto de rotura, y
así de esta manera poder hacerse una idea de la dimensión de la emergencia; esto es de gran
importancia para la empresa Varichem de Colombia, ya que al ser una de las compañías más
reconocidas a nivel nacional en la atención de derrame de hidrocarburos puede hacerse una
estimación de la cantidad de equipo y personal que se tiene que movilizar para controlar dicha
emergencia.
9
4. ANTECEDENTES
Tomando la definición de oleoducto como todas las instalaciones físicas necesarias para
el transporte de crudo fiscalizado desde los nodos de entrada hasta los nodos de salida
incluyendo, entre otros, la tubería, las unidades de bombeo, las estaciones de medición, los
sistemas de control y los tanques que se usan para la operación del oleoducto y teniendo en
cuenta las posibles afectaciones que este puede tener como lo es una rotura en algún tramo
causados por un atentado terrorista, evento de tipo natural (remoción en masa, evento geológico,
inundación etc.) o falla de funcionamiento en la infraestructura (daño de válvulas, taponamiento,
desgaste etc.), estos eventos provocan un derrame en el punto afectado, dañando los ecosistemas
alrededor y provocando pérdidas económicas enormes, solo es recordar el derrame de petróleo en
el golfo de México el 22 de abril de 2010, el cual es el mayor desastre natural de la historia
causado por vertimiento de hidrocarburo.
A lo que se refiere en el caso colombiano es solo recordar la gran cantidad de ataques a la
infraestructura petrolera, principalmente en los departamentos de Nariño, Santander, Putumayo
y Arauca, en donde se han visto afectada las fuentes hídricas, así fue como ocurrió el 22 de junio
del año 2015 en Tumaco con el atentado al oleoducto transandino (OTA), en el cual se
derramaron alrededor de 410.000 galones, afectando fuentes hídricas como la quebrada Pianulpí
que surte al Río Guisa y a su vez al Río Mira, además dejando sin abastecimiento de agua a
alrededor de 160.000 habitantes del municipio; este acto fue considerado como uno de los
mayores desastres ambientales de los últimos 10 años en el país, desafortunadamente no ha sido
el único daño que se le ha hecho a la infraestructura petrolera, también se le suman los atentados
que han sufrido otros oleoductos como Caño limón – Coveñas (Arauca – Sucre), oleoducto
10
Churuyaco – Orito (OCHO) y oleoducto San Miguel Orito (OSO), estos dos ubicados en el
departamento de Putumayo.
En dichas eventualidades es necesario movilizar equipo y personal para atender la
emergencia, en ocasiones no se puede saber a ciencia cierta la cantidad de hidrocarburo que se
puede derramar en las fuentes hídricas o el suelo, esto hace que se creen los planes de
emergencia (PDE) en los cuales se establece las directrices para actuar frente a dicho incidente,
todos estos planes se crean y modelan planteando escenarios y teniendo en cuenta variables
ambientales, sociales y socioeconómicas; para apoyar estos planes de emergencia se crea la
necesidad de generar una herramienta que sea capaz de determinar la cantidad aproximada de
hidrocarburo que se pueda derramar por una de las eventualidades anteriormente mencionadas.
5. JUSTIFICACIÓN
El desarrollo de aplicaciones SIG por parte de los usuarios se ha convertido en una
poderosa herramienta para solucionar tareas específicas, un ejemplo claro es QGIS y GvSIG, los
cuales pueden ser modificados libremente. En las versiones de ArcGIS se ha abierto esta
posibilidad, poder desarrollar algunas herramientas de manera personalizada, es el caso de model
builder, el cual nos permite crear una secuencia de geoprocesos para llegar a un resultado
determinado, pero este se queda corto si queremos modificar nuestras variables de alguna manera
especial o una combinación de geoprocesos; para solucionar esto, es necesario utilizar el paquete
de Python que viene instalado con ArcGIS, el cual lo conocemos como ArcPy, este módulo nos
permite acceder a las herramientas de geoprocesamiento, y propiedades de los elementos que
están en un Map Document de ArcGIS o alojados en el computador, esto nos permite desarrollar
cajas de herramientas de geoprocesamiento. A pesar de esto una de las mayores desventajas es
que estamos obligados a utilizar el asistente de creación de herramientas, y utilizar solo las
11
variables que tiene soportado ArcGIS, esto nos limita si queremos desarrollar una herramienta
desde cero que cumplan con todas nuestras necesidades. Ahora surge la pregunta si queremos
desarrollar una herramienta que satisfaga nuestras necesidades, ¿cómo lo podríamos hacer?. Para
dar respuesta a esta pregunta es necesario ver unas de las librerías que usan Python para
desarrollar aplicaciones, las cuales son: wxPython, Tkinter, PyGtk, PyObject, y PyQt, estas
librerías nos permiten desarrollar aplicaciones personalizadas como interfaces gráficas que nos
ayudan a administrar los parámetros entre el usuario y el SIG de escritorio, además de poder
mostrar los resultados de una manera más fácil de entender.
6. PREGUNTAS E HIPÓTESIS
6.1. Preguntas
¿Cómo se pueden desarrollar herramientas personalizadas que se puedan ejecutar dentro ArcMap
programadas bajo el lenguaje Python?
¿Cuáles son las librerías que usa Python para desarrollar dichas herramientas?
¿Cuáles son las librerías que usa Python para el desarrollo de interfaces GUI, cuál es la mejor
elección y por qué?
¿De qué forma se puede integrar una aplicación de estas a ArcMap?
6.2.Hipótesis
Cuando desarrollamos algo, ya sea una nueva investigación, una nueva metodología, o
simplemente un procedimiento, siempre pensamos en la mejor manera en la que podemos
mostrar ese resultado y dar a conocer nuestras ideas de una manera clara y concisa, además de
que cualquier persona, que aunque no sepa del tema, lo pueda entender, en nuestra era
tecnológica la mejor manera es echar mano de esa tecnología, en donde para este caso es hacer el
12
uso de una interfaz gráfica que sea capaz de mostrar los resultados y sea capaz de procesar una
información específica y nos arroje el resultado esperado
7. DECLARACIÓN DEL PROBLEMA
Lograr desarrollar una herramienta personalizada bajo el lenguaje Python (Calculadora de
derrames de hidrocarburos) y que esta a su vez se pueda integrar dentro de ArcMap como un
Add – In.
8. OBJETIVOS
8.1. General
Desarrollar la calculadora de derrames de hidrocarburos bajo el lenguaje Python y que esta a su
vez se pueda integrar con ArcMap a través de un Add – in.
8.2.Específicos.
• Realizar una comparación entre las librerías Tkinter, wxPython y PyQt y seleccionar una de
estas para el desarrollo de nuestra herramienta.
• Programar la calculadora de derrames de hidrocarburos haciendo uso de la librería
seleccionada y que dicha herramienta se pueda ejecutar dentro de ArcMap mediante un Add
– In.
• Determinar la cantidad de hidrocarburo derramado cumpliendo tres posibles escenarios.
13
9. MARCO DE REFERENCIA
9.1. MARCO TEÓRICO
7.1.1 Lenguaje Python:
Python es un lenguaje de programación creado por Guido Van Rossum a principio de los
años 90, el nombre de Python se debe a la comedía británica Monty Python.
Python es un lenguaje multiplataforma, por lo que se puede ejecutar en todos los sistemas
operativos, incluyendo Linux, Windows y Mac OS. Todas las librerías son iguales para todas las
plataformas, esto quiere decir que se puede hacer un programa en Windows y se puede ejecutar
en Linux sin ningún problema. Además tiene una gran compatibilidad con otros lenguajes como
lo es C, C++, Fortran, Java, Visual Basic entre otros, a esto se le suma que es fácil de escribir y
entender, tiene una estructura de indentación, la sintaxis permite crear pequeños o grandes
programas, una estructuración de datos simple, no es necesario declarar los tipos de variables que
queremos usar, también es muy fácil de corregir los errores de sintaxis, ya que al ejecutar el
programa aparecerá la línea que tiene algún tipo de problema de escritura o indentación, y por
último es un programa orientando a objetos (POO), esto quiere decir que con Python podemos
crear clases, estas a su vez tienen propiedades, se pueden declarar métodos, usar objetos para
acceder a las clases y usar la herencia al momento de crear un programa. (Fehily, Chris. Python.
Peachpit Press, 2002.)
7.1.2 Interfaz gráfica
Una interfaz gráfica se define como la forma en que el usuario se comunica con un
sistema operativo. Existen dos tipos de interfaces: modo texto y modo gráfico.
14
Modo texto
Los comandos se escriben en una línea de comandos, a esto en inglés se le denomina
CLI, también se les conoce como consolas, terminales, Shell, etc. Estos comandos se introducen
a través del teclado. Un comando puede ser un programa que ejecuta determinada acción en el
sistema operativo.
Modo gráfico
Este tipo de interfaz se denomina en inglés GUI que significa interfaz gráfica de usuario.
Estas se caracterizan por mostrar imágenes y objetos gráficos tales como botones, iconos,
pestañas, etc. Todos estos elementos son intuitivos, fáciles de usar y de aprender. Para poder usar
una interfaz gráfica es necesario utilizar periféricos de entrada y salida como el teclado, ratón,
pantalla táctil, lápiz óptico, etc. (Camazón, Jesús Niño. Sistemas operativos monopuesto. Editex,
2011.)
7.1.3 Tkinter
Es un módulo que nos permite construir interfaces gráficas de usuario multiplataforma en
Python utilizando el conocido toolkit Tk. Python incluye este módulo por defecto, lo que hace
que sea un tookit muy popular. TkInter, además, es robusto, maduro y muy sencillo de aprender
y de utilizar, contando con una amplia documentación.
TkInter se distribuye bajo la PSFL (Python Software Foundation License) una licencia
compatible con la GPL creada para la distribución de software relacionado con el proyecto
Python. La PSFL carece de la naturaleza viral de la GPL, por lo que permite crear trabajos
derivados sin que estos se conviertan necesariamente en software libre.
15
7.1.4 wxPython
Es un wrapper open source para el toolkit anteriormente conocido como wxWindows:
wxWidgets. wxPython es posiblemente el toolkit para desarrollo de interfaces gráficas en Python
más popular, superando incluso a TKinter, que, como comentamos, se incluye por defecto con el
intérprete de Python. wxPython cuenta con más y mejores widgets que TKinter, y ofrece un muy
buen aspecto en todas las plataformas, utilizando MFC en Windows y GTK en Linux.
wxPython cuenta además con herramientas muy interesantes como wxGlade, una
aplicación RAD para diseñar las interfaces gráficas de forma visual.
Sin embargo, la API adolece de una cierta falta de consistencia y un estilo muy alejado de
Python y más cercano a C++, ya que, de hecho, uno de sus objetivos es no distanciarse
demasiado del estilo de wxWidgets. Esto ha provocado que hayan aparecido distintos proyectos
para abstraer al programador de los entresijos del toolkit, como Dabo o Wax, aunque estos han
tenido un éxito muy comedido.
Tanto wxPython como wxWidgets se distribuyen bajo una licencia “wxWindows
Licence”, que consiste esencialmente en una LGPL con la excepción de que las obras derivadas
en formato binario se pueden distribuir como el usuario crea conveniente.
16
7.1.5 PyQt:
Es posible que PyQt, el binding de Qt para Python, sea la menos popular de las tres
opciones, aunque es un toolkit sencillo de utilizar y con muchas posibilidades. Es especialmente
interesante para el desarrollo en KDE, dado que Qt es la librería utilizada para crear este entorno.
No obstante el interés en Qt no se limita a KDE, sino que es una biblioteca
multiplataforma que, además, desde la versión 4, utiliza widgets nativos para las distintas
plataformas (anteriormente Qt emulaba el aspecto de la plataforma en la que corría).
Como aplicación de RAD se puede utilizar Qt Designer.
PyQt utiliza un modelo de licencias similar al de Qt, con una licencia dual GPL/PyQt
Commercial. Si nuestro programa es compatible con la licencia GPL, es decir, si vamos a
publicar el código fuente y permitir a los usuarios modificar nuestra aplicación, podremos usar
PyQt sin más preocupaciones. En caso contrario tendremos que pagar para obtener una licencia
comercial. (“Interfaces gráficas de usuario en Python”. Mundo Geek, el 24 de noviembre de
2008.)
7.1.6 Add – In (Complemento)
Un Add – In o complemento es una utilidad de software que se instala dentro de un
programa principal para darle una nueva funcionalidad.
7.1.7 Oleoducto
Todas las instalaciones físicas necesarias para el transporte de crudo fiscalizado desde los
nodos de entrada hasta los nodos de salida incluyendo, entre otros, la tubería, las unidades de
bombeo, las estaciones de medición, los sistemas de control y los tanques que se usan para la
operación del oleoducto (“resolución 72145 de mayo 7 de 2014 -”. Consultado el 22 de marzo de
2017.)
17
7.1.8 Vasos comunicantes
Se entiende por vasos comunicantes dos o más capacidades en cuyo interior puede existir
un líquido cualquiera, y que por medio de tubos o aberturas se establecen relaciones entre
aquellas capacidades. Las condiciones del equilibrio de los líquidos en los vasos comunicantes
fácilmente se determinan, recordando que dicho equilibrio no puede establecerse mientras la
superficie de las masas líquidas no se presente nivelada, y las moléculas igualmente oprimidas en
todas las direcciones. En los vasos comunicantes las condiciones físicas suponen que la masa
líquida que llena el vaso P (fig. No. 1) y los tubos comunicantes n n presentan el mismo nivel
aun cuando su forma sea diferente; porque si se supone una capa trasversal líquida x, para que
esta permanezca en equilibrio, y con ella toda la masa líquida, es necesario que el producto de la
superficie x por la altura del líquido en el depósito P sea igual al producto x por la altura n de
nivel en los tubos comunicantes; y como la superficie x es constante, las alturas de nivel en el
caso equilibrio serán iguales.
(Sinobas, Manuel Rico, y Mariano Santisteban. Manual de física y elementos de
química, 1856.)
Figura No.1 Vasos comunicantes
(Sinobas, Manuel Rico, y Mariano Santisteban. Manual de física y elementos de química. Impr., 1856.). Recuperado de
https://books.google.com.co/books?id=Gt4-
pHWnAygC&pg=PA62&dq=vasos+comunicantes+fisica&hl=es&sa=X&ved=0ahUKEwiTjsfkgOvSAhXhrVQKH
R9vBEYQ6AEIGjAA#v=onepage&q=vasos%20comunicantes%20fisica&f=false
18
7.1.9 ILI (In – line inspection)
Se define como la inspección de una tubería desde el interior de esta a través de una
herramienta construida para este fin, esta herramienta puede ser un dispositivo o vehículo, es
conocida también como herramienta inteligente; esta herramienta contiene sensores que van
capturado información como la geometría de la tubería, ubicación espacial, el espesor, corrosión,
roturas u otro tipo de anomalías; este vehículo o dispositivo se puede configurar para que vaya
capturando información a una distancia determinada. (Lipták, Béla G., y Kriszta Venczel.
Measurement and Safety., 2016.)
7.1.10 Válvula de seccionamiento
Son válvulas que seccionan un tubería, controlan el paso de la sustancia transportada,
estas se ubican a lo largo de la tubería lo que hace que en caso de una reparación, un daño u otro
suceso que afecte la operación normal se puedan cerrar en los tramos requeridos y no generen un
colapso total en el sistema, a estas válvulas se les puede asociar un tiempo de cierre. Nesbitt,
Brian. Handbook of Valves and Actuators: Valves Manual International. Butterworth-
Heinemann, 2011.
7.1.11 Válvula de cheque
Estas son válvulas que se activan cuando el flujo de la sustancia transportada cambia de
dirección, este tipo de válvula a diferencia de las de seccionamiento tiene un cierre instantáneo.
Nesbitt, Brian. Handbook of Valves and Actuators: Valves Manual International. Butterworth-
Heinemann, 2011.
19
7.1.12 IDE
Es un entorno de programación que ha sido empaquetado como un programa de
aplicación, es decir, consiste en un editor de código, un compilador, un depurador y un
constructor de interfaz gráfica (GUI). fergarciac. «Entorno de Desarrollo Integrado (IDE).»
fergarciac, 25 de enero de 2013. https://fergarciac.wordpress.com/2013/01/25/entorno-de-
desarrollo-integrado-ide/.
7.1.13 Matplotlib
Es una librería diseñada para Python que permite crear gráficos en 2D y 3D, esta fue
basada en Matlab, esto hace que visualmente sea muy parecida, es más sencilla que Matlab y
además se distribuye como GPL. “matplotlib tries to make easy things easy and hard things
possible”, (John Hunter, Creador de la librería)
20
10. MÉTODOS Y DATOS
El primer paso para el desarrollo de la calculadora de derrames de hidrocarburos fue
seleccionar la librería que se iba integrar con ArcMap, para esto se escogieron 3 librerías
principalmente Tkinter, wxPython y PyQt, con estas librerías se pueden desarrollar interfaces
gráficas para Python, en la Tabla 1 se describe algunas características de estas.
Librería Versión
Python
Tipo de
sistema
Versión
Librería
Tipo de
licencia Instalación IDE
Tkinter 2.7 32 bits 8.5 GPL No
necesaria Visual Python
wxPython 2.7 32 bits 3.0.2.0 GPL Necesaria wxFormBuilder
PyQT 2.7 32 bits 4.11.4 GPL Necesaria QtDesigner Tabla No.1
La primera librería con la que se comenzó fue Tkinter, que como ya se ha mencionado,
esta se instala por defecto con Python. Con esta se hicieron las primeras pruebas para poder
ejecutar dentro de ArcMap una interfaz GUI haciendo uso de la consola de comandos de Python
de ArcGIS.
Esta consola de comandos se encuentra en el tab estándar de ArcMap
Figura No.2 Ubicación de la consola de comandos de Python
Con esta consola se hicieron las primeras pruebas de código y cómo se podía integrar con
ArcMap, como ya es sabido una de las primeras líneas de código con la que se comienza a
programa es el típico mensaje de “Hello World” un “Hola Mundo”, así que de esta manera se
hizo la primera GUI usando Tkinter, el resultado fue el siguiente:
Figura No.3 Hola mundo usando Tkinter
21
Código usado:
from Tkinter import *
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
root.mainloop()
Al momento de ejecutar esta porción de código apareció la ventana de la figura No.3,
pero después de unos segundos ArcMap y la ventana se bloqueó y dejó de funcionar, en la Figura
No.4 se ve un error asociado a este caso.
Figura No.4. Error al ejecutar fracción de código de una interfaz
Esto supuso pensar que la librería no podría ser la indicada, ya que no presentaba una
manera estable de poder ejecutarse, y la siguiente pregunta era cómo sería si se integrara dentro
de un Add – In, aún así se ejecutaron otras porciones de código para ver los elementos visuales
de esta librería.
Figura No.5. Formulario en Tkinter
En la figura No.5 se observa un pequeño formulario con algunos componentes gráficos,
como líneas de textos, etiquetas, botones y radio botones, también se puede ver que esta librería
los componentes visualmente no tienen un buen diseño, esto es de gran importancia, ya que esto
22
es lo que ve el usuario para interactuar con el computador, de esta manera se busca que una
interfaz gráfica sea visualmente agradable y fácil de manejar también.
La siguiente cuestión es tener una IDE para desarrollar la interfaz en Tkinter, hay varios
programas que se pueden usar, pero el mejor de estos es Visual Python Tkinter, esta IDE está
desarrollada en el lenguaje visual basic 6, esta IDE nos ofrece poder usar algunos elementos
como botones, labels, cuadros de textos, entre otros.
Figura No.6. IDE Visual Python
La siguiente librería en probar fue wxPython, la cual se debe instalar por aparte para que
se pueda usar, al igual que se hizo con Tkinter, lo primero que se hizo fue ejecutar fracciones de
código para mirar cuál era el comportamiento de esta dentro de ArcMap, así que se usó
nuevamente el “Hello World” u “Hola mundo” para la primera prueba.
Figura No.7. Hola mundo usando wxPython
23
La porción de código que se usó fue la siguiente:
#!/usr/bin/env python
import wx
class TestFrame(wx.Frame):
def __init__(self, parent, ID, title):
wx.Frame.__init__(self, parent, wx.ID_ANY, title, pos=(0, 0),
size=(320, 240))
panel = wx.Panel(self, wx.ID_ANY)
text = wx.StaticText(panel, wx.ID_ANY, "Hello, World!", wx.Point(10,
5), wx.Size(-1, -1))
class TestApp(wx.App):
def OnInit(self):
frame = TestFrame(None, wx.ID_ANY, "Hello, world!")
self.SetTopWindow(frame)
frame.Show(True)
return True
if __name__ == '__main__':
app = TestApp()
app.MainLoop()
Como se observa en la figura No.7 la interfaz es visualmente más agradable, se ajusta al
diseño de la versión que se esté usando de Windows; al utilizar el código de la parte superior se
encontró un inconveniente, el solo hecho de importar la librería generaba un error grave y
ArcGIS se bloqueaba por completo, pero esto no ocurría siempre y tampoco en el mismo
computador, si esta librería se instalaba en otra máquina no generaba ningún tipo de problema, lo
cual se hizo suponer que la manera en que se estaba ejecutando el código no era la manera
correcta para que se pudiera ejecutar con ArcMap.
Al igual que con Tkinter se buscó una IDE para poder diseñar la interfaz y generar el
código correspondiente, para wxPython la mejor opción que se encontró fue wxFormBuilder, la
cual esa una IDE que va generando el código de Python cuando ponemos una widget, esta IDE
tiene una gran funcionalidad, se pueden ajustar las propiedades de los elementos y el código va
24
apareciendo en pantalla, además de esto es capaz de generar códigos de otros lenguajes de
programación como lo son C++, PHP, LUA, y HCR.
Figura No.8. IDE wxForm Builder
Como se observa en la figura No.8 wxForm Builder genera el código de Python cuando
se arrastra algún elemento al espacio de trabajo.
Finalmente se probó la tercera librería PyQt, la cual que al igual que wxPython se
necesita descargar e instalar para poder usarla, y ya como se hizo previamente se realizó la
ejecución de una pequeña línea de código dentro de la consola de comandos de ArcMap en
donde se hizo de la misma manera con “Hello World” u “Hola mundo”.
Figura No.9. Hola mundo usando PyQt
25
El código usado fue el siguiente:
import sys
from PyQt4 import QtGui
def window():
app = QtGui.QApplication(sys.argv)
w = QtGui.QWidget()
b = QtGui.QLabel(w)
b.setText("Hello World!")
w.setGeometry(100,100,200,50)
b.move(50,20)
w.setWindowTitle(“PyQt”)
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
window()
Como se observa en la Figura No.9 el diseño de la interfaz gráfica es bastante parecido al
de wxPython, por no decir que igual; esto hace que se piense en escoger entre wxPython y PyQt.
Una de las principales cosas que se evidenció fue que PyQt fue la librería más estable de
las tres, aunque en ocasiones también bloqueaba por completo a ArcMap, esto era menos
frecuente que con Tkinter y wxPython. Al igual que con wxPython se buscó una IDE con la que
fuera más fácil programar la interfaz, la ventaja fue que al momento de instalar PyQt, se instala
una IDE la cual se llama QtDesigner, esta al igual que wxForm Builder, es bastante potente para
diseñar interfaces gráficas; el único inconveniente que se encontró fue que tiene un archivo
nativo de extensión .ui el cual al momento de abrirlo el código que se encuentra está escrito en
xml, pero la conversión al lenguaje Python es de manera rápida.
26
Figura No.10. IDE QtDesigner
Como se presenta en la figura No.10 la IDE de Qt es bastante completa, tiene la
posibilidad de crear distintos formularios y lo más importante es que podemos ir viendo cómo va
quedando lo que estamos programando, esto se parece mucho a otras IDE como netbeans o
eclipse, además de se puede generar pequeñas fracciones de Python en esta.
Viendo las tres librerías Tkinter, wxPython, y PyQt y teniendo en cuenta uno de los
principales parámetros que era la estabilidad al momento de ejecutarse dentro de ArcMap se
seleccionó PyQt, pero también como ya se ha mencionado cuando se estaba analizando
wxPython es posible que con esta librería no se estuviera usando el código de manera correcta
para que ArcMap no se bloqueara y dejara de funcionar por completo, así que otro parámetro que
se tuvo en cuenta fue la IDE con la que se programó la interfaz gráfica, y como se observó
QtDesigner es más potente que wxForm Builder para este caso en particular.
Con la librería ya seleccionada lo siguiente fue poder crear ese Add – In o complemento
que se pudiera integrar con ArcMap y traducir el archivo que crea QtDesigner a Python. Lo
primero que se solucionó fue poder traducir ese archivo de extensión .ui a un archivo de
extensión .py, este paso es bastante sencillo el cual se realizó de la siguiente manera:
27
1- Crear una variable de enterno en el equipo, esta variable puede tener cualquier
nombre, pero en el valor de la variable debe tener esta dirección
C:\Python27\ArcGIS10.3\Lib\site-packages\PyQt4, en donde la versión de ArcGIS o
PyQT puede cambiar, en este caso se puede ver que se usó la versión 10.3 de ArcGIS
y la versión 4 de PyQt.
Figura No.11. Configuración de la variable de entorno
2- Con la variable de entorno ya creada lo siguiente fue acceder al símbolo del sistema
de Windows, a esta se puede acceder escribiendo “cmd” en el buscador de Windows,
aparecerá la aplicación y se tendrá que ir a la carpeta donde está contenida, en esta
aparecerá un acceso directo, este acceso directo se debe copiar y pegar en donde está
el archivo .ui que se creó con QtDesigner, con este acceso directo se ajusta en las
propiedades y aparecerá una opción que dice “iniciar en”, la dirección que se
encuentra en este espacio se sustituye por la dirección de la carpeta en donde se
encuentra el archivo .ui.
3- Finalmente se convierte el archivo .ui a .py con el símbolo de sistema que se copió a
la carpeta, la línea de código que se usó fue la siguiente: %qt%/pyuic4
InterfazCalcDerr.ui > InterfazCalcDerr.py, en donde se escribe el nombre del archivo
28
de extensión .ui y el nombre del archivo de extensión .py, es muy importante que no
existan espacios en los nombres de ambos archivos.
Ya con el archivo de extensión .py creado, se pasó a la parte en donde se debía integrar
este con un Add – In e instalarlo dentro de ArcMap.
ESRI para crear estos complementos tiene el asistente de Add -In para Python el cual
ayuda a crear botones, menús, toolbar, y otros complementos que al momento de instalar se
agregan como nuevas funcionalidades, para este caso se creó un botón el cual iba a llamar el
código de la interfaz que se había creado. El resultado es el siguiente:
Figura No.12. Archivos creados usando el asistente de Add – In para Python
Como se observa en el figura No.12 hay cuatro archivos y 2 carpetas, la carpeta
“Images” tiene la imagen con la que queremos que se vea nuestro complemento dentro de
ArcMap, en la carpeta “Install”, están contenidoas los módulos de Python e imágenes que son
necesarios para el funcionamiento del Add – In, el archivo “config” , tiene la configuración del
Add – In creado, como el nombre, versión, identificador único, tipo de Add – In y demás
información relacionada, el archivo “makeaddin”, es un ejecutable que es el encargado de crear
un archivo de extensión .esriaddin, este es el instalador del Add – In, este es un comprimido el
cual contiene los archivos que estén dentro de las carpetas “Images” e “Install”, cuando este se
ejecuta descomprime estos archivos en la siguiente ubicación:
29
C:\Users\User\AppData\Local\ESRI\Desktop10.x\AssemblyCache\{86DBC510-67A5-
48F2-AC3D-46F4302CDBCA}, los valores que se encuentran dentro de los corchetes,
corresponde al identificador del Add – In instalado, para saber esta dirección se puede escribir el
comando sys.path en la consola de comandos de ArcMap y listará las rutas de los Add – In o
complementos que estén instalados en dicho computador.
Cuando se abra ArcMap el botón para ejecutar la calculadora de derrames se ve de la
siguiente forma:
Figura No.13. Visualización del Add – In instalado dentro e ArcMap
Con el Add – In creado, el paso siguiente fue poder ejecutar con este el código de la
interfaz gráfica, lo primero que se hizo fue poner el código dentro del archivo que el asistente de
Add – In crea por defecto, el cual tiene el nombre del proyecto seguido de la palabra _addin, este
es el archivo de Python que se asocia con el botón que se observa en la Figura No.13, cuando se
hizo de esta forma la interfaz se desplegaba pero al momento de manipularla, cerrar e intentar
volver abrir ArcMap se bloqueaba por completo, para darle solución este problema se modificó
el código de la siguiente manera:
30
import arcpy
import pythonaddins
import os
import sys
sys.path.append(os.path.dirname(__file__))
from PyQt4 import QtGui
import traceback
class Main_Calculadora(object):
"""Implementation for CalculadoraDerrames_addin.button (Button)"""
def dlg(self):#Nombre la función
self._PyQt4App = None#Variable
self._dlg = None#Variable
if self._dlg is None:
from Interfaz_Calculadora_Vol_Real import Ui_MainWindow#Importa la
librería
self._PyQt4App = QtGui.QApplication([''])#Creación de una variable de
tipo app
self._MainW = QtGui.QMainWindow()#Creación de una variable tipo Window
self._dlg = Ui_MainWindow()#Clase principal
self._dlg.setupUi(self._MainW)#Ejecución de la función
self._MainW.show()#Muestra la interfaz
return self._dlg
def __init__(self):
self.enabled = True
self.checked = False
def onClick(self):
try:
self.dlg()
except Exception as e:
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
self.pymsg = "PYTHON ERRORS:\nTraceback info:\n" + tbinfo + "\nError
Info:\n" + str(sys.exc_info()[1]) + "\n"
self.msgs = "ArcPy ERRORS:\n" + arcpy.GetMessages(2) + "\n\n"
pythonaddins.MessageBox(self.pymsg + self.msgs, "Error execute", 0)
El código que se muestra en la parte superior fue el que ayudó a que cuando se ejecutara
el Add – In no generara ningún problema y ArcMap siguiera funcionando, y como ya se había
mencionado con wxPython también se tenía el mismo problema, se puede hacer de una manera
similar dando el mismo resultado que con PyQt.
Como nota importante en la línea self._PyQt4App = QtGui.QApplication(['']) si se busca
en la documentación se hace usa la librería sys para crear la variable de application, y el método
argv el cual es una lista de argumentos; guiándose por la documentación la línea de código sería
31
de la siguiente forma: self._PyQt4App = QtGui.QApplication(sys.argv), pero en ocasiones
ArcMap no encuentra el método argv de la librería sys; este fue uno los inconvenientes que
también se encontraron al momento de desarrollar la aplicación ya que sin esto es imposible
ejecutar la interfaz en ArcMap.
Con esto solucionado el siguiente paso fue desarrollar el algoritmo para que calculara el
volumen aproximado de hidrocarburo que se derrama cuando un poliducto sufra una rotura
totalmente. Para darle solución a este problema se usó el principio de los vasos comunicantes el
cual nos dice que: “Se entiende por vasos comunicantes dos o más capacidades en cuyo interior
puede existir un líquido cualquiera, y que por medio de tubos o aberturas se establecen relaciones
entre aquellas capacidades”. Esto nos quiere decir que para poder calcular el volumen de
hidrocarburo que se puede derramar debemos tener en cuenta que es el volumen que va a ser
drenado hasta que el sistema quede en equilibrio y también como ya se ha dicho anteriormente
no se va a tener en cuenta presión de bombeo, viscosidad, tipo de sustancia transportada y demás
variables físicas que pueda dar un resultado más exacto, ya que con esta calculadora se plantea
poder calcular el volumen de derrame en el peor escenario posible.
Con estas ideas claras el primer paso fue tener el perfil de un ducto en el que se pudieran
plantear los siguientes tres escenarios:
- El primer escenario se calculará el volumen derramado en toda la longitud del poliducto
debido a la fuerza de gravedad, sin tener en cuenta las válvulas de seccionamiento y cheque
y el volumen que se derrame hasta que estas se cierren.
- El segundo escenario se tendrá en cuenta las válvulas que se encuentre a lo largo del
poliducto, principalmente se analizaran las válvulas de seccionamiento y cheque, pero sin
tener en cuenta el tiempo de cierre de estas.
32
- El tercer escenario se tendrá en cuenta las válvulas de seccionamiento y cheque, además
de esto se calculará el volumen derramado aproximado hasta que las válvulas
seccionamiento se cierren en su totalidad.
Para comenzar a programar estos escenarios, se creó un perfil con datos aleatorios y con
solo 28 puntos, esto con el fin de que pudiera facilitar el análisis y ver los cambios de pendiente
que puede tener el ducto, además del perfil se requieren los datos del diámetro del ducto y el
espesor de este, ya que son los datos que se obtienen de la ILI y son necesarios para calcular
dicho volumen
Figura No.14. Perfil usado para el análisis
Una vez con el perfil se comenzó con el desarrollo del problema, para esto se definió un
punto de rotura con el cual se iba a tener un punto de referencia para analizar las secciones en
que se iba a derramar un volumen determinado de hidrocarburo, para esto se ubicaron roturas en
los vértices o puntos con los que ya se sabía las coordenadas, esto con el objetivo de conocer la
cota de elevación ya que todo lo que esté por encima de dicha cota va a derramarse por el efecto
de la gravedad, esto basándose en el principio vasos comunicantes que ya se había mencionado
anteriormente, así que el resultado fue el siguiente:
33
Figura No.15. Descripción del cálculo del volumen derramado
Como se observa en la figura No.15 se hizo un punto de rotura en la abscisa 450 la cual
tiene una cota de 295 unidades, lo siguiente que se hizo fue analizar cuáles eran las secciones que
se iban a derramar, además se le dio un sentido de análisis, el cual se asumió que el flujo va en la
dirección de izquierda a derecha, con esto se va a definir el volumen que se va a derramar aguas
abajo y aguas arriba, esto quiere decir el volumen que se derrama antes de la ubicación de la
rotura y el volumen que se va a derramar después de la rotura.
Para el caso de aguas abajo la primera sección que se va a derramar está comprendida
entre los tramos de 450 y 650, ya que en estas secciones se encuentran cotas por encima del
punto de rotura, a su vez se hace un cambio de cota de referencia en la abscisa 650 ya que el
siguiente punto tiene un cambio de cota, así que la nueva cota de referencia va a ser 468
unidades, esta cota se proyecta hasta que se encuentre una sección que esté por encima de esta,
así ocurre en la abscisa 841 en donde llega al proyectar esa cota de referencia, así que habrá un
cambio de cota en la abscisa 850 que será de 488 unidades, de esta manera se vuelve a proyectar
hasta llegar a la abscisa 1399, este proceso se repite hasta analizar todo el perfil del ducto; a lo
que se refiere a aguas arriba será de la misma manera, se derramará lo que esté por encima de las
cotas de referencia hasta llegar al punto de origen; de una manera sencilla el volumen será
calculado de la siguiente manera:
34
Aplicando la fórmula del cilindro: 𝜋 ∗ 𝑅2 ∗ 𝐻 en donde:
R = Es el radio del ducto, el cual se obtiene de los datos del diámetro y espesor del ducto.
H = la longitud total acumulada de las secciones en donde se va a derramar el
hidrocarburo.
Aplicando esta fórmula y la metodología anteriormente mencionada se puede obtener el
volumen aproximado que se puede derramar en un ducto, pero como se puede observar en la
figura No.15, los cambios de pendientes son demasiados abruptos y además de esto se está
asumiendo que el derrame va a ser total, es decir se está omitiendo cuando pase el caso en que el
ducto se derrame de manera parcial, para que se entienda de una mejor manera se explica con la
siguiente figura.
Figura No.16. Volumen real derramado
Como se observa en la figura No.16, no se derrama el 100% de la sección y este no se
puede calcular usando la fórmula del volumen del cilindro lo que hace necesario realizar el
cálculo mediante la siguiente integral de volumen.
(1)𝑉 = 𝑅2
2∫ 𝜃(𝑥) − 𝑠𝑒𝑛𝜃(𝑥)𝑑𝑥
𝐿
0
En donde 𝜃(𝑥) = 2𝑎𝑟𝑐𝑜𝑠𝑅−ℎ
𝑅= 2𝑎𝑟𝑐𝑜𝑠
𝑅−(𝑥 tan 𝛼+ℎ0)
𝑅
α = ángulo de inclinación
ℎ0 = nivel del líquido en la parte superior
35
Substituyendo:
(2)𝑉 = 𝑅2 ∫ 𝑎𝑟𝑐𝑜𝑠 𝑢 − 𝑢√1 − 𝑢2𝐿
0
𝑑𝑥 = 𝑅3
tan 𝛼∫ 𝑎𝑟𝑐𝑜𝑠 𝑢 − 𝑢 √1 − 𝑢2𝑑𝑢
𝑢𝐿
𝑢0
En donde se tiene que:
𝑢 = 𝑅−(𝑥 tan 𝛼+ℎ0)
𝑅
Si se toma la solución de la integral
(3)𝑉 = −𝑅3
tan 𝛼(𝑢 𝑎𝑟𝑐𝑜𝑠 𝑢 −
1
3√1 − 𝑢2(𝑢2 + 2))|𝑢0
𝑢𝐿
= 𝑅3
tan 𝛼(𝐾 𝑎𝑟𝑐𝑜𝑠 𝐾 −
1
3√1 − 𝐾2(𝐾2 + 2) − [𝐾 −
𝐿 tan 𝛼
𝑅] 𝑎𝑟𝑐𝑜𝑠 [𝐾 −
𝐿 tan 𝛼
𝑅]
+1
3√1 − [𝐾 −
𝐿 tan 𝛼
𝑅]
2
([𝐾 − 𝐿 tan 𝛼
𝑅]
2
+ 2))
En donde 𝐾 = 1 −ℎ0
𝑅
Figura No.17. Volumen cilindro inclinado
“Calculadora en línea: Volumen de un tanque cilíndrico inclinado”. Consultado el 3 de abril de 2017.
https://es.planetcalc.com/1442/?language_select=es.
La figura No.17 muestra la porción de volumen que se va a calcular cuando el cilindro
tiene un ángulo de inclinación, aunque si se observa la figura el volumen que se tiene que
calcular es la parte que se va a derramar y no la que va a quedar en el ducto, pero a su vez
aunque no sea de forma directa, al volumen del cilindro se le resta este volumen y se obtiene el
valor del volumen que se quiere calcular.
36
Ya con esto solucionado la siguiente fase fue desarrollar los posibles casos en que el
ducto puede perder el hidrocarburo que transporta, esto quiere decir qué pasa si la cota de
referencia corta al ducto y este tiene un ángulo α, pero luego tiene un β, esto genera varias
posibilidades que se analizaron dando como resultado 10 posibles casos de geometría, en estos
casos se tiene en cuenta directamente el radio del ducto, este puede ir variando de acuerdo al
espesor que fue obtenido de los datos de la ILI; los posibles casos se solucionan a continuación.
Caso No.1
Este caso fue el más fácil de calcular de todos, ya que es cuando se derrama toda la
porción comprendida entre dos abscisas continuas lo que se reduce solo a calcular el volumen
total de un cilindro:
𝑉 = 𝜋 ∗ 𝑅2 ∗ 𝐻
Figura No.18. Caso número 1
La figura No.18 muestra el caso 1, en esta se puede observar que la totalidad del volumen
contenida entres dos abscisas continuas se va a derramar, esto se debe a que se encuentra
completamente por encima de la cota de referencia y como se había mencionado anteriormente,
todo lo que se encuentre por encima de la cota de referencia se va a derramar por efecto de la
gravedad hasta que el sistema quede en equilibrio.
37
Caso No.2
En este caso ya no se puede calcular el volumen usando el volumen del cilindro, fue
necesario usar la fórmula No.3, la cual da el resultado del volumen del líquido cuando se tiene un
ángulo de inclinación.
Figura No.19. Caso número 2
En la figura No.19 se observa que la cota de referencia sobrepasa toda la parte inferior
del ducto, pero no la parte superior, el ángulo de inclinación es la pendiente del ducto en dicha
sección y la altura del líquido es la diferencia del ducto en la parte superior con la cota de
referencia, con estos datos es posible poder determinar el volumen de hidrocarburo derramado
usando le ecuación No.3
Caso No.3
Figura No.20. Caso número 3
Como se observa en la figura No.20 se presenta un derrame parcial, para este caso la cota
de referencia atraviesa de manera transversal la sección de la parte inferior del ducto, pero no
sobrepasa la sección superior de este, al igual que el caso 2, el ángulo de inclinación es la
38
pendiente del ducto y la altura del líquido es la diferencia entre la parte superior de este con la
cota de referencia.
Caso No.4
Figura No.21. Caso número 4
La figura No.21 muestra el cuarto caso, en el cual consiste cuando la cota de referencia
corta transversalmente a todo el ducto, en este como se puede observar la elevación del líquido
es 0, el valor que se calcula es el ángulo α que al igual en los otros casos se obtiene de la
pendiente del ducto.
Caso No.5
Figura No.22. Caso número 5
La figura No. 22 muestras el caso cuando la cota de referencia solo atraviesa
transversalmente la sección superior del ducto pero no toca la parte inferior de este, al igual que
el caso 4, la altura del líquido es y el ángulo la pendiente del ducto en la sección analizada.
39
Caso No.6
Figura No.23. Caso número 6
La figura No.23 muestra el sexto caso que sucede cuando se derrama el hidrocarburo, se
puede observar que la cota de referencia no corta la parte superior e inferior del ducto, al igual
que para los otros casos anteriormente mencionados el ángulo α se tiene de la pendiente del
ducto en dicha sección y la altura del líquido es la diferencia entre la parte superior del ducto y la
cota de referencia.
Caso No.7
Figura No.24. Caso número 7
La figura No.24 muestra el séptimo caso, en este se puede observar que la cota de
referencia corta la parte inferior del ducto transversalmente, pero la parte superior de este no es
cortada, y al igual que en los casos anteriormente mencionados el ángulo es la pendiente del
ducto en la sección analizada y la elevación del líquido es la diferencia entre la parte superior del
ducto con la cota de referencia.
40
Caso No.8
Figura No.25. Caso número 8
Para el caso número 8, la cota de referencia corta transversalmente a ambas secciones del
ducto, parte superior en inferior, y al igual que en el caso anterior el nivel del líquido es 0,
además el ángulo seguirá siendo la pendiente del ducto en la sección analizada.
Caso No.9
Figura No.26. Caso número 9
El caso 9 como se observa en la figura No.26 solo corta transversalmente la sección
superior del ducto, los datos de ángulo de inclinación será la pendiente del ducto en dicha
sección, también se puede ver que la altura del líquido es 0.
Caso No.10
Finalmente, el caso que lo representa la figura No.27
Figura No.27. Caso número 10
41
En este caso se asume que el ángulo de inclinación es 0, lo que quiere decir que el ducto
está completamente horizontal, aunque este caso es poco probable que ocurra en la práctica se
tuvo en cuenta, e igual que para los otros casos la altura del líquido es la diferencia de la parte
superior del ducto menos la cota de referencia, para determinar el volumen del caso 10 se usó la
siguiente fórmula:
𝛼 = 2 ∗ acos (𝑅 − ℎ
𝑅)
En R es el radio del cilindro y h la elevación del líquido
𝑉 =𝑅2
2∗ (𝛼 − 𝑠𝑒𝑛(𝛼)) ∗ 𝐿
En donde 𝐿 corresponde a la longitud del cilindro en la sección analizada
Una vez que se encontraron los posibles casos en que se puede derramar el hidrocarburo
se procedió a hacer verificaciones de los resultados de manera manual, trazando secciones de un
ducto y a este haciendo las operaciones matemáticas correspondientes a cada caso de los
anteriormente mencionados, a esta verificación se le suma que se usó el software AutoCAD, ya
que en este se tiene la opción de crear figuras geométricas en 3D y poder calcular varias
propiedades como centro de masa, momento de inercia y por supuesto el volumen de un objeto
en 3D, al realizar esta comparación se obtuvo que la diferencia entre los valores que arrojaba
AutoCAD y los calculados de menara manual eran alrededor del 1.5% al 3%, esto posiblemente
a que al momento de crear el ducto en 3D cambiaba ligeramente la curvatura en los quiebres de
las abscisas.
Como se ha mencionado en los objetivos, se plantearon solucionar tres escenarios en
donde puede ocurrir un derrame, para el primer y segundo caso la solución es de manera similar,
esto debido a que en el segundo caso aunque se usen las válvulas se asume que estas tienen
42
tiempo de cierre 0, lo cual hace que las válvulas solo limiten las abscisas que se van a analizar,
para el escenario 3 se tuvo en cuenta el tiempo de cierre de las válvulas de seccionamiento, así
que fue necesario calcular ese caudal de flujo con la fórmula de Manning aplicado a tuberías.
𝑉 =1.486
𝑛∗ 𝑟2/3𝑠1/2
V = velocidad de flujo
n = coeficiente de rugosidad
r = radio hidráulico
s = pendiente de la sección
Con la velocidad de flujo calculada es solo aplicar la fórmula de caudal que es:
𝑄 = 𝑉 ∗ á𝑟𝑒𝑎 𝑚𝑜𝑗𝑎𝑑𝑎
Donde á𝑟𝑒𝑎 𝑚𝑜𝑗𝑎𝑑𝑎 = 2 ∗ 𝜋 ∗𝐷2
8
Olmos, Raudel Ramos, Rubén Sepúlveda Marqués, y Francisco Villalobos Moreto. El
agua en el medio ambiente: muestreo y análisis. Plaza y Valdes, 2003.
D corresponde al diámetro del ducto en la sección analizada, este va variando de acuerdo
a la válvula cuando se va cerrando, para hacer este cálculo se tuvo en cuenta el volumen máximo
que puede derramar la sección analizada, esto quiere decir que si por ejemplo hay una válvula de
cheque a una distancia “x” de la de seccionamiento habrá una cantidad máxima de hidrocarburo
que se va a derramar sin importar el tiempo que se demore en cerrar la válvula de
seccionamiento, para este caso se tendrá como valor derramado el valor máximo de hidrocarburo
comprendido entre las válvulas.
43
8. RESULTADOS
El resultado final fue una herramienta, rápida, fácil de usar, desarrollada en software libre
y que se puede ejecutar dentro de ArcMap como un Add – In desarrollado bajo el lenguaje
Python, la cual puede calcular el volumen de hidrocarburo derramado cuando un poliducto u
oleoducto sufra una rotura en los tres escenarios anteriormente mencionados, además de esto se
puede generar dos reportes, uno cuando se ubica solo una abscisa de rotura, y el otro un archivo
Excel el cual contiene los volúmenes de derrame evaluados en cada punto de abscisa, con estos
datos se puede construir un perfil de volúmenes de derrame para ver en qué lugares se va a
derramar mayor cantidad del hidrocarburo transportado
La interfaz gráfica final fue la siguiente:
Figura No.28. Desarrollo final de la interfaz gráfica
Como se observa en la figura No.28 es la vista final de la interfaz, en esta se resaltan 5
secciones las cuales se describen a continuación:
Sección 1: En esta se encuentran los parámetros principales de entrada, estos son la tabla
en donde están contenidas las abscisas, estas abscisas pueden ser de tipo horizontal o de cadena
pisada, el primer tipo de abscisa se refiere a la distancia horizontal vista en perfil del ducto, y la
cadena pisada es la abscisa que se mide directamente sobre el ducto, esto es por ejemplo si
44
queremos ir de un punto A hacía uno B separado por una montaña y si hacemos una medición
preliminar sin tener en cuenta la topografía de la montaña se encuentra que habrá una distancia
“x”, esta será la abscisa horizontal, pero si se tiene en cuenta la topografía de la montaña habrá
una distancia “y”, está será la abscisa de cadena pisada, esto quiere decir que la distancia de
abscisa de cadena pisada siempre será mayor a la de la abscisa horizontal, este parámetro se
agregó debido a que la información que un cliente suministra en ocasiones puede venir con
cadena horizontal o cadena pisada, así que fue necesario especificar el tipo de abscisa usada. En
esta sección se puede escoger el campo de abscisa y elevación.
Figura No.29. Sección 1 interfaz gráfica
Sección 2: Esta sección contiene los parámetros en donde se pueden seleccionar los
campos en donde se ubican las válvulas de seccionamiento y de cheque, además del campo del
tiempo de cierre de las válvulas de seccionamiento.
Figura No.30. Sección 2 interfaz gráfica
Sección 3: La sección 3 tiene los parámetros del ducto, estos son el diámetro y el espesor
los cuales deben ir en pulgadas, también se encuentra el parámetro de la abscisa de rotura del
ducto la cual va en metros y la elevación respecto al suelo de la rotura medida en pulgadas.
45
Figura No.31. Sección 3 interfaz gráfica
Sección 4: Contiene un panel gráfico que muestra el perfil del ducto, ubicación de rotura,
válvulas y secciones en donde se derrama el hidrocarburo.
Sección 5: Muestra los resultados de volumen derramado aguas arriba, aguas abajo,
dinámico, estático y volumen total derramado, todos estos en barriles.
Figura No.32. Sección 4 interfaz gráfica
46
A lo que respecta al informe se utilizó la librería reportlab para esto, el resultado fue el
siguiente:
Figura No.33. Informe pdf generado usando reportlab
Sección 1: Muestra el nombre del informe, en este se específica a cuál de los tres
escenarios pertenece, sin válvulas, con válvulas, y válvulas con tiempo de cierre de estas.
Sección 2: En esta sección se muestran los valores numéricos de los resultados, abscisa
de rotura, cota del punto de rotura, diámetro del ducto y espesor promedio en pulgadas, volumen
derramado aguas arriba y aguas abajo en unidades de barriles americanos, el volumen dinámico
y el volumen total y un último dato que es la fecha en que se hizo el cálculo.
47
Sección 3: Esta sección muestra una figura la cual contiene el perfil de la tabla ingresada,
el punto de rotura, ubicación de válvulas y las secciones en que el ducto va a sufrir un derrame
de hidrocarburo.
El segundo reporte es un archivo Excel en el cual contiene la información de cada punto
ingresado en la tabla y estos serán los puntos de abscisa evaluados.
La figura No.34 muestra este Excel
Figura No.34. Informe Excel generado
La primera columna es la abscisa evaluada, esta es la que está contenida en la tabla que
tiene los datos ingresados a la aplicación, la segunda y tercera contiene el volumen en barriles
US derramados aguas abajo y aguas arriba, y la última columna contiene el volumen total en
barriles US derramado.
48
Con los datos generados en el informe se puede construir un perfil de derrame, el cual
tiene de coordenada “x” las abscisas y en el eje “y” serán los barriles totales derramados, el
perfil de derrame se muestra en la figura No.35
Figura No.35. Perfil de volúmenes de derrame
Este perfil de derrame se puede construir para los 3 escenarios ya solucionados, esto da
una idea en qué abscisas puede presentar un mayor volumen derramado, esto es de gran
importancia ya que se pueden identificar zonas críticas, se pueden ubicar en este perfil datos
como cruces con cuerpos de agua, cruces viales, centros poblados, zonas de riesgo en donde
pueda sufrir un daño ya sea por un atentado o un evento natural y demás elementos de interés
que se tenga, además de esto se puede hacer una comparación entre los escenarios solucionados,
así como se muestra en la figura No.36
0
100
200
300
400
500
600
700
0 30 60 90 120 150 180 210 240 270 300 330 360 390 420 450 480
Bls
Us
Abscisa (m)
Perfil de derrame
Sin Válvulas
49
Figura No.36. Comparación perfil volúmenes de derrame
En esta figura se puede observar la comparación de dos perfiles de volúmenes de
derrame, en donde está el escenario 1 y 2, en el primero no se tiene en cuenta las válvulas de
seccionamiento y de cheque, y en el segundo las válvulas de seccionamiento y cheque con el
tiempo de cierre en 0, se observa que la diferencia de derrame entre los dos escenarios después
de la abscisa 130 es bastante grande al igual que en la parte final del ducto en el cual es alrededor
de 550 barriles, esto da una buena idea en la eventualidad de que alguna de las válvulas no
funcione correctamente la cantidad de hidrocarburo puede ser de gran consideración.
Además de esto, aunque no estaba en los objetivos originales, poder configurar y plantear
dos escenarios más, en los cuales solo se tiene en cuenta el funcionamiento de una de las dos
válvulas a la vez, es decir, se puede seleccionar que solo aparezcan las válvulas de
seccionamiento o de cheque.
Figura No.37. Selección de solo un tipo de válvula
0
100
200
300
400
500
600
700
0 30 60 90 120 150 180 210 240 270 300 330 360 390 420 450 480
Bls
Us
Abscisa (m)
Perfil de derrame
Sin Válvulas
Con Válvulas
50
9. CONCLUSIONES
- El desarrollo de herramientas SIG por parte de los usuarios es de gran importancia, ya
que, aunque estos programas integren con diversas funciones, métodos, algoritmos
servicios y demás, no cubren todas las necesidades y/o requerimientos de tareas
específicas.
- Aunque la interfaz gráfica se programó usando una sola librería la cual fue PyQt, no se
debe pensar que esta sea la mejor y única opción para el desarrollo de herramientas
integradas con ArcGIS, ya que como se vio ArcGIS utiliza el lenguaje programación
Python, y para este existen diversas librerías con licencia GPL que se pueden usar para
crear interfaces gráficas, además esta flexibilidad propone la idea para pensar que no es
estrictamente necesario desarrollar herramientas que se tengan que ejecutar dentro de
ArcMap, ya que al momento de usar la librería ArcPy es tan solo importar y esta es
reconocida por la consola de comandos de Python trayendo todas las funcionalidades.
- Al momento de utilizar librerías para el desarrollo de interfaces GUI que se van a ejecutar
dentro de ArcMap, es necesario tener en cuenta para qué se quiere dicha interfaz, cuáles
son los requisitos como usuario y no limitarse de cuál se integra mejor, ya que como se
vio, cualquier librería se puede usar para programar interfaces GUI, es solo encontrar el
método para que esta no genere ningún problema dentro de ArcMap.
- Se pueden generar distintos tipos de reporte usando librerías como Matplotlib, la cual no
es solo para crear simples salidas gráficas, también se pueden crear figuras complejas
como sólidos en 3D, funciones vectoriales y demás, esto hace que sea bastante flexible si
se quiere crear un elemento gráfico para ser usado dentro de un SIG, ya sea simplemente
51
para mostrar el comportamiento de dos variables o datos geográficos con mapas bases
referenciados de páginas Web usando un toolkit.
- Una de las principales características de Python es que es un lenguaje de programación
fácil de aprender, flexible y muy intuitivo, no es necesario ser un experto en
programación para crear scripts, además de esto la documentación que se encuentra en la
web tanto para el desarrollo de interfaces GUI, arcpy y Python es enorme, y no solo en la
web sino también en libros se puede encontrar ejemplos para que se pueda desarrollar
herramientas personalizadas sin ningún problema.
- El desarrollo de herramientas que se integren a un SIG no siempre son de tipo espacial, se
pueden usar distintas metodologías y solucionar problemas sin tener algún elemento
geográfico, como por ejemplo un archivo shape, raster, cobertura y/o demás archivo que
represente el entorno que nos rodea.
- Los SIG actuales están pensados para que cualquier usuario pueda interactuar con estos,
esto hace que profesionales de distintas áreas puedan abordar y solucionar problemas de
una nueva manera, ya sea usando elementos espaciales o simplemente usando
herramientas matemáticas, es así como en este caso se solucionó un problema de
hidráulica sin ser el área específica de nuestra labor como ingeniero Catastral y Geodesta.
- De los resultados obtenidos con la calculadora de derrame de hidrocarburo se puede tener
una idea en la eventualidad de una emergencia la cantidad de volumen aproximada que se
puede perder y además de la cantidad de personal y equipos que se debe movilizar a los
puntos de control, a esto se le suma los perfiles de derrames que muestran los puntos más
críticos del ducto cuando sufra una avería ya sea por un atentado, o un daño por un
desastre natural.
52
- En ocasiones cuando se están cursando primeros semestres de ingeniería se tiende a
pensar que las matemáticas que nos enseñan los docentes no las vamos a usar en nuestra
vida profesional, ya que tenemos la idea de que la gran mayoría de los problemas que
vamos a afrontar ya están solucionados o simplemente solo nos limitamos a hacer tareas
de manera mecánica.
- Es de gran importancia tomar información de varias fuentes y poder comparar estas con
los resultados que se van obteniendo a la medida que se va solucionando un problema,
esto ayuda a verificar que los datos que se están obteniendo son correctos o no, esta
conclusión se debe a que cuando se comenzó a programar la calculadora no se tuvo en
cuenta el ducto como una figura en 3D, esto hizo que cuando se comparó con
herramientas que solucionan de manera similar el problema abordado se obtuvieran
diferencias del más del 100%, a razón de esto se solucionó con los 10 casos de geometría
ya explicados anteriormente.
- Son de gran ayuda las herramientas SIG para crear planes de contingencia y emergencia,
esto se debe a que actualmente se está pensando a llevar toda la información a datos
espaciales, claro está que estos pueden ser más robustos agregando funcionalidades
nuevas sin ser necesariamente geoprocesos o usar datos espaciales.
- Aunque ArcGIS tiene herramientas propias para poder programar como lo es model
builder, esta se queda corta si queremos acceder a cierto tipo de información o
modificarla de alguna manera, lo cual limita programar nuevas herramientas que
solucionen nuestras necesidades.
53
- Una de las principales características de Python es que es un lenguaje de programación
libre, pero esto genera un problema, ya que al momento de programar scripts y si se
quieren proteger para que no se pueda acceder al código, esto no se puede hacer, lo cual
genera un problema de seguridad, y como se vio cuando se instala el Add – In, a esta
carpeta se puede acceder de una manera fácil y el código es vulnerable para que sea
vistos por terceros.
54
10. BIBLIOGRAFÍA
- Derrame de petróleo en Tumaco es el peor desastre ambiental en 10 años: Gobierno
ElEspectador. (2016). Derrame de petróleo en Tumaco es el peor desastre ambiental en
10 años: Gobierno. [online] disponible en:
http://www.elespectador.com/noticias/nacional/derrame-de-petroleo-tumaco-el-peor-
desastre-ambiental-1-articulo-568408 [Accedido el 30 Oct. 2016].
- Díez, L. A. S. (s. f.). REGLAMENTO DE INSTALACIONES PETROLIFERAS. Y
REGLAMENTO DE REDES. Lulu.com.
- Golfo de México: contaminación e impacto ambiental : diagnóstico y tendencias. (2005).
Univ. J. Autónoma de Tabasco.
- Revie, R. W. (2015). Oil and Gas Pipelines: Integrity and Safety Handbook. John Wiley
& Sons.
- Mertz, D. (2003). Text Processing in Python. Addison-Wesley Professional.
- Fehily, C. (2002). Python. Peachpit Press.
- Meier, B. A. (2015). Python GUI Programming Cookbook. Packt Publishing Ltd.
- Harwani, B. M. (2011). Introduction to Python Programming and Developing GUI
Applications with PyQT, 1st Ed. Cengage Learning.
- Allen, D. W. (2014). GIS Tutorial for Python Scripting. Esri Press.
- Harwani, B. M. (2011). Introduction to Python Programming and Developing GUI
Applications with PyQT, 1st Ed. Cengage Learning.
- Langtangen, H. P. (2013). Python Scripting for Computational Science. Springer Science
& Business Media.
- Pimpler, E. (2013). Programming ArcGIS 10.1 with Python Cookbook. Packt Publishing
Ltd.
55
- Pimpler, E. (2015). Programming ArcGIS with Python Cookbook. Packt Publishing Ltd.
- Summerfield, M. (2007). Rapid GUI Programming with Python and Qt: The Definitive
Guide to PyQt Programming. Pearson Education.
- Tateosian, L. (2016). Python For ArcGIS. Springer.
- Toms, S. (2015). ArcPy and ArcGIS – Geospatial Analysis with Python. Packt Publishing
Ltd.