Módulo powerfactory
Punto de entrada principal. Importar con import powerfactory.
Variable de módulo
| Variable | Tipo | Descripción |
|---|---|---|
| powerfactory.__version__ | str | Versión instalada de PowerFactory, ej. "17.0.9" |
Funciones de inicio
[str username],
[str password],
[str commandLineArguments]
)
Application. Arranca PowerFactory si se llama desde externo. Mantener el objeto mientras se use PF.[str username],
[str password],
[str commandLineArguments]
)
GetApplication() pero lanza powerfactory.ExitError (con .code) en caso de fallo. Recomendado para scripts de producción.import sys sys.path.append(r"C:\Program Files\DIgSILENT\PowerFactory 2021\Python\3.8") import powerfactory try: app = powerfactory.GetApplicationExt() # ... cálculos ... except powerfactory.ExitError as error: print(f"Error código: {error.code}")
Application — Proyectos y Casos de Estudio
Gestión del proyecto activo, casos de estudio, escenarios y variaciones.
| Método | Retorna | Descripción |
|---|---|---|
| ActivateProject(name) | int | Activa proyecto por nombre, nombre calificado o ruta. 0=éxito, 1=error. |
| GetActiveProject() | DataObject | Retorna el IntPrj activo o None. |
| CreateProject(projectName, gridName, [parent]) | DataObject | Crea nuevo proyecto copiando el proyecto por defecto. Retorna el IntPrj creado. |
| GetActiveStudyCase() | DataObject | Retorna IntCase activo o None. |
| GetActiveScenario() | DataObject | Retorna IntScenario activo o None. |
| GetActiveScenarioScheduler() | DataObject | Retorna IntScensched activo o None. |
| GetActiveNetworkVariations() | list | Lista de IntScheme activos en "Network Data". |
| GetActiveStages([variedFolder]) | list | Lista de IntSstage activos. Carpeta por defecto: "Network Data". |
| GetRecordingStage() | DataObject | Retorna el IntSstage de grabación activo o None. |
| SaveAsScenario(pName, iSetActive) | DataObject | Guarda datos como nuevo IntScenario. iSetActive=1 lo activa. |
| GetFromStudyCase(className) | DataObject | Retorna (o crea) el primer objeto de clase en el caso de estudio activo. |
Application — Cálculos y Resultados
Verificación de validez de resultados y gestión de transacciones de BD.
| Método | Retorna | Descripción |
|---|---|---|
| GetActiveCalculationStr() | str | String del cálculo activo. Ver tabla de valores abajo. |
| IsLdfValid() | int | 0 si no hay resultados de flujo de potencia válidos. |
| IsRmsValid() | int | 0 si no hay resultados RMS válidos. |
| IsShcValid() | int | 0 si no hay resultados de cortocircuito válidos. |
| IsSimValid() | int | 0 si no hay resultados de simulación válidos. |
| ResetCalculation() | None | Resetea todos los cálculos y elimina resultados visibles en el SLD. |
| CommitTransaction() | None | Escribe cambios pendientes a la BD durante ejecución del script. |
| SetWriteCacheEnabled(enabled) | None | Activa (1) / desactiva (0) caché de escritura para optimización. |
| IsWriteCacheEnabled() | int | Estado actual de la caché de escritura. |
| WriteChangesToDb() | None | Vacía caché y guarda todos los cambios en la BD. |
Valores de GetActiveCalculationStr()
Application — Entorno y GUI
Control de la interfaz gráfica, progreso y comportamiento durante ejecución.
| Método | Retorna | Descripción |
|---|---|---|
| EchoOff() | None | Congela la interfaz de usuario. Usar junto con EchoOn(). |
| EchoOn() | None | Reactiva la interfaz. Se llama automáticamente al finalizar el script. |
| SetGuiUpdateEnabled(enabled) | int | Activa/desactiva actualizaciones de la ventana GUI. Retorna estado previo. |
| SetProgressBarUpdatesEnabled(enabled) | int | Activa/desactiva la barra de progreso. Alto impacto en performance para scripts con muchos pasos. |
| SetGraphicUpdate(enabled) | None | Activa/desactiva actualización del SLD. 0=desactivado. |
| SetUserBreakEnabled(enabled) | None | Activa/desactiva el botón "Break" en la barra de herramientas. |
| SetAutomaticCalculationResetEnabled(enabled) | None | Controla el reset automático de cálculos al modificar atributos. |
| SetFinalEchoOnEnabled(enabled) | None | Controla el EchoOn() automático al finalizar ComDpl o ComPython. |
| Show() / Hide() | None | Muestra/oculta la ventana de PowerFactory. Show() requiere licencia completa. |
| ExecuteCmd(command) | None | Ejecuta un comando como si se escribiera en el Input Window. Solo para pruebas. |
| PostCommand(command) | None | Encola un comando para ejecutar tras finalizar el script actual. |
| Rebuild([iMode]) | None | Redibuja el SLD o gráfico visible. iMode: 0=solo dibujar, 1=leer+dibujar, 2=leer+recalcular+dibujar. |
Application — Matemáticas y Números Aleatorios
Generadores de números aleatorios, inversión de matrices y utilidades numéricas.
| Método | Retorna | Descripción |
|---|---|---|
| RndSetup(seedAutomatic, [seed, rngType, rngNum]) | None | Inicializa generador. rngType: 0=Mersenne Twister (recomendado), 1=Linear Congruential, 2=Additive Lagged Fibonacci. rngNum=0: generador global. |
| RndUnifReal(min, max, [rngNum]) | float | Número aleatorio uniforme continuo en [min, max]. |
| RndUnifInt(min, max, [rngNum]) | int | Número aleatorio uniforme entero en {min,...,max}. |
| RndNormal(mean, stddev, [rngNum]) | float | Número aleatorio distribución normal. |
| RndExp(rate, [rngNum]) | float | Número aleatorio distribución exponencial con tasa rate. |
| RndWeibull(shape, scale, [rngNum]) | float | Número aleatorio distribución Weibull. |
| RndGetSeed([rngNum]) | int | Retorna la semilla actual del generador rngNum. |
| RndGetMethod([rngNum]) | str | Nombre del método del generador rngNum. |
| InvertMatrix(realPart, [imaginaryPart]) | int | Invierte matriz real o compleja (Gauss-Jordan). 0=éxito, 1=singular. Resultado en la matriz de entrada. |
| GetMem([calculateDelta, inMegaByte]) | int | Consumo de memoria del proceso. Delta desde última llamada si calculateDelta=1. |
Application / OutputWindow — Ventana de Salida
Impresión de mensajes, guardado y control de la ventana de salida.
Métodos de Application
| Método | Descripción |
|---|---|
| PrintInfo(message) | Mensaje de información (ícono azul). |
| PrintWarn(message) | Mensaje de advertencia (ícono amarillo). |
| PrintError(message) | Mensaje de error (ícono rojo). |
| PrintPlain(message) | Texto plano sin clasificación. |
| ClearOutputWindow() | Limpia toda la ventana de salida. |
| GetOutputWindow() | Retorna objeto OutputWindow para uso avanzado. |
| SetOutputWindowState(newState) | 0=minimizar, 1=maximizar, -1=restaurar. |
Clase OutputWindow
| Método | Descripción |
|---|---|
| Print(message) | Imprime como texto plano. |
| Print(MessageType, message) | Tipos: Plain, Info, Warn, Error. |
| Clear() | Limpia la ventana. |
| GetContent([filter]) | Lista de textos (filtrado opcional por MessageType). |
| Save(filePath) | Guarda contenido en .html, .txt o .out. |
| SetState(newState) | 0=min, 1=max, -1=restaurar. |
ow = app.GetOutputWindow() ow.Print(powerfactory.OutputWindow.MessageType.Info, "Hello World!") # Guardar log ow.Save(r"C:\logs\output.html")
Application — Sistema de Archivos, Usuarios y Diálogos
Sistema de Archivos
| Método | Descripción |
|---|---|
| GetInstallationDirectory() | Ruta completa de instalación de PowerFactory. |
| GetTemporaryDirectory() | Directorio temporal de PowerFactory. |
| GetWorkspaceDirectory() | Directorio del workspace activo. |
| GetStudyTimeObject() | Retorna SetTime del caso de estudio (para características y escenarios). |
| GetSettings(key) | Lee configuración: username, installationdir, workingdir, tempdir, sessionid, db driver, logfile. |
| GetLanguage() | Código idioma: en, de, es, fr, ru, cn, tr. |
| ImportDz(target, dzFilePath) | Importa archivo .dz. Retorna [errorCode, importedObjects]. |
| ImportSnapshot(dzsFilePath) | Importa snapshot .dzs. Retorna [errorCode, importedObjects]. |
Diálogos de UI
| Método | Descripción |
|---|---|
| ShowModalBrowser(objects, [detailMode, title, page]) | Browser modal para listar objetos. No soportado en modo sin GUI. |
| ShowModalSelectBrowser(objects, [title, classFilter, page]) | Browser modal con selección. Retorna lista de objetos seleccionados. |
| ShowModelessBrowser(objects, [detailMode, title, page]) | Browser no modal (sin bloqueo). |
| GetTableReports() | Lista todos los reportes de tabla abiertos. |
| CloseTableReports() | Cierra todos los reportes de tabla. |
| UpdateTableReports() | Actualiza todos los reportes de tabla. |
| SplitLine(Line, [percent, createSwitchSide0, createSwitchSide1]) | Divide línea en posición %. Retorna terminal insertado o 0=error. |
DataObject — Acceso a Atributos
Métodos comunes a todos los objetos de la BD para lectura y escritura de atributos.
| Método | Retorna | Descripción |
|---|---|---|
| GetAttribute(name) | any | Valor del atributo en unidades mostradas. Lanza excepción si nombre inválido. |
| SetAttribute(name, value) | None | Establece valor de atributo. |
| HasAttribute(name) | int | 1 si el atributo existe en el objeto. |
| GetAttributeType(name) | AttributeType | INTEGER, DOUBLE, STRING, OBJECT, *_VEC, *_MAT, INTEGER64, INVALID. |
| GetAttributeUnit(name) | str | Unidad del atributo, ej. "km", "MW". None si nombre inválido. |
| GetAttributeDescription(name, [short]) | str | Descripción larga (short=0) o corta (short=1). |
| GetAttributeLength(name) | int | Longitud de vector/matriz (filas). -1 si nombre inválido. |
| SetAttributeLength(name, length) | None | Redimensiona un vector. |
| GetAttributeShape(name) | [int, int] | Forma [rows, cols]. [-1, 0] si inválido. |
| SetAttributeShape(name, rows, cols) | None | Cambia forma de atributo matricial. |
| GetAttributes() | list | Valores de atributos de transferencia (definidos con DefineTransferAttributes). |
| SetAttributes(values) | None | Establece múltiples atributos de transferencia. |
app.SetAttributeModeInternal(1) antes de las llamadas. Usar app.DefineTransferAttributes(classname, "attr1,attr2") para configurar acceso en bloque con GetAttributes/SetAttributes.
DataObject — Gestión de Objetos
Creación, copia, eliminación, navegación y consulta de objetos en la BD.
| Método | Retorna | Descripción |
|---|---|---|
| CreateObject(className, [nameParts...]) | DataObject | Crea nuevo objeto de clase className en este contenedor. |
| AddCopy(objectToCopy, [nameParts...]) | DataObject | Copia un objeto en este contenedor. Para múltiples: AddCopy(list). |
| PasteCopy(source) | DataObject | Pega copia desde otro proyecto adaptando referencias automáticamente. |
| CopyData(source) | int | Copia parámetros (excepto nombre/contenedor) desde source. |
| Delete() | int | Mueve a papelera de reciclaje. 0=éxito. |
| Move(target) | None | Mueve el objeto al contenedor target. |
| GetContents([Name, recursive]) | list | Objetos almacenados. Soporte wildcards en Name. recursive=1 incluye subdirectorios. |
| GetChildren(hiddenMode, [filter, subfolders]) | list | Como GetContents pero accede a objetos ocultos por esquemas. hiddenMode: 0=solo visibles, 1=todos, 2=solo ocultos. |
| GetParent() | DataObject | Objeto contenedor padre. |
| GetFullName([type]) | str | Ruta completa en la BD. type=0: formato clickable en Output Window. |
| GetClassName() | str | Nombre de la clase del objeto, ej. "ElmTerm". |
| SearchObject(name) | DataObject | Busca objeto por nombre dentro de este contenedor. |
| IsDeleted() | int | 1 si el objeto fue eliminado. |
| ShowEditDialog() | None | Abre el diálogo de edición. |
| WriteChangesToDb() | None | Escribe cambios de este objeto en la BD. |
DataObject — Estado Eléctrico
Control de conexión, energización y consultas de estado.
| Método | Retorna | Descripción |
|---|---|---|
| SwitchOn() | int | Conecta el elemento. |
| SwitchOff() | int | Desconecta el elemento. |
| Energize([resetRA]) | [int, list] | Energiza: elimina puestas a tierra + conecta. resetRA=1 resetea Running Arrangements bloqueantes. |
| Isolate() | int | Aísla el elemento eléctricamente. |
| IsEnergized() | int | 1 si el elemento está energizado. |
| IsOutOfService() | int | 1 si el elemento está fuera de servicio. |
| IsEarthed() | int | 1 si está puesto a tierra. |
| IsShortCircuited() | int | 1 si está en cortocircuito. |
| IsCalcRelevant() | int | 1 si es relevante para el cálculo actual. |
| IsObjectActive(scenario) | int | 1 si el objeto está activo en el escenario dado. |
| IsObjectModifiedByVariation() | int | 1 si fue modificado por una variación activa. |
| IsReducible() | int | 1 si puede ser reducido topológicamente. |
| IsNode() | int | 1 si el elemento es un nodo. |
| IsHidden() | int | 1 si está oculto por gestión de esquemas. |
DataObject — Consultas Eléctricas
Topología, impedancias, tensiones nominales y relaciones eléctricas.
| Método | Retorna | Descripción |
|---|---|---|
| GetConnectedElements([rBrk, rDis, rOut]) | list | Elementos conectados. Flags para considerar interruptores (rBrk), seccionadores (rDis) y fuera de servicio (rOut). |
| GetConnectionCount() | int | Número de conexiones eléctricas. |
| GetNode(side) | DataObject | Terminal en el extremo side. |
| GetCubicle(side) | DataObject | Cubículo StaCubic en el extremo side. |
| GetControlledNode(bus, [check]) | [DataObject, float] | Terminal controlada y tensión objetivo (pu) para reguladores de tensión. |
| GetImpedance(refVoltage, [i3Trf]) | [int, float, float] | Impedancia secuencia positiva [error, real, imag] en Ohm a tensión de referencia. |
| GetZeroImpedance(refVoltage, [i3Trf]) | [int, float, float] | Impedancia secuencia cero [error, real, imag] en Ohm. |
| GetInom(side) | float | Corriente nominal del elemento en kA. |
| GetUnom(side) | float | Tensión nominal del elemento en kV. |
| GetSystemGrounding(terminal) | int | Tipo de puesta a tierra del sistema en el terminal. |
| GetSupplyingSubstations([volt_level]) | list | Subestaciones que alimentan al objeto. |
| GetSupplyingTransformers([volt_level]) | list | Transformadores que alimentan al objeto. |
| IsInFeeder(feeder, checkExact) | int | 1 si el objeto pertenece al alimentador. |
| GetReferences(recursive) | list | Objetos que referencian a este objeto. |
| HasResults(iBranch) | int | 1 si hay resultados de cálculo para este objeto. |
ElmRes — Archivo de Resultados
Gestión completa de archivos de resultados de simulación: escritura, lectura e iteración.
Ciclo de Escritura
| Método | Descripción |
|---|---|
| AddVariable(element, varname) | Agrega variable de element a monitorear. Alias: AddVars. |
| InitialiseWriting() | Prepara el archivo para escritura manual. |
| Write(time, value) | Escribe un valor en el tiempo dado. |
| WriteDraw() | Escribe un "draw" (marca de actualización gráfica). |
| FinishWriting() | Finaliza escritura. Alias: Close. |
| Flush() | Vuelca buffer de memoria a disco. Necesario antes de leer si ya se escribió. |
| Clear() | Limpia datos del archivo (mantiene definiciones de variables). |
Ciclo de Lectura
| Método | Retorna | Descripción |
|---|---|---|
| Load() | int | Carga datos del archivo en memoria para lectura. |
| Release() | None | Libera datos cargados en memoria. |
| GetNumberOfRows() | int | Número total de filas (instantes de tiempo). |
| GetNumberOfColumns() | int | Número total de columnas (variables monitoreadas). |
| FindColumn(obj, [varName / startCol]) | int | Índice de columna para objeto/variable. <0=no encontrado. |
| GetValue(obj, col, row) | [int, float] | Valor en fila/columna. Retorna [error, value]. |
| GetObjectValue(row, col) | float | Valor en posición fila/columna directa. |
| GetObject(col) | DataObject | Objeto asociado a la columna col. |
| GetVariable(col) | str | Nombre de variable de la columna col. |
| GetUnit(col) | str | Unidad de la columna col. |
| GetDescription([col, short]) | str | Descripción de la columna. |
| FindMaxInColumn(column) | [int, float] | Máximo de la columna: [row, maxValue]. |
| FindMinInColumn(column) | [int, float] | Mínimo de la columna: [row, minValue]. |
| FindMaxOfVariableInRow(variable, row) | [int, float] | Máximo de variable en fila: [col, maxValue]. |
| FindMinOfVariableInRow(variable, row) | [int, float] | Mínimo de variable en fila: [col, minValue]. |
| SortAccordingToColumn(col) | int | Ordena filas según columna col. |
| SetAsDefault() | None | Establece como archivo de resultados por defecto. |
Iteración (GetFirstValid / GetNextValid)
| Método | Descripción |
|---|---|
| GetFirstValidObject(row, [classNames, variableName, limit, limitOperator, limit2, limitOperator2]) | Primera columna válida de un objeto en la fila. Soporta filtros por clase, variable y rango. |
| GetNextValidObject([classNames, variableName, limit...]) | Siguiente columna válida (iterador interno). |
| GetFirstValidVariable(row, [variableNames]) | Primera variable válida en la fila. |
| GetNextValidVariable([variableNames]) | Siguiente variable válida. |
| GetFirstValidObjectVariable([variableNames]) | Primera variable válida del objeto apuntado por el iterador. |
| GetNextValidObjectVariable([variableNames]) | Siguiente variable válida del objeto actual. |
0=todos válidos, 1=<, 2=≤, 3=>, 4=≥. Para limitOperator2: positivo=AND, negativo=OR.
Elementos de Red (Elm*)
Clases de elementos eléctricos del sistema de potencia.
Elementos de Estación (Sta*)
Comandos (Com*)
Obtener con app.GetFromStudyCase("ComXxx") y ejecutar con .Execute().
Comandos de Cálculo Principales
| Clase | Cálculo | Parámetros clave |
|---|---|---|
| ComLdf | Flujo de Potencia AC/DC | iopt_net: 0=AC, 1=DC; iopt_at, iopt_pq |
| ComShc | Cortocircuito VDE/IEC | iopt_mde: norma; iopt_shc: 0=3f, 1=2f, 2=1f, 3=2f-tierra |
| ComInc | Condiciones Iniciales | Necesario antes de ComSim |
| ComSim | Simulación Dinámica RMS/EMT | tstop, dtgrd, iopt_sim: 0=RMS, 1=EMT |
| ComRes | Gestión de Resultados | Exportación y manejo de archivos de resultados |
| ComContingency | Análisis de Contingencias | Configuración N-1, N-2 |
| ComOutage | Interrupciones | Gestión de eventos de interrupción |
| ComCapo | Ubic. óptima de capacitores | Capacitor placement optimization |
| ComMot | Arranque de Motores | Motor starting analysis |
| ComRed | Reducción de Red | Network reduction |
Comandos de Datos y Scripting
Configuraciones (Set*)
Objetos Internos (Int* / Vis* / Typ* / Blk* / Scn*)
Proyectos, Casos y Variaciones
Resultados y Vectores
Gráficos y Visualizaciones
Tipos de Equipos (Typ*) · Bloques DSL (Blk*) · Escenarios Cálculo (Scn*)
Tipos de Datos y Atributos
| Tipo Python | AttributeType | Descripción |
|---|---|---|
int |
AttributeType.INTEGER |
Entero. |
int (64-bit) |
AttributeType.INTEGER64 |
Entero de 64 bits. |
float |
AttributeType.DOUBLE |
Punto flotante. |
str |
AttributeType.STRING |
Cadena de texto. |
DataObject |
AttributeType.OBJECT |
Referencia a objeto de BD. |
list[int] |
AttributeType.INTEGER_VEC |
Vector de enteros. |
list[float] |
AttributeType.DOUBLE_VEC |
Vector de flotantes. |
list[list[float]] |
AttributeType.DOUBLE_MAT |
Matriz de flotantes. |
list[str] |
AttributeType.STRING_VEC |
Vector de cadenas. |
list[DataObject] |
AttributeType.OBJECT_VEC |
Vector de objetos. |
None |
AttributeType.INVALID |
Atributo no existe / error. |
ResGet* (ej. ResGetData, ResGetIndex) están deprecadas. Usar los métodos equivalentes en ElmRes o IntComtrade.
Ejemplos de Uso Frecuente
Script externo — inicio básico
import sys sys.path.append(r"C:\Program Files\DIgSILENT\PowerFactory 2021\Python\3.8") import powerfactory app = powerfactory.GetApplication() app.EchoOff() app.ActivateProject("Mi_Proyecto") # Obtener todos los terminales relevantes terms = app.GetCalcRelevantObjects("*.ElmTerm") for t in terms: uknom = t.GetAttribute("uknom") app.PrintInfo(f"{t.GetFullName()} → {uknom} kV") app.EchoOn()
Ejecutar flujo de potencia
ldf = app.GetFromStudyCase("ComLdf") ldf.iopt_net = 0 # 0=AC, 1=DC ierr = ldf.Execute() if ierr == 0: app.PrintInfo("✓ Flujo de potencia exitoso") else: app.PrintError("✗ Error en flujo de potencia")
Leer resultados de simulación dinámica
res = app.GetFromStudyCase("ElmRes") res.Load() gen = app.GetCalcRelevantObjects("Gen1.ElmSym")[0] col_p = res.FindColumn(gen, "s:P1") # columna de potencia activa col_t = res.FindColumn(res, "b:tnow") # columna de tiempo nrows = res.GetNumberOfRows() for row in range(nrows): t = res.GetObjectValue(row, col_t) p = res.GetObjectValue(row, col_p) print(f"t={t:.3f}s P={p:.4f}MW") res.Release()
Modificar atributos con caché de escritura
# Aumentar carga 10% con caché habilitada (más rápido) app.SetWriteCacheEnabled(1) for load in app.GetCalcRelevantObjects("*.ElmLod"): p_actual = load.GetAttribute("plini") load.SetAttribute("plini", p_actual * 1.10) app.WriteChangesToDb() app.SetWriteCacheEnabled(0)
Cortocircuito y lectura de resultados
shc = app.GetFromStudyCase("ComShc") shc.iopt_mde = 0 # VDE 0102 shc.iopt_shc = 0 # 3-fase shc.Execute() if app.IsShcValid(): for bus in app.GetCalcRelevantObjects("*.ElmTerm"): ikss = bus.GetAttribute("m:Ikss") # corriente de cc en kA app.PrintInfo(f"{bus.loc_name}: Ikss = {ikss:.3f} kA")
Simulación dinámica completa (RMS)
# 1. Flujo de potencia inicial ldf = app.GetFromStudyCase("ComLdf") ldf.Execute() # 2. Condiciones iniciales inc = app.GetFromStudyCase("ComInc") inc.Execute() # 3. Simulación sim = app.GetFromStudyCase("ComSim") sim.tstop = 10.0 # [s] sim.dtgrd = 0.01 # paso de integración [s] sim.iopt_sim = 0 # 0=RMS, 1=EMT sim.Execute() app.PrintInfo("Simulación completada.")
Usar IntMat para matrices
folder = app.GetProjectFolder("netdat") mat = folder.CreateObject("IntMat", "MiMatriz") mat.SetAttributeShape("val", 3, 3) mat.SetAttribute("val", [[1,0,0],[0,2,0],[0,0,3]]) val = mat.GetAttribute("val") # retorna lista 2D