Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DIgSILENT GmbH
Heinrich-Hertz-Strasse 9
D-72810 Gomaringen
Tel.: +49 7072 9168 - 0
Fax: +49 7072 9168- 88
http://www.digsilent.de
e-mail: mail@digsilent.de
Please contact
Contact Name
Tel.: Telephone Number
e-mail: Email
Published by
DIgSILENT GmbH, Germany
Tabla de Contenidos
DPL .......................................................................................................................................................... 1
1 INTRODUCCIÓN ............................................................................................................................... 4
2 SINTAXIS BÁSICA............................................................................................................................. 4
3 STRINGS ........................................................................................................................................... 5
4 SUBROUTINES .................................................................................................................................. 6
5 ACCESO A OBJETOS .......................................................................................................................... 6
6 USANDO OBJETOS ............................................................................................................................ 7
7 TIME SWEEP, ARCHIVO DE RESULTADOS ....................................................................................... 8
8 CORTOCIRCUITO SWEEP, ARCHIVO DE RESULTADOS ................................................................... 9
9 LECTURA ARCHIVOS EXTERNOS (CSV).......................................................................................... 12
1 Introducción
Para el desarrollo de los siguientes ejercicios contará con la supervisión del entrenador del curso. No dude en
consultarlo si le surgiera alguna duda o inconveniente.
Durante los ejercicios se escribirán varios escritos DPL. La mayoría de ellos se realizarán en varios pasos, de
manera que los escritos se irán reutilizando y extendiendo.
Todos los escritos terminados se encuentran en la librería del proyecto “DPL course LIB”. Usted podrá abrir e
inspeccionar estos escritos cuando necesite alguna idea. Por supuesto también puede ejecutar estos escritos o
modificarlos. No obstante, le aconsejamos no hacer modificaciones directamente sobre los escritos originales
entregados. En el mejor de los casos haga una copia en el caso de estudio antes de modificarlos.
El nombre de los escritos a crear están mencionados con itálica en la primer línea de cada ejercicio. Así en el
primer ejercicio por ejemplo se escribirá un escrito DPL denominado "01_BasicSyntax". Así mismo encontrará el
escrito terminando con el mismo en "DPL course LIB".
Una vez terminado cada ejercicio, le sugerimos hacer una copia de seguridad antes de proseguir con el ejercicio
siguiente. Así tendrá la seguridad de no perder los resultados de los ejercicios ya terminados.
2 Sintaxis básica
01_BasicSyntax
Activar el proyecto “DPL Course 1” y crear un nuevo comando DPL dentro del caso de estudio. Denominarlo
“01_BasicSyntax”.
Escriba a continuación un escrito que tome un valor como variable de entrada y calcule:
9
∑ xi
i=0
Iteraciones = 10
Valor = 0.999000
Resultado = 9.955120
El escrito deberá arrojar un mensaje de error y salir de la ejecución cuando la variable de entrada x ≥ 1o
x <0.
02_BasicSyntax
Mejorar el escrito de manera que acepte como segunda variable de entrada la exactitud. Luego éste deberá
calcular el número total de iteraciones N requeridas para calcular:
∑x i
= 1 (1 − x)
i =0
dentro de la exactitud ingresada. El escrito deberá generar el siguiente reporte :
Iteraciones = 6905
Error = 1.0E-003
Exacto = 1000.000
Estimado = 999.001
3 Strings
01_Strings
Escribir un escrito DPL que mediante sprintf() genera la siguiente salida:
1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10
2.01 2.02 2.03 2.04 2.05 2.06 2.07 2.08 2.09 2.10
3.01 3.02 3.03 3.04 3.05 3.06 3.07 3.08 3.09 3.10
4.01 4.02 4.03 4.04 4.05 4.06 4.07 4.08 4.09 4.10
5.01 5.02 5.03 5.04 5.05 5.06 5.07 5.08 5.09 5.10
6.01 6.02 6.03 6.04 6.05 6.06 6.07 6.08 6.09 6.10
7.01 7.02 7.03 7.04 7.05 7.06 7.07 7.08 7.09 7.10
8.01 8.02 8.03 8.04 8.05 8.06 8.07 8.08 8.09 8.10
9.01 9.02 9.03 9.04 9.05 9.06 9.07 9.08 9.09 9.10
10.01 10.02 10.03 10.04 10.05 10.06 10.07 10.08 10.09 10.10
02_Strings
Escribir un escrito que mediante strftime() genere la siguiente salida :
La segunda línea solo debe ser generada por el día lunes (Monday) usando strstr(), para los demás días de la
semana la salida será :
4 Subroutines
04_BasicSyntax
Modificar primero el escrito 02_BasicSyntax de manera que el número de iteraciones necesarias esté disponible
como parámetro de resultado. Invocando como subrutina a este escrito modificado, generar una tabla como la
que se muestra a continuación:
Columnas: corresponden a la exactitud (error de precisión). Se empieza con 0.1 y se va multiplicando por 0.1
hasta llegar a 0.0001.
Filas: Es el valor de la variable de entrada X, donde los valores consecutivos se calculan como X=(1+X)/2
5 Acceso a Objetos
01_Objects
Escribir un escrito que ejecute un comando de flujo de carga almacenado dentro del mismo escrito DPL y que
reporte en la ventana de salida la carga de una línea determinada (la línea deberá ser almacenada en la sección
de objetos externos del escrito DPL).
Modificar el escrito DPL de manera que ahora ejecute el comando de flujo de carga almacenado dentro del caso
de estudio activo.
02_Objects
• Modificar a continuación el escrito de manera que imprima en la ventana de salida todos los nombres y la
carga de las líneas en la selección general del DPL. Crear una selección general seleccionando un par de
líneas desde el diagrama unificar.
• Extender el escrito DPL de manera que verifique que haya sido encontrado un comando de flujo de carga
dentro el caso activo, y que el flujo de carga se haya ejecutado correctamente. De no ser así, el escrito DPL
deberá generar los mensajes correspondientes en la ventana de salida.
03_Objects
Modificar a continuación el escrito DPL de manera que:
• El DPL solo ejecute el flujo de carga solo cuando sea necesario (o sea, deberá probar si existen resultados
válidos del flujo de carga). Mediante la ayuda on-line buscar algun método que le permita verificar la
existencia de resultados válidos del flujo de carga.
• Genere un reporte con el nombre de todas las líneas cuya carga sea superior al 15%. Para ello, agregar un
filtro al escrito (un objeto “SetFilt”). Usar la ayuda contextual para averiguar como se pueden obtener los
objetos filtrados.
• Ordenar las líneas filtradas en orden ascendente de acuerdo a su carga. El escrito debería producir una salida
del tipo:
6 Usando objetos
01_HighLoad
Escribir un escrito DPL que
• Colecte todas las líneas que no contengan “line routes” (trayectos de líneas). Implementar esto mediante
filtros. Mediante la ayuda contextual buscar una función que le permita determinar si la línea contiene “line
routes”.
• Calcular un flujo de carga. Usar el comando de flujo de carga en el caso de estudio. En caso de que no se
encuentre ningún comando de flujo de carga en el caso de estudio, o que su ejecución no sea exitosa,
generar mensajes de error en la ventana de salida y detener la ejecución del escrito DPL.
• Escribir en la ventana de salida los nombre completos incluyendo el camino (path) de todos los objetos
filtrados.
02_HighLoad
Modificar a continuación el escrito 01_HighLoad , de manera que:
• Tenga como variables de resultado al objeto con la máxima carga y el valor de la misma.
01_ScaleLoads
Escribir un Nuevo escrito DPL que utilice el escrito 02_HighLoad como subrutina. Se recomienda aquí hacer una
copia del escrito anterior antes que usarlo directamente como subrutina. Invocar la subrutina (mediante
“Execute()“) y escribir el nombre con el camino completo del objeto con la máxima carga y el valor de la misma.
02_ScaleLoads
Modificar el escrito de manera de incorporar un objeto externo denominado “Load”. Seleccionar para este objeto
lla carga “Load A” de la red.
El escrito deberá aumentar iterativamente el valor de la demanda de “Load A” hasta que el objeto con la máxima
carga alcance el 100%. Para incrementar la demanda de la carga utilizar el factor de escala (scaling factor
“scale0”). Para identificar la máxima carga utilizar la subrutina anterior.
03_ScaleLoads
Crear una característica con escala 0….1 para ajustar el factor de escala de todas las cargas, de manera que se
puedan variar automáticamente todas las cargas mediante el solo ajuste del trigger. Modificar luego el escrito
02_ScaleLoads para escalar todas las cargas hasta que se alcance una carga máxima del 100% en cualquier
objeto. Incluir en la búsqueda también los generadores.
Las cargas de la red ya tienen asignadas una escala de tiempo. Deberá acceder mediante el DPL el objeto
“SetTime” en el caso de estudio y cambiar la hora del día. Para ello usar la función “SetTime(tour)”.
02_Timesweep
Modificar el escrito para que:
• Incluya la definición de una hora de comienzo, una hora final y un paso (incremento). Definir el tiempo en
horas como parámetro de salida del DPL.
• Agregar un objeto de resultados al escrito DPL. Seleccionar como variables a monitorear algunas variables del
generador y el tiempo de cálculo (salida) del escrito DPL. Crear una gráfica con los resultados.
03_TimeSweep
Mediante el método “ElmRes.AddVars()” agregar la variable “c:loading” a la definición del archivo de resultados
para todos los objetos en la selección general del escrito DPL, para los cuales esta variable exista.
01_SC Sweep
El escrito DPL deberá tener las siguientes variables de entrada:
• Parámetros de entrada:
Posición Inicial %
Posición Final %
Paso
Selección general que permita seleccionar las líneas donde aplicar la falla desde el diagrama
unifilar
Parámetros de salida:
Corriente de Cortocircuito
------------------------------------------------------------------------------------------------------------
Short circuit sweep at line L-1-2
------------------------------------------------------------------------------------------------------------
position: 0 % I1= 9.11 kA I2= 1.18 kA u1= 0.00 p.u. u2= 0.12 p.u. Z1= 0.00 Ohm Z2= 6.41 Ohm Ishc=10.29 kA
position: 10 % I1= 7.98 kA I2= 1.69 kA u1= 0.08 p.u. u2= 0.15 p.u. Z1= 0.64 Ohm Z2= 5.77 Ohm Ishc= 9.67 kA
position: 20 % I1= 7.05 kA I2= 2.16 kA u1= 0.14 p.u. u2= 0.17 p.u. Z1= 1.28 Ohm Z2= 5.13 Ohm Ishc= 9.21 kA
position: 30 % I1= 6.26 kA I2= 2.61 kA u1= 0.19 p.u. u2= 0.18 p.u. Z1= 1.92 Ohm Z2= 4.49 Ohm Ishc= 8.87 kA
position: 40 % I1= 5.57 kA I2= 3.06 kA u1= 0.22 p.u. u2= 0.19 p.u. Z1= 2.56 Ohm Z2= 3.84 Ohm Ishc= 8.63 kA
position: 50 % I1= 4.96 kA I2= 3.52 kA u1= 0.25 p.u. u2= 0.18 p.u. Z1= 3.20 Ohm Z2= 3.20 Ohm Ishc= 8.48 kA
position: 60 % I1= 4.42 kA I2= 3.99 kA u1= 0.27 p.u. u2= 0.16 p.u. Z1= 3.84 Ohm Z2= 2.56 Ohm Ishc= 8.41 kA
position: 70 % I1= 3.92 kA I2= 4.50 kA u1= 0.28 p.u. u2= 0.14 p.u. Z1= 4.49 Ohm Z2= 1.92 Ohm Ishc= 8.42 kA
position: 80 % I1= 3.45 kA I2= 5.05 kA u1= 0.28 p.u. u2= 0.10 p.u. Z1= 5.13 Ohm Z2= 1.28 Ohm Ishc= 8.50 kA
position: 90 % I1= 2.99 kA I2= 5.67 kA u1= 0.27 p.u. u2= 0.06 p.u. Z1= 5.77 Ohm Z2= 0.64 Ohm Ishc= 8.66 kA
position: 100 % I1= 2.54 kA I2= 6.37 kA u1= 0.26 p.u. u2= 0.00 p.u. Z1= 6.41 Ohm Z2= 0.00 Ohm Ishc= 8.91 kA
------------------------------------------------------------------------------------------------------------
Para poder graficar los resultados tras la ejecución del escrito, se deberá definir un archivo de resultados para el
escrito.
• Crear una “carpeta de resultados” dentro del escrito DPL “Cortocircuito Sweep”.
• Definir un set de variables con las variables del reporte del cortocircuito del ejercicio anterior.
• Insertar líneas de código que permitan escribir estos resultados en un archivo de resultados.
DIgSILENT
8,00
6,00
4,00
2,00
0,00
-2,00
0,000 20,000 40,000 60,000 80,000 100,00
x-Axis: Short Circuit Sweep_Ex4: Short Circuit Position in %
Short Circuit Sweep_Ex4: Impedance at Side 2 of the Line in Ohm
Short Circuit Sweep_Ex4: Impedance at Side 1 of the Line in Ohm
12,50
10,00
7,50
5,00
2,50
0,00
0,000 20,000 40,000 60,000 80,000 100,00
x-Axis: Short Circuit Sweep_Ex4: Short Circuit Position in %
Short Circuit Sweep_Ex4: Current at Side 1 of the Line in kA
Short Circuit Sweep_Ex4: Current at Side 2 of the Line in kA
Short Circuit Sweep_Ex4: Short Circuit Current in kA
0,30
0,20
0,10
0,00
-0,10
0,000 20,000 40,000 60,000 80,000 100,00
x-Axis: Short Circuit Sweep_Ex4: Short Circuit Position in %
Short Circuit Sweep_Ex4: Voltage at Side 2 of the Line in p.u.
Short Circuit Sweep_Ex4: Voltage at Side 1 of the Line in p.u.
El DPL deberá asignar los nuevos valores de carga de acuerdo al código “Llave Externa” (Foreign Key), ubicado
en la hoja “Descripción” de cada carga.
01_External File
El DPL deberá tener como entrada la ruta y nombre del archivo donde se encuentran los nuevos valores de
carga.
Actividades:
• Ubicar las cargas al interior del archivo CVS en la red del PowerFactory.
• Leer los nuevos valores del archivo CSV y separarlos según el carácter de separación (,).
• Agregar el nuevo valor a las cargas del sistema de acuerdo a su “Llave Externa”
Como funciones relevantes para la implementación del DPL se deben usar: fopen, fclose, fscanf, strtok, sscanf.