2013-10-02 52 views
2

我希望在SIMULINK中使用if-else流程塊(或自定義matlab函數),並使用嵌入式編碼器爲其生成代碼。我以前遇到過使用SIMULINK中的MATLAB函數塊進行零和基於索引的索引問題。似乎幾乎沒有辦法繞過它。那麼我如何在SIMULINK中建立一個if-elseif邏輯?SIMULINK If-Else流程塊及其對嵌入式代碼生成的影響

我嘗試過使用開關和多路複用器模塊,但它們太雜亂,可能會導致我試圖實現的原始流程邏輯的誤解。

我流邏輯(僞)是:

if (a<b) then 
    p = x; 
else if (a<c) then 
    p = max(y, some_const_val); 
else 
    p = z; 

可能有人請提出一個方法?

KR,

回答

2

你的僞代碼應該工作作爲MATLAB Function塊(支持代碼生成MATLAB函數的子集)。我無法真正看到零和一基索引的問題?

對於更復雜的邏輯,Stateflow是一個非常強大的工具,但它是一個附加組件,因此如果您尚未擁有它,您需要分出更多資金。我同意,除了非常簡單的邏輯算法之外,純粹的Simulink = blocks方法可能會變得非常麻煩。

+0

我已經知道stateflow。問題是我不想訂閱另外幾千英鎊的模塊集,而沒有探索基本的MATLAB和SIMULINK發行版中的所有選項。只是爲了跟隨你對「無法看到零和一個索引的任何問題」的評論,你真的爲MATLAB函數塊生成嵌入式代碼(使用嵌入式編碼器)嗎?或者當您使用代碼生成顧問來幫助解決這個問題時,您是否關閉了一些支票?我會很感興趣知道。因爲它不適合我。 – ha9u63ar

+0

不,我沒有真正嘗試生成代碼(或者如果我過去做過,實際上我沒有仔細查看代碼的樣子,只要它是功能性的)。你能解釋一下什麼不適合你,或者是什麼問題?這是否與生成的C代碼使用基於一個索引而不是基於零的索引相同? – am304

+0

由於基於1的/基於0的索引,代碼生成顧問始終警告有關M功能塊。很明顯,我不希望保留任何警告並從代碼生成顧問處獲得全面通過。我已經看到你無法通過代碼生成顧問程序傳遞MATLAB功能塊而沒有任何警告。沒有錯誤!這是一個警告!您可以選擇忽略它,但是您的代碼生成將失敗,因爲您尚未設法清除所有警告和錯誤!但是,您可以將模型配置參數設置爲忽略警告,但其他重要的參數將被忽略! – ha9u63ar