Sequencer Tutorial

Innerhalb dieses Tutorials wird ein kleines Demo-Projekt erstellt das mehrere einfache Sequenzen enthält. Das Tutorial gibt eine Einführung darüber wie man den Sequencer einsetzen kann und erklärt dessen grundlegende Konzepte.

1. Wechsel des Arbeitsbereiches

Für jedes Projekt legt man mit dem Sequenzer einen eigenen Projektordner an. Dieser Ordner wird auch Arbeitsbereich genannt und in ihm werden die Sequenzen abgespeichert die zu diesem Projekt gehören. In ihm sollten auch alle projektbezogenen Dokumente und Resourcen gespeichert werden da der Sequencer an vielen Stellen Schnellzugriffe auf diesen Ordner bereitstellt, z.B hier:

Task drücke Sequencer_OpenWS um den Arbeitsbereich im Dateibrowser zu öffnen

Task gehe mit der Maus über den Namen des Arbeitsbereiches um seinen Pfad im Tooltip zu sehen

Der erste Arbeitsbereich wird automatisch im Benutzerverzeichnis angelegt. Wir werden dieses Tutorial als kleines eigenes Projekt betrachten, also legen wir für es einen eigenen Arbeitsbereich an:

Task drücke Sequencer_SwitchWS um den aktuellen Arbeitsbereich zu wechseln

Task gebe den Namen für den neuen Arbeitsbereich ein, z.B. „TutorialWS“

Task drücke „create…“ und wähle den Ort für den neuen Ordner des Arbeitsbereiches

2. Die erste Sequenz

Die erste Sequenz soll „Hallo Welt“ in einem Dokument anzeigen und eine Messagebox öffnen.

Task drücke Sequencer_AddSequence um eine Sequenz zu erzeugen, nenne sie „Hallo Welt“

Nun müssen wir die Aktionen hinzufügen die sich um das Dokument und um die Messagebox kümmern. Welche Aktionstypen verfügbar sind sieht man wenn man auf Sequencer_AddAction drückt und mit der Maus über die einzelnen Knöpfe geht. Um ein Dokument anzuzeigen gibt es bereits einen standard Aktionstyp und für die Messagebox werden wir eine Zeile Script schreiben.

Dokument:

Task drücke Sequencer_AddAction und wähle den Aktionstyp „Lade Dokument“

Noch ist der Aktion keine Dokumentdatei zugewiesen die geladen werden soll, daher ist die Aktion Rot und kann nicht ausgeführt werden. Wir werden nun kein bereits vorhandenes Dokument auswählen sondern ein neues erstellen:

Task drücke „Neu“ in der Aktion und benenne das Dokument „HalloWeltDoc“

Task füge ein Text Object auf der ersten Seite hinzu und beschrifte es mit „Hallo Welt!

Task speichere das Dokument (es liegt im Arbeitsbereich) und schließe es

Messagebox:

Task drücke Sequencer_AddAction und wähle den Aktionstyp „Script Ausführung“

Task drücke „Neu“ und benenne das Script file „ShowMessageBox“

Task schreibe die Zeile

MessageBox("Hallo Welt!")

Task speichere das Script

Das war’s, die Sequenz kann nun durch Drücken auf den Play Knopf (Sequenzbereich) ausgeführt werden.

../../_images/sequencer-Tutorial1.png

Die Aktionen können auch einzeln ausgeführt werden. Drücke hierfür den Play Knopf im Aktionsbereich oder doppelklicke die Aktion in der Sequenzliste.

Task speichere die Sequenzkonfiguration im Arbeitsbereich Sequencer_Save

3. Grundlegendes Daten-Handling

Um die Aktionstypen „Datenaustausch“ und „Dateibrowser“ vorzustellen werden wir nun erst einmal zwei kleine Datenfiles erstellen:

Task erstelle eine neue Datei „Data1.csv“ im Ordner des Arbeitsbereiches und schreibe in diese:

Time, Torque
s, Nm
1, 50
2, 150
3, 120

Denke daran den Arbeitsbereich hier öffnen zu können: Sequencer_OpenWS

Task erstelle eine zweite Datei „Data2.csv“ im Arbeitsbereich und schreibe in diese:

Time, Torque
s, Nm
1, 110
2, 40
3, 60

Task lade „Data1.csv“ in den Datenbrowser

Nun wollen wir die Daten in einem 2D x/y Chart in unserem Dokument anzeigen. Nach der Ausführung der „Lade Dokument“ Aktion wird das Dokument als Kopie geladen. Dies verhindert das versehentliche Überschreiben des Originaldokuments in Workflows bei denen das finale Dokument aus einem Basisdokument heraus generiert wird. Den Unterschied zwischen „Ausführen“ und „Bearbeiten“ sieht man z.B. in der Menüzeile von Uniplot. Wir wollen unser Dokument also bearbeiten:

Task selektiere die „Lade Dokument“ Aktion und drücke „Bearbeiten“

Task selektiere „Time“ als X-Kanal and „Torque“ als Y-Kanal im Datenbrowser und drücke „Laden“

Task speichere das Dokument

Es sollte nun folgendermaßen aussehen:

../../_images/sequencer-Tutorial2.png

Nun werden wir unser zweites Datenfile während der Sequenzausführung in unser Dokument laden:

Task füge zur Sequenz eine Aktion „Datenaustausch“ hinzu

Task selektiere in dieser „Data2.csv“ aus dem Arbeitsbereich über Sequencer_FromWS

Task die Script Aktion kann nun mit der Checkbox in der Sequenzliste abgeschaltet werden

Wird die Sequenz jetzt gestartet wird sie das Dokument nun laden und die Daten mit unserem zeiten Datenfile ersetzen.

4. Der erste Runtime Value

Im nächsten Schritt werden wir etwas Benutzerinteraktion in unsere Sequenz einbauen, der Benutzer soll das Datenfile nun innerhalb der Sequenzausführung auswählen können. Hierfür werden wir zum ersten Mal „Runtime Values“ verwenden, da man mit deren Hilfe Aktionen aus anderen Aktionen heraus steuern kann. In userem Fall wird eine Aktion („Dateibrowser“) den Dateipfad zu den Daten bestimmen und dieser wird von einer weiteren (unserer „Datenaustausch“ Aktion) verwendet.

Task füge zur Sequenz eine Aktion „Dateibrowser“ hinzu und schiebe sie mit Sequencer_Up an den Anfang der Sequenz

Bei einem Blick auf die Einstellungen der neuen Aktion sieht man, daß der Pfad zur ausgewählten Datei in den Runtime Value „DATAFILEPATH“ geschrieben wird:

Task führe die Aktion „Dateibrowser“ einzeln aus und wähle „Data2.csv“

Der Runtime Value ist nun gesetzt, man sieht ihn nach Drücken auf Sequencer_RV im Arbeitsbereich. Nun werden wir den Pfad in unserer „Datenaustausch“ Aktion verwenden. Dafür schalten wir den Eingang von „Aus Arbeitsbereich“ zu „Aus Runtime Value“ Sequencer_fromRV. Der Name „DATAFILEPATH“ ist in beiden Aktionen vordefiniert um bereits überein zu stimmen, aber es können natürlich auch andere Namen verwendet werden.

Wird die Sequenz jetzt gestartet sieht man wie beide Aktionen nun zusammen spielen.

Darüber hinaus kann man den Mechanismus zur Dateiauswahl sogar noch erweitern indem man eine „Setze Runtime Values“ Aktion vorschaltet. So kann man den Wert von „DATAFILEPATH“ vordefinieren, also quasi einen default Pfad setzen. Die „Dateibrowser“ Aktion kann man nun bei Bedarf einfach dazuschalten.

5. PDF Export, weiterer Einsatz von Runtime Values

Nun wollen wir unser Dokument am Ende der Sequenz als PDF exportieren. Das ist einfach:

Task füge zur Sequenz eine Aktion „PDF Export“ hinzu

Drücke Play und die PDF Datei wird erzeugt.

(falls für UniPlot noch kein Ghostscript konfiguriert wurde, bitte hier schauen Datei=>PDF-Export)

Die Voreinstellung für den Dateinamen des PDF files ist „FIX“ („MyFileName“), also konstant. Nun wollen wir den Namen allerdings dynamisch erzeugen. Als Beispiel wollen wir den Namen der Datendatei nehmen und dazu das aktuelle Datum anhängen. Also werden wir den Namen in einem kleinen Script zusammenbasteln und diesen dann an die „Export PDF“ Aktion weitergeben. Auch hierfür werden wir wieder „Runtime Values“ verwenden, auf diese kann man mit Seq_GetRuntimeValue und Seq_SetRuntimeValue innerhalb eines Scriptes zugreifen:

Task füge zur Sequenz eine Aktion „Script Ausführung“ hinzu, drücke „Neu“ und nenne das Script „GeneratePdfFilename“

Task schiebe die Aktion vor die „PDF Export“ Aktion

Task drücke „Bearbeiten“, schreibe folgende Zeilen und speichere das Script:

sDataFilePath = Seq_GetRuntimeValue("DATAFILEPATH")

sDataFileName = SplitPath(sDataFilePath)[3]
sDate = DT_Format(DT_GetCurrentTime(), "%x")
sPdfFileName = sDataFileName + "_" + sDate

Seq_SetRuntimeValue("PDF_FILENAME", sPdfFileName)

Task schalte die Dateinamensdefinition in der „PDF Export“ Aktion auf Sequencer_fromRV

Das wars, jetzt kann man die Sequenz laufen lassen, das exportierte PDF Dokument erhält nun dynamisch seinen Namen.

../../_images/sequencer-Tutorial3.png

6. Starten und steuern des Sequenzers aus externer Software heraus

Es ist ein üblicher Anwendungsfall eine Auswertung aus einer externen Software (z.B. Automatisierungssysteme, Datenbank Tools) heraus zu starten. Meistens müssen hierbei auch noch einzelne Parameter übergeben werden, wie z.B. der Pfad eines Datenfiles oder einige Flags zur Beeinflussung des Generierungsvorganges.

Dies ist durch die Verwendung des Sequenzers in UniPlot sehr einfach.

Hierzu muss einfach ein Batch file geschrieben werden, in dem der Ort des Arbeitsbereiches (/ws), der Name der Sequenz (/seq) und die Liste der Parameter (/rv) übergenben werden.

Task schalte die „Dateibrowser“ Aktion nun aus, wir wollen den Pfad zu unseren Daten nun im Batch file definieren

Task speichere den Arbeitsbereich mit Sequencer_Save und schließe UniPlot

Task erstelle ein Text file, kopiere die folgende Zeile hinein und speichere es als „MyCmd.bat“

C:\Uniplot\uniplot.exe /ws "D:\Projects\TutorialWS" /seq "Hello World" /rv "DATAFILEPATH = D:\Projects\TutorialWS\Data2.csv"

Task ändere den Pfad zur uniplot.exe wenn nötig

Task ändere den Pfad zum Arbeitsbereich wenn nötig

Task ändere den Pfad zum Daten file wenn nötig

Task speichere und schließe das batch file

Ein Doppelklick auf das file öffnet nun UniPlot und startet die Auswertung unter Verwendung von „Data2.csv“.

Um die automatische Auswertung nun zu vervollständigen wollen wir, daß sich UniPlot nach dem Export des PDF files automatisch schließt. Für solch kleine Aufgaben die nicht speziell konfiguriert werden müssen gibt es einen weiteren Aktionstyp, er heißt „Snippets“:

Task füge zur Sequenz eine Aktion „Snippet“ hinzu und wähle die Funktionalität „Shutdown“

Task schalte die Option „Öffne PDF“ in the „PDF Export“ Aktion aus

Speichere den Arbeitsbereich und schließe Uniplot. Starte das batch file, Uniplot ist nun bereit für eine komplett automatisierte Auswertung.

7. Bedingte Ausführung von Aktionen

Neben der Möglichkeit einzelne Aktionen mit der Checkbox in der Sequenzliste An und Aus zu schalten kann man über einen Runtime Value auch dynamisch steuern ob eine Aktion ausgeführt werden soll oder nicht.

Als Beispiel wollen wir nun einen zweiten Parameter zu unserem batch file hinzufügen welcher steuern soll ob der PDF Export ausgeführt werden soll oder nicht:

Task erweitere den /rv parameter im batch file mit dem Runtime Value „DO_PDF_EXPORT“

/rv „DATAFILEPATH = D:ProjectsTutorialWSData2.csv, DO_PDF_EXPORT = 1“

Task drücke Sequencer_Options in der „Export PDF“ Aktion

Task schalte „Bedingte Ausführung“ an und gib ein:

../../_images/sequencer-Tutorial4.png

Task drücke „OK“

Beachte das der Hintergrund der Checkbox in der Sequenzliste lila eingefärbt ist um anzuzeigen das die Aktion nun nur unter einer bestimmten Bedingung ausgeführt wird. Steuern lässt sich diese Bedingung nun über den Parameter „DO_PDF_EXPORT“ im batch file.

8. Mehrfache Ausführung von Aktionen

Neben der bedingten Ausführung gibt es auch noch ein weiteres allgemeines Feature in jeder Aktion, und dies ist die mehrfache Ausführung bzw. das Loopen von Aktionen. Hierbei wird die Aktion abhänging von der Größe einer Liste in einem Runtime Value mehrfach ausgeführt. Um diese Feature zu zeigen werden wir zwei neue Sequenzen erstellen:

Task drücke Sequencer_AddSequence und nenne die neue Sequenz „Start Sequenz“

Task drücke Sequencer_AddSequence und nenne die neue Sequenz „Looped Sequenz“

Task füge zur Sequenz „Start Sequenz“ eine Aktion „Setze Runtime values“ hinzu

Task füge hier einen Runtime Value „PATH_LIST“ hinzu und setze seinen Wert auf

C:\MyFile1.txt, C:\MyFile2.txt, C:\MyFile3.txt

Task füge zur Sequenz „Start Sequenz“ eine Aktion „Starte Sequenz“ hinzu und wähle hier „Looped Sequenz“ aus

Task drücke Sequencer_Options in der „Starte Sequenz“ Aktion

Task aktiviere hier „Mehrfache Ausführung“ und gib ein:

../../_images/sequencer-Tutorial5.png

Task drücke „OK“

Task drücke Sequencer_GoSubSeq um in die Subsequenz zu springen

Task füge zur Subsequenz „Looped Sequenz“ eine Aktion „Script Ausführung“ hinzu, bearbeite und schreibe:

sPath = Seq_GetRuntimeValue("SINGLE_PATH")

sMessage = "In diesem Durchlauf der Subsequenz kannst du SINGLE_PATH\n"
sMessage = sMessage + "mit seinem Wert \"" + sPath + "\" verwenden!"

MessageBox(sMessage)

Task speichere das Script

../../_images/sequencer-Tutorial6.png

Starte nun die Sequenz „Start Sequence“. Die Subsequenz „Looped Sequenz“ wird nun für jeden Eintrag aus dem Runtime Value „PATH_LIST“ aufgerufen wobei sich der Wert von „SINGLE_PATH“ jeweils ändert.

Ein geläufiger Anwendungsfall für diese Feature ist z.B. die Definition einer Dateiliste in einem batch file um mehrere Auswertungen mit verschiedenen Datenfiles über eine Aufruf anzusteuern.

9. Fazit

Glückwunsch, wir haben nun unseren ersten eigenen Abeitsbereich mit einer kleinen Liste von Sequenzen erstellt!

Versuche doch mal den Sequenzer in einem deiner nächsten Projekte einzusetzen, wir sind sicher das dieses neue Feautre das Strukturieren der Auswertungen erleichtern wird. Auch das schnelle Wechseln zwischen Projekten und die Möglichkeit separat einzelne Teile der Auswertung mit nur einem Mausklick auszuführen werden helfen.

Wir sind offen für ein allgemeines Feedback oder Vorschläge für neue Aktionstypen und Snippets!

Dies wird auch Basis dafür sein in welche Richtung wir dieses Feature weiterentwickeln.

id-1074338