Está en la página 1de 12

DPL

DIgSILENT Programming Language


Entrenamiento PowerFactory

Training Course Documents [Last modified: 8/7/2007]


Table of Contents

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

DIgSILENT Programming Language

Published by
DIgSILENT GmbH, Germany

Copyright 2003. All rights


reserved. Unauthorised copying
or publishing of this or any part
of this document is prohibited.

doc. 045, build 226


07 August 2007

Training Course Documents [Last modified: 8/7/2007]


Table of Contents

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

Training Course Documents [Last modified: 8/7/2007]


1 Introducción

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.

¡Le deseamos mucho éxito en el desarrollo de los ejercicios!

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

Usar "printf()" para obtener una salida del tipo:

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.

Training Course Documents [Last modified: 8/7/2007]


3 Strings

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

Observar que el número de dígitos de la salida sea correcto.


Cuantas iteraciones se requieren para obtener una exactitud = 0.001 para x = 0.9999?

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 :

Today is Monday, day 05 of May in the year 2003.


DIgSI/wrng - Monday alright

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á :

Today is Tuesday, day 06 of May in the year 2003.


DIgSI/wrng - Not a Monday

Training Course Documents [Last modified: 8/7/2007]


4 Subroutines

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:

error = 0.1000 0.0100 0.0010 0.0001


x=0.1000 2 2 3 5
x=0.5500 4 8 12 16
x=0.7750 10 19 28 37
x=0.8875 20 39 58 78
x=0.9437 40 80 120 160
x=0.9719 81 162 243 323
x=0.9859 163 326 488 651
x=0.9930 327 653 979 1306
x=0.9965 654 1308 1962 2616
x=0.9982 1309 2618 3927 5236

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.

Training Course Documents [Last modified: 8/7/2007]


6 Usando objetos

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:

Line 5 : loading = 15.5 %


Line 1 : loading = 16.0 %
Line 3 : loading = 19.3 %
Line 2 : loading = 22.1 %

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:

• Ya no escriba el nombre completo de los elementos filtrados.

• Solo colecte los objetos en el caso que el set esté vacío.

• Busque el objeto con la mayor carga (loading).

• Tenga como variables de resultado al objeto con la máxima carga y el valor de la misma.

Training Course Documents [Last modified: 8/7/2007]


7 Time sweep, archivo de resultados

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.

¿Cuál es el máximo factor de escala para “Load A”?

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.

7 Time sweep, archivo de resultados


01_TimeSweep
Escribir un escrito que ejecute un comando de flujo de carga para cada hora del día, desde las 0:00 hs hasta las
24:00 hs. Imprimir en la ventana de salida la carga de una línea a lo largo del día.

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.

• Verificar aquí que se puede interpolar entre horas.

• 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.

Training Course Documents [Last modified: 8/7/2007]


8 Cortocircuito Sweep, archivo de 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.

8 Cortocircuito Sweep, archivo de resultados


Mediante un escrito DPL se buscará calcular un cortocirduito a lo largo de una línea y reportar las corriente de
falla en función de la posición relativa. El DPL deberá guardar los resultados en un archivo de resultados de
manera que sea posible a posterior generar una gráfica con la distribución de las corrientes de falla a lo largo de
la línea.

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:

 Corrientes, tensiones e impedancias a ambos extremos de la línea

 Corriente de Cortocircuito

El escrito deberá reportar los resultados tal como se muestra a continuación:

------------------------------------------------------------------------------------------------------------
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
------------------------------------------------------------------------------------------------------------

Training Course Documents [Last modified: 8/7/2007]


8 Cortocircuito Sweep, archivo de resultados

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.

• Ejecutar el escrito DPL nuevamente

• Definir manualmente los diagramas de acuerdo a la Figura de la página siguiente.

Training Course Documents [Last modified: 8/7/2007]


8 Cortocircuito Sweep, 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.

Exercise 4 Results Date: 2/29/2004


DIGSILENT Short Circuit Sweep Annex: 1 /1

Training Course Documents [Last modified: 8/7/2007]


9 Lectura Archivos Externos (CSV)

9 Lectura Archivos Externos (CSV)


Mediante un escrito de DPL se buscará actualizar los valores de las cargas de una red (P, Q), adquiriendo los
nuevos valores de un archivo de medición externo (ej. Proveniente de un sistema SCADA), tipo C.S.V. (Coma
Separated Value).

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:

• Abrir el archivo suministrado por el instructor y observar su estructura.

• Ubicar las cargas al interior del archivo CVS en la red del PowerFactory.

• Cambiar los valores de las cargas en el archivo CVS.

Elaboración del DPL:

• Filtrar e identificar todas las cargas del sistema.

• 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”

• En caso de no encontrar la “llave Externa” de la carga relacionada, enviar un mensaje de advertencia.

Como funciones relevantes para la implementación del DPL se deben usar: fopen, fclose, fscanf, strtok, sscanf.

Training Course Documents [Last modified: 8/7/2007]

También podría gustarte