zeitliches Ereignis in Zustandsdiagramm

OP #4437920
Hallo Community,

Ich beschäftige mich gerade mit richtiger Darstellung von 
Zustandsdiagrammen von Echtzeitsystemen.

In einer Aufgabe wird das zeitliche Ereignis "TIME", der von einer 
externen Hardware kommt, 1 mal pro Sekunde erfasst.

Der Ablauf ist ganz einfach:

wenn man eine Taste betätigt, wird Led geschaltet "led(on)", nach 10 s 
wird das Led wieder ausgeschaltet "led(off)". Das System geht zurück in 
Zustand "WAIT" rüber. Nun bin ich mir nicht 100%-tig sicher, wie ich die 
Bedingung "Zustand nach Ablauf von 10 s verlassen" richtig darstellen 
soll.

Hierfür habe ich zwei Varianten erstellt, die für mich infrage kommen 
beide sind auf dem Bild im Anhang.

welche davon würde Eurer Meinung nach richtig sein?

würde mich über Ihre Antworten freuen!
Angehängte Dateien:
Gast
aso jetzt seh ichs.

Variante 1 ist richtig, Variante 2 ist unklar. Wenn du was UML konform 
machen willst, dann willst du abstrahieren. In der UML gibt es für 
Zeitliche Bedinungen eigene Zeichen. Ich empfehle:
Kauf dir ein gutes Buch, dass kann das viel besser erklären als hier in 
einem Forum
Gast
der Zustandsübergang wird nach UML wie folgt notiert:

ereignis [guard] / action

Da gibt es nicht die eine richtige Variante. Das ist wie bei der 
Programmierung. Es gibt Millionen richtiger Lösungen für ein und das 
selbe Problem.

Anbei zur Verdeutlichung mal ein paar Varianten.
Die funktionieren auch alle :-D hab es gleich mal getestet ;-)


Gruß Prof. J.R.B LOL
Angehängte Dateien:
@  J.R.Becher (Gast)

>Da gibt es nicht die eine richtige Variante. Das ist wie bei der
>Programmierung. Es gibt Millionen richtiger Lösungen für ein und das
>selbe Problem.

Stimmt, aber darum geht es hier nicht, sondern um eine einheitliche, 
allgemeinverständliche Notation, aka Sprache, und die sollte besonders 
im technischen Umfeld EINdeutig sein und keinen ungünstigen 
Interpretationsspielraum lassen.
Gast
UML ist doch eindeutig und exakt und eine Sprache :-D ... schau dir 
meine Modelle mal an, die sind soweit ein-ein-deutig, dass der 
Codegenerator daraus sofort ohne zu zucken stabile Zustandsmaschinen 
generiert hat die ich sofort aufs Target schießen konnte um sie zu 
testen... allgemein verständlich kannst du aber vergessen glaub ich... 
einen Schaltplan kann auch nur der lesen der die Notation also die 
Sprache erlernt hat...

was deine Modelle betrifft so sind die soweit doch recht OK, beide 
Varianten außer dem Notationsfehler bei der Transition zum Zustand 1 zu 
Zustand 1 die einzelne eckige Klammer ist Schrott und du musst beachten, 
dass in Eckigen Klammern immer die Bedingungen stehen. Desweiteren 
solltest du dir darüber einig werden ob TIME eine Variable (Signal) oder 
ein Ereignis ist. Mal benutzt du TIME als Variable indem du einen Wert 
zuweist und das nächste mal notierst du TIME als Ereignis an der 
Transition. Warum benutzt du kein UML-Werkzeug was dir aus deiner SM 
lauffähigen Code baut? Dann kannst du doch deine Eindeutigkeit und 
Widerspruchsfreiheit wunderbar checken ;-)

Gruß
@  J.R.Becher (Gast)

>testen... allgemein verständlich kannst du aber vergessen glaub ich...

Darum geht es gar nicht.

>einen Schaltplan kann auch nur der lesen der die Notation also die
>Sprache erlernt hat...

DARUM geht es!
Gast
>ich verwende SiSy ... hab das Projekt mal dran gehängt

Sisy ist mir schon vor einiger Zeit aufgefallen. Ich würde es vielleicht 
verwenden, wenn es auch Code für PC-Applikationen in C++ oder Java 
erzeugen könnte.
Gerade eben habe ich mal Eclipse Papyrus heruntergeladen.

https://eclipse.org/papyrus/index.php

und versuche damit Code zu generieren.
Es scheint für C++ zu gehen, wenn man das C++ Codegenerator Plugin 
installiert. Eigentlich wollte ich es erst mal für Java, aber das 
scheint nicht zu gehen.
Gast
Die Frequenz vom do ist per UML nicht geregelt... das muss man sich dann 
in der Implementation der SM auf dem jeweiligen System anschauen. In 
SiSy ist das do nicht automatisch festgelegt. Man muss als Entwickler 
festlegen welche Operation das do triggert. Ich lass das do letztlich 
immer aus der Mainloop triggern. Man könnte sich aber auch darauf 
festlegen es immer aus dem SysTick heraus, also alle 10ms, zu triggern. 
Das mach ich aber nicht so gern.
Für JAVA ist ECLIPSE oder NETBEANS wohl das coolste. Meine kleinen 
PC-Applikationen zur Visualisierung von Daten meiner Mikrocontroller 
nutze ich trotzdem SiSy mit C++ für Windows... Ist zwar nicht so sexy 
gelöst wie die Mikrocontrollersachen geht total easy... guckst du hier. 
www.mySVL.de

Gruß JRB

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.