GSG.

📘 Referencia Completa del Lenguaje DPL

DIgSILENT Programming Language — PowerFactory 2021 | Revisión 4

Versión PowerFactory 2021
Páginas 828
Editorial DIgSILENT GmbH
Fecha Feb 3, 2021
70+
Funciones Globales
50+
Métodos Generales
53
Comandos (Com*)
37
Elementos de Red (Elm*)
15
Configuraciones (Set*)
49
Obj. Internos (Int*)
4
Tipos de Datos
19
Rutinas de Conjunto

¿Qué es DPL?

El DIgSILENT Programming Language (DPL) es el lenguaje de scripting integrado en PowerFactory que permite automatizar cálculos, manipular la base de datos de la red eléctrica y controlar el flujo de trabajo de simulaciones. Funciona como un lenguaje procedimental orientado a objetos, donde las funciones se agrupan en cuatro categorías principales:

Funciones Globales
Funciones estáticas llamables desde cualquier punto del script. Gestión de proyectos, cálculos, archivos y sistema.
~70 funciones
🔧
Métodos Generales
Métodos disponibles para cualquier objeto de PowerFactory. Copia, navegación, conexiones, valores.
~50 métodos
🔌
Métodos Especializados
Métodos específicos de cada clase de objeto (Elm*, Sta*, Com*, Set*, Int*, Vis*, etc.).
+200 métodos
📋
Rutinas de Conjunto
Funciones para trabajar con el tipo de dato set, propio de DPL. Iteración, filtrado, ordenamiento.
19 rutinas
Nota: Las funciones marcadas con asterisco (*) en la documentación oficial también están disponibles en QDSL (Quasi Dynamic Simulation Language) y en los scripts de configuración de simulaciones RMS/EMT.

Tipos de Datos Primitivos

Tipo Descripción Ejemplo
int Número entero int n = 10;
double Número flotante de doble precisión double v = 3.14;
string Cadena de texto string s = 'texto';
object Referencia a un objeto de PowerFactory object lne;
set Colección de objetos (tipo nativo DPL) set buses;

Sintaxis Básica

Acceso a atributos de objetos
! Acceso a parámetro con el operador ':'
object load;
load = GetCalcRelevantObjects('*.ElmLod').First();
load:plini = 100.0;          ! Asignar valor de carga activa (MW)
double p = load:plini;       ! Leer valor

! Acceso a parámetro de resultado con 'c:'
object grid;
grid = GetSummaryGrid();
printf('Pérdidas: %f MW', grid:c:LossP);
Control de flujo
! Condicional
if (n > 0) {
  printf('positivo');
} else {
  printf('negativo o cero');
}

! Bucle while
int i = 0;
while (i < 10) {
  i += 1;
}

! Bucle for
int k;
for (k = 0; k < 5; k += 1) {
  printf('%d', k);
}

! break / continue / exit
exit();     ! Termina el script completamente

⚡ Funciones Globales

Funciones estáticas que pueden ser llamadas desde cualquier parte del script, sin necesidad de un objeto receptor. Abarcan gestión de proyectos, escenarios, cálculos, entorno y más.

Gestión de Proyectos y Casos de Estudio
ActivateProject(name) → int
int ActivateProject(string name)

Activa un proyecto por su nombre. Acepta nombre simple, nombre calificado (Project.IntPrj) o ruta completa (\User\Project.IntPrj).

Retorna: 0 en éxito, 1 si no se encuentra o no se puede activar.

GetActiveProject() * → object (IntPrj)
object GetActiveProject()

Retorna el proyecto actualmente activo (objeto IntPrj) o NULL si no hay proyecto activo.

object project;
project = GetActiveProject();
printf('Proyecto activo: %o', project);
GetActiveStudyCase() * → object (IntCase)
object GetActiveStudyCase()

Retorna el caso de estudio activo (objeto IntCase). NULL si no hay caso activo.

CreateProject(projectName, gridName [, parent]) → object
object CreateProject(string projectName, string gridName, [object parent])

Crea un nuevo proyecto copiando el proyecto por defecto. Retorna el nuevo objeto de proyecto.

GetActiveScenario() * → object (IntScenario)
object GetActiveScenario()

Retorna el escenario actualmente activo o NULL.

GetProjectFolder(type [, create]) * → object (IntPrjfolder)
object GetProjectFolder(string type, [int create=0])

Retorna la carpeta de proyecto del tipo dado. Tipos comunes: 'study', 'netdat', 'netmod', 'scen', 'script'.

GetFromStudyCase(className) * → object
object GetFromStudyCase(string className)

Retorna (o crea) el primer objeto de la clase dada en el caso de estudio activo. Muy usado para obtener comandos de cálculo.

object ldf;
ldf = GetFromStudyCase('ComLdf');  ! Obtener comando de load flow
ldf.Execute();
GetSummaryGrid() * → object (ElmNet)
object GetSummaryGrid()

Retorna la red resumen del caso de estudio activo (combinación de todas las redes activas). NULL si no hay redes activas.

GetActiveNetworkVariations() * → set
set GetActiveNetworkVariations()

Retorna todas las variaciones activas de la carpeta 'Network Data' (objetos IntScheme activos).

GetActiveStages([variedFolder]) * → set
set GetActiveStages([object variedFolder])

Retorna todas las etapas activas para una carpeta dada (objetos IntSstage activos).

Objetos de Red
GetCalcRelevantObjects([nameFilter, includeOOS, topoOnly, bAcSchemes]) * → set
set GetCalcRelevantObjects([string nameFilter, int includeOutOfService=1, int topoElementsOnly=0, int bAcSchemes=0])

Retorna todos los objetos relevantes para el cálculo actual. Es la función más utilizada en DPL para obtener elementos de la red.

Argumento Tipo Descripción
nameFilter string Filtro de clase/nombre. Ej: '*.ElmLod', '*.ElmTr2,*.ElmTr3'
includeOutOfService int 1=incluir fuera de servicio (default), 0=excluir
topoElementsOnly int 1=solo elementos topológicos
set loads;
object load;
loads = GetCalcRelevantObjects('*.ElmLod');
for (load = loads.First(); load; load = loads.Next()) {
  printf('%o: P=%f MW', load, load:plini);
}
GetDataFolder(classname [, iCreate]) * → object
object GetDataFolder(string classname, [int iCreate=0])

Retorna la carpeta donde se almacenan datos de red para la clase dada. Clases: ElmArea, ElmZone, ElmFeeder, ElmBoundary, etc.

GetGlobalLibrary([ClassName]) * → object
object GetGlobalLibrary([string ClassName])

Retorna la carpeta de la biblioteca global para tipos de objetos de la clase dada.

GetLocalLibrary([ClassName]) * → object
object GetLocalLibrary([string ClassName])

Retorna la carpeta de la biblioteca local del proyecto para tipos de objetos.

Delete(object | set)
void Delete(object | set)

Mueve el objeto o conjunto de objetos a la papelera de reciclaje (no destruye permanentemente).

CreateFaultCase(elms, mode [, createEvt, folder]) → int
int CreateFaultCase(set elms, int mode, [int createEvt], [object folder])

Crea casos de falla a partir de los elementos dados. Modos: 0=caso único con todos los elementos, 1=N-1, 2=N-2, 3=acoplamientos de línea.

SplitLine(line, terminal [, percentage])
object SplitLine(object line, object terminal, [double percentage])

Divide una línea en el punto especificado por una barra existente o porcentaje de longitud.

Selección, Interfaz Gráfica y Entorno
GetCurrentSelection() → set

Retorna todos los objetos marcados en el gestor de datos activo (Browser) o diagrama.

GetBrowserSelection() / GetDiagramSelection() → set

GetBrowserSelection(): objetos marcados en el panel derecho del Data Manager.
GetDiagramSelection(): objetos marcados en el diagrama activo.

GetCurrentDiagram() → object (IntGrfnet)

Retorna el objeto del diagrama actualmente activo.

GetGraphicsBoard() * → object

Retorna el objeto del tablero gráfico activo (Graphics Board).

MarkInGraphics(obj [, mode])

Marca/selecciona objetos en todos los diagramas gráficos abiertos.

GetFlowOrientation() * → int

Retorna la orientación de flujo del proyecto activo: -1=sin proyecto, 0=MIXED MODE, 1=LOAD ORIENTED, 2=GENERATOR ORIENTED.

GetLanguage() * → string

Retorna el idioma del programa: 'en' (inglés), 'de' (alemán), 'es' (español), 'fr' (francés), 'ru' (ruso), 'cn' (chino), 'tr' (turco).

GetPFVersion() * → string

Retorna el número de versión de PowerFactory en formato ##.#.#.# (e.g. '20.0.3.1').

GetSettings(key) * → string/int

Acceso de solo lectura a configuraciones de PowerFactory.

Clave Tipo retorno Descripción
username string Nombre del usuario actual
installationdir string Ruta de instalación de PF
workingdir string Directorio de trabajo
tempdir string Directorio temporal
sessionid int ID de la sesión actual
db_driver string Driver de base de datos
logfile string Ruta del log actual
GetActiveCalculationStr() * → string

Retorna el identificador del cálculo actualmente válido. Valores posibles: 'ldf', 'shc', 'rms', 'emt', 'harm', 'opf', 'est', 'modal', etc.

CommitTransaction()

Fuerza la escritura de cambios pendientes en la base de datos. Durante la ejecución del script los cambios no se persisten hasta que el script termina o se llama esta función.

SaveAsScenario(name [, folder]) → object

Guarda el estado de red actual como un nuevo escenario.

HttpGet(url, content [, headers, error]) → int
int HttpGet(string url, string&|object& content, [string& headers], [string& error])

Realiza una petición HTTP/HTTPS y retorna la respuesta. El acceso a la URL debe estar permitido en la configuración de seguridad global (IntExtaccess).

exit([code]) *
void exit([int code=1])

Termina el script DPL inmediatamente. Si se llama desde un sub-script, solo termina ese sub-script y el código es retornado al script principal.

Sleep(ms) *
void Sleep(int ms)

Pausa la ejecución del script durante el número de milisegundos indicado.

Funciones de Resultados (GetRes*) DEPRECATED

Las funciones GetResData, GetResDesc, GetResObj, GetResUnit, GetResVar están deprecadas. Usar los métodos de ElmRes y IntComtrade en su lugar.

📐 Funciones Matemáticas

Todas las funciones matemáticas están disponibles en QDSL y scripts de configuración RMS/EMT (marcadas con *). Trabajan principalmente con tipo double.

Trigonometría
Función Firma Descripción
sin(x)* double sin(double x) Seno de x (radianes)
cos(x)* double cos(double x) Coseno de x (radianes)
tan(x)* double tan(double x) Tangente de x (radianes)
asin(x)* double asin(double x) Arcoseno, x ∈ [-1, 1], resultado en radianes
acos(x)* double acos(double x) Arcocoseno, x ∈ [-1, 1], resultado en radianes
atan(x)* double atan(double x) Arcotangente de x, resultado en radianes
atan2(y,x)* double atan2(double y, double x) atan(y/x) en radianes
sinh(x)* double sinh(double x) Seno hiperbólico
cosh(x)* double cosh(double x) Coseno hiperbólico
tanh(x)* double tanh(double x) Tangente hiperbólica
Álgebra y Logaritmos
Función Firma Descripción
abs(x)* double abs(double x) Valor absoluto
sqrt(x)* double sqrt(double x) Raíz cuadrada
sqr(x)* double sqr(double x) Cuadrado (x²)
pow(x, y)* double pow(double x, double y) x elevado a y (xʸ)
exp([x])* double exp(double x=1) Exponencial eˣ
ln(x)* double ln(double x) Logaritmo natural (base e)
log(x)* double log(double x) Logaritmo base 10
modulo(x, y)* double modulo(double x, double y) Resto de la división x/y
max(x, y)* double max(double x, double y) Valor mayor entre x e y
min(x, y)* double min(double x, double y) Valor menor entre x e y
Redondeo y Parte Entera
Función Descripción
ceil(x)* Entero más pequeño mayor o igual a x (techo)
floor(x)* Entero más grande menor o igual a x (piso)
round(x)* Entero más cercano a x
trunc(x)* Parte entera de x (trunca decimales)
frac(x)* Parte fraccionaria de x
Constantes
pi()* double pi() Constante matemática π ≈ 3.14159...
twopi()* double twopi() 2π ≈ 6.28318...
time()* double time() Tiempo de simulación actual (en simulaciones RMS/EMT)
Binario y Lógica de Bits
BinaryAnd(a, b) * / BinaryOr(a, b) *

BinaryAnd(a, b): AND binario. Retorna 1 solo si ambos son 1.
BinaryOr(a, b): OR binario. Retorna 1 si al menos uno es 1.

Álgebra Matricial
InvertMatrix(realPart [, imaginaryPart]) * → int
int InvertMatrix(object realPart, [object imaginaryPart])

Invierte una matriz (real o compleja) usando el método de Gauss-Jordan con pivoteo parcial escalado. Trabaja con objetos IntMat.

Retorna: 0=éxito, 1=fallo (matriz singular).

Números Aleatorios
Función Descripción
RndSetup(seedAuto [, seed, rngType, rngNum])* Inicializa un generador. Tipos: 0=Mersenne Twister (rec.), 1=Congruencial Lineal, 2=Fibonacci Aditivo
RndUnifReal(min, max [, rngNum])* Número aleatorio uniforme real en [min, max]
RndUnifInt(min, max [, rngNum])* Número aleatorio uniforme entero en {min,...,max}
RndNormal(mean, stddev [, rngNum])* Número aleatorio con distribución normal
RndExp(rate [, rngNum])* Número aleatorio con distribución exponencial
RndWeibull(shape, scale [, rngNum])* Número aleatorio con distribución Weibull
RndGetSeed([rngNum])* Retorna la semilla usada por el generador
RndGetMethod([rngNum])* Retorna el nombre del método del generador
CalcWeibullPar(...)* Convierte entre parámetros Weibull: mean, lambda, variance, beta

🔤 Funciones de Cadenas de Texto

DPL incluye un conjunto de funciones para manipular, formatear y comparar cadenas de texto (tipo string).

Función Firma Descripción
sprintf(fmt, ...)* string sprintf(string fmt, ...) Formatea valores en una cadena. Soporta %d, %f, %s, %o, %e, %g
printf(fmt, ...)* void printf(string fmt, ...) Imprime en la ventana de salida con formato
strlen(s)* int strlen(string s) Longitud de la cadena
strcpy(dst, src)* void strcpy(string& dst, string src) Copia cadena src en dst
strcat(dst, src)* void strcat(string& dst, string src) Concatena src al final de dst
strcmp(s1, s2 [, n])* int strcmp(string s1, string s2, [int n]) Compara dos cadenas. 0=iguales. Si n dado, solo compara primeros n caracteres
stricmp(s1, s2)* int stricmp(string s1, string s2) Comparación sin distinción mayúsculas/minúsculas
strfind(s, sub [, pos])* int strfind(string s, string sub, [int pos=0]) Busca subcadena. Retorna índice (0-based) o -1 si no encuentra
strsub(s, start [, len])* string strsub(string s, int start, [int len]) Extrae subcadena desde posición start
strupr(s)* string strupr(string s) Convierte a mayúsculas
strlwr(s)* string strlwr(string s) Convierte a minúsculas
strchg(s, old, new)* void strchg(string& s, string old, string new) Reemplaza todas las ocurrencias de old por new en s
val(s)* double val(string s) Convierte cadena a número double
sscanf(s, fmt, ...)* int sscanf(string s, string fmt, ...) Lee valores de una cadena con formato
strftime(fmt, t)* string strftime(string fmt, double t) Formatea un tiempo (timestamp) como cadena de fecha/hora
Ejemplo — Formateo de cadenas
string s;
double valor = 3.14159;
int n = 42;
s = sprintf('Valor=%.4f, n=%d', valor, n);
printf('%s', s);  ! Imprime: Valor=3.1416, n=42

! Operaciones de cadena
string nombre = 'Linea_132kV';
printf('Largo: %d', strlen(nombre));  ! 11
printf('Sub: %s', strsub(nombre, 0, 5));  ! Linea
strchg(nombre, '_', '-');             ! Linea-132kV

📁 Sistema de Archivos

Funciones para leer, escribir y gestionar archivos en el sistema de archivos del sistema operativo.

Función Descripción
FileOpen(file, mode) Abre un archivo. Modos: 'r'=lectura, 'w'=escritura, 'a'=añadir
FileClose() Cierra el archivo abierto actualmente
FileEof() Retorna 1 si se llegó al final del archivo
FileRead(value) Lee el siguiente valor del archivo (int, double o string)
FileReadln(line) Lee la siguiente línea completa del archivo
FileWrite(value) Escribe un valor en el archivo
FileWriteln(string) Escribe una línea con salto de línea
CopyFile(src, dst) Copia un archivo de src a dst
CreateDir(path) Crea un directorio
DeleteFile(file) Elimina un archivo
FileExists(file) Retorna 1 si el archivo existe
DirExists(dir) Retorna 1 si el directorio existe
ListDir(dir, pattern) Lista archivos en un directorio con patrón

🕐 Funciones de Fecha y Hora

Función Retorna Descripción
GetSystemTime() double Tiempo actual del sistema en formato timestamp
GetSystemTimeUTC() double Tiempo actual del sistema en UTC
GetTime() object (SetTime) Retorna el objeto SetTime del caso de estudio
GetStudyTimeObject() object Retorna el objeto de tiempo del estudio
FormatDateLT(t) string Formatea timestamp a fecha/hora local
FormatDateUTC(t) string Formatea timestamp a fecha/hora UTC
FormatDate(t, fmt) string Formatea timestamp con formato personalizado
ParseDateLT(str) double Convierte cadena de fecha/hora local a timestamp
ParseDateUTC(str) double Convierte cadena de fecha/hora UTC a timestamp
strftime(fmt, t) string Formatea tiempo con formato tipo C strftime

💬 Diálogos e Interfaz de Usuario

Funciones para interactuar con el usuario mediante cuadros de diálogo, navegadores de objetos y ventanas de selección.

Función Descripción
input(variable, prompt) Muestra un diálogo para que el usuario ingrese un valor
MessageBox(msg [, title, type]) Muestra un cuadro de mensaje. Tipos: 0=OK, 1=OK/Cancel, 2=Yes/No
ShowModalBrowser([title, filter]) Abre el navegador de datos en modo modal
ShowModalSelectBrowser([title, classFilter]) Abre el navegador para seleccionar objetos. Retorna set
ShowModelessBrowser(set [, title]) Abre el navegador de datos sin bloquear
ShowModalOpenFileDialog(title, filter, path) Diálogo para abrir archivo
ShowModalSaveFileDialog(title, filter, path) Diálogo para guardar archivo
ShowModalSelectFolderDialog(title, path) Diálogo para seleccionar carpeta
GetTableReports() Retorna los reportes de tabla abiertos
CloseTableReports() Cierra todos los reportes de tabla
UpdateTableReports() Actualiza todos los reportes de tabla abiertos

🖨️ Ventana de Salida (Output Window)

Funciones para imprimir mensajes y resultados en la ventana de salida de PowerFactory.

Función Descripción
printf(fmt, ...)* Imprime mensaje formateado. Especificadores: %d=int, %f=float, %s=string, %o=objeto, %e=notación científica
Error(fmt, ...) Imprime mensaje de error (en rojo)
Warn(fmt, ...) Imprime mensaje de advertencia (en amarillo)
Info(fmt, ...) Imprime mensaje informativo
ClearOutputWindow() Limpia la ventana de salida
Especificadores de formato para printf/sprintf
Especificador Tipo Descripción
%d int Entero decimal
%f double Flotante (ej: 3.141593)
%e double Notación científica (ej: 3.14e+00)
%g double Formato más compacto entre %f y %e
%s string Cadena de texto
%o object Nombre del objeto (loc_name.ClassName)
%F double Flotante con formato ancho fijo
\n Salto de línea
\t Tabulación
printf('%10F %10F', -3.143458, 1.71);  ! Con ancho
printf('%o tiene tensión %.2f kV', terminal, terminal:uknom);

📊 Integración MS Office y Base de Datos

MS Access (mdb*)
Función Descripción
mdbOpen(file [, create, mode]) Abre un archivo .mdb. create=1 crea si no existe
mdbClose() Cierra el archivo .mdb abierto
mdbExecuteSqlQuery(stmt) Ejecuta consulta SQL SELECT. Resultados obtenidos con FetchResult
mdbExecuteSqlStatement(stmt) Ejecuta declaración SQL sin valores de retorno (CREATE, INSERT, UPDATE)
mdbFetchResult() Obtiene el siguiente registro de la consulta. 0=éxito, 1=fin/error
mdbGetResultColumnCount() Número de columnas en el resultado actual
mdbGetResultColumnName(col) Nombre de la columna (índice 1-based)
mdbGetResultColumnType(col) Tipo: 0=string, 1=int, 2=double
mdbGetResultColumnValue(col, value) Valor de columna en el registro actual
mdbSetDebug(enabled) Activa/desactiva modo debug de operaciones mdb
MS Excel (xl*)
Función Descripción
xlOpen(file [, visible]) Abre un archivo Excel
xlClose([save]) Cierra Excel. save=1 guarda cambios
xlGetValue(row, col [, sheet]) Lee valor de una celda (fila, columna, hoja)
xlSetValue(value, row, col [, sheet]) Escribe valor en una celda
xlSetNumberFormat(row, col, fmt) Establece formato numérico de celda
xlGetUsedRowCount([sheet]) Número de filas usadas en la hoja
xlGetUsedColCount([sheet]) Número de columnas usadas
xlGetSheetCount() Número de hojas en el libro
xlSetSheetName(index, name) Cambia el nombre de una hoja
xlActivateSheet(index) Activa la hoja indicada
xlSave() Guarda el archivo Excel
xlSaveAs(file) Guarda con un nombre específico

⚙️ Entorno y Control de Ejecución

Función Descripción
EchoOn() Activa el eco de comandos en la ventana de salida
EchoOff() Desactiva el eco de comandos
SetAutomaticCalculationResetEnabled(val) Activa/desactiva el reset automático del cálculo cuando se modifica un parámetro
GetMem([delta, inMB])* Retorna el consumo de memoria actual (working set). delta=1 retorna diferencia desde última llamada
Rebuild()* Reconstruye la topología de la red
ResetCalculation() Invalida los resultados del cálculo actual
PostCommand(cmd) Encola un comando para ejecutarse después
ExecuteCmd(cmd) Ejecuta una cadena de comando directamente
SelectToolbox(name) Selecciona una caja de herramientas
GetLastCmd([class]) Retorna el último comando ejecutado de la clase dada
IsLdfValid()* Retorna 1 si el flujo de carga es válido
IsShcValid()* Retorna 1 si el cortocircuito es válido
IsRmsValid()* Retorna 1 si la simulación RMS es válida
IsSimValid()* Retorna 1 si la simulación EMT/RMS es válida

🔧 Métodos Generales de Objeto

Estos métodos están disponibles en todos los objetos de PowerFactory. Se llaman con la sintaxis objeto.Método().

Creación, Copia y Eliminación
object.CreateObject(className [, nameParts...]) → object

Crea un nuevo objeto de la clase dada dentro del objeto receptor. Los nameParts se concatenan para formar el nombre.

object folder;
folder.CreateObject('ElmLod', 'Carga', 1);  ! Crea 'Carga1.ElmLod'
object.AddCopy(objectToCopy | set [, nameParts...]) → object

Agrega una copia de un objeto o conjunto al objeto receptor (destino). Respeta referencias internas entre objetos. Para copiar entre proyectos diferentes, usar PasteCopy().

object.PasteCopy(objects [, nameParts...]) → object

Similar a AddCopy, pero adapta automáticamente todas las referencias. Necesario cuando el objeto destino está en un proyecto diferente.

object.Move(targetFolder)

Mueve el objeto a la carpeta destino especificada.

object.CopyData(source)

Copia todos los parámetros (excepto loc_name y contenedores) del objeto fuente al objeto receptor.

Navegación y Contenido
object.GetContents([Name, recursive]) * → set

Retorna los objetos almacenados dentro del objeto. Name puede contener wildcards (*, ?). recursive=1 incluye sub-carpetas.

set lines;
lines = grid.GetContents('*.ElmLne', 1);  ! Todas las líneas recursivamente
object.GetChildren(hiddenMode [, filter, subfolders]) * → set

Como GetContents, pero también da acceso a objetos ocultos por la gestión de esquemas. hiddenMode: 0=solo visibles, 1=todos, 2=solo ocultos.

object.GetParent() * → object

Retorna la carpeta padre del objeto (mismo que el parámetro 'fold_id').

object.SearchObject(name) * → object

Busca un objeto por nombre dentro del objeto receptor. Soporta wildcards y filtros de clase.

object.GetReferences([filter, includeSubsets, includeHidden]) * → set

Retorna todos los objetos que tienen referencias al objeto receptor.

object.GetNet() → object (ElmNet)

Retorna la red eléctrica en la que está almacenado el objeto.

Información del Objeto
object.GetClassName() * | object.GetFullName([type]) *

GetClassName(): retorna el nombre de clase del objeto (ej: 'ElmLne').
GetFullName([type]): retorna la ruta completa del objeto como cadena. type=0 genera un enlace clickeable en la ventana de salida.

object line;
printf('Clase: %s', line.GetClassName());    ! ElmLne
printf('Ruta: %s', line.GetFullName(0));      ! 'Grid\Red\Linea1.ElmLne'
object.ShowFullName() * | object.ShowEditDialog()

ShowFullName(): imprime la ruta completa del objeto en la ventana de salida.
ShowEditDialog(): abre el diálogo de edición del objeto.

object.lnm() * / object.snm() * / object.unm() *

Retornan descripciones de atributos: lnm()=nombre largo, snm()=nombre corto, unm()=unidad.

object.IsClass(className) * → int

Retorna 1 si el objeto es de la clase especificada (o hereda de ella), 0 en caso contrario.

object.VarExists(name) * → int

Retorna 1 si el atributo/variable especificado existe en el objeto.

object.GetVarType(name, type) * → int

Retorna 0 si la variable existe y escribe su tipo en el parámetro de salida type.

Lectura y Escritura de Valores
object.GetVal(value, variable [, row, col, key]) * → int
int obj.GetVal(type& value, string variable, [int row], [int col], [string key])

Obtiene el valor de un atributo en la unidad actualmente configurada. Para parámetros complejos, key puede ser: 'r'=parte real, 'i'=imaginaria, 'mag'=magnitud, 'phi'=ángulo(°), 'phirad'=ángulo(rad). Para vectores: 'min', 'max', 'avg', 'sum', 'std'.

Retorna: 0=éxito, 1=error (variable no existe o índice fuera de rango).

object.SetVal(variable, value [, row, col]) → int

Establece el valor de un atributo. Funciona en la unidad interna del objeto (no la unidad de visualización).

object.GetSize(VarName, rows [, cols]) * → int

Obtiene el tamaño de una variable de tipo vector o matriz.

object.SetSize(VarName, rows [, cols])

Establece el tamaño de una variable de tipo vector o matriz.

object.HasResults() * → int

Retorna 1 si el objeto tiene resultados de cálculo disponibles.

Estado de la Red y Topología
object.GetUnom([busIndex]) * / object.GetInom([busIndex, inclChar]) *

GetUnom(busIndex=0): tensión nominal del objeto en kV en el nodo indicado.
GetInom(busIndex=0): corriente nominal en el nodo indicado.

object.GetImpedance(real, imag, refVoltage [, i3Trf]) *

Retorna la impedancia de secuencia positiva del elemento referida a la tensión dada. Para transformadores de 3 devanados, i3Trf selecciona el par (HV-MV=0, HV-LV=1, MV-LV=2).

object.GetNode(busIndex [, considerSwitches]) * → object

Retorna el nodo conectado al objeto en el índice de barra especificado.

object.GetCubicle(side) * → object (StaCubic)

Retorna la cubícula del objeto en la conexión con índice side.

object.GetConnectedElements([rBrk, rDis, rOut]) * → set

Retorna el conjunto de elementos conectados eléctricamente. Los parámetros opcionales determinan si se consideran interruptores (rBrk), desconectadores (rDis) y estado en servicio (rOut).

object.GetConnectionCount() * → int

Retorna el número de conexiones eléctricas del objeto.

object.GetRegion() * → int

Retorna el índice de la región a la que pertenece el objeto. Dos elementos comparten región si están topológicamente conectados. -1=desconocido.

object.GetSystemGrounding() * → int

Retorna el tipo de puesta a tierra: -1=no determinado, 0=sólidamente a tierra, 1=compensado, 2=aislado.

object.GetControlledNode(bus, targetVoltage [, check]) * → object

Retorna el nodo controlado y la tensión objetivo para generadores y unidades reguladoras de tensión.

object.GetSupplyingSubstations() * / GetSupplyingTransformers() * / GetSupplyingTrfstations() * → set

Retorna las subestaciones, transformadores o estaciones de transformación de suministro más cercanas al componente.

object.IsCalcRelevant() * / IsOutOfService() * / IsEnergized() *

Flags de estado del objeto: IsCalcRelevant()=es relevante para el cálculo actual, IsOutOfService()=fuera de servicio, IsEnergized()=energizado.

object.IsEarthed() * / IsNode() * / IsReducible() * / IsShortCircuited() *

Flags adicionales: aterrado, es un nodo, reducible en la red, en cortocircuito.

object.SwitchOn() / object.SwitchOff() / object.Isolate() / object.Energize()

Acciones de conmutación: SwitchOn()=conectar, SwitchOff()=desconectar, Isolate()=aislar, Energize()=energizar (quitar aterramientos + conectar).

object.GetOperator() * / GetOwner() * → object

Retorna el operador (ElmOperator) o propietario (ElmOwner) del elemento, heredado recursivamente de los padres si no está definido.

🔌 Elementos de Red (Elm*) — Métodos Especializados

Cada clase de elemento de red tiene métodos propios. Aquí se presentan los más importantes agrupados por tipo.

Generadores (ElmSym, ElmAsm, ElmGenstat, ElmPvsys)
Método Descripción
GetAvailableGenPower() Retorna la potencia generada disponible
CalcEfficiency() Calcula la eficiencia del generador
Derate(factor) Aplica un factor de desclasificación
ResetDerating() Restablece el factor de desclasificación
Disconnect() Desconecta el generador de la red
Reconnect() Reconecta el generador
IsConnected() Retorna 1 si el generador está conectado
GetGroundingImpedance() Retorna la impedancia de puesta a tierra
GetStepupTransformer() Retorna el transformador elevador asociado
GetMotorStartingFlag() Retorna el flag de arranque de motor (ElmSym, ElmAsm)
GetElecTorque() / GetMechTorque() Par eléctrico y mecánico (ElmAsm)
IsPQ() Retorna 1 si el generador opera en modo PQ
Líneas (ElmLne / ElmLnesec)
Método Descripción
GetZ1m(from, to, freq) Impedancia de secuencia positiva por kilómetro
GetZ0m(from, to, freq) Impedancia de secuencia cero por kilómetro
GetY1m(from, to, freq) Admitancia de secuencia positiva por km
GetY0m(from, to, freq) Admitancia de secuencia cero por km
GetZmatDist(from, to) Matriz de impedancias distribuidas
GetIthr() Corriente de cortocircuito admisible de corta duración
GetType() Retorna el tipo de línea (TypLne) asociado
FitParams() Ajusta los parámetros de línea
MeasureLength() Mide la longitud geográfica de la línea
IsCable() Retorna 1 si es cable subterráneo
IsNetCoupling() Retorna 1 si es acoplamiento de red
AreDistParamsPossible() Retorna 1 si los parámetros distribuidos son aplicables
HasRoutes() / HasRoutesOrSec() Indica si la línea tiene rutas geográficas
CreateFeederWithRoutes() Crea un alimentador con rutas para la línea
SetDetailed(mode) Activa/desactiva el modelo detallado de línea
Transformadores (ElmTr2, ElmTr3, ElmTr4)
Método Descripción
GetSuppliedElements() Retorna los elementos alimentados por el transformador
CreateEvent(type, time) Crea un evento de control de taps
Barras / Terminales (ElmTerm)
Método Descripción
GetAll(filter) Retorna todos los elementos conectados
GetBuses() Retorna las barras conectadas
GetBranches() Retorna las ramas conectadas
Interruptores (ElmCoup)
Método Descripción
Close() Cierra el interruptor
Open() Abre el interruptor
IsClosed() Retorna 1 si el interruptor está cerrado
IsOpen() Retorna 1 si el interruptor está abierto
IsBreaker() Retorna 1 si es un interruptor automático
GetRemoteBreakers() Retorna los interruptores remotos asociados
Objetos de Resultados (ElmRes)
Método Descripción
AddVariable(obj, var) Agrega una variable para monitoreo
AddVars(obj, vars) Agrega múltiples variables
Init(obj) Inicializa el archivo de resultados
Load() Carga el archivo de resultados
GetValue(row, col) Obtiene valor en posición dada
GetObject(col) Retorna el objeto asociado a la columna
GetVariable(col) Retorna el nombre de variable de la columna
GetUnit(col) Retorna la unidad de la columna
GetDescription(col [, short]) Retorna la descripción de la columna
GetNumberOfRows() / GetNumberOfColumns() Dimensiones del resultado
FindColumn(obj, var) Busca la columna para un objeto/variable
FindMaxInColumn(col, row, val) Encuentra el máximo en una columna
FindMinInColumn(col, row, val) Encuentra el mínimo en una columna
SortAccordingToColumn(col, desc) Ordena por una columna
Write(obj, var, value) Escribe un valor en el resultado
Clear() Elimina todos los registros
Release() / Load() Libera/carga el archivo de resultados de memoria
SetAsDefault() Establece como objeto de resultados por defecto
Relay (ElmRelay)
Método Descripción
CheckRanges() Verifica rangos de ajuste
GetCalcRX() Retorna impedancia calculada R+jX vista por el relay
GetSlot(index) Retorna una ranura de relay
IsStarted() Retorna 1 si el relay ha arrancado
SetImpedance(R, X) Establece la impedancia de ajuste
SetMaxI(val) / SetMinI(val) Ajuste de corriente máxima/mínima
SetTime(val) Establece el tiempo de actuación
SetOutOfService(val) Saca de servicio el relay

▶️ Comandos de Cálculo (Com*)

Los objetos de tipo Com* representan comandos de cálculo y análisis. Todos tienen el método Execute() para ejecutarlos. Se obtienen con GetFromStudyCase('ComXxx').

Métodos Comunes a Todos los Comandos
Método Descripción
Execute() Ejecuta el comando. Retorna 0=éxito, 1=fallo
Comandos Principales
Clase Descripción
ComLdf Flujo de carga (Load Flow). Métodos: IsAC(), IsBalanced(), IsDC(), DoNotResetCalc(), SetOldDistributeLoadMode()
ComShc Cortocircuito. Métodos: ExecuteRXSweep(), GetFaultType(), GetOverLoadedBranches(), GetOverLoadedBuses()
ComInc Inicialización de simulación RMS/EMT
ComSim Simulación dinámica (RMS/EMT). Métodos: GetSimulationTime(), GetTotalWarnA/B/C(), LoadSnapshot(), SaveSnapshot(), LoadSimulationState(), SaveSimulationState()
ComDpl Script DPL. Métodos: Execute() retorna código de salida del sub-script
ComContingency Análisis de contingencias. Métodos: CreateRecoveryInformation(), ContinueTrace()
ComRed Reducción de red. Métodos: ReductionInMemory(), ResetReductionInMemory()
ComMot Arranque de motor. Métodos: GetMotorConnections(), GetMotorSwitch(), GetMotorTerminal()
ComMerge Comparación y fusión de variaciones. Métodos: Compare(), CompareActive(), Merge(), GetModification(), GetModifiedObjects(), PrintModifications()
ComAddon Gestión de módulos add-on. Define parámetros: DefineDouble(), DefineInteger(), DefineObject(), DefineString() y sus variantes Per/Vector
ComTablereport Reportes de tabla. Métodos: AddTable(), AddColumn(), AddRow(), AddFilter*, AddPlot(), ExportToExcel(), ExportToHTML(), SetCellValue*()
ComTasks Tareas múltiples de cálculo. Métodos: AppendCommand(), AppendStudyCase(), GetStudyCases()
ComSimoutage Simulación de salidas. Métodos: AddCntcy(), CreateFaultCase(), Execute(), GetNTopLoadedElms(), MarkRegions(), SetLimits()
ComShctrace Traza de cortocircuito paso a paso. Métodos: ExecuteAllSteps(), ExecuteNextStep(), GetDeviceSwitches(), GetSwitchTime()
ComImport Importación de datos externos
ComCapo Colocación óptima de capacitores. Método: ConnectShuntToBus()
ComAmpacity Capacidad de corriente de líneas
ComOutage Rastreo de salidas. Métodos: StartTrace(), StopTrace(), ContinueTrace(), GetObject(), SetObjs(), RemoveEvents()
ComPython Ejecuta scripts Python. Métodos: GetInputParameterDouble/Int/String(), SetInputParameterDouble/Int/String(), GetExternalObject(), SetExternalObject()
ComOpc Comunicación OPC. Métodos: ReceiveData(), SendData()
ComLink Enlace a sistema MicroSCADA. Métodos: GetMicroSCADAStatus(), LoadMicroSCADAFile(), ReceiveData(), SendData()
ComSvgexport/import Exportación/importación de diagramas SVG
ComUcteexp Exportación UCTE. Métodos: BuildExportStructure(), BuildNodeNames(), ExportAndInitQuickAccess()
ComNmink Análisis N-m-in-k. Métodos: GenerateContingenciesForAnalysis(), AddRef(), GetAll()
ComRel3 Cálculo de confiabilidad. Métodos: AnalyseElmRes(), ExeEvt(), ValidateConstraints()
ComCheck Verificación de datos de red
ComFlickermeter Cálculo de flicker

🛠️ Configuraciones (Set*)

Objetos de configuración de PowerFactory. Se obtienen generalmente con GetFromStudyCase() o accedidos como variables del script.

Clase Descripción / Métodos principales
SetSelect Selección general. Métodos: All(), AllLines(), AllBars(), AllLoads(), AllSym(), AllBreakers(), AllClosedBreakers(), AllOpenBreakers(), Add(), Remove(), AddRef()
SetPath Ruta de flujo. Métodos: AllBreakers(), AllClosedBreakers(), AllOpenBreakers(), AllProtectionDevices(), Create()
SetTime Tiempo de estudio. Atributo: hourofyear, date
SetDesktop Configuración del escritorio. Métodos: AddPage(), DoAutoScaleX/Y(), SetResults()
SetDeskpage Página del escritorio
SetVipage Página de visualización. Métodos: DoAutoScaleX/Y(), CreateVI()
SetColscheme Esquema de colores. Métodos: CreateFilter()
SetDataext Extensión de datos. Métodos: AddConfiguration()
SetFilt Filtros de visualización
SetLevelvis Visibilidad de nivel de tensión. Métodos: AdaptWidth(), Align()
SetParalman Gestión de cálculo en paralelo
SetUser Configuración de usuario
SetCluster Configuración de cluster
SetDistrstate Estado distribuido
SetTboxconfig Configuración de caja de herramientas

📦 Objetos Internos (Int*)

Objetos internos de PowerFactory que representan estructuras de datos y gestión de información.

Clase Descripción / Métodos principales
IntPrj Proyecto. Métodos: Activate(), Deactivate(), Archive(), CreateVersion(), AddProjectToCombined(), CopyDataExtensionFrom()
IntPrjfolder Carpeta de proyecto. Método: GetProjectFolderType()
IntCase Caso de estudio. Métodos: Activate(), Deactivate(), Consolidate(), ApplyNetworkState(), ApplyStudyTime()
IntScenario Escenario. Métodos: Activate(), Deactivate(), Apply(), ApplySelective(), DiscardChanges()
IntScheme Esquema (variación). Métodos: Activate(), Consolidate()
IntSstage Etapa de variación. Métodos: Activate(), CreateStageObject()
IntScensched Planificador de escenarios. Métodos: Activate(), DeleteRow()
IntSscheduler Planificador del sistema. Método: Activate()
IntMat Matriz numérica. Métodos: Resize(rows, cols), Get(row, col), Set(row, col, val). Para uso con InvertMatrix()
IntVec Vector numérico. Métodos: Resize(n), Get(i), Set(i, val), FromArray(), ToArray()
IntVecobj Vector de objetos. Similar a IntVec pero para objetos
IntDplmap Mapa de datos DPL (diccionario). Métodos: Contains(), Add(), Get(), Remove()
IntDplvec Vector DPL para datos
IntMon Monitor de variables. Métodos: AddVar(), AddVars()
IntEvt Eventos de simulación. Método: CreateCBEvents()
IntComtrade Archivos COMTRADE. Métodos: GetValue(), GetDescription(), GetUnit(), GetVariable(), ConvertToASCIIFormat(), ConvertToBinaryFormat()
IntComtradeset Conjunto de archivos COMTRADE
IntDataset Conjunto de datos. Métodos: All(), AddRef()
IntSubset Subconjunto de datos. Métodos: Apply(), ApplySelective()
IntOutage Salida/avería. Métodos: Apply(), ApplyAll()
IntPlannedout Salida planificada
IntGrf / IntGrfnet / IntGrflayer / IntGrfgroup Objetos gráficos y diagramas de red
IntPlot Gráfico de resultados de simulación
IntLibrary Biblioteca de tipos. Métodos: Activate(), Deactivate()
IntVersion Versiones de proyecto. Métodos: CreateDerivedProject()
IntRas Esquema de automatismo (RAS). Métodos: AddEvent(), AddTrigger()
IntScensched Planificador de escenarios
IntGate Puerta/Gate. Método: AddTrigger()
IntThrating Calificación térmica
IntUrl Acceso a URL externas
IntUser / IntUserman Usuario y gestor de usuarios. Métodos: CreateUser(), CreateGroup()
IntAddonvars Variables de add-on. Métodos: AddDouble(), AddInteger(), AddObject(), AddString() y sus variantes Matrix/Vector
IntQlim Límites de reactiva
IntRas Sistema de automatismos. Métodos: AddEvent(), AddTrigger()
IntRunarrange Arreglo de ejecución
IntExtaccess Control de acceso externo
IntDplmap — Mapa Clave-Valor
Uso de IntDplmap (Diccionario)
! Crear/usar un mapa DPL (definido como variable interna del script)
object myMap;  ! IntDplmap en contenido del script
myMap.Add('clave1', 100.0);
myMap.Add('clave2', 'valor texto');

double val;
myMap.Get('clave1', val);  ! val = 100.0
printf('Contiene clave1: %d', myMap.Contains('clave1'));  ! 1
myMap.Remove('clave1');
printf('Cantidad de entradas: %d', myMap.Count());
IntMat — Matrices Numéricas
Uso de IntMat
object A;  ! IntMat en contenido del script
A.Resize(3, 3);          ! Redimensionar a 3x3
A.Set(1, 1, 1.0);        ! Asignar valor (fila, col, valor)
A.Set(1, 2, 0.5);
double val;
val = A.Get(1, 1);       ! Leer valor
int rows, cols;
A.GetSize(rows, cols);   ! Obtener dimensiones
InvertMatrix(A);          ! Invertir la matriz in-place

📋 Rutinas de Conjunto (set.*)

El tipo set es el contenedor nativo de DPL para colecciones de objetos de PowerFactory. Proporciona iteración, filtrado, adición, eliminación y ordenamiento.

Adición, Eliminación y Consulta
Método Firma Descripción
Add(obj | set) int set.Add(object|set) Agrega un objeto o conjunto. Solo agrega si no está ya contenido. Retorna 0=éxito
Remove(obj) int set.Remove(object obj) Elimina un objeto del conjunto. 0=éxito, 1=error
Clear() void set.Clear() Elimina todos los objetos del conjunto
IsIn(obj) int set.IsIn(object obj) 1 si el objeto está en el conjunto, 0 si no
Count() int set.Count() Número de objetos en el conjunto
Obj(index) object set.Obj(int index) Retorna el objeto en el índice dado
Iteración
Método Descripción
First() Retorna el primer objeto del conjunto (NULL si vacío)
Next() Retorna el siguiente objeto (NULL al final)
FirstFilt(filter) Primer objeto cuyo nombre coincide con el filtro (wildcards * y ?)
NextFilt() Siguiente objeto que coincide con el filtro de FirstFilt()
Patrones de iteración
! Iteración básica
set transformers;
object tr;
transformers = GetCalcRelevantObjects('*.ElmTr2');
for (tr = transformers.First(); tr; tr = transformers.Next()) {
  printf('Transformador: %o', tr);
}

! Iteración con filtro de clase/nombre
object tr3;
tr3 = transformers.FirstFilt('T*.ElmTr?');  ! Nombre empieza con T, clase Tr2 o Tr3
while (tr3) {
  tr3.ShowFullName();
  tr3 = transformers.NextFilt();
}
Ordenamiento
Método Descripción
SortToName(descending) Ordena por nombre (loc_name). 0=ascendente, 1=descendente
SortToClass(descending) Ordena por nombre de clase
SortToVar(descending, var1, [var2...var5]) Ordena por valores de atributos. Hasta 5 niveles de sub-ordenamiento
Filtros del conjunto de selección (SEL.*)
SEL es el objeto de selección general del script. Proporciona métodos convenientes de selección:
Método SEL Descripción
SEL.All(filter) Todos los objetos que coinciden con el filtro
SEL.AllLines() Todas las líneas (ElmLne) seleccionadas
SEL.AllBars() Todas las barras (ElmTerm) seleccionadas
SEL.AllLoads() Todas las cargas (ElmLod)
SEL.AllSym() Todos los generadores síncronos (ElmSym)
SEL.AllBreakers() Todos los interruptores (ElmCoup)
SEL.AllElm() Todos los elementos de red
SEL.AllAsm() Todas las máquinas asíncronas
SEL.AllTypLne() Todos los tipos de línea

🔵 Tipos de Datos y Variables

Tipos Primitivos
Tipo Descripción Ejemplo de declaración
int Entero de 32 bits int n = 0;
double Flotante de 64 bits double v = 1.05;
string Cadena de caracteres string s = 'texto';
object Referencia a objeto PF object lne;
set Colección de objetos PF set buses;
Operadores
Operador Descripción
+, -, *, / Aritmética básica
+=, -=, *=, /= Asignación compuesta
= Asignación Y comparación de igualdad
<> Distinto de
<, >, <=, >= Comparación
.and., .or., .not. Lógicos
obj:atributo Acceso a atributo de objeto
obj:c:atributo Acceso a resultado de cálculo
Variables especiales del script
Variable Descripción
this Referencia al propio objeto ComDpl (el script actual)
SEL Objeto de selección general (SetSelect)
NULL Valor nulo para objetos (resultado de GetNode() cuando no hay nodo, etc.)
Parámetros de entrada del script (ComDpl)
Los scripts DPL (ComDpl) pueden definir parámetros de entrada que se configuran desde la interfaz de usuario o desde otro script. Se acceden directamente por nombre:
! En el encabezado del script: definir parámetro
! Nombre: VoltageLevel, Tipo: double

! En el cuerpo del script:
double threshold = VoltageLevel;  ! Se lee el valor del parámetro
printf('Umbral de tensión: %f kV', threshold);
Pasar parámetros a sub-scripts (ComDpl)
! Obtener referencia al sub-script
object subScript;
subScript = this.SearchObject('MiSubScript.ComDpl');

! Establecer parámetros de entrada
subScript:inputParam1 = 1.05;
subScript:inputParam2 = 'Linea1';

! Ejecutar el sub-script
int result;
result = subScript.Execute();
printf('Sub-script retornó: %d', result);