📘 Referencia Completa del Lenguaje DPL
DIgSILENT Programming Language — PowerFactory 2021 | Revisión 4
¿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:
set, propio de DPL. Iteración, filtrado, ordenamiento.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 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);
! 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.
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.
Retorna el proyecto actualmente activo (objeto IntPrj) o NULL si no hay proyecto activo.
object project;
project = GetActiveProject();
printf('Proyecto activo: %o', project);
Retorna el caso de estudio activo (objeto IntCase). NULL si no hay caso activo.
Crea un nuevo proyecto copiando el proyecto por defecto. Retorna el nuevo objeto de proyecto.
Retorna el escenario actualmente activo o NULL.
Retorna la carpeta de proyecto del tipo dado. Tipos comunes: 'study', 'netdat', 'netmod', 'scen', 'script'.
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();
Retorna la red resumen del caso de estudio activo (combinación de todas las redes activas). NULL si no hay redes activas.
Retorna todas las variaciones activas de la carpeta 'Network Data' (objetos IntScheme activos).
Retorna todas las etapas activas para una carpeta dada (objetos IntSstage activos).
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);
}
Retorna la carpeta donde se almacenan datos de red para la clase dada. Clases: ElmArea, ElmZone, ElmFeeder, ElmBoundary, etc.
Retorna la carpeta de la biblioteca global para tipos de objetos de la clase dada.
Retorna la carpeta de la biblioteca local del proyecto para tipos de objetos.
Mueve el objeto o conjunto de objetos a la papelera de reciclaje (no destruye permanentemente).
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.
Divide una línea en el punto especificado por una barra existente o porcentaje de longitud.
Retorna todos los objetos marcados en el gestor de datos activo (Browser) o diagrama.
GetBrowserSelection(): objetos marcados en el panel derecho del Data Manager.
GetDiagramSelection(): objetos marcados en el diagrama activo.
Retorna el objeto del diagrama actualmente activo.
Retorna el objeto del tablero gráfico activo (Graphics Board).
Marca/selecciona objetos en todos los diagramas gráficos abiertos.
Retorna la orientación de flujo del proyecto activo: -1=sin proyecto, 0=MIXED MODE, 1=LOAD ORIENTED, 2=GENERATOR ORIENTED.
Retorna el idioma del programa: 'en' (inglés), 'de' (alemán), 'es' (español), 'fr' (francés), 'ru' (ruso), 'cn' (chino), 'tr' (turco).
Retorna el número de versión de PowerFactory en formato ##.#.#.# (e.g. '20.0.3.1').
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 |
Retorna el identificador del cálculo actualmente válido. Valores posibles: 'ldf', 'shc', 'rms', 'emt', 'harm', 'opf', 'est', 'modal', etc.
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.
Guarda el estado de red actual como un nuevo escenario.
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).
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.
Pausa la ejecución del script durante el número de milisegundos indicado.
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.
| 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 |
| 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 |
| 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 |
| 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) |
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.
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).
| 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 |
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 |
| 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
| 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 |
| 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().
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'
Agrega una copia de un objeto o conjunto al objeto receptor (destino). Respeta referencias internas entre objetos. Para copiar entre proyectos diferentes, usar PasteCopy().
Similar a AddCopy, pero adapta automáticamente todas las referencias. Necesario cuando el objeto destino está en un proyecto diferente.
Mueve el objeto a la carpeta destino especificada.
Copia todos los parámetros (excepto loc_name y contenedores) del objeto fuente al objeto receptor.
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
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.
Retorna la carpeta padre del objeto (mismo que el parámetro 'fold_id').
Busca un objeto por nombre dentro del objeto receptor. Soporta wildcards y filtros de clase.
Retorna todos los objetos que tienen referencias al objeto receptor.
Retorna la red eléctrica en la que está almacenado el objeto.
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'
ShowFullName(): imprime la ruta completa del objeto en la ventana de salida.
ShowEditDialog(): abre el diálogo de edición del objeto.
Retornan descripciones de atributos: lnm()=nombre largo, snm()=nombre corto, unm()=unidad.
Retorna 1 si el objeto es de la clase especificada (o hereda de ella), 0 en caso contrario.
Retorna 1 si el atributo/variable especificado existe en el objeto.
Retorna 0 si la variable existe y escribe su tipo en el parámetro de salida type.
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).
Establece el valor de un atributo. Funciona en la unidad interna del objeto (no la unidad de visualización).
Obtiene el tamaño de una variable de tipo vector o matriz.
Establece el tamaño de una variable de tipo vector o matriz.
Retorna 1 si el objeto tiene resultados de cálculo disponibles.
GetUnom(busIndex=0): tensión nominal del objeto en kV en el nodo indicado.
GetInom(busIndex=0): corriente nominal en el nodo indicado.
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).
Retorna el nodo conectado al objeto en el índice de barra especificado.
Retorna la cubícula del objeto en la conexión con índice side.
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).
Retorna el número de conexiones eléctricas del objeto.
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.
Retorna el tipo de puesta a tierra: -1=no determinado, 0=sólidamente a tierra, 1=compensado, 2=aislado.
Retorna el nodo controlado y la tensión objetivo para generadores y unidades reguladoras de tensión.
Retorna las subestaciones, transformadores o estaciones de transformación de suministro más cercanas al componente.
Flags de estado del objeto: IsCalcRelevant()=es relevante para el cálculo actual, IsOutOfService()=fuera de servicio, IsEnergized()=energizado.
Flags adicionales: aterrado, es un nodo, reducible en la red, en cortocircuito.
Acciones de conmutación: SwitchOn()=conectar, SwitchOff()=desconectar, Isolate()=aislar, Energize()=energizar (quitar aterramientos + conectar).
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.
| 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 |
| 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 |
| Método | Descripción |
|---|---|
| GetSuppliedElements() | Retorna los elementos alimentados por el transformador |
| CreateEvent(type, time) | Crea un evento de control de taps |
| Método | Descripción |
|---|---|
| GetAll(filter) | Retorna todos los elementos conectados |
| GetBuses() | Retorna las barras conectadas |
| GetBranches() | Retorna las ramas conectadas |
| 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 |
| 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 |
| 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étodo | Descripción |
|---|---|
| Execute() | Ejecuta el comando. Retorna 0=éxito, 1=fallo |
| 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 |
! 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());
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.
| 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 |
| 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() |
! 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();
}
| 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 |
| 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
| 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; |
| 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 |
| 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.) |
! 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);
! 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);