2010-09-20 56 views
5

我在尋找一個框架,它提供了分層狀態機(HSM)的執行。C++的哪個狀態機執行框架實現UML語義?

這些是框架的要求:

  • 符合UML狀態機語義(儘可能地)
  • 支持至少
    • 運行到完成語義
    • 分層狀態
    • 進入和退出動作
    • tra nsition行動
    • 衛士
    • 事件與自定義參數
  • 是面向對象的或沒有至少沒有禁止OO設計

目標平臺是一箇中型到大型嵌入式系統與操作系統。

你知道一個滿足上述要求的框架嗎?你的框架有什麼優點和缺點?

回答

4

查看Quantum Platform

我已經在幾個嵌入式項目(從非常小到很大)使用它,它支持所有你需要的子彈項目,等等。

QP的網頁比我在這裏可以做的更好地解釋自己。

請注意,QP並未實現UML規範中指定功能的100%,但清楚地解釋了這些偏離,在我對QP的所有經驗中,他們都沒有成爲該項目的問題。

還有2個Boost狀態圖包,你似乎知道。

+0

謝謝,這看起來很有趣。我一定會仔細看看QP。 – theDmi 2010-09-21 19:57:51

4

你應該去看看Boost MSM,這是Boost 1.44的新功能,但看起來相當完整。我還沒有嘗試過,但看起來很有希望。

+0

感謝您的提示。我以前就知道它,它似乎是更有前途的解決方案之一。 – theDmi 2010-09-20 11:11:26

+0

在半大型狀態機上由於編譯時間非常緩慢而變得不可用。 – asaenko 2014-07-23 09:19:52

1

如果您正在尋找支持具有UML語義(入口/出口,轉換,警衛,具有參數的事件,異步/同步)的分層和併發狀態機的框架,請查看我的state machine code and diagram generator

取而代之的是「手工」實現狀態機,用簡單的人類可讀和可寫的xml描述描述狀態機,並讓狀態機生成器用C++,C#或java編寫代碼源。

實際上,對於C++版本,生成的代碼可以很容易地針對中型/大型嵌入式系統進行交叉編譯。它已經完成了。

1

您可能會看看我的C++模板類框架STTCL,它旨在提供UML 2.2狀態圖表示法到實現類的映射。STTCL方法是對GoF狀態模式的改進,並試圖填補UML狀態圖符號的空白。

只要需要這些操作系統依賴關係,就可以對框架實現進行配置(僅適用於異步執行模型)。

有一個PDF document可用於解釋更詳細的概念。

+0

嗨,看來你的代碼取決於Boost。最近我一直在評估狀態機框架,如果Boost是依賴項,爲什麼要選擇STTCL而不是Boost StateCharts和Boost MSM?特別是Boost :: StateCharts也是GoF狀態模式的改進。 – krapht 2015-07-06 15:21:08

3

截止到今天,還有一個新的C++(支持帶Boost的C++ 11和C++ 03)可供選擇。它叫做yasmine(我是建築師)。它滿足所有上述要求。

一些利弊(從亞斯曼網頁引用):

使用亞斯曼

  • 她提供UML狀態機語義的完整實現的優勢。
  • yasmine是使用C++ 11的現代C++實現(也提供C++ 03支持)。
  • 因爲它是C++(而不是C),所以代碼很好地集成到了OO代碼中。
  • 她有據可查[012]
  • 因爲她是開源的,你可以檢查她的執行情況。這也保證了長期的可用性和可用性。
  • 該庫使您能夠在運行時創建狀態機。
  • [...]

什麼亞斯曼不

她不是在每個系統上運行 不管幾個可用資源的數量優先的最小足跡庫。 yasmine不是 資源飢餓,但她不能(也不希望)與 基於開關情況的裸機無抽象庫競爭。

注意

我知道這是一個老問題,但它是谷歌的#1「C++ UML狀態機」,這使得它非常重要。