数学建模社区-数学中国

标题: 写Level-2 MATLAB S 函数 [打印本页]

作者: 厚积薄发    时间: 2013-7-9 11:13
标题: 写Level-2 MATLAB S 函数
About Level-2 MATLAB S-Functions
The Level-2 MATLAB® S-function API allows you to use the MATLAB language to create custom blocks with multiple input and output ports and capable of handling any type of signal produced by a Simulink® model, including matrix and frame signals of any data type. The Level-2 MATLAB S-function API corresponds closely to the API for creating C MEX S-functions. Much of the documentation for creating C MEX S-functions applies also to Level-2 MATLAB S-functions. To avoid duplication, this section focuses on providing information that is specific to writing Level-2 MATLAB S-functions.
A Level-2 MATLAB S-function is MATLAB function that defines the properties and behavior of an instance of a Level-2 MATLAB S-Functionblock that references the MATLAB function in a Simulink model. The MATLAB function itself comprises a set of callback methods (seeLevel-2 MATLAB S-Function Callback Methods) that the Simulink engine invokes when updating or simulating the model. The callback methods perform the actual work of initializing and computing the outputs of the block defined by the S-function.
To facilitate these tasks, the engine passes a run-time object to the callback methods as an argument. The run-time object effectively serves as a MATLAB proxy for the S-Function block, allowing the callback methods to set and access the block properties during simulation or model updating.

About Run-Time Objects
When the Simulink engine invokes a Level-2 MATLAB S-function callback method, it passes an instance of theSimulink.MSFcnRunTimeBlock class to the method as an argument. This instance, known as the run-time object for the S-Function block, serves the same purpose for Level-2 MATLAB S-function callback methods as the SimStruct structure serves for C MEX S-function callback methods. The object enables the method to provide and obtain information about various elements of the block ports, parameters, states, and work vectors. The method does this by getting or setting properties or invoking methods of the block run-time object. See the documentation for the Simulink.MSFcnRunTimeBlock class for information on getting and setting run-time object properties and invoking run-time object methods.
Run-time objects do not support MATLAB sparse matrices. For example, if the variable block is a run-time object, the following line in a Level-2 MATLAB S-function produces an error:
block.Outport(1).Data = speye(10);
where the speye command forms a sparse identity matrix.

Level-2 MATLAB S-Function Template
Use the basic Level-2 MATLAB S-function template msfuntmpl_basic.m to get a head start on creating a new Level-2 MATLAB S-function. The template contains skeleton implementations of the required callback methods defined by the Level-2 MATLAB S-function API. To write a more complicated S-function, use the annotated template msfuntmpl.m.
To create a MATLAB S-function, make a copy of the template and edit the copy as necessary to reflect the desired behavior of the S-function you are creating. The following two sections describe the contents of the MATLAB code template. The section Example of Writing a Level-2 MATLAB S-Function describes how to write a Level-2 MATLAB S-function that models a unit delay.

Level-2 MATLAB S-Function Callback Methods
The Level-2 MATLAB S-function API defines the signatures and general purposes of the callback methods that constitute a Level-2 MATLAB S-function. The S-function itself provides the implementations of these callback methods. The implementations in turn determine the block attributes (e.g., ports, parameters, and states) and behavior (e.g., the block outputs as a function of time and the block inputs, states, and parameters). By creating an S-function with an appropriate set of callback methods, you can define a block type that meets the specific requirements of your application.
A Level-2 MATLAB S-function must include the following callback methods:
Your S-function can contain other methods, depending on the requirements of the block that the S-function defines. The methods defined by the Level-2 MATLAB S-function API generally correspond to similarly named methods defined by the C MEX S-function API. For information on when these methods are called during simulation, see Process View in Simulink Engine Interaction with C S-Functions. For instructions on how to implement each callback method, see Write Callback Methods.
The following table lists all the Level-2 MATLAB S-function callback methods and their C MEX counterparts.
[td]
Level-2 MATLAB Method
Equivalent C MEX Method
setup (see Using the setup Method)
mdlInitializeSizes
CheckParameters
mdlCheckParameters
Derivatives
mdlDerivatives
Disable
mdlDisable
Enable
mdlEnable
InitializeConditions
mdlInitializeConditions
Outputs
mdlOutputs
PostPropagationSetup
mdlSetWorkWidths
ProcessParameters
mdlProcessParameters
Projection
mdlProjection
SetInputPortComplexSignal
mdlSetInputPortComplexSignal
SetInputPortDataType
mdlSetInputPortDataType
SetInputPortDimensions
mdlSetInputPortDimensionInfo
SetInputPortDimensionsModeFcn
mdlSetInputPortDimensionsModeFcn
SetInputPortSampleTime
mdlSetInputPortSampleTime
SetInputPortSamplingMode
mdlSetInputPortFrameData
SetOutputPortComplexSignal
mdlSetOutputPortComplexSignal
SetOutputPortDataType
mdlSetOutputPortDataType
SetOutputPortDimensions
mdlSetOutputPortDimensionInfo
SetOutputPortSampleTime
mdlSetOutputPortSampleTime
SimStatusChange
mdlSimStatusChange
Start
mdlStart
Terminate
mdlTerminate
Update
mdlUpdate
WriteRTW
mdlRTW


Using the setup Method
The body of the setup method in a Level-2 MATLAB S-function initializes the instance of the corresponding Level-2 MATLAB S-Function block. In this respect, the setup method is similar to the mdlInitializeSizes and mdlInitializeSampleTimes callback methods implemented by C MEX S-functions. The setup method performs the following tasks:

Example of Writing a Level-2 MATLAB S-Function
The following steps illustrate how to write a simple Level-2 MATLAB S-function. When applicable, the steps include examples from the S-function example msfcn_unit_delay.m used in the model msfcndemo_sfundsc2. All lines of code use the variable name block for the S-function run-time object.
For information on additional callback methods, see Level-2 MATLAB S-Function Callback Methods. For a list of run-time object properties, see the reference page for Simulink.MSFcnRunTimeBlock and the parent class Simulink.RunTimeBlock.

Instantiating a Level-2 MATLAB S-Function
To use a Level-2 MATLAB S-function in a model, copy an instance of the Level-2 MATLAB S-Functionblock into the model. Open the Block Parameters dialog box for the block and enter the name of the MATLAB file that implements your S-function into the S-function name field. If your S-function uses any additional parameters, enter the parameter values as a comma-separated list in the Block Parameters dialog box Parameters field.

Operations for Variable-Size Signals
Following are modifications to the Level-2 MATLAB S-functions template (msfuntmpl_basic.m) and additional operations that allow you to use variable-size signals.
function setup(block)% Register the properties of the output portblock.OutputPort(1).DimensionsMode = 'Variable';block.RegBlockMethod('SetInputPortDimensionsMode',  @SetInputDimsMode);function DoPostPropSetup(block)%Register dependency rules to update current output size of output port a depending on%input ports b and cblock.AddOutputDimsDependencyRules(a, [b c], @setOutputVarDims);%Configure output port b to have the same dimensions as input port ablock.InputPortSameDimsAsOutputPort(a,b);%Configure DWork a to have its size reset when input size changes.block.DWorkRequireResetForSignalSize(a,true);function SetInputDimsMode(block, port, dm)% Set dimension modeblock.InputPort(port).DimensionsMode = dm;block.OutputPort(port).DimensionsMode = dm;function setOutputVarDims(block, opIdx, inputIdx)% Set current (run-time) dimensions of the outputoutDimsAfterReset = block.InputPort(inputIdx(1)).CurrentDimensions;block.OutputPort(opIdx).CurrentDimensions = outDimsAfterReset;

Generating Code from a Level-2 MATLAB S-Function
Generating code for a model containing a Level-2 MATLAB S-function requires that you provide a corresponding Target Language Compiler (TLC) file. You do not need a TLC file to accelerate a model containing a Level-2 MATLAB S-function. The Simulink Accelerator™ software runs Level-2 MATLAB S-functions in interpreted mode. For more information on writing TLC files for MATLAB S-functions, seeInlining S-Functions.

MATLAB S-Function Examples
The Level-2 MATLAB S-function examples provide a set of self-documenting models that illustrate the use of Level-2 MATLAB S-functions. Enter sfundemos at the MATLAB command prompt to view the examples.




作者: 2012123864    时间: 2013-7-10 08:53
感觉好高端~~~~~~~~




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5