Perfeccionamiento del RADIAL
Texto completo
(2) Universidad Central “Marta Abreu” de las Villas Facultad de Ingeniería Eléctrica Departamento de Electroenergética. Trabajo de diploma Perfeccionamiento del RADIAL Autor: Lazaro Endemaño Ventura [email protected]. Tutor: Dr. Leonardo Casas Fernández [email protected]. Consultantes: Ing. José Alejandro López Sarmiento [email protected]. Santa Clara 2006 “Año de la Revolución Energética”.
(3) Por medio de esta hago constar que el presente trabajo de diploma se realizó en la Universidad Central “Marta Abreu” de las Villas como parte de la culminación de los estudios de la especialidad de Eléctrica. Autorizando a que el mismo sea utilizado por la Institución, para los fines que estime conveniente. Cualquier duplicación parcial o total, distribución presentación en eventos científicos o uso de este material con fines académicos sin la previa autorización de la Universidad será penada por los medios que se establecen en las leyes vigentes.. _______________________________ Firma del autor.. Los abajo firmantes certificamos que el presente trabajo se ha desarrollado según acuerdo de la dirección de nuestro centro y el mismo cumple con los requisitos que debe tener un trabajo de esta envergadura referido a la temática señalada.. _______________________________. ______________________________. Firma del autor.. Firma del Jefe de Departamento de Electroenergética.. ______________________________ Firma del responsable de Información Científico-Técnica.
(4) “¿Por qué esta magnífica tecnología científica, que ahorra trabajo y nos hace la vida más fácil, nos aporta tan poca felicidad? La repuesta es esta, simplemente: porque aún no hemos aprendido a usarla con tino.” Albert Einstein.
(5) A Casas y a Jose por su guía en todo la realización del trabajo y sus consejos útiles. A Mier por su ayuda incondicional en todo momento. A mi familia. A todos los trabajadores del Centro de Estudios por su ayuda. A Marivi y Ana Isabel. Al Coro de Cámara Audinos. A todos, gracias..
(6) A mis padres, por sus brazos fuertes..
(7) TAREA TECNICA. Para alcanzar los objetivos propuestos se deben desarrollar los siguientes aspectos de la Tarea Técnica. •. Estudiar detalladamente los algoritmos y la estructura de programación del software RADIAL.. •. Describir el árbol de descendencia de las clases hasta llegar a los elementos eléctricos y explicar el método de cálculo que realiza.. •. Acoplar el nuevo editor al RADIAL.. •. Incorporar la DLL de cálculo del flujo monofásico externa implementada para esta función.. __________________________________ Firma del Autor. __________________________________ Firma del Tutor.
(8) RESUMEN En el presente trabajo se realizan varias mejoras al Software RADIAL, con el objetivo de hacerlo más funcional y práctico en la resolución de los circuitos de distribución primaria, dada la importancia de ésta en nuestros tiempos.. Primeramente se realiza una breve presentación de lo que es el software en la actualidad, las posibilidades que este tiene, se lleva a cabo una explicación de cada uno de los estudios que posee y se definen cada uno de los tipos de entrada de datos que tiene.. Se efectúa un análisis de la estructura de programación del software, y se detalla cada uno de los pasos que se sigue para la definición de los diferentes objetos que se crean para llegar a definir exactamente cada elemento eléctrico. También se explica detalladamente cómo es el proceso de cálculo cuando el programa va a realizar el flujo monofásico.. Finalmente se expone el análisis de la principal mejora realizada al trabajo, que fue la implementación de un nuevo editor gráfico y la implementación del cálculo del flujo monofásico las 24 horas. Se plantea la nueva estructura de programación.. El resultado es un programa con un nuevo editor gráfico, totalmente funcional y flexible el que da la posibilidad de dibujar el circuito de la forma estructural y geográfica que realmente tienen los circuitos que se estudian. También da la posibilidad de saber todos los resultados de los flujos las 24 horas, obteniendo todos los resultados de pérdidas de potencia y energía con mayor precisión en cada elemento del circuito..
(9) INDICE INTRODUCCION…………………………………………………………………..1. CAPITULO 1. Situación actual del RADIAL…………………………..…………..3. 1.1.- Generalidades……………………………………………………………….3. 1.1.1.- Información General……………………………………………………3. 1.1.2.- Información Particular…………………………………………………11. 1.2.- Estudios del Radial…………………………………………………………14. CAPITULO 2. Estructura de programación del RADIAL………………………….18. 2.1.- Creación de la clase tItem…………………………………………………..18. 2.2.- Creación de la clase tVisual………………………………………………...22. 2.3.- Creación de las clases tShunt y tRight………………………………………23. 2.4.- Estructura de las clases correspondientes a las cargas………………………25. 2.5.- Realización del cálculo del flujo monofásico……………………………….30. CAPITULO 3. IMPLEMENTACION DEL FLUJO MONOFASICO LAS 24 HORAS……………………………………………………………..34. 3.1.- Análisis de la estructura de programación del nuevo editor gráfico………...34. 3.2.- Estructura de programación de la DLL………………………………………39. 3.3.- Ilustración del nuevo editor…………………………………………………..45. CONCLUSIONES……………………………………………………………………47. RECOMENDACIONES.…………………………………………………………….48. BIBLIOGRAFIA……………………………………………………………………..49..
(10) Introducción.. INTRODUCCION. En los últimos años nuestro país lleva a cabo profundas transformaciones en las redes eléctricas de distribución. Se desarrolla un riguroso plan de ahorro de energía, además se han tomado medidas y se han desarrollado una serie de acciones con el fin de mejorar la eficiencia de los equipos que actualmente funcionan en las redes.. Se han realizado inversiones capitales para mejorar las redes eléctricas de distribución, cuyo monto puede ascender a unos 262 millones de dólares, se cambiarán un millón 516 mil 30 acometidas de entrada a las viviendas y 35 mil 154 kilómetros de cables que no tienen la capacidad necesaria para asegurar una distribución segura y eficiente de la energía eléctrica. Se revisarán igualmente el estado técnico y la capacidad de alrededor de 124 mil transformadores de distribución a lo largo de toda la Isla, de los cuales se prevé sustituir próximamente unos 12 mil 400. Se cambiarán además todos los elementos de las redes que no posean la calidad requerida o estén en un estado inadecuado, entre los que sobresale la sustitución de unos 16 mil postes eléctricos, de más de 12 millones de equipos electrodomésticos entre ollas, hornillas, ventiladores, refrigeradores, televisores, lámparas y calentadores de agua, cifra que se incrementará con la distribución de más de cuatro millones 700 mil de esos artículos antes del cierre del año. Se prevé un ahorro aproximado de un millón 300 mil kW.h anuales [9].. El Sistema Eléctrico Nacional (SEN), incluidas las líneas de 33 kV, se extiende a lo largo de 68 718 km, y de este total el 48.1 % corresponde a la Distribución Primaria. Un nivel elevado de estas líneas corresponden a los circuitos de 13.2 kV (77.74 %) y 4.16 kV (17.64 %) existiendo todavía un por ciento pequeño, pero no despreciable, de circuitos a 7.6 kV. Por lo que podemos apreciar que estas son un número muy importante dentro de la Red. Es por lo que cada vez se hace más necesario tener un software más potente y actualizado para realizar los análisis de los circuitos de distribución primaria, que sirva para la cuantificación precisa de la magnitud de las pérdidas, lo que es de vital importancia para justificar económicamente las inversiones que se deben realizar para su disminución.. 1.
(11) Introducción. Partiendo de todas estas premisas es que se hace necesario mejorar el Software RADIAL para que pueda realizar el flujo monofásico las 24 horas.. Por lo tanto el objetivo de la presente tesis es el perfeccionamiento del Software RADIAL ya existente para dotarlo de mayores facilidades, con la finalidad de que sea más flexible a la hora de dibujar el circuito y más potente para el cálculo de este flujo monofásico.. En el capitulo 1 se lleva a cabo una descripción del software ya existente, las posibilidades de edición y la descripción de sus posibilidades.. En el capitulo 2 se explica detalladamente la estructura de programación del RADIAL, exactamente como se realiza todo el árbol de entrada de los elementos eléctricos así como la explicación del algoritmo de cálculo del flujo monofásico.. En el capitulo 3 se realiza el análisis de la Librería de Enlace Dinámico (DLL) que realiza el flujo monofásico las 24 horas implementada en el nuevo editor gráfico.. 2.
(12) Capítulo 1. Situación actual del RADIAL.. CAPITULO 1. SITUACION ACTUAL DEL RADIAL. En este capítulo se hace una explicación, detallada del estado actual del software RADIAL. Se explican especificidades como la entrada de datos y los estudios que este realiza.. 1.1. Generalidades. El RADIAL es un software diseñado específicamente para el análisis de Sistemas de Distribución Primaria, en él se pueden realizar prácticamente todos los estudios que tienen que ver con las redes radiales de distribución. Tiene varias versiones que comenzaron a programarse en FORTRAN, aunque se le han hecho varias mejoras que han devenido en otras versiones las cuales se han programado en Delphi 6 usando técnicas de programación orientada a objetos. Este software requiere de condiciones mínimas de la máquina donde se instala para su funcionamiento debido a la relativa simplicidad de los algoritmos de cálculo usados en él.. Para operar el RADIAL es necesario utilizar dos grandes grupos de informaciones: 1. La general: esta la ofrece el software por “default”, se puede modificar de acuerdo al tipo de datos de que disponga el usuario para realizar el estudio. 2. La particular: que se vincula específicamente con el circuito que se analiza en cuestión. Esta información se le introduce al programa mediante diferentes ventanas de muy fácil acceso pues surgen de pinchar cada elemento en el diagrama monolineal sobre el editor gráfico.. 1.1.1- Información general [8]. La información general se guarda en las Bibliotecas y en las Opciones. A esta información se puede acceder mediante la barra de herramientas de la página principal del software. RADIAL usa la información de las bibliotecas para guardar todos los datos de todos los dispositivos (conductores, transformadores, gráficos de carga, etc.) allí depositados.. 3.
(13) Capítulo 1. Situación actual del RADIAL. En el proceso de edición, al hacer clic sobre cada dispositivo, RADIAL acude a las bibliotecas y lo que busca en realidad es el índice donde se encuentran los datos que coinciden con el elemento al cual se está haciendo referencia. Los datos de las bibliotecas son editables por el usuario.. La información general se guarda en las Bibliotecas y en las Opciones, a la que se puede acceder mediante la barra de herramientas de la página principal del software. RADIAL guarda esta información en las Bibliotecas y accede a ella, cuando se le introducen los datos a cada dispositivo dando clic sobre él, el RADIAL va a las bibliotecas y lo que guarda es el índice donde estos se encuentran que en la biblioteca coinciden con el elemento al cual se le esta haciendo referencia, así corre los estudios, siempre buscando en las bibliotecas, estas se pueden cambiar como convenga para realizar los cálculos.. Fig. 1.1 Parte de la página principal del RADIAL.. Dentro del menú Bibliotecas aparecen los siguientes submenús desde los cuales se puede acceder a cada biblioteca en específico.. Fig. 1.2 Menú Bibliotecas en la Barra de Menú del RADIAL.. 4.
(14) Capítulo 1. Situación actual del RADIAL. 1.. Gráficos de carga: En los gráficos de carga se guardan las variaciones horarias de la potencia activa y reactiva de las cargas, se dan en por unidad y pueden representarse a potencia constante, corriente constante o impedancia constante asignando “1” a la ventana correspondiente.. Fig 1.3 Ventana de la biblioteca de gráficos de carga.. 2. Transformadores: Dentro del submenú transformadores existen dos opciones, la de los transformadores monofásicos y la de los trifásicos. Para cada transformador se asignan los datos que le corresponden a cada parámetro. Como se aprecia en la ventana, a cada transformador se le introducen los datos de potencia nominal, pérdidas de hierro, resistencia y reactancia.. 5.
(15) Capítulo 1. Situación actual del RADIAL.. Fig. 1.4 Ventana de la biblioteca de transformadores monofásicos.. 3. Conductores: Los datos de cada conductor se introducen en su biblioteca, como se muestra en la ventana correspondiente. Los datos que se le introducen son: el material de que se componen que puede ser de cobre o de aluminio, la resistencia la Auto Distancia Geométrica Media (ADGM) y el límite térmico.. Fig. 1.5 Ventana de la biblioteca de conductores.. 6.
(16) Capítulo 1. Situación actual del RADIAL. 4. Cables: Los datos de los cables son muy parecidos a los conductores. Se añaden el tipo de cables (tripolar o monopolar), el material, si es de cobre o aluminio; el voltaje nominal, la resistencia, la reactancia, y la capacitancia.. Fig. 1.6 Ventana de la biblioteca de los cables.. 5. Estructuras: A la ventana de la biblioteca de las estructuras se le introducen las distancias entre los conductores de cada fase y entre estas y el neutro.. Fig. 1.7 Ventana de la biblioteca de estructuras.. 7.
(17) Capítulo 1. Situación actual del RADIAL. 6. Fusibles: Los datos asociados son la corriente nominal y los datos correspondientes a las curvas Tiempo-Corriente de tiempo mínimo de fusión y de tiempo máximo de limpieza del arco. En la ventana aparece la opción de la representación de la curva TC.. Fig. 1.8 Ventana de la biblioteca de los fusibles.. 7. Relés: A la biblioteca de los relés se accede a través de la ventana siguiente y se le introducen el tiempo de operación en segundos y el tipo de curvas que utilizará.. Fig. 1.9 Ventana de las bibliotecas de los relés.. 8.
(18) Capítulo 1. Situación actual del RADIAL. 8. Restauradores: A los restauradores se le introduce el valor de la corriente de interrupción y las curvas o tablas de corriente de interrupción contra tiempo.. Fig. 1.10 Ventana de la biblioteca de los restauradores.. 9. Seccionalizadores: A los seccionalizadores se le introduce la corriente nominal.. Fig. 1.11 Ventana de la biblioteca de los seccionalizadores.. 9.
(19) Capítulo 1. Situación actual del RADIAL. Otro aspecto importante que forma parte de la información general es el menú Opciones. En él se encuentran submenús, uno Generales que despliega una ventana con varias paletas entre las cuales se encuentra Preferencias en las que se aclaran las opciones de Guardar y las etiquetas que tendrá cada elemento para hacer referencia visual a él. La paleta Ver se usa para especificar las barras de herramientas que serán visibles en el trabajo con el RADIAL, lo que se va a ver en las líneas del Editor Gráfico del programa cuando se corra algún flujo, resultados como potencia activa, reactiva y aparente transferida, y debajo se especifica lo que se verá en los nodos como el módulo y ángulo del voltaje y el por ciento de la caída de voltaje. En la paleta Formato se especifican las unidades de los datos eléctricos y los lugares decimales de los resultados que devuelva el flujo. La paleta Perfiles indica resultados gráficos a lo largo del circuito; hay tres tipos de perfiles, el Perfil de Voltaje, el Perfil de Corriente de Cortocircuito y el Perfil de Potencia Reactiva. La última paleta, Color, especifica el color que han de tener los dispositivos y equipos sobrecargados y subcargados cuando se hace la corrida de cualquiera de los estudios.. El otro submenú llamado Para Aplicaciones, dispone de un conjunto de paletas: La primera es Generales, y en ella se especifican varios datos para diversas evaluaciones tales como el Costo de la Energía, la Tasa de Descuento, el Factor de Insumo, el Factor de Pérdidas de Transmisión, el Costo del kW Instalado en Planta, el Factor de Operación y Mantenimiento, el Factor de Recuperación del Capital, el Factor de Pérdidas de Transmisión y el Factor de Reserva. La segunda paleta se denomina Flujo de carga, en ella están las opciones para correr el flujo de carga, se aclara si se desea que haya un crecimiento de la carga y en qué por ciento. También se especifica si se quiere que la carga se represente a Corriente, Potencia o Impedancia constante o con la especificación del Gráfico de Carga de la biblioteca, finalmente, si se quiere que se corra el flujo monofásico de varios circuitos simultáneamente. La tercera paleta se llama Capacitores donde se aclara si estos se quieren ubicar para Máxima Reducción de Pérdidas de Potencia o Energía, también se aclaran los datos económicos de estos y la Capacidad Máxima del Banco. Luego está la paleta Balanceo donde se especifica si el balanceo se hará por Potencia o por Energía y los requerimientos mínimos para lograrlo.. 10.
(20) Capítulo 1. Situación actual del RADIAL. Después aparecen las Protecciones donde se especifica si se calcularán los cortocircuitos en todos los nodos o solo en los que tienen dispositivos de protección. La sexta paleta se llama Cambio de Conductores y se especifican los costos de los cambios de calibres dados en Pesos/km/conductor, el Valor Recuperado, también dado en la misma unidad anterior y en qué tiempo se quiere que se evalúe esta recuperación. La próxima paleta es Ubicación de metros, en ella se da el grado de automatización de estos y el número que se pondrá en los circuitos. Por último se encuentra la Modelación de las Cargas, en la que se pregunta si se quiere transferir al circuito las cargas estimadas y la desviación estándar al valor medio dada en porciento.. 1.1.2.- Información particular.. La información particular es la que permite que el programa obtenga los datos específicos de cada circuito que se le introduce. A esta, al igual que a la general, es muy fácil de acceder pues con solo dar un clic sobre el elemento al que se le quiere introducir los datos en el editor gráfico mostrará una ventana mediante la cual se le podrán introducir.. La Información Particular está muy ligada a la General, principalmente a las bibliotecas, ya que casi todos los elementos piden como entrada de datos en la edición de los circuitos, a qué tipo de elemento dentro de una lista, pertenecen, por ejemplo, cuando se accede a los transformadores monofásicos en el proceso de edición de las cargas, y se selecciona la potencia del mismo, en realidad lo que se introduce es el índice del transformador seleccionado, este se compara con el de la biblioteca, se escoge el que coincida y se toman sus datos ya introducidos en el momento de crear las bibliotecas. En resumen los dos tipos de información funcionan una para la otra.. 11.
(21) Capítulo 1. Situación actual del RADIAL. Las ventanas asociadas a cada uno de los elementos son las que siguen: Línea: Se le introducen el código, la longitud de la línea dada en metros, el calibre de fase, el calibre del neutro y el tipo de estructura.. Fig 1.12 Ventana de la entrada de datos a la línea.. Subestación: La ventana de la subestación tiene dos pestañas: •. En la primera están los datos generales entre los cuales se encuentran el código, la potencia del transformador (este dato se usa sólo para los cálculos de corto circuito), el voltaje nominal por alta, por baja, el voltaje de operación, los MV. De coro circuito trifásico y monofásico.. •. En la segunda pestaña llamada Mediciones se introduce el gráfico de carga general de la subestación en kW y kvar.. Fig. 1.13 Ventana de la entrada de los datos de la subestación.. 12.
(22) Capítulo 1. Situación actual del RADIAL.. Nodo: Se le introduce el código y la dirección del nodo. El primer dato RADIAL lo emplea para comunicarse con el SIGEDI, en tanto que el segundo es sólo para ubicar al usuario dentro del monolineal.. Fig. 1.14 Ventana de la entrada de datos del nodo.. Carga: Se especifican los datos asociados a la carga. Posee tres pestañas: •. La primera se llama Carga, en ella se le introducen el Código (para la comunicación con el SIGEDI). El tipo de carga se refiere al gráfico horario previamente introducido en la biblioteca. La potencia activa y reactiva máxima se refiere al valor en kW y kVAr del gráfico. El por ciento de carga monofásica indicará qué por ciento de la carga total, en caso de que esta sea mixta, le corresponde a la carga monofásica, y el factor de potencia de la carga monofásica, se explica por sí solo.. •. La segunda pestaña se llamada Transformadores se relaciona con la selección, dentro de la lista existente en la biblioteca, de los transformadores que forman el banco (el de alumbrado, él o los de fuerza y a qué fase están conectados. Esta información se usa sólo en el flujo trifásico).. •. La tercera se llama Crecimiento, e indica el por ciento de crecimiento de las cargas para ser tenido en cuenta en los estudios perspectivos.. 13.
(23) Capítulo 1. Situación actual del RADIAL.. Fig. 1.15 Ventana de la entrada de datos de la carga.. Capacitor: Se dan los datos del código y la capacidad del banco en CkVAr.. Fig 1.16 Ventana de la entrada de datos del banco de capacitores.. Dispositivos de protección: Pueden ser varios, pero básicamente se le introducen a cada uno los mismos datos. Se refiere a los relés, restauradores y demás ya especificados.. 1.2.- Estudios del RADIAL. En la actualidad los estudios del RADIAL se pueden llamar a ejecución a través del menú Análisis en la barra de herramientas o por medio de los botones de la Barra de Estudios, en caso de que esta no estuviere visualizada pues se accede a ella por medio del menú Ver y luego el submenú Barra de Estudio. Este tiene habilitado los siguientes estudios:. 14.
(24) Capítulo 1. Situación actual del RADIAL. •. Flujo de carga monofásico: Existen diversos métodos de flujo de carga (método de los nodos con Ybus y Zbus y flujos de carga de relación R/X alta), pero las características de los circuitos radiales se acomodan mejor al cálculo de las caídas de voltaje a partir de las transferencias de potencia, fundamentalmente cuando se consideran líneas asimétricas, de una o dos fases con carga desbalanceada. En el flujo de carga monofásico se considera que el flujo está balanceado y no se tiene en cuenta la asimetría de las líneas. El primer cálculo que se realiza al analizar o proyectar un circuito es el de los voltajes en los nodos y las pérdidas de potencia y energía en las líneas y transformadores. Normalmente las ecuaciones que se usan para cumplimentar este propósito se basan en que las cargas se encuentran distribuidas por igual entre las fases de las líneas, lo que no siempre ocurre, por lo tanto para lograr que los resultados que se obtengan sean verdaderamente confiables, es requisito indispensable haber cumplido esta condición [1]. Para el flujo de carga monofásico se hacen los cálculos para una sola fase con la ayuda de las siguientes ecuaciones:. Vr =Ve −. X * Pe − R*Qe R* Pe + X *Qe + j* Ve Ve. (1.1). ⎛ P2 + Q2 ⎞ ⎟⎟ * Ri ∆Pi = ⎜⎜ 2 V i ⎝ ⎠. (1.2). donde V representa el voltaje de línea, y P y Q son las potencias totales [1]. Las pérdidas de energía se determinan mediante:. ∆E = ∆Pmax ∗ H eq. (1.3). donde: Heq: Horas equivalentes.. ∆ Pmax: Pérdidas de potencia máxima. 15.
(25) Capítulo 1. Situación actual del RADIAL. Actualmente RADIAL hace los cálculos de flujo monofásico a la hora seleccionada por el usuario, aunque por “default” propone la hora de máxima demanda.. Si se tiene un circuito como el mostrado donde las dos cargas tienen gráficos diferentes,. Carga # 1. Carga # 2. Fig. 1.17. Representación de los gráficos de cargas supuestos.. RADIAL suma los gráficos hora a hora y así obtiene un gráfico para cada sección o tramo de línea.. Como los cálculos se realizan para el pico del circuito, muy frecuentemente se da el caso de que no haya coincidencia entre este pico y el de cada tramo o sección del mismo, por lo que la expresión 1.3 no puede aplicarse porque lo que se tiene son las pérdidas de potencia para la hora de máxima del circuito, pero no las pérdidas máximas del tramo, que es lo que se requiere para aplicar 1.3.. Para resolver este problema, se determinan las pérdidas de potencia máxima mediante el coeficiente K dado por: 2. ⎛P ⎞ K = ⎜⎜ max ⎟⎟ ∆Preal ⎝ Preal ⎠. (1.4). donde:. 16.
(26) Capítulo 1. Situación actual del RADIAL. Preal: Potencia a la hora pico del circuito (inferior a ∆P max ). Pmax: Potencia máxima del tramo.. ∆Preal: Pérdidas de potencia a la hora del pico del circuito.. ∆E = ∆ Pr eal ∗ K ∗ Heq. (1.5). Con esta corrección se calculan las pérdidas de energía para el tramo aunque su pico no coincida con el del circuito.. •. Flujo de carga trifásico: Desde el punto de vista operativo, es prácticamente imposible en todo momento lograr un balance de las cargas por las tres fases de un circuito trifásico cuando este brinda servicio a consumidores con una cierta proporción de cargas monofásicas residenciales, carga de alumbrado, etc. aun cuando las mismas sean servidas desde un transformador trifásico o por un banco de tres transformadores monofásicos [1], por lo que muchos resultados de los análisis de los circuitos quedan enmascarados si se estudian considerando que las cargas están balanceadas entre las tres fases para el circuito trifásico o entre las dos fases si son ramales de dos fases y neutro. El flujo de carga trifásico analiza los circuitos con cargas desbalanceadas y calcula los voltajes y las pérdidas por fase. [1].. •. Estudio de capacitores [2, 3, 4]: En este estudio RADIAL puede ubicar bancos de capacitores trifásicos previamente escogidos para máxima reducción de pérdidas de potencia o de energía. También realiza la selección de los bancos para ambas condiciones. •. Estudio de cargabilidad de los transformadores: Calcula, a partir de los datos de la carga el estado de carga de cada transformador en un banco y lo clasifica como sobre cargado o sub cargado de acuerdo a criterios (%) dados en Opciones.. •. Estudio de protecciones [5, 6, 7]: Comienza con los cálculos de las corrientes de corto circuito y a continuación realiza la selección y coordinación de los dispositivos de protección. (corriente. de. carga,. sensibilidad,. etc.) 17.
(27) Capítulo 2. Estructura de programación del RADIAL.. CAPITULO 2. ESTRUCTURA DE PROGRAMACION DEL RADIAL. Los algoritmos de cálculo de las diferentes aplicaciones asociadas a las funciones de los circuitos de distribución primaria se han implementado en el software RADIAL cuya estructura de programación se explica junto a los pasos del árbol de descendencia de los elementos y los procedimientos que en cada uno de ellos se realiza.. 2.1.- Creación de la clase tItem. RADIAL se desarrolla en el lenguaje Delphi 5, este es un lenguaje que usa la programación orientada a objetos. Como todos estos tipos de lenguaje, en él es necesario hacer la declaración de elementos que son llamados objetos, que siempre tienen un padre que en el más primitivo de los casos en el Delphi es el tObject. Primeramente RADIAL realiza la declaración de un objeto llamado tItem que como ya se dijo antes desciende de tObject.. El Delphi tiene dos tipos de objetos; los autocreados, estos ya tienen predeterminadas las funciones que realizan, así como sus propiedades y procedimientos, el mismo programa es el dueño de estos y es el que los crea y los destruye liberando este espacio en memoria a medida que vaya haciendo falta; tItem pertenece al otro grupo de objetos que son los que el programador crea a su conveniencia: se definen sus propiedades, sus procedimientos y funciones con el objetivo que realice específicamente la función que se quiera de él. Esto trae como consecuencia que cuando se quiera usar un elemento como este el usuario primeramente deberá asignarle a una variable el tipo del elemento que el creó para que el Delphi reserve memoria para este elemento. Posteriormente se debe crear el elemento que no es más que inicializar las variables, claro esto es opcional, y luego llamar al procedimiento predeterminado de Delphi Inherited Create,. 18.
(28) Capítulo 2. Estructura de programación del RADIAL. Cuando se crea un objeto es necesario definir exactamente qué es lo que se quiere que este realice. El Delphi tiene varias formas de definir, y cada método depende de la función que se quiere que realicen. Se pueden declarar en la parte privada, en la protegida, en la pública o en la publicada. Si se declara una parte de un componente (bien sea un campo, propiedad o método) privado (private) provoca que esa parte del objeto sea invisible al código externo de la unidad en la cuál se declara el objeto. Dentro de la unidad que contiene la declaración, el código puede acceder a esa parte del objeto como si fuera público. La principal utilidad de las declaraciones privadas es que permiten ocultar los detalles de implementación del componente al usuario final del mismo, ya que estos no pueden acceder a la parte privada de un objeto. De este modo se puede cambiar la implementación interna del objeto sin afectar al código que haya escrito el usuario. Si el método en cambio, se declara como protegido (protected) provoca, al igual que ocurría al declararlo privado, que el código externo a la unidad no pueda acceder a dicha parte (se hace oculta al código externo a la unidad). La diferencia principal entre declarar una parte de un objeto protegida o hacerla privada es que los descendientes del componente podrán hacer referencia a esa parte. Este comportamiento es especialmente útil para la creación de componentes que vayan a descender de aquel que hemos creado. Todas las partes de un objeto que se declaren públicas (public) podrán ser referenciadas por cualquier código ya sea interno o externo a la propia unidad. En este sentido, la parte pública identifica el interface en tiempo de ejecución del componente. Los métodos que el usuario del componente debe llamar deben ser declarados públicos, así como también las propiedades de sólo lectura, ya que son sólo válidas en tiempo de ejecución. Las propiedades declaradas públicas no aparecerán en el inspector de objetos. Esta sección es tal vez la más importante a considerar al diseñar un componente. Cuando se diseñan componentes, se debe considerar cuidadosamente qué métodos y propiedades deben ser públicas. Si el diseño es correcto, este permitirá retocar las estructuras de datos y. 19.
(29) Capítulo 2. Estructura de programación del RADIAL. métodos internos del componente sin tener que tocar el interface público, que seguirá siendo el mismo para el usuario del componente. Al declarar parte de un objeto publicado (published) provoca que la parte sea pública y además genera información en tiempo de ejecución para dicha parte. Las propiedades declaradas publicadas aparecen en el inspector de objetos en tiempo de diseño, ya que sólo las partes publicadas aparecen en el inspector de objetos, estas partes definen el interface en tiempo de diseño del componente. En general sólo se deben declarar publicadas propiedades y no funciones o procedimientos (ya que lo único que se logra con ello es declararlas públicas) [10]. Para crear un objeto es necesario usar el procedimiento Create predeterminado por el lenguaje. En este objeto, a este procedimiento, se le pone al final la palabra virtual, que quiere decir que es la primera vez que se defe. Se crea en la parte pública del objeto, para que pueda ser usado desde cualquier unidad interna o externa a este como ya se expresó antes. En este objeto el procedimiento no realiza ninguna función que no sea expresamente la de crearlo.. Como se expresó anteriormente, siempre que se crea un objeto hay que destruirlo cuando el mismo ha dejado de usarse, por lo tanto, también en tItem se define el procedimiento Destroy, que es muy simple en su estructura. Se realiza un ciclo que recorre cada elemento del circuito y va liberando el espacio en memoria de cada uno por separado.. Existen dos procedimientos que son parejas declarados en este mismo objeto. Son Put y Get, pero primero se explicarán dos funciones que se usan en los anteriores y que son imprescindibles para que estos funcionen: Dsize y Dptr. La primera, Dsize, devuelve un número entero que es el tamaño en bytes del elemento en análisis y la segunda Dptr que devuelve un dato que es un puntero y representa la dirección de memoria donde está el elemento que se está tratando.. 20.
(30) Capítulo 2. Estructura de programación del RADIAL. El procedimiento Put se realiza para guardar el circuito, tiene como entrada una variable de tipo fichero, se salva en bloques usando el procedimiento Blockwrite del Delphi, pasándole como parámetros el fichero, sul tamaño en y la dirección en memoria donde se va a salvar. Se hace un ciclo que recorre todos los elementos y salva cada uno de ellos en el fichero que se le pasa.. El procedimiento Get se usa para leer los circuitos guardados en los archivos, a este se le pasa el nombre del archivo del que se quiere extraer la información. Cuando se quiere cargar algún circuito guardado se llama a este procedimiento. Es más complicado que el anterior pues carga los datos del mismo archivo que se guardó anteriormente, el que se le pasa como parámetro cuando se le llama. En él se usa el procedimiento BlockRead del Delphi al que se le pasa como parámetro el fichero del cual se va a leer, y la dirección de memoria donde se encuentra, luego se va recorriendo cada elemento y se va limpiando lo que pudiera haber en memoria que haga referencia a este a través de la asignación: Item[i] := nil. Finalmente se recorre de nuevo cada elemento para llenarlo con los datos de los dispositivos que están salvados en el archivo que se le paso antes al Get, y se le pone una excepción para el caso de que ocurra algún error al leer del disco.. El objeto tItem tiene otro procedimiento muy importante, el RegisterItems, que permite registrar cada elemento para tener una constancia de que el elemento existe. Se le pasa la constante C que es un arreglo de los elementos que hay en el circuito en el se realiza un ciclo que recorre todos estos elementos y se van guardando en una lista llamada RGClass.. Los procedimientos PutItem y GetItem tienen como objetivo adicionar o leer los nombres y otras propiedades de los elementos guardados. A PutItem se le pasan el archivo donde se va a guardar el elemento que también se le pasa como parámetro, primero se chequea si se le esta pasando en realidad un elemento, si lo anterior se cumple se llama al procedimiento PutString al que se le pasa como parámetro el fichero y el nombre de este elemento, luego se adiciona al fichero junto con los otros de la lista.. 21.
(31) Capítulo 2. Estructura de programación del RADIAL. La función GetItem sirve para hacer referencia a un elemento en específico y usarlo en caso de que haga falta. Se le pasa como parámetro el nombre del fichero donde se encuentra este elemento y devolverá, como es lógico, un elemento. Se ve en este procedimiento el uso otra vez de las excepciones pues primeramente se lee el nombre del archivo y se usa la excepción para que muestre un mensaje avisando al usuario de que al programa le es imposible leer el archivo por un error ajeno a este. Se chequea si en realidad se entró algún elemento para su análisis, en caso de que sea verdadero se eleva todo el nombre a mayúscula y se hace un ciclo condicional basado en que mientras que el número del elemento que se esté analizando sea menor que la lista de elementos que existen guardados y el nombre sea diferente al que coincide en la lista, entonces el incrementa un contador. Si se llega al final de la lista el procedimiento no devuelve nada, de lo contrario lo llama de la lista de los elementos y lo devuelve usando otra excepción para si no puede leer este elemento de la lista.. 2.2.- Creación de la clase tVisual. El tipo de objeto tVisual está diseñado para controlar la parte gráfica de cada elemento. Desciende del objeto tItem que se explica en el epígrafe anterior. Lo primero que se hace, y esto será una máxima cada vez que se desee usar un elemento creado por el programador, es redefinir el procedimiento Init que es el mismo Create con la diferencia de que se le pasa un parámetro que representa quien es el dueño de este cuando se crea. El procedimiento Destroy se redefine en este mismo objeto, no se le pasa ningún parámetro y, lo primero que realiza es un ciclo que recorre todos sus elementos que contiene, chequeando si el elemento existe y, si es el dueño entonces lo libera.. Existe un procedimiento llamado Setindex que básicamente lo que hace es hacer un ciclo para todos los elementos y le coloca el índice que se le pasa al procedimiento cuando se le llama. La función GetIsland devuelve un número entero, que representa al circuito radial al que pertenece el elemento, en una misma hoja de edición se pueden dibujar varios circuitos. 22.
(32) Capítulo 2. Estructura de programación del RADIAL. radiales independientes entre sí. De este hecho parte la importancia del anterior, ya que mediante el mismo, el programa identifica cuales son los elementos de cada isla (entiéndase por isla el circuito al cual este pertenece) de ahí el nombre de la función. En esta función se realiza una condición que chequea si el dispositivo está conectado, si es así lo devuelve su isla.. También se tiene dentro de este tipo definido el procedimiento Paint, al que se le pasa como parámetro Cvs que es una variable de tipo tCanvas, se usa para hacer trabajos con la parte de la edición gráfica del elemento.. Muy ligado a este procedimiento se definen también tres funciones que devuelven un dato de tipo tColor, estas funciones se llaman BrushColor, FontColor y PenColor. En cada uno de estas se define el color que tendrán los elementos en los diferentes estados de edición que se pueden usar cuando hay un error, cuando se van a obtener los resultados, cuando el elemento esta enfocado, o sea, cuando se ha dado un clic sobre él, cuando se selecciona y cuando se marca. En las tres se definen los mismos colores, pero las tres no desarrollan las mismas funciones. BrushColor es para definir los colores de los fondos de los elementos, la FontColor para los colores de las letras y los PenColor son los colores de los trazos más finos de los bitmaps de cada dispositivo, la propiedad Pen del Canvas es la que se usa para escoger el tipo de trazo o de punta que se usara para escribir.. La función GetVoltage, aunque sencilla no deja de ser importante, devuelve una variable de tipo compleja, que es el voltaje del dispositivo, lo hace del siguiente modo: chequea si hay algún componente del circuito seleccionado si es verdadero entonces devuelve el voltaje al cual esta trabajando este.. 2.3.- Creación de las clases tShunt y tRight. Primeramente se define el elemento tShunt que desciende del tVisual, y con la definición tiene que crearse, como ya se había dicho, en todos los objetos que no son autocreados, esto. 23.
(33) Capítulo 2. Estructura de programación del RADIAL. se hace a través del procedimiento INIT. Cuando se llama a este procedimiento a la vez que se crea el tShunt también el elemento llama al procedimiento que crea el tFuse, esto se debe hacer para que el elemento que se va a conectar pueda tener su dispositivo de protección, además, este tiene varios procedimientos definidos que son también muy importantes, entre los que se encuentran el GetID. Esta función es muy importante, ya que mediante ella esta el programa puede obtener el valor del identificador del elemento al cual se está haciendo referencia o que le hace falta para hacer los cálculos correspondientes. Este identificador es el número entero que devuelve. Su funcionamiento es muy sencillo: con una condición chequea si tiene algún elemento en análisis, si lo tiene devuelve el ID del elemento, si no lo tiene devuelve el ID del elemento que antes estaba en análisis.. La función Insertable es más sencilla en cuanto a su estructura aunque no menos importante. Se le entra un elemento eléctrico, que puede ser el elemento que se ha seleccionado en el editor gráfico y devuelve un valor booleano, que representa la respuesta de si el elemento seleccionado se puede insertar o no, la respuesta de este es verdadera solo si hay algún elemento marcado.. Estos son los procedimientos y funciones más importantes de este objeto, aunque existen otros, entre los que se la función GetY y el procedimiento SetY que se encargan de obtener y fijar la posición del dispositivo respectivamente pasándole el valor del índice de este. El procedimiento Insert que sólo se define ya que no tiene ninguna función. A la función Focused se le pasan dos parámetros que son, la posición donde está el puntero en el editor gráfico y este devuelve el elemento que está enfocado en ese momento.. Los tipos tRight tLeft, descienden directamente de tShunt, en ellos se definen pocos procedimientos ya que tienen un objetivo estético. Se usan para definir los elementos que se ponen en paralelo a la derecha (las cargas, los capacitares) o a la izquierda (los generadores). Estos tipos tienen pocos procedimientos definidos en su interior, uno muy importante es el Paint al que se le pasa la variable Cvs, que es de tipo tCanvas. Este tipo es el que siempre se. 24.
(34) Capítulo 2. Estructura de programación del RADIAL. usa para hacer dibujos, así con esa variable de tipo tCanvas lo primero que se hace es tomar el bitmap que corresponda llamando al procedimiento GetBitmap, luego dibuja una línea desde el dispositivo de protección hasta que este iguala los colores de la propiedad Brush y Pen del Canvas para que solo aparezca el trazo del icono y queda listo este procedimiento para ser usado.. A la función GetX, se le pasa el índice del elemento y devuelve un valor entero que representa la posición por el eje de las abscisas en dependencia de si el equipo tiene conectado algún dispositivo de protección o no.. Otro procedimiento que se redefine en este tipo de objeto es el Focused que básicamente funciona igual que en el tShunt. El procedimiento que se debe explicar es el Outtext, el que permite mostrar algún mensaje aclaratorio cuando el puntero del mouse pasa por sobre algún dispositivo eléctrico. Se le pasa el parámetro Cvs del tipo tCanvas, y con este se escoge el tipo de letra que se mostrará y el estilo del fondo del mensaje, luego se muestra el mensaje con el procedimiento TextOut predeterminado del Delphi, al cual se le pasan la posición donde se mostrará el mensaje y el mensaje en sí que en el caso en particular es el nombre de cada elemento.. 2.4.- Estructura de las clases correspondientes a las cargas. Todo la estructura de objetos crean las bases para definir cada uno de los tipos de dispositivos eléctricos existentes en la red, en el informe sólo se describe cómo se hace la declaración de las cargas, para tener la idea de cómo queda la estructura de todos los demás elementos pues no varían mucho de estas.. Primeramente se define un tipo central para las cargas denominado tLoad, del que se derivan. De el descienden dos tipos tLoadSingle y tLoadMixta. Se parte del tLoad para hacer más comprensible el árbol de descendencia de estos elementos.. 25.
(35) Capítulo 2. Estructura de programación del RADIAL. Este tipo tLoad desciende del tipo tRight, por lo tanto hereda ya todos los procedimientos y funciones que el padre tiene. Este tipo tLoad en específico hereda del padre los procedimientos Init, Put, Get, Paint, Prefix e Insertable, los tres primeros se mantienen sin muchas variaciones con respecto al padre.. A partir del procedimiento Paint comienzan a variar la declaración de estos procedimientos. Primeramente declara la función StatusofNetwork que devuelve un entero, simplemente chequea la ventana de edición y devuelve en qué estado está el circuito, con un número. Luego declara una función muy interesante llamada ResultColor que devuelve un color. Inicialmente se devuelve el color que tiene la propiedad Pen del Canvas. Después chequea si se ha realizado algún estudio, si es cierto calcula el valor efectivo de la potencia aparente de las cargas y chequea los datos acerca de los limites para considerar los transformadores sobrecargados o subcargados, entrados en las opciones del programa. En base a esto le cambia el color a los bitmaps de las cargas.. El procedimiento Prefix no varía mucho al anterior, el Insertable tampoco varía mucho de los anteriores, ya que solo chequea si el nodo al cual se va a conectar la carga está conectado y si este no tiene ninguna carga.. A partir de estos procedimientos, comienzan a ser declaradas las funciones propias de este tipo, que se explican a continuación:. •. La función GetCapacity devuelve un número real. Primeramente chequea si la carga es mixta o no, seguidamente chequea si tiene algún transformador conectado, si lo tiene hace un ciclo y para cada transformador le va asignando un ID que será el valor que tendrá cada transformador en la lista de elementos, y chequea; si el transformador es trifásico busca la potencia en la lista de estos en la biblioteca con el ID que ya se había calculado antes, si el transformador es monofásico hace lo mismo pero para la lista de los transformadores de ese tipo. Después de definir el tipo tLoad, se hace necesario definir dos tipos que descienden de él: tLoadSingle y tLoadMixta. En el primero no se define ningún procedimientos. 26.
(36) Capítulo 2. Estructura de programación del RADIAL. en particular, ya que se hace con el objetivo de organizar el trabajo. En el segundo ya se hace necesario definir algunos procedimientos y funciones para calcular elementos que hacen falta en las cargas mixtas. El primero de estos procedimientos se realiza con el objetivo de detectar en cual de las fases está el transformador de alumbrado y en cual los de fuerza, de ahí debe su nombre LightingInAdelanto al cual se le entran dos parámetros enteros que son la fase donde está conectado el transformador de alumbrado y donde están conectados los de fuerza, lo que se hace probando las tres posibles combinaciones de formas de conectar los transformadores y devolviendo verdadero en la correcta.. •. A la segunda se le llama GetLightingTransf, no se le entra ningún valor y devuelve un dato de tipo Transf que representa el transformador de alumbrado. Simplemente en ella se realiza un ciclo que recorre los transformadores de la carga y detecta cual de ellos es el de alumbrado.. •. Después se define una nueva función GetPowerTransf que devuelve los transformadores de fuerza haciendo básicamente el mismo procedimiento que la anterior.. •. La siguiente función es para chequear si el transformador que se le pasa como parámetro está en la fase de atraso por lo que se le denominó Atraso. Se le pasa como parámetros la variable Transf que es el transformador a analizar y devuelve un valor de tipo booleano, básicamente lo que hace es recorrer las tres fases, en cada una escoge el transformador que está en la fase siguiente, si este es el de alumbrado entonces chequea si su fase es la C si el transformador que se le pasa está en la fase A devuelve verdadero, de lo contrario va cambiando de fase hasta que termine el ciclo y detecte cual es la respuesta.. •. Después, para finalizar esta clase se define el procedimiento llamado Compile, que aquí sólo tiene la función de crear la instancia del objeto para que sea usado en las próximas clases que definen las cargas.. 27.
(37) Capítulo 2. Estructura de programación del RADIAL. Con toda la estructura anterior se puede definir cada tipo de banco de transformadores en específico, en el presente trabajo se realizara la explicación para el caso de las cargas, ya que para los demás elementos se sigue la misma metodología.. Para cada tipo de carga se realizan las mismas declaraciones de procedimientos. En el procedimiento Init se crea el tipo de carga y al mismo tiempo crea su tipo correspondiente en la unidad Custons. A la función Insertable se le pasa el parámetro F que es de tipo tVisual y representa el tipo de línea que llega al nodo donde se conectará al banco, este chequea si la carga o el banco de transformadores se puede insertar en el nodo que se desea y devuelve un valor de tipo booleano, o sea, verdadero o falso dependiendo de si se puede conectar o no. La función ClasLabel devuelve el nombre del tipo de banco que se ha seleccionado para ser insertado en el circuito, como es lógico esto es un dato de tipo string.. La función GetBitmap devuelve el bitmap del tipo de banco de transformadores en especifico. El procedimiento Compile chequea que en cada banco los transformadores concuerden en fase y que no coincidan en sus conexiones con ningún otro en el mismo banco, además de que no se pueda conectar más transformadores del numero de líneas que llegan al nodo y devuelve un mensaje aclarando que no se puede realizar la acción que se desea.. En la unidad Custons se definen las clases de todos los elementos, pero se trabaja con otros tipos de procedimientos que permiten el trabajo con los datos eléctricos. Se comienza con definir el tipo tCustons que desciende de la clase tItem pero en este no se define absolutamente nada, solo se hace para separar los dos y que tenga más estética la unidad.. En esta clase de las cargas también se dividen las dos en dos ramas, la de las cargas simples y las de las cargas mixtas como se hizo en la unidad tLoad. Primeramente se realiza la declaración de la clase tCstLoadSingle que descienden de tCuston. Cuando se crea esta clase se inicializan todas los campos que esta variable posee definidos en la parte publica, la potencia activa y reactiva máxima, los transformadores asociados, la representación.. 28.
(38) Capítulo 2. Estructura de programación del RADIAL. Los procedimientos Put y Get no se diferencian mucho de los ya definidos en la clase tItem pues usan el mismo procedimiento Blockwrite y BlockRead para escribir o leer del archivo que se le pasa como parámetro, hacen un ciclo por todos los transformadores que están conectados a ella para trabajar con sus datos como en los otros.. La función Copy devuelve un objeto de tipo tItem que básicamente adiciona los transformadores que tenga la carga en ese momento. Primeramente desarrolla una condicional para chequear si la carga tiene algún transformador conectado, si la tiene entonces crea una instancia del objeto tList y recorre la lista de los transformadores y va copiando cada uno de ellos para esta lista. El procedimiento Dialog solo muestra la ventana para la entrada de los datos eléctricos de la carga.. Existen dos procedimientos en esta clase que se encargan de enviar y recibir los datos desde los campos que los guardan a la ventana que aparece cuando se le da clic al elemento en el editor gráfico, estos son Send y Receive respectivamente, a estos se le pasan como parámetro la forma que posee la ventana de la entrada de datos. En esta se chequea y se le da tratamiento a las unidades de los datos, y se guardan en las opciones del menú principal del RADIAL Es necesario hacer esto ya que se pueden cambiar y a la hora de mostrarlas hay que convertirlas; al campo no importa cómo se le introduzcan.. El otro procedimiento que se define es el Compile que en este caso en particular chequea que se debe cerrar la ventana de entrada de datos después de definir el gráfico de carga, y la potencia activa y reactiva, de lo contrario se muestra un mensaje de que no se puede cerrar la ventana hasta que no se definan.. En el paso siguiente se definen otros dos métodos muy importantes, el primero el procedimiento SetTransf al cual se le pasan dos parámetros un valor entero que es el índice del transformador y la instancia del objeto tTransf que representa al transformador en si. Crea una instancia del objeto tList e inserta el transformador que se le pasa a esta lista mediante el procedimientos Insert definido en este objeto. La función GetTransf es la que lo complementa, se le pasa el índice de un transformador y devuelve la instancia del. 29.
(39) Capítulo 2. Estructura de programación del RADIAL. transformador que corresponda a ese índice, de la misma forma, chequea la lista de transformadores de la biblioteca y devuelve la respuesta correcta.. Por ultimo se define una función pequeñita TrfsCount, devuelve el numero de transformadores que posee la carga. Con este procedimiento termina la definición de la clase tCstLoadSingle. Luego se define la tCstLoadMixta para las cargas mixtas pero tiene los mismos procedimientos y funciones que la anterior, solo que cambian algunas especificidades de estos.. Como se observa cada tipo de carga descienden de una u otra rama en función de si es simple o compuesta y se definen las clases de cada una de ellas, pero solo se redefinen los procedimientos Send, Receive y Compile variando datos específicos.. 2.5.- Realización del cálculo del flujo monofásico. Para hacer los cálculos correspondientes existe un botón en la barra de herramientas de la ventana principal del RADIAL. Cuando se le pasa el puntero del mouse por encima y hacer clic sobre este se ejecuta el procedimiento FOnePhsClick que realiza las funciones que a continuación se explican.. El procedimiento primeramente inicializa varias variables entre las cuales se encuentran el campo LFType que se declara en la página principal, el que representa el tipo de flujo que se va a ejecutar; es de tipo entero, lo que se hace es asignarle sólo un número. Luego escoge para trabajar la ventana de edición abierta y chequea si a la subestación se le han introducido las mediciones, si la respuesta es negativa muestra un mensaje aclarándolo, si es positiva entonces chequea, si no hay ningún error cuando se cargan los datos, y si hay abierta alguna ventana de edición del circuito. Seguidamente crea una instancia del objeto tFoForm que es la ventana de inicio de corrida del flujo y la muestra mediante el procedimiento Showmodal que a continuación aparece.. 30.
(40) Capítulo 2. Estructura de programación del RADIAL.. Fig. 2.1 Ventana inicial del cálculo del flujo monofásico.. Esta ventana tiene la posibilidad de seleccionar la hora de análisis del flujo, además de que tiene un botón que muestra la misma ventana de las Opciones del menú principal del RADIAL con el objetivo de que se le puedan entrar los datos que se quieran a la hora hacer la corrida, si no se le han introducido. Cuando se muestra la ventana automáticamente calcula la hora de máxima y la de mínima demanda para ese circuito y las muestra en los Labels que corresponden a cada cual. Es el botón más importante, por decirlo de alguna forma, ya que es el encargado de activar el evento que calcula el flujo.. Cuando se da clic al botón continuar este genera el evento Onclick que llama al procedimiento GoBtnClick definido ya en la unidad FoStart que contiene esta ventana. El primer paso que realiza este es inicializar también varios campos que le son necesarios: en primer lugar refresca la ventana, y le va pasando los datos de los a los campos (la hora de cálculo, el número máximo de iteraciones, el campo Conv lo inicializa en falso indicando que el sistema no converge), posteriormente si el problema converge en alguna iteración le asigna el valor true y le pasa también el año al cual se realiza el estudio, esto se hace para el caso de que se desee tener en cuenta el crecimiento de las cargas con respecto al año base.. Seguidamente se chequea el valor del campo LFType del cual se habló anteriormente con el objetivo de que se realice la corrida del flujo correcta, si el valor del LFType coincide con el señalado para el flujo monofásico entonces chequea si se ha escogido la opción de tener en cuenta el crecimiento de las cargas, si es verdadero realiza la estimación de esta en el año fijado, si no, toma la ventana donde se dibuja el circuito y carga su nombre en el campo. 31.
(41) Capítulo 2. Estructura de programación del RADIAL. fOpen, luego se realiza la llamada al procedimiento ExecuteFOnePhs definido en la unidad LFOPhs.. El procedimiento ExecuteFOnePhs antes mencionado es el que se encarga de organizar todo el trabajo para correr el flujo. Inicialmente busca la subestación y llama al procedimiento InitCondVoltage, que se le pasa como parámetro la subestación hallada en el paso anterior, básicamente este procedimiento lo que hace es convertir el voltaje de línea de la sub en voltajes de fase para realizar el cálculo, luego se llama al procedimiento PreFlow que tiene la función de crear el árbol de todo el circuito e ir creando las clases que necesita cada elemento para mostrar los resultados y calcular u obtener los parámetros. Primero busca el nodo que tiene la subestación conectada y se vuelve a llamar a ella misma para que vuelva y busque los nodos que están conectados a estos y así va armando todo el árbol del circuito y creando una instancia del objeto que devuelve los resultados después de calculados y que calculan los parámetros de estos elementos en caso de que haga falta alguno que no se le hayan entrado, como la línea, por ejemplo.. Terminado este paso comienzan las iteraciones, se pone a funcionar la barra de progreso de cálculo del flujo, se inicializan los valores de los elementos y se crea una variable compleja que posee un objeto diseñado para que realice estos cálculos pues el Delphi no posee funciones que trabajen con números complejos. Este paso culmina la fase preparatoria de corrida del flujo, luego se llama al procedimiento Flow al cual se le pasan como parámetros la subestación, y esta instancia del objeto que realiza los cálculos complejos.. El procedimiento Flow se define también en esta unidad LFOPhs. Comienza creando una variable compleja para que pueda realizar los cálculos correspondientes. Después de esto comienza a recorrer los nodos para buscar el que tiene la subestación, cuando lo encuentra parte de ahí y arma el árbol de nuevo, igual que se realizo en el procedimiento PreFlow, con la diferencia que lo hace con el objetivo de buscar los últimos nodos del árbol y comenzar a calcular. El cálculo es simple, ya que cuando se crea cada elemento se define un procedimiento en ellos que denominado FlowOnePhs al que se le pasan sus parámetros. 32.
(42) Capítulo 2. Estructura de programación del RADIAL. y se encarga de calcular las caídas de voltaje en las líneas y las pérdidas de potencia en cada uno de ellos individualmente.. Cuando se recorre el árbol en el procedimiento Flow se va llamando en cada elemento por el cual se pasa, al procedimiento FlowOnePhs, este hace los cálculos independientes añade las pérdidas de potencia en cada nodo a la potencia de las cargas; pasa a la línea que lo alimenta y calcula las caídas de voltaje en ella.. Cuando ha pasado por todos los elementos y realiza todos los cálculos destruye la variable compleja que se venía utilizando y termina el ciclo. Se valida la variable Conv pasándole el resultado de la función CalscOK que devuelve verdadero si los cálculos realizados convergen.. El criterio de convergencia del estudio consiste en que los resultados de los cálculos realizados en la iteración estén dentro de los limites de tolerancia, los cuales se introducen mediante la ventana que aparece en el menú Opciones de la barra principal del programa. Toda la explicación de este procedimiento ExecuteFOnePhs realiza sus funciones por medio de un ciclo que se detiene cuando el número de iteraciones llega a su valor máximo o la variable Conv tenga el valor verdadero.. 33.
(43) Capítulo 3. Implementación del flujo monofásico las 24 horas.. CAPITULO. 3.. IMPLEMENTACION. DEL. FLUJO. MONOFASICO LAS 24 HORAS.. 3.1.- Análisis de la estructura de programación del nuevo editor gráfico. El nuevo editor gráfico está diseñado con el objetivo de brindarle al programa mayor flexibilidad a la hora de editar el circuito, además que la concepción del árbol de descendencia de los objetos se desarrolla de una forma más sencilla y organizada que el anterior. Cada dispositivo eléctrico tiene dos ramas de descendencia, por llamarlas de algún modo. Una que parte de tElement, y otra que parte de tElementInfo.. En primer lugar se define el objeto tElement. De este descienden todos los elementos eléctricos del circuito, pero solo en su forma gráfica. Como todo objeto, este tElement tiene que ser creado y destruido cuando se deje de usar. En el procedimientos Create se inicializan varios campos de este, se deshabilitan tres opciones, lo que permite que pueda ser arrastrado y soltado nuevamente, lo que permite que el elemento muestre un mensaje cuando el puntero del mouse se pare sobre ella y permite que el elemento pueda ser seleccionado, se valida que el elemento esté visible y se le introduce un valor al campo fPercent que es el que controla el tamaño de los dispositivos en el editor gráfico. En el se definen varios procedimientos y propiedades muy importantes usados para cada elemento. El procedimiento SetId y la funcion GetID se usan para fijar y obtener el número de ID de cada elemento en el circuito, respectivamente, lo que es muy importante ya que le permite al programa identificar cada uno de los dispositivos eléctricos para realizar la corrida de los flujos. En el caso del SetID se la pasa el ID del elemento, y la función lo devuelve.. El Siguiente procedimiento, SetValuesToDuplicate, es muy importante. Se le pasa una variable de tipo tElement que es el elemento en el análisis (es el que permite salvar cada propiedad del elemento existente en el archivo que se le ordene) que salva los datos más importantes, la posición, si se puede seleccionar o no, el por ciento al cual se va a ver en la pantalla del editor y si este se puede conectar con otros elementos. 34.
(44) Capítulo 3. Implementación del flujo monofásico las 24 horas. Existe también otra pareja muy importantes, que son el procedimiento SetName y la función GetName. Al primero se le pasa una variable de tipo String y la segunda la devuelve el nombre del dispositivo que se analiza. La función es un poco más complicada que el procedimiento, ya que tiene que realizar una condicional que chequea si el campo fElementinfo tiene guardado algún elemento que será el último que se marque en caso de que no haya marcado alguno, si es verdadero devuelve el nombre del dispositivo marcado, si no devuelve una cadena nula de caracteres.. Se aclara que todos estos procedimientos y funciones antes explicados se declaran en la parte protegida del elemento, por lo tanto estos solo podrán ser usados por elemento mismo o por algún hijo de este. Cada pareja de procedimientos que se declaran Set y Get son para controlar la propiedad del mismo nombre que se le sigue a estos. Por ejemplo, SetID y GetID controlan la propiedad ID del dispositivo.. Muy ligado al anterior se encuentra el objeto tElementinfo. Esta es la otra rama de descendencia de la cual ya se había hablado, de este descienden todos los objetos que almacenan cada dato eléctrico del circuito que se analiza. En este solo se definen tres procedimientos, el SetValuestoDuplicated, Read y Write que se explican a continuación.. El procedimiento Read sirve para crear el elemento desde el disco, cuando se carga de este y el Write sirve para escribirlo, cuando se salva. Los dos tienen casi la misma estructura, lo primero que se hace es pasarle el nombre del elemento guardado en disco el campo fName del elemento, en caso del Write se lo escribe, y luego va leyendo cada campo de este, mediante el procedimiento Read del Delphi al cual se le pasa el nombre del campo del cual se quiere leer y la dimensión de este. El procedimiento Write es muy parecido ya que solo cambia Read por Write.. El procedimiento SetValuestoDuplicated duplica los valores guardados en los campos de él mismo. Se le pasa una constante que es de tipo tElementInfo para que pueda tomar los valores de los campos.. 35.
(45) Capítulo 3. Implementación del flujo monofásico las 24 horas. La definición de cada elemento eléctrico se ejemplifica con las cargas, que fue el presentado en el capítulo precedente.. Las cargas se definen en la unidad Load, en ella como en el caso de tElement, se define la parte gráfica de estas para lo cual existen varios procedimientos y funciones entre los que se destacan la función GetLoadInfo, la que devuelve un dato de tipo tLoadInfo. Esta función es imprescindible para este tipo de estructura pues permite conectar a Load, con Loadinfo que es donde se guardan los datos eléctricos de las cargas. Como se puede apreciar, se sigue una estructura muy simple, pues en la unidad que tiene el nombre del elemento solamente se guarda y se definen los procedimientos, funciones y propiedades que son necesarias para definir la parte gráfica y las unidades que tienen el nombre del elemento terminado en info es donde se guardan sus datos eléctricos. Se define en la parte protegida del objeto, a esta solo se puede acceder a través del mismo objeto, desde otra unidad no se puede acceder a este procedimiento, lo que debe ser así ya que es el mismo elemento el encargado de usar sus propios datos eléctricos y no se debe permitir que desde otra unidad se tenga acceso a esta ya que se trabaja con datos importantes y estos se pudieran confundir con los de otros elementos.. tLoad tiene también tres procedimientos que se definen en tElement, estos son Read, Write y Duplicated, que no varían mucho uno con respecto al otro. En sí mantienen la misma estructura, lo que varía son los campos específicos con los que trabajan.. El objeto tLoad tiene varias propiedades entre las que se encuentran la potencia activa máxima, la potencia reactiva máxima, el por ciento de carga monofásico, el factor de potencia monofásico, el gráfico de carga además otra propiedad llamada Loadinfo que es a la que se llama en el GetLoadinfo para obtener los datos de esta. Para acceder a estas propiedades se realizan dos tipos de operaciones, en la primera, los procedimientos se usan para escribir en ellas, y en la segunda, las funciones se usan para leer de ellas. Por ejemplo, el campo fGráfico, que es el primero que se define en este tipo y representa el tipo de gráfico que tiene la carga, se puede guardar a través del procedimiento SetGrafico, al cual se le entra un valor string que es el nombre del gráfico de carga. Para leer este campo. 36.
Figure
Documento similar
If certification of devices under the MDR has not been finalised before expiry of the Directive’s certificate, and where the device does not present an unacceptable risk to health
In addition to the requirements set out in Chapter VII MDR, also other MDR requirements should apply to ‘legacy devices’, provided that those requirements
Volviendo a la jurisprudencia del Tribunal de Justicia, conviene recor- dar que, con el tiempo, este órgano se vio en la necesidad de determinar si los actos de los Estados
A partir de los resultados de este análisis en los que la entrevistadora es la protagonista frente a los entrevistados, la información política veraz, que se supone que
De este modo se constituye un espacio ontológico y epistemológico a la vez, en el que cada elemento (cada principio) ocupa un lugar determinado en la totalidad, y desde ahí está
El objetivo de este artículo es mostrar un procedimiento para el análisis de la demanda turística que permita sobre la base del enfoque al cliente contribuir al perfeccionamiento
Y en cuanto a la segunda postura más que de interpretación correctiva, que siempre es un mecanismo arriesgado, debería pensarse hasta qué punto la creación o regulación de un con-
En cuarto lugar, se establecen unos medios para la actuación de re- fuerzo de la Cohesión (conducción y coordinación de las políticas eco- nómicas nacionales, políticas y acciones