Automatisierung der Diagrammerstellung

Soll eine Reihe von gleichartigen Diagrammen erzeugt werden, empfiehlt es sich, diese Aufgabe zu automatisieren.

Automatisierte Diagrammerstellung aus Benutzersicht

Der Benutzer wählt aus dem Menü Auswertung die gewünschte Auswerte-Kategorie aus:

../../_images/Misc_AuswertungsMenu.png

Es wird eine Liste aller vorbereiteten Kennfeldauswertungen angezeigt. Beispiel:

../../_images/auto_VerfuegbareAuswertungen.png

Der Benutzer wählt eine Auswertung aus.

Im nächsten Schritt werden die Datendateien ausgewählt. Dazu wird der folgende Dateiauswahl-Dialog angezeigt:

../../_images/auto_Dateiauswahl.png

Je nach Vorlage können bis zu 16 Datendateien ausgewählt werden.

Nun wird die Vorlage geöffnet und die Messdaten werden in die Diagramme geladen. Je nach Auswertung werden zum Schluss noch Kopfdaten aus einer der Messdatendateien gelesen und in die Vorlage eingetragen. Für Beschriftungen, die während der Erstellung der Auswertung durch den Benutzer eingetragen werden sollen, steht die folgende Dialogmaske zur Verfügung:

../../_images/auto_Textfelder.png

Die vom Benutzer eingegebenen Texte werden in die Vorlage übertragen. Damit ist die Auswertung abgeschlossen.

Erstellung einer Automatisierung

Eine Automatisierung besteht aus zwei Dateien:

  • Die IC-Datei (Scriptdatei) enthält das Programm, das den Ablauf der Automatisierung steuert. Für die Skriptdatei sollte die Dateinamenserweiterung .ic verwendet werden.
  • Die IPW-Datei (UniPlot-Dokument) enthält die Vorlage mit den Diagrammen, Textfeldern, Logo etc. Für die UniPlot-Datei sollte die Dateinamenserweiterung .ipw verwendet werden.

Die IC- und die IPW-Datei sollten zusammen in einem Verzeichnis gespeichert werden. Um die Auswertungen zu laden, wird das Verzeichnis im Dialogfeld Extras=>Weitere Optionen im Textfeld Suchpfad für Automatisierungs Skript-Dateien eingetragen (z. B. c:/programme/uniplot/samples/automate/).

../../_images/ExtrasWeitereOptionen.png

Es können mehrere Verzeichnisse angegeben werden. Die einzelnen Verzeichnisse werden durch ein Semikolon getrennt. Wenn das Dialogfeld über die OK-Schaltfläche geschlossen wird, werden die angegebenen Verzeichnisse nach ic-Dateien durchsucht und alle gefundenen ic-Dateien geladen.

Erstellung der Vorlagendatei

Die Vorlagendatei ist ein UniPlot-Dokument mit Diagrammen, Logo, Texten und beliebigen anderen Objekten. Die Vorlage wird wie üblich mit UniPlot erstellt.

Diagramme

Die Achsen der Diagramme werden so skaliert, dass der gewünschte Ausschnitt der Messdaten dargestellt wird. Falls die Messdaten in ihrem Wertebereich stark variieren, kann die Achsenskalierung in der ic-Datei angepasst werden. Jedes Diagramm hat einen Namen. Der Name wird in der Skriptdatei verwendet, um die Daten den Diagrammen zuordnen zu können.

Textfelder

Die Vorlage kann beliebig viele Texte enthalten, die während der Automatisierung durch Benutzereingaben über ein Dialogfeld oder durch Texte aus einer Messdatendatei ersetzt werden. Dazu werden in die Textobjekte Platzhalter eingetragen. Die Platzhalter sind in $-Zeichen eingeschlossene Zeichenketten, z. B. $Bearbeiter$.

Falls für die Platzhalter der Text über ein Dialogfeld eingegeben werden soll, kann zusätzlich eine Nummer vergeben werden, die die Position in der Dialogbox festlegt.

Beispiel:

$(1)Titel$

$(2)Bearbeiter$

Die Nummer muss in runden Klammern eingeschlossen sein und direkt hinter dem ersten Dollar-Zeichen stehen.

Soll der Text für den Platzhalter aus einer Messdatendatei gelesen werden, muss die Schreibweise des Platzhalters mit einem globalen Attribut in der Messdatendatei übereinstimmen. In jeder von UniPlot erzeugten NC-Datei befindet sich z. B. das globale Attribut Origin. Das Attribut enthält den Namen der Datendatei, aus der die NC-Datei entstanden ist. Der Platzhalter für dieses Attribut heißt dann $Origin$. Soll auf das Attribut einer Variablen zugegriffen werden, wird der Variablenname, gefolgt von einem Punkt, vor den Attributnamen gesetzt. Beispiel: $Drehz.long_name$.

Legenden

Die Legende sollte als Feld-Funktion in die Vorlage eingefügt werden. Die Legende ist ein normales Textobjekt (um ein Textobjekt zu erzeugen, wählen Sie den Schalter Palette_Text in der Schalterleiste).

Sie können die Legende mit dem Befehl Diagramm=>Weitere Diagramm-Funktionen, Eintrag Legende für aktives Diagramm erzeugen in Ihre Vorlage einfügen.

In der Vorlage können auch Feldfunktionen verwendet werden. Mit Hilfe der Feldfunktionen können z. B. Legenden erzeugt werden, die automatisch angepasst werden oder der Dokumentname in einer Seite angezeigt werden.

Erstellung der Skript-Datei

Die Skript-Datei (.ic) wird mit einem Editor erzeugt. In UniPlot wird ein Programm-Editor mit dem Befehl Datei=>Neu geöffnet.

Der Aufbau einer Automatisierungs-Skript-Datei soll an den folgenden Beispielen erklärt werden. Sie finden die Beispiele im Verzeichnis c:/programme/uniplot/samples/automate/.

Um die folgenden Beispiele auszuprobieren, müssen Sie die Automatisierung zuerst laden. Dazu wählen Sie Extras=>Weitere Optionen. Im folgenden Dialog geben Sie den Suchpfad für die Automatisierung ein (z. B. c:/programme/uniPlot/samples/automate/). Wenn Sie die OK-Schaltfläche drücken, sollte nun ein neues Hauptmenü mit dem Namen Auswertung rechts neben dem Datei-Menü angezeigt werden. Wählen Sie den Menüpunkt Auswertung=>Example 1: Kennfeld aus. Im Datendateidialog wählen Sie für dieses Beispiel die Datei mit dem Namen map-data.xls aus.

auto_AddToUI("Examples", "Example 1: Map", "RS_Example1");
def RS_Example1()
{
    // map-data.xls
    ssDir = GetRootDirectory() + "samples/";
    auto_SetFileNameDialogInit("*.xls", ssDir);
    svFile = auto_GetFileNameDialog(1);
    if (svFile[1] == "DLG_CANCEL") {
        return;
    }
    ssTemplate = GetRootDirectory() + "samples/automate/Example.ipw";
    auto_LoadTemplate(ssTemplate);
    auto_ImportData(svFile[1]);
    auto_LoadDataset("Diagramm 1", "N", "EWGMOM", "EWGLST");
    auto_LoadDataset("Diagramm 2", "N", "EWGMOM", "BEEWG");
    auto_ScaleAxes();
    auto_UpdatePage();
}

In einer Skriptdatei wird eine Funktion definiert, die den Ablauf der Automatisierung steuert. In diesem Beispiel ist das die Funktion RS_Example1.

Damit der Benutzer diese Funktion auswählen kann, muss sie in die Benutzeroberfläche von UniPlot eingefügt werden. Dazu wird die Funktion auto_AddToUI verwendet (UI für User-Interface).

auto_AddToUI(ssCategorie, ssDescription, ssFunctionName)

Für jede Automatisierung wird einmal in der Datei die Funktion auto_AddToUI aufgerufen.

Mit dieser Funktion wird die Skriptfunktion RS_Example1, registriert, damit Sie später über das Menü Auswertung=>Examples aufgerufen werden kann.

Der erste Parameter legt den Namen des Menüs fest, dem die Auswertung zugeordnet werden soll.

Der zweite Parameter der Funktion ("Example 1: Kennfeld (Map)") wird im Dialogfeld angezeigt, wenn das Menü Auswertung=>Example 1 auswählt wird.

Der dritte Parameter ("RS_Example1") ist der Name der Funktion, die aufgerufen werden soll. Der Name der Funktion ist frei wählbar. Da jeder Funktionsname in UniScript nur einmal verwendet werden kann, muss darauf geachtet werden, dass nicht bereits eine Funktion mit gleichem Namen existiert. Es ist empfehlenswert, den Namen mit einem Präfix beginnen zu lassen, das nicht bereits von UniPlot verwendet wird, beispielsweise RS_ oder ABC_ etc.

Mit Hilfe der Funktion what können Sie prüfen, ob in UniScript bereits Funktionen mit diesem Präfix existieren. Öffnen Sie dazu das Kommandofenster und geben den Befehl what("RSB_*") ein. Sie erhalten eine Liste von Funktionen die mit RSB_ beginnen. Die Skriptdatei sollte mit der Vorlagendatei in einem gemeinsamen Verzeichnis gespeichert werden. Beispielsweise im Verzeichnis uniplot/template/auto.

Die Automatisierungen können sich in verschiedenen Verzeichnissen befinden. Die Suchverzeichnisse werden im Dialogfeld Extras=>Weitere Optionen im Feld "Suchpfad für Automatisierungs-Skript-Dateien" eingetragen. Die Pfade werden durch ein Semikolon getrennt. In diesen Verzeichnissen sollten sich nur Automatisierungs-Dateien befinden.

Beim Start von UniPlot werden die Skriptdateien im angegebenen Pfad gesucht und geöffnet. Die Scriptdateien müssen dazu die Dateinamenerweiterung .ic haben.

Die wichtigsten Automatisierungs-Funktionen

Innerhalb einer Skriptfunktion können alle UniScript-Funktionen aufgerufen werden. Um das Schreiben der Skriptdateien zu vereinfachen stehen für Standardfunktionen, wie das Auswählen von Dateien, Suchen und Ersetzen von Texten und für die Umrechnung von Messdaten vorbereitete Funktionen zur Verfügung.

Diese Funktionen sollen nun kurz erklärt werden:

auto_GetFileNameDialog

Mit dieser Funktion kann der Benutzer Datendateien auswählen. Die Funktion gibt die Namen der ausgewählten Dateien als Vektor zurück. Falls der Benutzer die Schaltfläche Abbruch gewählt hat, steht im ersten Element des Rückgabevektors die Zeichenkette "DLG_CANCEL". Sollen mehr als 4 Dateien ausgewählt werden, übergibt man die gewünschte Anzahl als ersten Parameter an die Funktion. Der Aufruf auto_GetFileNameDialog(8) gibt dem Benutzer die Möglichkeit, bis zu 8 Dateien auszuwählen. Maximal können 16 Dateien ausgewählt werden.

auto_ReplaceTextDialog

Die Funktion sucht in der Vorlagenseite nach Texten mit dem Muster $Text$. Werden in der Vorlagenseite in $-Zeichen eingeschlossene Texte gefunden, wird eine Dialogfeld für die Texteingabe angezeigt. Wird der NC-Dateiname (Rückgabewert der Funktion auto_ImportData angegeben, versucht die Funktion den Platzhaltertext in den globalen Attributen oder den Attributen der Variablen der NC-Datei zu finden. Im Dialogfeld werden alle aus der NC-Datei geladenen Texte mit einem Stern markiert.

auto_LoadTemplate

Die Funktion öffnet eine Vorlage und erzeugt eine Kopie der gewünschten Seite. Die kopierte Seite wird entweder in ein neues Dokument oder in das aktive Dokument eingefügt. Der erste Parameter ist der Name der Vorlage. Falls sich die Vorlage in einem der angegebenen Automatisierungs-Skript-Verzeichnisse befindet, muss der Pfad nicht angegeben werden. Der zweite Parameter ist der Name der Seite. Soll die Seite dem aktiven Dokument zugefügt werden, muss vorher die Funktion auto_AddPage aufgerufen werden (Siehe Beispiel RS_Example4()).

Die Funktion liefert die Zugriffsnummer der erzeugten Seite zurück. Diese kann beispielsweise verwendet werden, um die Zugriffsnummer eines Diagrams zu erfragen (PageGetLayerHandle).

auto_ImportData

Die Funktion öffnet die angegebene Datendatei und konvertiert die Datei in das NC-Format. Der Dateiname wird als Parameter an die Funktion übergeben. Der Name der NC-Datei wird als Returnwert zurückgeliefert. Der NC-Dateiname kann z. B. an die Funktion auto_ReplaceTextDialog übergeben werden.

Der Name der erzeugten NC-Datei wird in einer globalen Variablen gespeichert. Die Funktion auto_LoadDataset greift auf diese Variable zu, um Daten aus der NC-Datei in das angegebene Diagramm zu laden.

auto_LoadDataset

Die Funktion auto_LoadDataset erzeugt einen 1D, 2D oder 3D Datensatz. Der Datensatz wird dem angegebenen Diagram zugefügt. Die Funktion liefert eine Zugriffsnummer (handle) zurück. Die Zugriffsnummer wird verwendet, um auf einen erzeugten Datensatz zugreifen zu können. Um den Datensatzstil festzulegen, stehen mehrere Möglichkeiten zur Verfügung:

Der Datensatzstil wird der aktiven Stildatei entnommen. Der erste Datensatz im Diagramm erhält den ersten Stil der Stildatei. Der zweite Datensatz erhält den zweiten Stil usw.

Soll ein Datensatz einen bestimmten Stil aus der Stildatei erhalten, kann der Stil des nächsten zu erzeugenden Datensatz mit der Funktion auto_SetDatasetStyle ausgewählt werden. Der Funktion wird entweder der Name des Stils oder die Nummer des Stils übergeben.

auto_UpdatePage

Die Funktion sollte aufgerufen werden, um die Erzeugung einer Seite abzuschließen.

Bitte denken Sie daran, dass Sie zu allen verwendeten Funktionen eine ausführliche Hilfe bekommen können, wenn Sie den Cursor auf einen der Funktionsnamen setzen und die F1-Taste drücken.

../../_images/auto_ReplaceTextHelp.png

Das folgende Beispiel erzeugt ein Kennfeld mit einer Farblegende:

auto_AddToUI("Examples", "Example 2: Map with legend", "RS_Example2");
def RS_Example2()
{
    // map-data.xls
    ssDir = GetRootDirectory() + "samples/"
    auto_SetFileNameDialogInit("*.xls", ssDir);
    svFile = auto_GetFileNameDialog(1);
    if (svFile[1] == "DLG_CANCEL") {
        return;
    }
    auto_LoadStyleFile(GetRootDirectory() + "samples/automate/style1.icb");
    hPage = auto_LoadTemplate(GetRootDirectory() + "samples/automate/Example.ipw");
    auto_ImportData(svFile[1]);
    hData = auto_LoadDataset("Diagramm 1", "N", "EWGMOM", "EWGLST");
    auto_xyz_CreateColorLegend(hData)
    auto_LoadDataset("Diagramm 2", "N", "EWGMOM", "BEEWG");
    auto_ReplaceText("$X-Title$", "Dies ist die Y-Achse");
    auto_ReplaceTextDialog()
    auto_UpdatePage();
}

Im folgenden Beispiel können bis zu 3 Datendateien ausgewählt werden:

auto_AddToUI("Examples", "Example 3: WOT 1", "RS_Example3");
def RS_Example3()
{
    MessageBox("In the following dialog please select the file VOLLAST.ASC");
    auto_SetFileNameDialogInit("*.asc; *.nc", GetRootDirectory() + "samples/");
    svFile = auto_GetFileNameDialog(3);
    if (svFile[1] == "DLG_CANCEL") {
        return;
    }
    NumberOfFiles = len(svFile);
    hPage = auto_LoadTemplate("example");
    for (i in 1:NumberOfFiles) {
        svFile[i] = auto_ImportData(svFile[i]);
        auto_LoadDataset("Diagramm 1", "N", "MEFF");
        auto_LoadDataset("Diagramm 2", "N", "EWGLST");
    }
    auto_ScaleAxes();
    auto_ReplaceTextDialog(svFile[1]);
    auto_UpdatePage();
}

Das folgende Beispiel erzeugt ein Dokument mit 2 Seiten. In der ersten Seite werden die Daten (N, MEFF) und (N, EWGLST) dargestellt, in der zweiten Seite die Daten (N, BEFF) und (N, TOEL1):

auto_AddToUI("Examples", "Example 4: WOT 2", "RS_Example4");
def RS_Example4()
{
    MessageBox("In the following dialog please select the file VOLLAST.ASC");
    auto_SetFileNameDialogInit("*.asc; *.nc", GetRootDirectory() + "samples/");
    svFile = auto_GetFileNameDialog(3);
    if (svFile[1] == "DLG_CANCEL") {
        return;
    }
    NumberOfFiles = len(svFile);
    hPage = auto_LoadTemplate("example");
    for (i in 1:NumberOfFiles) {
        svFile[i] = auto_ImportData(svFile[i]);
        auto_LoadDataset("Diagramm 1", "N", "MEFF");
        auto_LoadDataset("Diagramm 2", "N", "EWGLST");
    }
    auto_ScaleAxes();
    auto_ReplaceTextDialog(hPage, svFile[1]);
    auto_UpdatePage();
    // Add the next page to the active Page
    auto_AddPage();
    hPage = auto_LoadTemplate("example");
    for (i in 1:NumberOfFiles) {
        svFile[i] = auto_ImportData(svFile[i]);
        auto_LoadDataset("Diagramm 1", "N", "BEFF");
        auto_LoadDataset("Diagramm 2", "N", "TOEL1");
    }
    auto_ScaleAxes();
    auto_ReplaceTextDialog(hPage, svFile[1]);
    auto_UpdatePage();
}

Das folgende Beispiel zeigt, wie der Mittelwert zweier Kurven berechnet werden kann und wie zwei Datensätze dividiert werden können:

auto_AddToUI("Examples", "Example 5: WOT with calculations", "RS_Example5");
def RS_Example5()
{
    MessageBox("In the following dialog please select the file VOLLAST.ASC");
    auto_SetFileNameDialogInit("*.asc; *.nc", GetRootDirectory() + "samples/");
    svFile = auto_GetFileNameDialog(2);
    if (svFile[1] == "DLG_CANCEL") {
        return;
    }
    NumberOfFiles = len(svFile);
    if (NumberOfFiles != 2) {
        MessageBox("Es müssen 2 Dateien ausgewählt werden");
        return FALSE;
    }
    hPage = auto_LoadTemplate("example");
    svFile[1] = auto_ImportData(svFile[1]);
    hData1 = auto_LoadDataset("Diagramm 1", "N", "MEFF");
    svFile[2] = auto_ImportData(svFile[2]);
    hData2 = auto_LoadDataset("Diagramm 1", "N", "MEFF");
    // Zugriffsnummer von Diagramm 2 erfragen
    hLayer2 = PageGetLayerHandle(hPage, "Diagramm 2");
    // Mittelwert-Datensatz in Diagramm von hData1 einfügen.
    auto_xy_Mean(hData1, hData2);
    // Div-Datensatz in Diagramm von "Diagramm 2" einfügen.
    auto_xy_Div([hData1, hLayer2], hData2);
    // Alle Achsen neu skalieren
    auto_ScaleAxes();
    auto_ReplaceTextDialog(hPage, svFile[1]);
    auto_UpdatePage();
}

Die Funktion auto_xy_Mean berechnet den Mittelwert zweier Datensätze (Kurven). Die Datensätze müssen aufsteigende x-Koordinaten besitzen und sich in x-Richtung überlappen. Die Stützstellen der Datensätze müssen nicht identisch sein.

Die Datensätze werden über ihre Zugriffsnummern an die Funktion übergeben. Die Zugriffsnummer wird von der Funktion auto_LoadDataset zurückgeliefert.

Die Funktion auto_xy_Mean liefert, wie die Funktion auto_LoadDataset, die Zugriffsnummer des erzeugten Datensatzes zurück. Falls der Datensatz nicht erzeugt werden kann, liefert die Funktion den Wert 0 zurück.

Um einen Datensatz aus einem Diagram zu löschen wird die Funktion XYDestroy bzw. XYZDestroy aufgerufen.

Die folgende Funktion RS_AddMyInfoBox(hPage) lädt ein Schriftfeld mit dem Seitennamen ssPageName aus der Datei ssSchriftfeldVorlage in die Seite mit dem Handle hPage. Der Handle wird von der Funktion auto_LoadTemplate zurückgeliefert.

def RS_AddMyInfoBox(hPage, ssSchriftfeldVorlage, ssPageName)
{
    AddExternDocPage(hPage, ssSchriftfeldVorlage, ssPageName);
    auto_SetTemplate(hPage);
}

Der Aufruf der Funktion kann unmittelbar nach der Funktion auto_LoadTemplate erfolgen. Das folgende Beispiel lädt das Schriftfeld „Info-Box1“ aus der Datei uniplot/template/info_g.ipw. Die Funktion GetRootDirectory liefert das Verzeichnis von UniPlot zurück, z. B. c:/programme/uniplot/.

ssSchriftfeldVorlage = GetRootDirectory() + "template/info_g.ipw";
ssPageName = "Info-Box1";
hPage = LoadTemplate("example");
RS_AddMyInfoBox(hPage, ssSchriftfeldVorlage, ssPageName);

id-644140