Overview of S-Functions
Introduction
What Is an S-Function?
Using S-Functions in Models
Passing Parameters to S-Functions
When to Use an S-Function
How S-Functions Work
Implementing S-Functions
S-Function Concepts
S-Function Examples
Writing M S-Functions
Introduction
S-Function Arguments
S-Function Outputs
Defining S-Function Block Characteristics
A Simple M-File S-Function Example
Examples of M-File S-Functions
Example - Continuous State S-Function
Example - Discrete State S-Function
Example - Hybrid System S-Functions
Example - Variable Sample Time S-Functions
Processing S-Function Parameters
Writing S-Functions in C
Introduction
Example of a Basic C MEX S-Function
Templates for C S-Functions
S-Function Source File Requirements
The SimStruct
Compiling C S-Functions
How Simulink Interacts with C S-Functions
Process View
Data View
Writing Callback Methods
Converting Level 1 C MEX S-Functions to Level 2
Obsolete Macros
Creating C++ S-Functions
Overview
Source File Format
Making C++ Objects Persistent
Building C++ S-Functions
Creating Ada S-Functions
Introduction
Ada S-Function Source File Format
Ada S-Function Specification
Ada S-Function Body
Writing Callback Methods in Ada
Callbacks Invoked By Simulink
Implementing Callbacks
Omitting Optional Callback Methods
SimStruct Functions
Building an Ada S-Function
Using an Ada S-Function in a Model
Example of an Ada S-Function
Creating Fortran S-Functions
Introduction
Level 1 Versus Level 2 S-Functions
Creating Level 1 Fortran S-Functions
The Fortran MEX Template File
Example
Inline Code Generation Example
Creating Level 2 Fortran S-Functions
Template File
C/Fortran Interfacing Tips
Constructing the Gateway
An Example C-MEX S-Function Calling Fortran Code
Porting Legacy Code
Find the States
Sample Times
Multiple Instances
Use Flints If Needed
Considerations for Real Time
Implementing Block Features
Introduction
Dialog Parameters
Tunable Parameters
Run-Time Parameters
Creating Run-Time Parameters
Updating Run-Time Parameters
Input and Output Ports
Creating Input Ports
Creating Output Ports
Scalar Expansion of Inputs
Masked Multiport S-Functions
Custom Data Types
Sample Times
Block-Based Sample Times
Port-Based Sample Times
Specifying the Number of Sample Times in mdlInitializeSizes
Hybrid Block-Based and Port-Based Sample Times
Multirate S-Function Blocks
Synchronizing Multirate S-Function Blocks
Work Vectors
Work Vectors and Zero Crossings
An Example Involving a Pointer Work Vector
Memory Allocation
Function-Call Subsystems
Handling Errors
Exception Free Code
ssSetErrorStatus Termination Criteria
S-Function Examples
Example - Continuous State S-Function
Example - Discrete State S-Function
Example - Hybrid System S-Functions
Example - Variable Step S-Function
Example - Zero Crossing S-Function
Example - Time Varying Continuous Transfer Function
Writing S-Functions for Real-Time Workshop
Introduction
Classes of Problems Solved by S-Functions
Types of S-Functions
Basic Files Required for Implementation
Noninlined S-Functions
S-Function Module Names for Real-Time Workshop Builds
Writing Wrapper S-Functions
The MEX S-Function Wrapper
The TLC S-Function Wrapper
The Inlined Code
Fully Inlined S-Functions
Multiport S-Function Example
Fully Inlined S-Function with the mdlRTW Routine
S-Function RTWdata for Generating Code with Real-Time Workshop
The Direct-Index Lookup Table Algorithm
The Direct-Index Lookup Table Example
S-Function Callback Methods
Callback Method Reference
mdlCheckParameters
mdlDerivatives
mdlGetTimeOfNextVarHit
mdlInitializeConditions
mdlInitializeSampleTimes
mdlInitializeSizes
mdlOutputs
mdlProcessParameters
mdlRTW
mdlSetDefaultPortComplexSignals
mdlSetDefaultPortDataTypes
mdlSetDefaultPortDimensionInfo
mdlSetInputPortComplexSignal
mdlSetInputPortDataType
mdlSetInputPortDimensionInfo
mdlSetInputPortFrameData
mdlSetInputPortSampleTime
mdlSetInputPortWidth
mdlSetOutputPortComplexSignal
mdlSetOutputPortDataType
mdlSetOutputPortDimensionInfo
mdlSetOutputPortSampleTime
mdlSetOutputPortWidth
mdlSetWorkWidths
mdlStart
mdlTerminate
mdlUpdate
mdlZeroCrossings
SimStruct Functions
Introduction
Language Support
The SimStruct
SimStruct Macros and Functions Listed by Usage
Miscellaneous
Error Handling and Status
I/O Port
Dialog Box Parameters
Run-Time Parameters
Sample Time
State and Work Vector
Simulation Information
Function Call
Data Type
Real-Time Workshop
Macro Reference
ssCallExternalModeFcn
ssCallSystemWithTid
ssGetAbsTol
ssGetContStateAddress
ssGetContStates
ssGetDataTypeName
ssGetDataTypeId
ssGetDataTypeSize
ssGetDataTypeZero
ssGetDiscStates
ssGetDTypeIdFromMxArray
ssGetDWorkComplexSignal
ssGetDWorkDataType
ssGetDWorkName
ssGetDWorkUsedAsDState
ssGetDWorkWidth
ssGetdX
ssGetErrorStatus
ssGetInputPortBufferDstPort
ssGetInputPortConnected
ssGetInputPortComplexSignal
ssGetInputPortDataType
ssGetInputPortDimensionInfo
ssGetInputPortDimensions
ssGetInputPortDirectFeedThrough
ssGetInputPortFrameData
ssGetInputPortNumDimensions
ssGetInputPortOffsetTime
ssGetInputPortOverWritable
ssGetInputPortRealSignal
ssGetInputPortRealSignalPtrs
ssGetInputPortRequiredContiguous
ssGetInputPortReusable
ssGetInputPortSampleTime
ssGetInputPortSampleTimeIndex
ssGetInputPortSignal
ssGetInputPortSignalAddress
ssGetInputPortSignalPtrs
ssGetInputPortWidth
ssGetIWork
ssGetModelName
ssGetModeVector
ssGetModeVectorValue
ssGetNonsampledZCs
ssGetNumContStates
ssGetNumDataTypes
ssGetNumDiscStates
ssGetNumDWork
ssGetNumInputPorts
ssGetNumIWork
ssGetNumModes
ssGetNumNonsampledZCs
ssGetNumOutputPorts
ssGetNumParameters
ssGetNumRunTimeParams
ssGetNumPWork
ssGetNumRWork
ssGetNumSampleTimes
ssGetNumSFcnParams
ssGetOutputPortBeingMerged
ssGetOutputPortComplexSignal
ssGetOutputPortDataType
ssGetOutputPortDimensions
ssGetOutputPortFrameData
ssGetOutputPortNumDimensions
ssGetOutputPortOffsetTime
ssGetOutputPortRealSignal
ssGetOutputPortReusable
ssGetOutputPortSampleTime
ssGetOutputPortSignal
ssGetOutputPortSignalAddress
ssGetOutputPortWidth
ssGetPath
ssGetParentSS
ssGetPlacementGroup
ssGetPWork
ssGetRealDiscStates
ssGetRootSS
ssGetRunTimeParamInfo
ssGetRWork
ssGetSampleTimeOffset
ssGetSampleTimePeriod
ssGetSFcnParam
ssGetSFcnParamsCount
ssGetSimMode
ssGetSolverName
ssGetStateAbsTol
ssGetT
ssGetTNext
ssGetTaskTime
ssGetTFinal
ssGetTStart
ssIsContinuousTask
ssGetUserData
ssIsFirstInitCond
ssIsMajorTimeStep
ssIsMinorTimeStep
ssIsSampleHit
ssIsSpecialSampleHit
ssIsVariableStepSolver
ssPrintf
ssRegAllTunableParamsAsRunTimeParams
ssRegisterDataType
ssSetCallSystemOutput
ssSetDataTypeSize
ssSetDataTypeZero
ssSetDWorkComplexSignal
ssSetDWorkDataType
ssSetDWorkName
ssSetDWorkUsedAsDState
ssSetDWorkWidth
ssSetErrorStatus
ssSetExternalModeFcn
ssSetInputPortComplexSignal
ssSetInputPortDataType
ssSetInputPortDimensionInfo
ssSetInputPortFrameData
ssSetInputPortDirectFeedThrough
ssSetInputPortMatrixDimensions
ssSetInputPortOffsetTime
ssSetInputPortOverWritable
ssSetInputPortReusable
ssSetInputPortRequiredContiguous
ssSetInputPortSampleTime
ssSetInputPortSampleTimeIndex
ssSetInputPortVectorDimension
ssSetInputPortWidth
ssSetModeVectorValue
ssSetNumContStates
ssSetNumDiscStates
ssSetNumDWork
ssSetNumInputPorts
ssSetNumIWork
ssSetNumModes
ssSetNumNonsampledZCs
ssSetNumOutputPorts
ssSetNumPWork
ssSetNumRunTimeParams
ssSetNumRWork
ssSetNumSampleTimes
ssSetNumSFcnParams
ssSetOffsetTime
ssSetOptions
ssSetOutputPortComplexSignal
ssSetOutputPortDataType
ssSetOutputPortDimensionInfo
ssSetOutputPortFrameData
ssSetOutputPortMatrixDimensions
ssSetOutputPortOffsetTime
ssSetOutputPortReusable
ssSetOutputPortSampleTime
ssSetOutputPortVectorDimension
ssSetOutputPortWidth
ssSetParameterName
ssSetParameterTunable
ssSetPlacementGroup
ssSetRunTimeParamInfo
ssSetSampleTime
ssSetSFcnParamNotTunable
ssSetSFcnParamTunable
ssSetSolverNeedsReset
ssSetStopRequested
ssSetTNext
ssSetUserData
ssSetVectorMode
ssUpdateAllTunableParamsAsRunTimeParams
ssUpdateRunTimeParamData
ssUpdateRunTimeParamInfo
ssWarning
ssWriteRTWMxVectParam
ssWriteRTWMx2dMatParam
ssWriteRTWParameters
ssWriteRTWParamSettings
ssWriteRTWScalarParam
ssWriteRTWStr
ssWriteRTWStrParam
ssWriteRTWStrVectParam
ssWriteRTWVectParam
ssWriteRTWWorkVect
ssWriteRTW2dMatParam