2014-02-24 63 views
2

這更是一個軟件設計的問題,所以它應該是獨立於語言的 - 但對於完整性,讓我們假設C++和POSIX系統。如何設計一個控制環路

我儘量做到:

  • 讀出低液位傳感器,通過I2C和1W協議(所有讀出的需要時間,但不一定很多資源的CPU /內存明智)/讀出頻率是不同的適用於所有設備。
  • 反饋讀取的信息(反饋頻率比最慢的速度傳感器)
  • 要敏感,當一個新的命令來(通過藍牙(bluez的))

我最好將如何做到這一點?

我現在所擁有的是我用具有相同超級類別的傳感器創建了一個具有ptreath測量循環的對象,寫入最近的數值參數和一個不斷從最後一個數值讀取的主循環。

這在我看來相當笨拙,因爲我要看看變量等是否有更好/更簡單的方式來實現這一目標?反饋算法相當簡單,不需要太多資源。

回答

0

我最常做的是在傳感器輪詢線程來實例化測量的消息和隊列它們加起來,一個生產者 - 消費者隊列,到運行狀態機實現控制算法/ s的一個線程。控制消息也可以進入隊列,因此可以以相同的方式正確處理。

這保持在一個線程中,一個狀態引擎,其中該操作能夠容易地調試消息通過消息的所有複雜的控制決策。

主線程可以等待在PC隊列和操作SM。阻塞的PC隊列消除了毫無意義,浪費和可避免的var輪詢。

+0

謝謝你的回答。對我來說,每個傳感器都有一個矯正過程似乎有點矯枉過正。但也許這是最好的/最乾淨的方式來做到這一點。 –