Forum: Mikrocontroller und Digitale Elektronik zeitliches Ereignis in Zustandsdiagramm


von Florian S. (sirius7)


Angehängte Dateien:

Lesenswert?

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!

von -.-.- (Gast)


Lesenswert?

kurze Frage: Wo in deinen Diagrammen sind die 10s?

von -.-.- (Gast)


Lesenswert?

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

von Florian S. (sirius7)


Lesenswert?

-.-.- schrieb:
> kurze Frage: Wo in deinen Diagrammen sind die 10s?

das habe ich als Ereignis TIME[T>10] dargestellt. Aber genau das ist 
auch der Kern meiner Frage, ob die Darstellung so richtig und für Prof 
nachvollziehbar ist

von J.R.Becher (Gast)


Angehängte Dateien:

Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@  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.

von J.R.Becher (Gast)


Lesenswert?

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ß

von Falk B. (falk)


Lesenswert?

@  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!

von J.R.Becher (Gast)


Lesenswert?

na dann... UML lernen!!! LOL

von chris_ (Gast)


Lesenswert?

Hallo J.R.,

mich würde interessieren, welches UML-Tool Du verwendest.
Ich habe vor kurzem mal das hier heruntergeladen:

https://www.modelio.org/

Aber leider lief es nicht.

von J.R.Becher (Gast)


Angehängte Dateien:

Lesenswert?

ich verwende SiSy ... hab das Projekt mal dran gehängt


Gruß

von Florian S. (sirius7)


Lesenswert?

also mit do/ ist mir nicht ganz klar, wenn do/counter++ steht, mit 
welcher Frequenz würde denn dieser Befehl ablaufen, wenn 
zwischenzeitlich keine zeitlichen Ereignisse/Events statt finden?

von chris_ (Gast)


Lesenswert?

>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.

von J.R.Becher (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.