Human Machine Interface Design mit State Chart XML

Evaluation von SCXML zur Nutzung in Model-Driven Development anhand der Implementierung des Qt Creators und Qt Frameworks


Seminararbeit, 2018

30 Seiten, Note: 1,0


Leseprobe


SCXML greift die Ideen von Harel auf, denn es basiert auf Harel statecharts
und CCXML (Call Control XML) und wird seit September 2015 als Empfeh-
lung (Recommendation) des [W3C, 2015] geführt. Bei SCXML handelt es sich
unabhängig von HMI um eine Möglichkeit einen Prozess zu steuern. Es bietet
die Möglichkeit Verhaltenslogik über einen Zustandsautomaten abzubilden und
gehört zum Bereich Model Driven Development. SCXML ist verwandt mit UML
statecharts [OMG UML, 2017], bietet aber zusätzlich im Gegensatz zu UML
statecharts eine deterministisch arbeitende Ausführungsumgebung für erstellte
Zustandsdiagramme. SCXML verarbeitet automatisch Zustände, Zustandsüber-
gänge sowie Ereignisse und ermöglicht parallele Abläufe. Ein Zustandsautomat
wird in SCXML deklarativ definiert und kann um imperative Elemente (z. B.
EcmaScript) erweitert werden.
Einige Anwendungsszenarien sind:
­ SCXML als neu zu verwendender Standard für CCXML 2.0 eingesetzt bei
VoiceXML [W3C, 2010]
­ Multimodale Anwendungen als Interaktionsmanager [Dahl, 2017]
­ Entwicklung von Benutzerschnittstellen [Gavin Kistner, 2014]
­ Hardwareprogrammierung/VHDL [uSCXML, 2017]
­ Als allgemeine Steuerungssprache für Prozesse
­ Protokollverarbeitung mit endlicher Anzahl Zustände (z. B. FTP)
Ziel dieses Papers ist die Evaluation von SCXML zur Nutzung von Model
Driven Development anhand der Implementierung des Qt Creators und Qt Fra-
meworks. Dafür wurde die bestehende Implementierung in Qt gezielt nach Stär-
ken und Schwächen untersucht und ein Praxisbeispiel als Widget-basierte Qt
Anwendung entwickelt um die Anwendbarkeit im Kontext für HMI Design zu
testen. Es soll herausgefunden werden, ob man eine Qt Anwendung durch einen
Zustandsautomaten steuern kann, ohne dass die Verhaltenslogik zusätzlich in
C++ ausgedrückt werden muss.
2
Grundlagen
Bei SCXML handelt sich um ein Dateiformat und eine Notation für Zustands-
diagramme (genauer Zustandsübergangsdiagramme) als auch um eine generische
Ausführungsumgebung für solche. In diesem Kapitel werden die wichtigsten Ele-
mente kurz erläutert.
2.1
Dateiformat und Notation
Die einzelnen Elemente werden in einer XML-basierten Sprache definiert. SCXML
beinhalten keine Layoutinformationen wie Elemente grafisch anzuordnen sind
z. B. wie es bei State Chart UML der Fall ist. Im Quelltextbeispiel 1.1, wird ein
Zustandsautomat ausschnittsweise gezeigt.
2

Listing 1.1: Beispiel für einen Zustandsautomaten, der eine Verkehrsampel für
den Straßenverkehr in Deutschland implementiert. Die Reihenfolge der Abarbei-
tung der Ausführung ist mit Buchstaben am Anfang jeder Zeile gekennzeichnet,
beginnend mit a (m führt dann als nächstes zu b). Das Beispiel ist eine Endlos-
schleife und läßt die Zustände von Rot über Gelb bis Grün abarbeiten und dann
umgekehrt. Der Zustand yellow ist ein zusammengesetzter Zustand mit zwei
untergeordneten Zuständen, von denen immer nur einer aktiv ist, wenn yellow
aktiv ist [Qt Example Traffic Light, 2017].
e <
s t a t e
i d="red">
<onentry>
f
<
send e v e n t
=" startGoingGreen " d e l a y="3s"/>
</onentry>
g
<
t r a n s i t i o n e v e n t
=" startGoingGreen "
t a r g e t=" redGoingGreen "/>
</
s t a t e
>
a <
s t a t e
i d=" yellow " i n i t i a l =" greenGoingRed ">
h
<
s t a t e
i d=" redGoingGreen ">
<onentry>
i
<
send e v e n t
=" goGreen " d e l a y="1s"/>
</onentry>
j
<
t r a n s i t i o n e v e n t
=" goGreen " t a r g e t=" green "/>
</
s t a t e
>
b
<
s t a t e
i d=" greenGoingRed ">
<onentry>
c
<
send e v e n t
=" goRed " d e l a y="1s"/>
</onentry>
d
<
t r a n s i t i o n e v e n t
=" goRed " t a r g e t="red"/>
</
s t a t e
>
</
s t a t e
>
k <
s t a t e
i d=" green ">
<onentry>
l
<
send e v e n t
=" startGoingRed " d e l a y="3s"/>
</onentry>
m
<
t r a n s i t i o n e v e n t
=" startGoingRed "
t a r g e t=" greenGoingRed "/>
</
s t a t e
>
2.2
Deklarative Elemente in einem SCXML-Dokument
SCXML ermöglicht eine hierarchische Struktur, da Zustände innerhalb von an-
deren Zuständen verschachtelt deklariert werden können. Folgende Abschnitte
3

beschreiben kurz die wichtigsten Tags und deren Eigenschaften, die für dieses
Paper relevant sind.
Zustände <state id=...>
Die optinale Eigenschaft id ist der Zustandsname. Während der Ausführung
kann ein Zustand entweder aktiv oder inaktiv sein.
initial=... als weitere optionale Eigenschaft eines Zustands definiert den
Startzustand bei Zuständen auf gleicher Ebene.
<onentry> und <onexit> sind Elemente, die ausführbare Inhalte enthalten,
die ausgeführt werden sollen, wenn der Zustand aktiv bzw. inaktiv wird. Sie
können den Tag <script> beinhalten (für imperative Anweisungen).
Zustandsübergänge <transition target=...>
Sie definieren einen möglichen Zustandsübergang zwischen zwei Zuständen.
target bezeichnet den Namen des Zielzustands. Optional kann mit der Ei-
genschaft event der Zustandsübergang eingeleitet werden, sobald ein Ereignis
(englisch event) auftritt. Mit der Eigenschaft cond ist es möglich eine Bedingung
festzulegen, die erfüllt werden muss, wenn der Zustandsübergang ausgeführt wer-
den soll.
Ereignisse <send event=...>
Die Eigenschaft event bezeichnet den Namen des Ereignisses. Ereignisse wer-
den intern innerhalb des SCXML-Dokuments verarbeitet oder nach extern wei-
tergereicht. Die optionale Eigenschaft delay legt fest nach wie vielen Sekunden
der Event ausgelöst werden soll, wenn der entsprechende Event ausgeführt wird.
Parallele Zustände <parallel id=...>
Die optionale Eigenschaft id ist der Zustandsname.
Das parallele Element kapselt eine Reihe von untergeordneten Zuständen
(u. a. <state> und <parallel>), die gleichzeitig aktiv sind während der Aus-
führung, wenn das übergeordnete Element aktiv ist.
Historische Zustände <history id...>
Diese Zustände (im Englischen history states) ermöglichen die automatische
Speicherung eines Zustands in seiner aktuellen Konfiguration, z. B. bei einem
zusammengesetzten Zustand wird für alle betroffenen Zustände gespeichert, ob
sie aktiv sind oder nicht, wenn der übergeordnete Zustand inaktiv wird (es gibt
zwei Modi für die Eigenschaft type: deep und shallow).
Um den gespeicherten Zustand wieder herzustellen, benötigt man einen Zu-
standsübergang, der ein history state als Ziel hat, dann wird bei der Ausführung
dieses Zustandsübergangs der gespeicherte Zustand verwendet um die vorherige
Konfiguration wiederherzustellen.
Die optionale Eigenschaft id ist der Zustandsname. <history> wird als Pseu-
dozustand angesehen.
4

Zusammengesetzte Zustände Ein zusammengesetzter Zustand ist ein <state>,
der u. a. <state> und <parallel> als Kinder (oder eine Kombination davon)
haben kann.
2.3
Imperative Elemente in einem SCXML-Dokument
Betrachtet wird hier nur die Möglichkeit Datenmodelle zu verwenden um ei-
ne imperative Steuerung und imperative Anweisungen für eine Anwendung zu
ermöglichen.
In Qt ist es möglich C++ als Datenmodell zu verwenden, sodass man be-
liebige C++ Anweisungen innerhalb des Tags <script> sowie beliebige C++
Ausdrücke im Tag <transition cond=...> für die Bedingung verwenden kann.
2.4
Ausführungsumgebung
Die Ausführungsumgebung ist zustandsbasiert. Der SCXML Prozessor verarbei-
tet automatisch eingehende Ereignisse und führt selbständig Zugangsübergänge
durch um die Zustände zu verwalten wie genau beschreibt der SCXML Standard
folgendermaßen:
Determinismus Es wird mit Hilfe der XML-Dokumentenreihenfolge eine Ge-
samtreihenfolge bei der Ausführung von Zustandsübergängen, <onentry> und
<onexit> definiert und damit implizit die Priorität kodiert. Damit ermöglicht
SCXML deterministische Programmabläufe.
Parallele Verarbeitung Neue eingehende Ereignisse können die Verarbeitung
des aktuellen Ereignisses nicht unterbrechen und müssen gespeichert werden (ty-
pischerweise in einer Ereigniswarteschlange), bis der Zustandsautomat wieder
untätig wird. Diese Semantik vermeidet jegliche interne Probleme durch Gleich-
zeitigkeit innerhalb eines einzelnen Zustandsautomaten. Es werden somit keine
Threads für die Verarbeitung eingesetzt, sondern es findet eine sequentielle Ver-
arbeitung statt.
Mikroschritt im Englischen microstep, kann die aktuelle Konfiguration än-
dern, das Datenmodell aktualisieren und/oder neue (interne und/oder externe)
Ereignisse erzeugen. Dies wiederum kann kausal bedingt zusätzliche Zustands-
übergänge ermöglichen, die im nächsten Mikroschritt in der Sequenz behandelt
werden, und so weiter.
Makroschritt im Englischen macrostep, besteht aus einer Sequenz von Mi-
kroschritten, an deren Ende sich die Zustandsmaschine in einem stabilen Zu-
stand befindet und bereit ist, ein externes Ereignis zu verarbeiten. Jedes externe
Ereignis veranlasst eine SCXML-Zustandsmaschine, genau einen Makroschritt
auszuführen.
5

3
Übersicht über bestehende Implementierungen von
SCXML
In diesem Kapitel wird beschrieben, welche grafischen Editoren für SCXML exi-
stieren und mit welcher Programmiersprache es eingesetzt werden kann. Au-
ßerdem wird aufgeführt mit welchen Technologien SCXML umgesetzt wurde
und wie es verwendet werden kann. Dabei gibt es prinzipiell zwei Ausführun-
gen der Verwendung: entweder wird das SCXML-Dokument zur Laufzeit eines
Programms interpretiert, oder man kann es in lauffähigen Quelltext einer Pro-
grammiersprache übersetzen lassen (mittels eines Compilers/Transpilers wird
der Zustandsautomat mit all seinen Zuständen und Übergängen zusammen mit
der Ausführungslogik in die jeweilige Zielprogrammiersprache übersetzt).
Implementierungen gibt es folgende: Der SCXML Standard des W3C beschreibt
einen Algorithmus für eine mögliche Implementierung. Neben diesem gibt es
einige, die SCXML in unterschiedlicher Ausprägung anbieten. Es existieren Im-
plementierungen für EcmaScript (bekannt als JavaScript), Java, C++ , Python,
Lua und C#. All diese werden als aktive Open Source-Projekte geführt und sind
in der Regel kleine Projekte mit einer Person als Initiator. Größter und auch ein-
ziger kommerzieller Anbieter ist [The Qt Company, 2018], deren Umsetzung von
SCXML innerhalb des Qt Frameworks in diesem Paper genauer untersucht wird.
Neben dem grafischen Editor für SCXML von Qt gibt es aktuell aktiv nur noch
einen anderen grafischen Editor als Eclipse Plugin [scxmlgui, 2017] realisiert (als
Bestandteil des Open Source Projektes von Apache Commons). Anbieter von
grafischen Editoren für State Chart UML und Alternativen zu SCXML aus dem
Bereich Model Driven Development wurden nicht berücksichtigt.
Tabelle 1 zeigt eine Übersicht über die verschiedenen Implementierungen und
deren wichtige Merkmale.
Weiterhin gibt es eine Untersuchung zu der Performance der jeweiligen Imple-
mentierung von SCXML. Die Autoren von uSCXML haben eine Benchmark für
alle bekannten SCXML Implementierungen am 13.07.2017 veröffentlicht [tklab-
tud, 2017].
6

Tabelle 1: Übersicht über bestehende Implementierungen von SCXML. Größ-
ter und auch einziger kommerzieller Anbieter ist The Qt Company mit seiner
Implementierung in Qt.
Name
Sprache
Version und Lizenz Beschreibung
uSCXML
C++
Java
C#
Python
Lua
v3.2
1.08.2017
BSD-2-Clause
Ist ein SCXML-Interpreter und
Transpiler/Compiler in C++ ge-
schrieben. Übersetzt laut Anbie-
ter von SCXML nach ANSI-C
und VHDL (u. a. für Ardui-
no) sowie in weitere Sprachen.
W3C IRPtests des Anbieters zei-
gen Grad der Kompatibilität zu
SCXML [uSCXML, 2017].
scxmlcc
C++
v0.8.5
5.06.2017
GNU GPL v3
Leichtgewichtige
STL
Umset-
zung in C++ laut Anbieter.
Kompatibilität: Nicht vollstän-
dig umgesetzt wurden paralle-
le Zustände und history states
[scxmlcc, 2017].
Apache
Commons
SCXML
Java
v0.9 und v2.0
11.12.2017
Apache License 2.0
Die
aktuelle
Implementierung
steht kurz vor der Fertigstellung
für ein erstes 2.0-Release. Diese
Version ist nahezu 100 % kon-
form mit SCXML laut Anbie-
ter [Apache Commons SCXML,
2017].
SCION
JavaScript v3.1
10.04.2017
Apache License 2.0
Kompatibilität: Nahezu 100 %
konform mit dem SCXML Inter-
pretationsalgorithmus laut An-
bieter [SCION, 2017].
LXSC
Lua
v0.12.1
30.06.2015
MIT License
Ist ein Interpreter und erlaubt
die
Verwendung
eines
Lua-
Datenmodells. Nahezu 100 %
konform mit dem SCXML In-
terpretationsalgorithmus
laut
Anbieter [LXSC, 2015].
Qt
C++
v5.10
7.12.2017
u. a. GNU GPL v3
Kommerzieller Anbieter. Kom-
patibilität: Nahezu 100 % kon-
form mit SCXML laut Anbieter
[Qt SCXML, 2017].
7

4
Untersuchung des Qt SCXML Moduls und dessen
Integration in Qt Creator
Für dieses Paper wurden die zum Zeitpunkt der Erstellung aktuellen Versionen
untersucht: Qt 5.10 mit Qt Creator 4.5.
4.1
Unterstützungshistorie
Die IDE Qt Creator ab Version 4.2 enthält einen grafischen Editor für SCXML,
der aber bislang als experimental markiert ist [Ziller, 2016]. Das Modul Qt
SCXML des Qt Frameworks wurde mit Qt 5.7 als Vorschau veröffentlicht und
ist seit Qt 5.8 offizieller Bestandteil mit stabiler API . Es baut direkt auf das Qt
Statemachine Framework auf (aber mit verschiedenen Implementierungsdetails).
Das Qt Statemachine Framework bietet eine Unterstützung für die Entwicklung
von Zustandsautomaten seit Qt 4.6 [aportale, 2017].
4.2
Abgrenzung von Qt SCXML zu älterem Qt Statemachine
Framework
In der offiziellen Dokumentation von Qt wird beschrieben, was den Unterschied
ausmacht: Das Qt SCXML-Modul unterscheidet sich vom State Machine Frame-
work im Qt Core-Modul dadurch, dass Qt SCXML einen konformen Prozessor
zur Verfügung stellt, der konforme SCXML-Dokumente parsen und verarbeiten
kann. In Qt SCXML werden Zustandsautomaten aus separaten SCXML-Dateien
gelesen und in Qt-Anwendungen integriert, indem die Klasse QScxmlStateMachine
instanziiert und eine SCXML-Datei dynamisch geladen wird oder indem der Qt
SCXML Compiler verwendet wird, um eine Unterklasse von QScxmlStateMachine
zu erzeugen, die instanziiert wird. Die Kommunikation mit dem SCXML-Dokument
erfolgt über die Signals und Methoden der Klasse QScxmlStateMachine [Offizi-
elle Qt SCXML Dokumentation, 2017].
Das ältere Qt Statemachine Framework wird in der offiziellen Dokumentation wie
folgt beschrieben: Das Statemachine Framework stellt Klassen für die Erstellung
und Ausführung von Zustandsgraphen zur Verfügung. Die Konzepte und Nota-
tionen basieren auf denen aus Harels Statecharts: Ein visueller Formalismus für
komplexe Systeme, der auch die Grundlage für UML-Zustandsdiagramme bildet.
Die Semantik der Ausführung von Zustandsautomaten basiert auf SCXML [Qt
Statemachine Framework Dokumentation, 2017].
Das Quelltextbeispiel 1.2 zeigt wie ein Zustandsgraph innerhalb des Statemachi-
ne Framework erstellt werden kann.
Listing 1.2: Statemachine Framework: Das Beispiel verdeutlicht wie Zustände
und Zustandsübergänge per Programmcode miteinander verknüpft werden müs-
sen [Qt Statemachine Framework Dokumentation, 2017].
QState
s1 = new QState ( ) ;
QState
s11 = new QState ( s1 ) ;
QState
s12 = new QState ( s1 ) ;
8

QState
s13 = new QState ( s1 ) ;
s1
->s e t I n i t i a l S t a t e ( s11 ) ;
machine . a d d S t a t e ( s 1 ) ;
Q F i n a l S t a t e
s2 = new QFinalState ( ) ;
s1
->addTransition ( quitButton , SIGNAL( c l i c k e d ( ) ) , s2 ) ;
machine . a d d S t a t e ( s 2 ) ;
machine . s e t I n i t i a l S t a t e ( s 1 ) ;
Laut Aussage in einem Vortrag des Qt Senior Software Engineer Ulf Hermann
auf der Qt World Summit 2016 ist im älteren Statemachine Framework jeder Zu-
stand ein echtes QObject während der Ausführung und skaliert (er nennt Syste-
me mit mehreren 1000 Zuständen) daher schlechter als das neuere SCXML Mo-
dul hinsichtlich Speicherverbrauch und Ausführungsgeschwindigkeit [QtWS16
ab Minute 37:10s, 2016]. Außerdem sagt er, dass beide Varianten nicht zu 100 %
zueinander kompatibel sind, da beide Systeme jeweils Möglichkeiten bieten, die
im jeweiligen anderen System nicht vorkommen. Dennoch beschreibt er viele
Gemeinsamkeiten und empfiehlt für neue Anwendungen SCXML und für alte
Anwendungen eine Konvertierung nach SCXML.
Ein objektiver Vorteil von Qt SCXML gegenüber dem älteren Statemachine
Framework ist die Unterstützung des kommenden Standards SCXML und die
Möglichkeit Zustandsdiagramme grafisch schnell modellieren zu können. Abbil-
dung 2 zeigt den grafischen Editor des Qt Creator mit einem geöffnetem SCXML
Dokument.
Das Statemachine Framework kann auch für QML-Anwendungen verwendet
werden. Für QML gibt es eine entsprechende Unterstützung, das auf SCXML
basiert, um die Elemente und Semantik von Zustandsdiagrammen in QML-
Anwendungen einzubetten [QML Statemachine, 2016].
4.3
Abgrenzung von Qt SCXML zu QML States
Für Benutzeroberflächen mit mehreren visuellen Zuständen, unabhängig vom lo-
gischen Zustand der Anwendung, sollte laut Qt Dokumentation die Verwendung
von QML-Zuständen und mit Zustandsübergängen in Betracht gezogen werden
[QML States, 2016]. In QML sind Zustände eine Menge von Eigenschaftskonfi-
gurationen, die in einem Zustandselement definiert sind.
Diese Implementierung ist dazu gedacht Animationen und Eigenschaftsände-
rungen von grafischen Elementen innerhalb eines QML-Dokuments zu steuern,
nicht aber um die Verhaltenslogik für Anwendungen im Ganzen zu steuern. Im
Quelltextbeispiel 1.3 wird ein Rechteck mit zwei Farben definiert. In welcher
Farbe das Rechteck angezeigt wird, hängt vom festgelegten Zustand ab.
9
Ende der Leseprobe aus 30 Seiten

Details

Titel
Human Machine Interface Design mit State Chart XML
Untertitel
Evaluation von SCXML zur Nutzung in Model-Driven Development anhand der Implementierung des Qt Creators und Qt Frameworks
Hochschule
Hochschule Darmstadt
Note
1,0
Autor
Jahr
2018
Seiten
30
Katalognummer
V424857
ISBN (eBook)
9783668744097
ISBN (Buch)
9783668744103
Dateigröße
706 KB
Sprache
Deutsch
Schlagworte
human, machine, interface, design, state, chart, evaluation, scxml, nutzung, model-driven, development, implementierung, creators, frameworks
Arbeit zitieren
Bernd Noetscher (Autor:in), 2018, Human Machine Interface Design mit State Chart XML, München, GRIN Verlag, https://www.grin.com/document/424857

Kommentare

  • Noch keine Kommentare.
Blick ins Buch
Titel: Human Machine Interface Design mit State Chart XML



Ihre Arbeit hochladen

Ihre Hausarbeit / Abschlussarbeit:

- Publikation als eBook und Buch
- Hohes Honorar auf die Verkäufe
- Für Sie komplett kostenlos – mit ISBN
- Es dauert nur 5 Minuten
- Jede Arbeit findet Leser

Kostenlos Autor werden