2013-12-09 79 views
1

我的SIMULINK模型中有一個傳統的C函數,它在函數中使用了一些靜態變量。靜態變量在全局範圍內可用。當我參考我的模型的多個實例時,我得到錯誤,因爲我的S函數沒有爲此配置。我收到此錯誤消息,因爲代碼生成不允許這樣做。SIMULINK中的S函數(C代碼)的多實例使用

該錯誤消息我得到的是以下幾點:

的S-功能塊「ECDCTRL/PULDESC/S-Function Builder中的」未在多實例正常模式支持,因爲它不聲明它支持多個執行實例。如果S函數滿足多個執行實例要求,則可以使用'mdlSetWorkWidths'方法中的SimStruct函數'ssSupportsMultipleExecInstances'來聲明該函數。

我在使用自動生成的代碼構建它時使用了(MYSFUNC)_Outputs_Wrapper.c文件。如何確保在使用多個模型引用時可以使用我的傳統C函數? SIMULINK網站建議使用ssSupportsMultipleExecInstances(SimStruct *S, bool flag)方法,但它不正確,因爲我沒有使用SimStruct頭文件。周圍是什麼?

+1

您有靜態變量和多個實例的一個普遍問題。考慮在您的SFunction中使用DWork矢量。 – pmb

+0

你能澄清一點嗎?我不熟悉它。 – ha9u63ar

回答

3

使用DWork向量而不是靜態變量。從here報價:

DWork向量具有以下幾個優點:

Provide instance-specific storage for block variables 
Eliminate static and global variables 
+0

謝謝!我的一位同事提出了一個基於SIMULINk的解決方案,並取代了S功能模塊。唷! – ha9u63ar