.. |Palette_Text| image:: S:/uniplot-obj/buttons/Palette_Text.png :align: top .. highlightlang:: us .. _automation-manual: .. _automatisierung-der-diagrammerstellung: Automatisierung der Diagrammerstellung ====================================== Soll eine Reihe von gleichartigen Diagrammen erzeugt werden, empfiehlt es sich, diese Aufgabe zu automatisieren. .. _automatisierte-diagrammerstellung-aus-benutzersicht: Automatisierte Diagrammerstellung aus Benutzersicht --------------------------------------------------- Der Benutzer wählt aus dem Menü **Auswertung** die gewünschte Auswerte-Kategorie aus: .. image:: S:/uniplot-obj/images/Misc_AuswertungsMenu.* Es wird eine Liste aller vorbereiteten Kennfeldauswertungen angezeigt. Beispiel: .. image:: S:/uniplot-obj/images/auto_VerfuegbareAuswertungen.* Der Benutzer wählt eine Auswertung aus. Im nächsten Schritt werden die Datendateien ausgewählt. Dazu wird der folgende Dateiauswahl-Dialog angezeigt: .. image:: S:/uniplot-obj/images/auto_Dateiauswahl.* 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: .. image:: S:/uniplot-obj/images/auto_Textfelder.* Die vom Benutzer eingegebenen Texte werden in die Vorlage übertragen. Damit ist die Auswertung abgeschlossen. .. _erstellung-einer-automatisierung: 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 :file:`.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 :file:`.ipw` verwendet werden. .. index:: Automatisierung; Registrierung .. index:: Automatisierung; Laden Die IC- und die IPW-Datei sollten zusammen in einem Verzeichnis gespeichert werden. Um die Auswertungen zu laden, wird das Verzeichnis im Dialogfeld :ref:`extrasweitere-optionen` im Textfeld **Suchpfad für Automatisierungs Skript-Dateien** eingetragen (z. B. :file:`c:/programme/uniplot/samples/automate/`). .. image:: S:/uniplot-obj/images/ExtrasWeitereOptionen.* 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 :ref:`diagrammweitere-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 (:file:`.ic`) wird mit einem Editor erzeugt. In UniPlot wird ein Programm-Editor mit dem Befehl :ref:`dateineu` geöffnet. Der Aufbau einer Automatisierungs-Skript-Datei soll an den folgenden Beispielen erklärt werden. Sie finden die Beispiele im Verzeichnis :file:`c:/programme/uniplot/samples/automate/`. Um die folgenden Beispiele auszuprobieren, müssen Sie die Automatisierung zuerst laden. Dazu wählen Sie :ref:`extrasweitere-optionen`. Im folgenden Dialog geben Sie den Suchpfad für die Automatisierung ein (z. B. :file:`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 :file:`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 :ref:`auto_AddToUI` verwendet (UI für User-Interface). ``auto_AddToUI(ssCategorie, ssDescription, ssFunctionName)`` Für jede Automatisierung wird einmal in der Datei die Funktion :ref:`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 :ref:`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 :file:`uniplot/template/auto`. Die Automatisierungen können sich in verschiedenen Verzeichnissen befinden. Die Suchverzeichnisse werden im Dialogfeld :ref:`extrasweitere-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 :file:`.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: :ref:`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. :ref:`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 :ref:`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. :ref:`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 :ref:`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 (:ref:`PageGetLayerHandle`). :ref:`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 :ref:`auto_ReplaceTextDialog` übergeben werden. Der Name der erzeugten NC-Datei wird in einer globalen Variablen gespeichert. Die Funktion :ref:`auto_LoadDataset` greift auf diese Variable zu, um Daten aus der NC-Datei in das angegebene Diagramm zu laden. :ref:`auto_LoadDataset` Die Funktion :ref:`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 :ref:`auto_SetDatasetStyle` ausgewählt werden. Der Funktion wird entweder der Name des Stils oder die Nummer des Stils übergeben. :ref:`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 :kbd:`F1`-Taste drücken. .. image:: S:/uniplot-obj/images/auto_ReplaceTextHelp.* 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 :ref:`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 :ref:`auto_LoadDataset` zurückgeliefert. Die Funktion :ref:`auto_xy_Mean` liefert, wie die Funktion :ref:`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 :ref:`XYDestroy` bzw. :ref:`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 :ref:`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 :ref:`auto_LoadTemplate` erfolgen. Das folgende Beispiel lädt das Schriftfeld "Info-Box1" aus der Datei :file:`uniplot/template/info_g.ipw`. Die Funktion :ref:`GetRootDirectory` liefert das Verzeichnis von UniPlot zurück, z. B. :file:`c:/programme/uniplot/`. :: ssSchriftfeldVorlage = GetRootDirectory() + "template/info_g.ipw"; ssPageName = "Info-Box1"; hPage = LoadTemplate("example"); RS_AddMyInfoBox(hPage, ssSchriftfeldVorlage, ssPageName); :sub:`id-644140`