Software: FEMM - Stromfluss - OptiY-Modellinterface
Nun fehlt noch die Ankopplung der Nennwerte und der Ausgangsgröße an das FEMM-Modell. Dazu verlassen wir das OptiY und arbeiten wieder mit dem FEMM-Programm samt zugehörigem Script-Editor.
Es existieren unterschiedliche Varianten, wie ein Optimierungstool die Parameterwerte (Input) eines Modells modifizieren und auf die damit berechneten Ergebniswerte (Output) zugreifen kann. Eine sehr allgemeine und übersichtliche Methode ist die Benutzung von ASCII-Textdateien für den Input/Output eines Modells:
- Das Optimierungstool schreibt die aktuellen Parameterwerte an die dafür vorgesehenen Stellen in eine Textdatei.
- Aus dieser Textdatei erhält das Modell seine Werte für eine Simulationsrechnung.
- Die berechneten Ergebnisgrößen stehen nach der Simulationsrechnung wieder an definierter Stelle in einer Textdatei.
- Das Optimierungstool liest diese Ergebniswerte aus der Textdatei und berechnet daraus die erforderlichen Änderungen der Parameterwerte für eine weitere Verbesserung des Modellverhaltens.
- Der Zyklus beginnt dann von vorn, bis keine weitere Verbesserung mehr erreichbar ist.
Es ist im Allgemeinen besser, eine strikte Trennung zwischen Parametern (Input-File), Modell (LUA-Script) und Ergebnisgrößen (Output-File) vorzunehmen. In diesem Sinne soll das LUA-Script nun umgestaltet werden:
1. Input-Datei für Vorgabe-Parameter
Bisher sind die Input-Parameter Bestandteil des Modell-Scripts. Die Input-Parameter sollen als separate Textdatei gestaltet. Für diese Übung nennen wir die ASCII-Textdatei Input_xx.txt (mit xx=Teilnehmer-Nummer). Die Datenwerte in dieser Textdatei müssen so strukturiert werden, dass sowohl das Optimierungsprogramm als auch das Modellscript problemlos darauf zugreifen können:
s 25 Ls 500 bz 200 d 20 RF 100 Pmax 6.2 RN 240 Szul 0.02 PV 0.2 SF 0.3
Achtung: Die Teilnehmer-Nummer xx kommt hier nicht in die Input-Datei, sondern bleibt Bestandteil des Modells!
2. Einlesen der Daten im LUA-Script
Die ursprünglichen Parameterwerte sollte man mit Standardwerten versehen und auskommentieren. Damit weiß man auch später noch, um welche Parameter es sich handelt.
- Achtung: Die Teilnehmer-Nummer xx darf nicht auskommentiert werden!
-- Funktionelle und technologische Parameter (Standardwerte) xx=00; -- Teilnehmer-Nr. 00 bis 30 -- s=25; -- Schnittbreite des Laser-Strahls [µm] -- Ls=500; -- aktuelle Länge L-Schnitt [µm] -- bz=200; -- Breite eines Zuschlags für Fertigung [µm] -- d=20; -- Schichtdicke in µm = Dicke 2D-Elemente -- RF=100; -- Nennwert Flächenwiderstand der Paste [Ohm/Quadrat] -- Pmax=6.2; -- max. zul. Leistungsdichte in Paste [W/cm²] -- RN=240; -- Nennwert nach Trimmen [Ohm] -- Szul=0.02; -- zulässige relative Toleranz von RN -- PV=0.2; -- max. Verlustleistung im Betrieb [W] -- SF=0.3; -- Fertigungsstreuung ungetrimmter Widerstand (rel.) -- Parameter aus Textdatei einlesen mit Fehlertest in = openfile("Input_xx.txt","r"); -- in LUA-Ordner Input-Datei öffnen zum Lesen if in then -- wenn Datei geöffnet, dann Werte einlesen read(in, "*l"); s = read(in, "*l", "*n"); read(in, "*l"); Ls = read(in, "*l", "*n"); read(in, "*l"); bz = read(in, "*l", "*n"); read(in, "*l"); d = read(in, "*l", "*n"); read(in, "*l"); RF = read(in, "*l", "*n"); read(in, "*l"); Pmax = read(in, "*l", "*n"); read(in, "*l"); RN = read(in, "*l", "*n"); read(in, "*l"); Szul = read(in, "*l", "*n"); read(in, "*l"); PV = read(in, "*l", "*n"); read(in, "*l"); SF = read(in, "*l", "*n"); else print("Could not open Input_xx.txt"); end; closefile(in); -- Berechnete Geometrie- und Material-Parameter :
Die Input-Zeilen mit den Parameter-Namen werden jeweils überlesen. Der auf der nächsten Zeile folgende Wert wird dem im Script definierten Parameter-Bezeichner zugewiesen.
- Achtung: Es ist unbedingt zu überprüfen, ob nach der Verwendung einer Input-Datei mit den gleichen Parameter-Werten wirklich die gleichen Ergebnisse berechnet werden!
3. Output-Datei für Simulationsergebnisse
Die für die Bewertung der Simulation relevanten Ergebnisgrößen müssen ebenfalls in eine Textdatei geschrieben werden. In unserem Beispiel ist das nur der aus der aktuellen Parameterbelegung berechnete Widerstand der Anordnung:
: print ("R=", R, "[Ohm]") -- Werte in Outputfeld der LUA-Konsole print (" mit v=", v, "[V]"); print (" und i=", i, "[A]"); out = openfile("Output_xx.txt", "w"); -- Output-Datei in LUA-Ordner write(out, "R=", R, "\n"); closefile(out);
Die erforderlichen File-Operationen werden an das Ende des LUA-Scripts platziert.
4. Verifizierung des Modells
Nach diesen Änderungen muss nach Ausführung des kompletten LUA-Scripts im FEMM in der Datei Output_xx.txt der richtige Wert für den aktuellen Widerstand stehen.
5. Einbindung in den OptiY-Workflow
Falls es nicht mehr geöffnet ist, so öffnen wir erneut OptiY mit der Datei LaserTrimm_xx.opy und ergänzen nun die fehlende Einbindung des Modells.
- Einfügen der Symbole von Input- und Output-File auf dem Workflow, Benennung und Zuordnung der konkreten ASCII-Textdatei:
- Bevor wir die Nennwerte des Workflows mit der Input-Datei verbinden, beginnen wir mit der Zuordnung der einen Output-Verbindung zur Output-Datei. Wir markieren dazu im Dialogfenster des Outputfiles die zu verbindende Größe R_ist und aktivieren das "Zuordnen":
- Nach Wahl der zuzuordnenden Output-Variablen R_ist definieren wir "R=" als Key-String, welcher vor dem eigentlichen Wert steht:
- Nach dem Markieren des Strings führt der Klick mit der rechten Maustaste zum Definitionsmenü.
- Wird ein Key-String definiert, so wird der Zahlenwert erst nach diesem Schlüsselwort erwartet.
- Die zuzuordnende Output-Variable sollte immer noch ausgewählt sein. Wir definieren nun die Position des Zahlenwertes relativ zum Key-String:
- Wir markieren dazu die gesamte Zahl (ohne Key-String). Der Klick mit der rechten Maustaste führt wieder zum Definitionsmenü.
- Die Zahl wird als Relative Variable in Bezug zum Key-String erwartet:
- Mit dieser Art der Definition findet OptiY den Wert für R_ist auch, wenn sich durch weitere Ergebnisgrößen die Struktur der Output-Datei ändert. Allerdings muss vor dem Zahlenwert der Key-String "R=" stehen!
- Die Zuordnung der Workflow-Ausgangsgröße R_ist zur Output-Datei widerspiegelt sich im Workflow:
- Die im Workflow noch fehlende Anbindung der In- und Outputdateien an das Modell wollen wir nun nachholen. Dazu öffnen wir durch Doppelklick den Script-Dialog zu LaserTrimm.LUA und markieren die entsprechenden Input-/Output-Verbindungen:
- Es fehlt noch die Zuordnung der Schnittlänge Ls und des Nennwiderstands RN zur Input-Datei. Nach Doppelklick auf Input.txt markiert man diese Input-Verbindungen:
- Danach muss über den Button der Zuordnen-Dialog aufgerufen werden. Hier erhält OptiY die Information, wo die beiden Parameter-Werte in die Input-Datei einzutragen sind. Die Zuordnung innerhalb der Input-Datei funktioniert nach dem gleichen Schema, wie in der Output-Datei (Input-Variable wählen und zugehörigen Wert markieren). Jedoch existiert im Menü der rechten Maustaste nur die Funktion "Variable einfügen":
- Leider führt die automatische Trassierung der RN-Verbindungen zu einem falschen Eindruck vom Datenfluss. Das kann man manuell korrigieren, indem man eine Verbindungslinie auswählt und die Marker sinnvoll verschiebt. Im Beispiel erkennt man danach auch im Workflow, dass RN sowohl in die Input-Datei geschrieben, als auch für die Berechnung der Abweichung verwendet wird:
Damit ist der Workflow für das Optimierungsexperiment fertig. Im nächsten Schritt werden wir das Experiment konfigurieren.