Skip to main content

FVA-Workbench KnowledgeBase

Modellstände im Scripting

Ab der FVA-Workbench Version 7.1 können Modellstände im Scripting erstellt, benannt und gelöscht werden. Zusätzlich ist es möglich, Attributwerte aus Modellständen zu lesen und (Vergleichs-)Reports zu erstellen.

Da ein Modellstand alle Ein- und Ausgabedaten enthält, ist es damit möglich, die Berechnung von der Datenauswertung zu trennen.

Hinweis

Per Default legt die FVA-Workbench nach jeder Berechnung einen Modellstand an. Dies kann bei der Erstellung von Modellständen via Scripting aber unerwünscht sein. Die automatische Erzeugung kann in den Reporteinstellungen (1) deaktiviert werden. Alternativ kann die Funktion startTransactionMode() verwendet werden, um die automatische Modellstanderzeugung nur während der Scriptlaufzeit zu deaktivieren.

Die maximale Anzahl "Aktueller Modellstände" ist standardmäßig in den Reporteinstellungen auf '10' gesetzt. Sollen im Script mehr Modellstände erzeugt werden, muss dies in den Einstellungen (2) geändert werden. Alternativ können die Modellstände auch direkt nach ihrer Erzeugung mittels snapshot.store() in die Liste "Gespeicherte Modellstände" verschoben werden. Diese Liste ist nicht limitiert.

snapshots_settings.png

Folgende Funktionen stehen zur Verfügung:

Tabelle 87. Funktionen

snapshotFactory.createSnapshot("title");

Erstellt einen neuen Modellstand mit Titel.

snapshotFactory.getCurrentSnapshots();

Gibt ein Array mit allen Modellständen zurück, die sich in der Liste "Aktuelle Modellstände" befinden.

snapshotFactory.getStoredSnapshots();

Gibt ein Array mit allen Modellständen zurück, die sich in der Liste "Gespeicherte Modellstände" befinden.

snapshot.getTitle();

Gibt den Titel eines Modellstands zurück.

snapshot.setTitle("MySnapshot");

Setzt den Titel eines Modellstandes.

snapshot.store();

Verschiebt einen Modellstand in die Liste "Gespeicherte Modellstände".

snapshot.delete();

Löscht einen Modellstand.

snapshot.getAttribute(attributeID, componentID);

Liefert den Wert eines Attributs in einem Modellstand.

snapshot.generateReport(templatePath, outputPath, options);

Erstellt einen Ergebnisreport aus einem Modellstand. Die Funktionsparameter entsprechen der normalen generateReport() Funktion.

snapshotFactory.compareSnapshots(snapshot1, snapshot2, templatePath, outputPath, options);

Erstellt einen Vergleichsreport zwischen zwei Modellständen.



Beispielscript

Das folgende Script erhöht in jedem Durchlauf den Schrägungswinkel eines Stirnrades um 1°, führt eine Gesamtsystemberechnung inklusive Verzahnungsanregung durch und legt einen Modellstand an. Dann wird der Drehwegfehler und der Winkel aus jedem Modellstand ausgelesen und auf dem Scripting-Monitor ausgegeben. Im Anschluss wird ein HTML-Vergleichsreport zwischen der Berechnung mit dem kleinsten und dem größten Drehwegfehler erstellt.

let reportOutputPath = "c:\\results\\comparison_report.html";
let reportTemplatePath = "c:\\templates\\myTemplate.wbrep";
let reportOptions = {compactView: false, language: "de", completeTree: false, notifications: true, navigationBar: true};

let stored_snapshots = snapshotFactory.getStoredSnapshots();
for(i = 0; i <= stored_snapshots.length-1; i++){
    stored_snapshots[i].delete();
}

let gearUnitID = 1;
let stageID = getCompByType("cylindrical_mesh")[0];
let gearID = getCompByType("cylindrical_gear")[0];
let startAngel = 5;
let endAngel = 10;
let trans_error_max_array = [];

setAttr("gta_switch_deactivate_all_calculations", gearUnitID, true, EDAT);
setAttr("gta_switch_3d_load_distribution_analytical", gearUnitID, true, EDAT);
setAttr("gta_switch_3d_force_excitation", gearUnitID, true, EDAT);

for(let angle = startAngel; angle <= endAngel; angle++){
    setAttr("helix angle reference diameter", gearID, angle, EDAT);
    startTransactionMode();    
    runCalcMethod("001_SYSTEM_CALCULATION", gearUnitID);
    endTransactionMode();    
    let snapshot = snapshotFactory.createSnapshot("Angle: "+angle);
    snapshot.store();
}

stored_snapshots = snapshotFactory.getStoredSnapshots();
for(i = 0; i <= stored_snapshots.length-1; i++){
      let helix_angle     = stored_snapshots[i].getAttribute("helix angle reference diameter", gearID);
      let trans_error_max = stored_snapshots[i].getAttribute("result_transmission_error_maximum", stageID);
      trans_error_max_array.push(trans_error_max); 
      println("Transmission Error"+"("+helix_angle+"°): "+trans_error_max+" µm");
}

let maxErrorValue = Math.max.apply(null, trans_error_max_array);
let minErrorValue = Math.min.apply(null, trans_error_max_array);

let index_maxError = trans_error_max_array.indexOf(maxErrorValue);
let index_minError = trans_error_max_array.indexOf(minErrorValue);

println("Snapshot '"+stored_snapshots[index_maxError].getTitle()+"' has the largest transmission error ("+maxErrorValue+")");
println("Snapshot '"+stored_snapshots[index_minError].getTitle()+"' has the smallest transmission error ("+minErrorValue+")");

snapshotFactory.compareSnapshots(stored_snapshots[index_minError], stored_snapshots[index_maxError], reportTemplatePath, reportOutputPath, reportOptions);