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

OberflaecheQScintilla.png
Die Oberfläche des Makro-Editors
grafik-20240610-124142.png
Die Oberfläche des Debuggers

 

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​

  1. 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(); }
  1. Steuerdaten exportieren

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

  1. Funktion um ein INTEGRAL Datenbank-Projekt aus Datenbank zu laden

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

  1. Beispiel-Makro zur Verwaltung von Netznutzungsfällen

  1. Beispielmakro zum Durchführen einer Netznutzungsfallberechnung

  1.  

Durchführung von Netzberechnungen und Ergebnis-Auswertung​

Beispielmakros zur Durchführung von Lastfluss- und Ausfallberechnungen

 

Lesen/Schreiben von Dateien​

  1. Beispielmakros zum Export von Berechnungsergebnissen in Textdateien

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

  1. Beispielmakros zur Erstellung einer Benutzerdefinierten GUI oder ein Dialog

  1. Auswahl von beliebige NetzObjekte

  1. Arbeiten mit Grafiken (Kapitel 17.3.5 Makroumgebung und die grafische Oberfläche, 17.13.70 CGrafiken, 17.13.69 CGrafik)

  1. Arbeiten mit Netzvarianten (Kapitel 17.13.179 CProjekt)