2010-09-20 4 views
5

Ich bin auf der Suche nach einem Framework, das die Ausführung von hierarchischen Automaten (HSMs) bietet.Welche Ausführungs-Frameworks von State Machine für C++ implementieren die UML-Semantik?

Dies sind die Anforderungen an den Rahmen:

  • Entspricht UML Zustandsmaschine Semantik (soweit wie möglich)
  • unterstützt mindestens
    • run-to-Completion-Semantik
    • Hierarchische Zustände
    • Ein- und Ausgangsaktionen
    • tra nsition Aktionen
    • Wachen
    • Ereignisse mit benutzerdefinierten Parametern
  • sind objektorientiert oder nicht zumindest nicht verbieten OO-Design

Die Zielplattform eines mittel- bis großen Embedded-System ist mit einem Betriebssystem.

Kennen Sie ein Framework, das die oben genannten Anforderungen erfüllt? Was sind die Vor- und Nachteile Ihres Frameworks?

Antwort

4

Überprüfen Sie die Quantum Platform.

Ich habe es für mehrere eingebettete Projekte (von sehr klein bis sehr groß) verwendet, und es unterstützt alle von Ihnen benötigten Elemente und vieles mehr.

Die Webseite für die QP erklärt sich viel besser als ich hier.

Beachten Sie, dass die QP nicht 100% der in der UML-Spezifikation spezifizierten Funktionalität implementiert, aber die Abweichungen sind klar erklärt, und bei all meiner Erfahrung mit der QP war keine von ihnen ein Problem für das Projekt.

Es gibt auch 2 Boost Statechart-Pakete, von denen Sie zu wissen scheinen.

+0

Danke, das sieht interessant aus. Ich werde QP natürlich genauer unter die Lupe nehmen. – theDmi

4

Sie sollten gehen und überprüfen Sie Boost MSM, es ist neu für Boost 1.44, aber scheint ziemlich vollständig. Ich habe es noch nicht selbst ausprobiert, aber es sieht ziemlich vielversprechend aus.

+0

Danke für den Tipp. Ich habe es vorher gewusst und es scheint eine der vielversprechendsten Lösungen zu sein. – theDmi

+0

auf halb-großen Zustandsmaschinen wird es unbrauchbar wegen sehr langsamer Kompilierungszeiten. – asaenko

1

Wenn Sie nach einem Framework suchen, das hierarchische und konkurrierende State-Maschinen mit UML-Semantik (Entry/Exit, Transitionen, Wächter, Ereignisse mit Parametern, asynchron/synchron) unterstützt, werfen Sie einen Blick auf meine state machine code and diagram generator.

Anstatt die State Machine "von Hand" zu implementieren, beschreiben Sie die State Machine in einer einfachen lesbaren und beschreibbaren XML-Beschreibung und lassen Sie den State Machine Generator die Code-Quelle in C++, C# oder Java schreiben.

Eigentlich kann der generierte Code für die C++ - Version problemlos für ein mittelgroßes/großes Embedded-System kompiliert werden. Es wurde bereits gemacht.

1

Sie können sich mein C++ Template-Klassenframework STTCL ansehen, das dazu dient, Implementierungsklassen die UML 2.2-Zustandsdiagrammnotation zuzuordnen.Der STTCL-Ansatz ist eine Verfeinerung des GoF-Zustandsmusters und versucht, die Lücke (n) zur UML-Zustandsdiagrammnotation zu füllen.

Die Rahmen Implementierungen sind konfigurierbar in Bezug auf OS Abhängigkeiten wie weit diese (nur für asynchrone Ausführung Modelle) benötigt werden.

Es gibt eine PDF document zur Verfügung, das Konzept näher erläutern.

+0

Hallo, es scheint, dass dein Code von Boost abhängt. Ich habe in letzter Zeit State Machine Frameworks ausgewertet, und wenn Boost eine Abhängigkeit ist, warum sollte man STTCL über Boost StateCharts und Boost MSM wählen? Insbesondere Boost :: StateCharts ist auch eine Verfeinerung des GoF-Zustandsmusters. – krapht

3

Ab heute gibt es eine neue C++ (unterstützt C++ 11 und C++ 03 mit Boost) Alternative verfügbar. Es heißt yasmine (und ich bin der Architekt). Es erfüllt alle oben genannten Anforderungen.

Einige Vor-und Nachteile (von der yasmine Webseite zitiert):

Vorteile von Yasmine mit

  • Sie bietet eine vollständige Implementierung von UML-Zustands Semantik.
  • Yasmine ist ein modernes C++ Implementierung C++ 11 (C++ 03-Unterstützung verfügbar ist, auch) verwendet wird.
  • Weil es C++ (und nicht C) integriert der Code gut in OO-Code.
  • Sie ist gut dokumentiert [...]
  • Da sie Open Source ist, können Sie ihre Implementierung überprüfen. Dies garantiert auch langfristige Nutzbarkeit und Verfügbarkeit.
  • Die Bibliothek ermöglicht es Ihnen, Zustandsmaschinen zur Laufzeit zu erstellen.
  • [...]

Was Yasmine ist nicht

Sie ist kein Mindest Fußdruck-Bibliothek, die jedes System auf Lauf priorisiert egal auf wie wenige Ressourcen zur Verfügung stehen. Yasmine ist nicht Ressource hungrig, aber sie kann nicht (und will nicht) no-Abstraktion Bibliotheken mit switch-case-basiertem Bare-Metal konkurrieren.

Hinweis

Ich weiß, dass dies eine alte Frage, aber es ist Googles # 1 für „C++ uml Zustandsmaschine“, die es sehr relevant macht.

Verwandte Themen