Makro-Schulung
Einführung in die Makro-Programmierungssprachen (Block1)
Grundsätzliche Bedienung und Debugging
INTEGRAL ohne Oberfläche via Skript ausführen (Batch-script)
INTEGRAL Datenmodell und Objekte
Bearbeiten von Steuerdaten
Laden eines Netzes aus einer Datei oder aus der Datenbank
Netznutzungsfälle und Auswertung von Ergebnissen (Block 2)
Bearbeiten von Netzdaten und Netznutzungsfälle
Durchführung von Netzberechnungen und Ergebnis-Auswertung
Lesen/Schreiben/Bearbeiten von Dateien
Einführung zur Programmierung einer Grafischen Benutzerschnittstelle
Q&A Session
Einführung in die Makro-Programmierungssprachen (Block1)
Grundsätzliche Bedienung und Debugging
INTEGRAL ohne Oberfläche via Skript ausführen (Batch-script)
Die Beschreibung der Aufruf-Parameter ist in der INTEGRAL-Hilfe in Kapitel 1.4 Batchmodus beschrieben.
Beispiel eines Batch-Aufrufs mit Laden eines Netzes aus einer XML-Datei
@echo off
rem Installations-Verzeichnis von Integral
set integral_pfad=C:/Program Files/FGH/Integral7
rem Integral-Arbeitsverzeichnis (Speicherort der Script-Log-Datei)
set arbeitsverzeichnis=D:/Users/cremer/Integral/Schulung_Makros_Anwendertreffen_2024
rem Pfad zum Scriptprojekt und Script
set script_pfad=D:/Users/cremer/Integral/Schulung_Makros_Anwendertreffen_2024
rem Name des Scriptprojekts
set script_projekt=MakroSchulung.jsprj
rem Name des Scripts
set script_datei=Berechnungsverfahren.js
rem Name der auszuführenden Funktion im Script
set script_startFkt=lastfluss
rem Netz-Datei
set netz=%integral_pfad%/muster_neu/ks_uebung/ks-a1.xml
rem Integral im Hintergrund starten und "Scriptprojekt;Scriptdatei;Funktionsname" ausführen
"%integral_pfad%/integral.exe" /J=%script_pfad%/%script_projekt%;%script_datei%;%script_startFkt% /F="%netz%" -q
rem Script-Log ausgeben
type "%arbeitsverzeichnis%/java_script_log.txt"
INTEGRAL Datenmodell und Objekte
Eine Übersicht über das INTEGRAL-Datenmodell (insbesondere die Besitz-Hierarchie) finden Sie in der INTEGRAL-Hilfe in Kapitel 17.13.1 Übersicht Datenmodell.
Eine Übersicht der Ableitungs-Hierarchie der Objekt-Klassen wird in Kapitel 17.13.2 Klassenhierarchie gegeben. Die folgenden Kapitel geben detaillierte Informationen zu den einzelnen Objekt-Klassen.
Beispiel-Makros zur Suche von Netzobjekten:
function schleifeUeberObjekte()
{
//Schleife über alle Standorte
var Standort;
for(var i1 = 0; Standort = Netz.gib_standort(i1); ++i1) {
//Schleife über alle Querzweige
var Ortszweig;
for(var i2 = 0; Ortszweig = Standort.gib_ortszweig(i2); ++i2) {
var Trafo2W = Ortszweig.wandle_in_trafo2w();
//Prüft ob es sich um einen 2W-Trafo handelt
if(Trafo2W) {
//Gibt die Nennspannung des Transformators an
var ur1 = Trafo2W.gib_ur1();
var ur2 = Trafo2W.gib_ur2();
if(ur1>ur2) {
//Ausgabe im Log
Log.message("Der Trafo:" + Trafo2W.gib_bezeichner() + " verbindet die Spannungsebenen:" + ur1 + "kV mit " + ur2 + "kV");
}
else {
//Ausgabe im Log
Log.message("Der Trafo:" + Trafo2W.gib_bezeichner() + " verbindet die Spannungsebenen:" + ur2 + "kV mit " + ur1 + "kV");
}
}
}
}
}
// Beispiele zur Verwendung von CSuche
//
// Es sind mehrere CSuche'n im Netz definierbar und wechselweise benutzbar. Jede CSuche legt sich
// einen Index an, in dem die Objekte nach den Such-Attributen sortiert sind. Der Index wird beim
// ersten "finde"-Aufruf angelegt. Am Ende des Makro's sollten die verwendeten CSuche'n expizit
// gelöscht werden (erst dann wird der Speicherplatz des Index freigegeben).
//
// Werden Objekte innerhalb des Makro-Laufes eingefügt oder gelöscht, beeinflusst dies den einmal
// angelegten Index nicht. Dadurch können beim "finde"-Aufruf evt. gelöschte Objekte geliefert
// werden. Ein ähnliches Problem erhält man, wenn man bei Objekten die Attribute ändert, nach denen
// gesucht wird. In diesem Fall werden die "finde"-Aufrufe diese Änderungen nicht berücksichtigen.
// Der Aufruf "neu_beginn" führt dazu, dass der Index aktualisiert wird.
//
//
// Beispiel 1 - einfache Suche
//
function einfacheSuche()
{
Netz.undocmd_anlegen("Einfache Suche"); // Undo weil im Beispiel auch geändert wird
// es wird nach Einspeisungen gesucht (Generatoren, Netzeinspeisungen etc.)
var suche = Netz.gib_neue_suche("CEinspeisung");
// die Einspeisungen werden an Hand des Kurznamens identifiziert
suche.setze_attribut_name("Kurzname");
// Suchen der Einspeisungen mit dem Kurznamen "FG1" - liefern der ersten Einspeisung
var nobjekt = suche.finde("FG1");
while (nobjekt) {
var einsp = nobjekt.wandle_in_einspeisung();
if (einsp) {
einsp.setze_p0(100.);
print("Einfache Suche erfolgreich");
}
// Wurden weitere Einspeisungen mit dem Kurznamen "FG1" gefunden ?
// (die Suche wird nur beim ersten Mal durchgeführt)
nobjekt = suche.finde_naechstes("FG1");
}
// Suche löschen - Resourcen freigeben
Netz.loesche_suche(suche);
Netz.undocmd_abschliessen();
}
//
// Beispiel 2 - komplexe Suche
//
function komplexeSuche()
{
Netz.undocmd_anlegen("Komplexe Suche"); // Undo weil im Beispiel auch geändert wird
// es wird nach Einspeisungen gesucht (Generatoren, Netzeinspeisungen etc.)
var suche = Netz.gib_neue_suche("CEinspeisung");
// Suche wird neu organanisiert - "true" auch die zu suchende Attribut-Arten sollen neu definiert werden
// gesucht wird weiterhin nach Einspeisungen
suche.neu_beginn(true);
// die Einspeisungen werden an Hand der Kombination aus UKZ und Kurznamen identifiziert
suche.setze_attribut_name("UKZ");
suche.setze_attribut_name("Kurzname");
// Suchen der Einspeisungen mit dem UKZ "" und dem Kurznamen "FG2"
suche.setze_attribut_wert("",true); // "true" = Beginn einer neuen Kombination von Attribut-Werten, nach denen gesucht werden soll
suche.setze_attribut_wert("FG2",false);
var nobjekt = suche.finde(); // liefern der ersten Einspeisung
while (nobjekt) {
var einsp = nobjekt.wandle_in_einspeisung();
if (einsp) {
einsp.setze_p0(200.);
print("Komplexe Suche erfolgreich");
}
// Wurden weitere Einspeisungen der Kombination aus UKZ "" und dem Kurznamen "FG2" gefunden ?
// (die Suche wird nur beim ersten Mal durchgeführt)
nobjekt = suche.finde_naechstes();
}
// Suche löschen - Resourcen freigeben
Netz.loesche_suche(suche);
Netz.undocmd_abschliessen();
}
//
// Beispiel 3 - alle Objekte einer bestimmten Objektart finden
//
function sucheAnfangsbuchstaben()
{
Netz.undocmd_anlegen("Suche Anfang"); // Undo weil im Beispiel auch geändert wird
// weitere Suche definieren - diesmal Netzeinspeisungen
var suche = Netz.gib_neue_suche("CNetzeinspeisung");
// keine Aufrufe von "suche.setze_attribut_name" und "suche.setze_attribut_wert" !
// Suche liefert dann alle Netzeinspeisungen
var nobjekt = suche.finde(); // liefern der ersten Netzeinspeisung
while (nobjekt) {
var einsp = nobjekt.wandle_in_netzeinspeisung();
if (einsp) {
if (einsp.gib_bezeichner().substr(0,2)=="FG") {
Log.message("Netzeinspeisung " + einsp.gib_bezeichner() + " gefunden");
einsp.setze_betrieb(false);
}
}
nobjekt = suche.finde_naechstes(); // liefern der 2. ,3. etc.
}
// Suche löschen - Resourcen freigeben
Netz.loesche_suche(suche);
Netz.undocmd_abschliessen();
}
Bearbeiten von Steuerdaten
Funktion um Steuerdaten zu Schreiben/Lesen
//Funktion um
function steuerdaten_bearbeiten() {
//Art von Verfahren der Lastflussberechnung umwandlen
var steuerDatum = Netz.gib_steuerdatum("/Lastflussberechnung/gekoppeltWirkLastfluss");
var str = "Verfahren der Lastflussberechnung: ";
var umwandeln = "";
if (steuerDatum == "Ja") {
print(str + "Gekoppelter Wirk-Blindlastfluss");
umwandeln = "Nein";
}
else {
print(str + "Wirklastfluss");
umwandeln = "Ja";
}
var result = Netz.lastfluss(0);
Netz.setze_steuerdatum("/Lastflussberechnung/gekoppeltWirkLastfluss", umwandeln);
Netz.steuerdaten_speichern();
}
Steuerdaten exportieren
Funktion um Steuerdaten aus einer Datei zu importieren
Laden eines Netzes aus einer Datei oder aus der Datenbank
Eine Übersicht aller verfügbaren Funktionen finden Sie unter den Kapiteln: 17.13.180 CProjekte & 17.13.179 CProjekt
Funktion um ein INTEGRAL Datenbank-Projekt aus Datenbank zu laden
Funktion um ein Netz (Beispiel hier eine XML Datei) aus einer Datei zu laden
Netznutzungsfälle und Auswertung von Ergebnissen (Block 2)
Bearbeiten von Netzdaten und Netznutzungsfälle
Eine Übersicht aller verfügbaren Funktionen finden Sie unter den Kapiteln: 17.13.147 CNetznutzungsfall & 17.13.148 CNetznutzungsfallGruppe
Beispiel-Makro zur Verwaltung von Netznutzungsfällen
Beispielmakro zum Durchführen einer Netznutzungsfallberechnung
Durchführung von Netzberechnungen und Ergebnis-Auswertung
Beispielmakros zur Durchführung von Lastfluss- und Ausfallberechnungen
Lesen/Schreiben von Dateien
Beispielmakros zum Export von Berechnungsergebnissen in Textdateien
Beispielmakros zus zum Import von Betriebsmitteldaten aus einer CSV-Datei
Importierte CSV-Datei
Einführung zur Programmierung einer Grafischen Benutzerschnittstelle
Allgemeine Information zur Programmierung einer Grafischen Benutzerschnittstelle finden Sie unter dem Kapitel: 17.12 Extensions
Beispielmakros zur Erstellung einer Benutzerdefinierten GUI oder ein Dialog
Auswahl von beliebige NetzObjekte
Arbeiten mit Grafiken (Kapitel 17.3.5 Makroumgebung und die grafische Oberfläche, 17.13.70 CGrafiken, 17.13.69 CGrafik)
Arbeiten mit Netzvarianten (Kapitel 17.13.179 CProjekt)