Create a new Simulink® model and add a MATLAB Function block to the model from the User-Defined Functions library:
Add the following Source and Sink blocks to the model:
From the Sources library, add a Constant block
to the left of the MATLAB Function block and set its
value to the vector [2 3 4 5]
.
From the Sinks library, add two Display blocks to the right of the MATLAB Function block.
In the Simulink Editor, select File
> Save As and save the model as call_stats_block1
.
The following exercise demonstrates programming the block to calculate the mean and standard deviation for a vector of values:
Open the call_stats_block1
model
that you saved at the end of Adding a MATLAB Function Block to a Model. Double-click
the MATLAB Function block fcn
to
open it for editing.
A default function signature appears.
Edit the function header line:
function [mean,stdev] = stats(vals)
The function stats
calculates a statistical
mean and standard deviation for the values in the vector vals
.
The function header declares vals
as an argument
to the stats
function, with mean
and stdev
as
return values.
Save the model as call_stats_block2
.
Complete the connections to the MATLAB Function block as shown.
In the MATLAB Function Block Editor, enter a line space after the function header and add the following code:
% calculates a statistical mean and a standard % deviation for the values in vals. len = length(vals); mean = avg(vals,len); stdev = sqrt(sum(((vals-avg(vals,len)).^2))/len); plot(vals,'-+'); function mean = avg(array,size) mean = sum(array)/size;
Save the model as call_stats_block2
.
After programming a MATLAB Function block in a Simulink model, you can build the function and test for errors. This section describes the steps:
Building your MATLAB Function block requires
a supported compiler. MATLAB automatically selects one as the
default compiler. If you have multiple MATLAB-supported compilers
installed on your system, you can change the default using the mex
-setup
command. See Change Default Compiler (MATLAB).
Supported Compilers for Simulation Builds. To view a list of compilers for building models containing MATLAB Function blocks for simulation:
Navigate to the Supported and Compatible Compilers Web page.
Select your platform.
In the table for Simulink and related products, find the compilers checked in the column titled Simulink for MATLAB Function blocks.
Supported Compilers for Code Generation. To generate code for models that contain MATLAB Function blocks, you can use any of the C compilers supported by Simulink software for code generation with Simulink Coder™. For a list of these compilers:
Navigate to the Supported and Compatible Compilers Web page.
Select your platform.
In the table for Simulink and related products, find the compilers checked in the column titled Simulink Coder.
Open the call_stats_block2
model
that you saved at the end of Programming the MATLAB Function Block.
Double-click its MATLAB Function block stats
to
open it for editing.
In the MATLAB Function Block Editor, select Build Model > Build to compile and build the example model.
If no errors occur, the Simulation Diagnostics window displays a message indicating success. Otherwise, this window helps you locate errors, as described in How to Locate and Fix Errors.
If errors occur during the build process, the Simulation Diagnostics window lists the errors with links to the offending code.
The following exercise shows how to locate and fix an error in a MATLAB Function block.
In the stats
function, change the
local function avg
to a fictitious local function aug
and
then compile again to see the following messages in window:
The Simulation Diagnostics window displays each detected error with a red button.
Click the first error line to display its diagnostic message in the bottom error window.
The message also links to a report about compile-time type information for variables and expressions in your MATLAB functions. This information helps you diagnose error messages and understand type propagation rules. For more information about the report, see MATLAB Function Reports.
In the diagnostic message for the selected error, click the blue link after the function name to display the offending code.
The offending line appears highlighted in the MATLAB Function Block Editor:
Correct the error by changing aug
back
to avg
and recompile.
In the stats
function header for the MATLAB
Function block you defined in Programming the MATLAB Function Block,
the function argument vals
is an input, and mean
and stdev
are
outputs. By default, function inputs and outputs inherit their data
type and size from the signals attached to their ports. In this topic,
you examine input and output data for the MATLAB Function block
to verify that it inherits the correct type and size.
Open the call_stats_block2
model
that you saved at the end of Programming the MATLAB Function Block.
Double-click the MATLAB Function block stats
to
open it for editing.
In the MATLAB Function Block Editor, select Edit Data.
The Ports and Data Manager opens to help you define arguments for MATLAB Function blocks.
The left pane displays the argument vals
and
the return values mean
and stdev
that
you have already created for the MATLAB Function block.
Notice that vals
is assigned a Scope of Input
,
which is short for Input from Simulink. mean
and stdev
are
assigned the Scope of Output
,
which is short for Output to Simulink.
In the left pane of the Ports and Data Manager, click
anywhere in the row for vals
to highlight it.
The right pane displays the Data properties
dialog box for vals
. By default, the class, size,
units, and complexity of input and output arguments are inherited
from the signals attached to each input or output port. Inheritance
is specified by setting Size to -1
, Complexity to Inherited
,
and Type to Inherit:
Same as Simulink
.
The actual inherited values for size and type are set during compilation of the model, and are reported in the Compiled Type and Compiled Size columns of the left pane.
You can specify the type of an input or output argument by selecting
a type in the Type field of the Data properties dialog box, for example, double
.
You can also specify the size of an input or output argument by entering
an expression in the Size field.
For example, you can enter [2 3]
in the Size field to specify vals
as
a 2-by-3 matrix. See Type Function Arguments and Size Function Arguments for more
information on the expressions that you can enter for type and size.
The default first index for any arrays that you add to a MATLAB
Function block function is 1
, just as it
would be in MATLAB.