2015-11-09 20 views
0

這是關於一個需要通過軟件控制的機電系統。目前還不清楚它將被寫入哪種語言,但由於它並不重要,所以讓我們用Java來說。控制軟件中的層從真正的機電系統和仿真程序中提取

1.問題是我們需要通過CAN發送消息。所以我們有控制軟件,發生了一些事件,我們通過CAN發送消息。機電系統將作出反應。

現在的第2件事情是,顯然它能夠在沒有真正的機電系統的情況下測試軟件,因爲它減少了工作量。所以我想寫另一個程序,一個模擬程序。

所以我想象一下,仿真程序會通知CAN消息何時發送並作出反應。

如何實現這一目標?

我指的是真正的機電一體化系統,控制軟件需要在總線上直接發送CAN信息(也許通過一些本地代碼)。對於仿真程序,需要某種進程間通信。控制軟件的設計必須如何設計:它不在意是否有一些正在偵聽的仿真程序或真正的機械系統獲取CAN消息?

我首先想到的是控制軟件總是通過進程間通信方式發送「CAN消息」。讓我們說,爲了簡單起見,它是RMI。然後通過總線發送真正的CAN消息,同一控制軟件中有一些模塊通過RMI獲取「CAN消息」,並將它們轉發給真正的CAN總線。 現在仿真程序也可以通過RMI接收「CAN消息」,並且可以對其做出反應。

這是一個很好的方法嗎?因爲我發現控制軟件中存在一些開銷,通過進程間通信與自己進行通信,這在原則上並不是必需的。但是我看不出有其他可能性有抽象層,這樣我就沒有特殊的代碼用於控制軟件中的模擬程序。

謝謝您的反饋!

回答

0

您正在描述Hardware-in-the-loop測試的一個方面。這是開發結合了軟件和硬件的機電一體化系統的標準方法。

在軟件設置中,解決此問題的一種方法是提供一個接口(如在Java接口中,而不是在物理接口中)。您最終會得到該接口的兩個具體實現,一個用於您的真實硬件,另一個用於您的測試版本。由於實際版本和測試版本提供相同的界面,因此它們應該是interchangeable。一旦你得到了你的接口描述了你如何實現它們應該是不相關的(即/你可以使用腳本語言來更快或更便宜地開發測試代碼) - 所以RPC可能是一種可能性,但肯定有其他選擇。