2013-04-02 42 views
1

我正在構建一個定製的Simulink塊作爲Matlab工具箱。爲了避免matlab的語言對系統進行編程,我希望儘可能使用Java編寫系統。我研究了Matlab < - > Java接口,並且似乎可以這樣做。然而,我找不到任何有關信息的一件事是將我的自定義Java對象(保存塊的數據)存儲在Simulink塊中。在Matlab Simulink塊內存儲自定義java對象,以實現自定義工具箱

我進行了一個快速測試,似乎存儲Java.lang.String實例是可能的。但是,這是一個相對簡單的測試。在首先跳轉之前,我想檢查這是否可能。有沒有人有類似的設置經驗?該對象是否需要可序列化才能工作?

有關背景信息,我期待在Java中實現非數學部分(GUI代碼,處理等)。數學相關的元素可能會保留在matlab中。

+0

你看過'UserData'塊參數嗎?它可以存儲任何數據類型。 – wakjah

+0

這就是我計劃存儲Java對象的地方。我只是想確保這樣做沒有任何問題。如果您知道一個事實很好,請創建一個答案,以便我可以將其標記爲已接受。 :-) – MJD

回答

1

要將Java對象存儲在塊中,應使用其塊參數UserData。根據文檔,您可以將任何數據類型放入此參數中。

我可以看到的唯一問題是保存/加載和創建新塊。保存/加載應該使用序列化來解決,但你必須嘗試看看。如果這不起作用,那麼您可以爲塊創建一個隱藏的掩碼參數,將您的Java對象序列化爲一個字符串,並在回調期間將數據保存在此掩碼中。數據可以從LoadFcn回調中的mask參數中反序列化。

爲了創建新塊,您應該設置庫塊的PreCopyFcn回調並在那裏創建新的Java對象。我有這樣的感覺,如果你不這樣做,那麼MATLAB會將引用從UserData複製到你的對象(如果已經存在的話),這可能不是你想要的。

您可能還希望覆蓋OpenFcn回調,因爲您的目標是將您的Java對象用作一種加強掩碼,以便當用戶雙擊該塊時,您可以顯示自定義UI。

有關塊回調參數的更多信息,請參閱this

相關問題