How can I write a Level-2 MATLAB S-Function where the input and output might have unknown dimensions, or even be variable-size signals?
5 次查看(过去 30 天)
显示 更早的评论
MathWorks Support Team
2018-5-21
编辑: MathWorks Support Team
2021-9-30
I need to write a Level-2 MATLAB S-Function where the input and/or output dimensions are unknown, and might also change during simulation.
Specifically, I would like to implement the two following scenarios:
A) Input: 1-D array of unknown fixed size. Two outputs: sorted array, and sum of all the elements.
B) Same as A), but the size of the array might vary during simulation.
How can I achieve this?
采纳的回答
MathWorks Support Team
2021-9-30
编辑:MathWorks Support Team
2021-9-30
A)
In the setup function of your MATLAB S-Function, you need to configure port properties to be inherited or dynamic:
>> block.SetPreCompInpPortInfoToDynamic;>> block.SetPreCompOutPortInfoToDynamic;
You can then override the only properties that you known, as for example:
>> block.InputPort(1).DatatypeID = 0;>> block.InputPort(1).Complexity = 'Real';>> block.InputPort(1).DirectFeedthrough = true;
>> block.OutputPort(1).DatatypeID = 0;>> block.OutputPort(1).Complexity = 'Real';>> block.OutputPort(2).Dimensions = 1;>> block.OutputPort(2).DatatypeID = 0;>> block.OutputPort(2).Complexity = 'Real';
Note how the field 'Dimensions' has not been set for InputPort(1) and OutputPort(1).
B)
Similar to A), but the required input and output ports need to be configured so that they can handle variable-size signals:
>> block.InputPort(1).DimensionsMode = 'Variable';>> block.OutputPort(1).DimensionsMode = 'Variable';
In addition, in the Outputs function, you need to set the current dimensions of the output port:
>> block.OutputPort(1).CurrentDimensions = block.InputPort(1).CurrentDimensions;
For further details, please refer to the attached files:
A) matlabSfunUnknownSize.m and simpleTestMsfUnknownSize.slx
B) matlabSfunVarSize.m and simpleTestMsfVarSize.slx
and simulate the models step-by-step.
For more information on:
- how to write your own Level-2 MATLAB S-Function: https://uk.mathworks.com/help/simulink/sfg/writing-level-2-matlab-s-functions.html
- variable-size signals: https://uk.mathworks.com/help/simulink/ug/variable-size-signal-basics.html
- MATLAB and C S-Functions with variable-size signals: https://www.mathworks.com/help/simulink/ug/simulink-models-using-variable-size-signals-demos-modeling-features-variable-size-signals-or-type-varsizedemos.html
0 个评论
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!