Overview of S-Functions
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
Mathematics of Simulink Blocks
Simulation Stages
S-Function Callback Methods
Implementing S-Functions
M-File S-Functions
MEX-File S-Functions
S-Function Concepts
Direct Feedthrough
Dynamically Sized Arrays
Setting Sample Times and Offsets
S-Function Examples
Writing S-Functions in M
Introduction
Writing Level-2 M-File S-Functions
About Level-2 M-File S-Functions
The Level-2 M-File S-Function API
M-file S-Function Demos
S-Function Template
Instantiating a Level-2 M-File S-Function
Generating Code from a Level-2 M-File S-Function
Callback Methods
Main Method
Runtime Object
Maintaining Level-1 M-File S-Functions
S-Function Arguments
S-Function Outputs
Defining S-Function Block Characteristics
Processing S-Function Parameters
Writing S-Functions in C
Introduction
Creating C MEX S-Functions
Building S-Functions Automatically
Setting the Include Path
S-Function Builder Dialog Box
Parameters/S-Function Name Pane
Port/Parameter Pane
Initialization Pane
Data Properties Pane
Input Ports Pane
Output Ports Pane
Parameters Pane
Data Type Attributes Pane
Libraries Pane
Outputs Pane
Continuous Derivatives Pane
Discrete Update Pane
Build Info Pane
Example of a Basic C MEX S-Function
Defines and Includes
Callback Implementations
Simulink/Real-Time Workshop Interface
Building the Timestwo Example
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
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
Ada Compiler Requirements
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
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
Dialog Parameters
Tunable Parameters
Run-Time Parameters
Creating Run-Time Parameters
Updating Run-Time Parameters
Tuning Runtime Parameters
Creating 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
Specifying Port-Based Sample Times
Hybrid Block-Based and Port-Based Sample Times
Multirate S-Function Blocks
Synchronizing Multirate S-Function Blocks
Specifying Model Reference Sample Time Inheritance
Work Vectors
Work Vectors and Zero Crossings
Example Involving a Pointer Work Vector
Memory Allocation
Function-Call Subsystems
Processing Frame-Based Signals
Handling Errors
Exception Free Code
ssSetErrorStatus Termination Criteria
Checking Array Bounds
S-Function Examples
Example of a Continuous State S-Function
Example of a Discrete State S-Function
Example of a Hybrid System S-Function
Example of a Variable-Step S-Function
Example of a Zero Crossing S-Function
Example of a Time-Varying Continuous Transfer Function
S-Function Callback Methods
mdlCheckParameters
mdlDerivatives
mdlDisable
mdlEnable
mdlGetTimeOfNextVarHit
mdlInitializeConditions
mdlInitializeSampleTimes
mdlInitializeSizes
mdlOutputs
mdlProcessParameters
mdlRTW
mdlSetDefaultPortComplexSignals
mdlSetDefaultPortDataTypes
mdlSetDefaultPortDimensionInfo
mdlSetInputPortComplexSignal
mdlSetInputPortDataType
mdlSetInputPortDimensionInfo
mdlSetInputPortFrameData
mdlSetInputPortSampleTime
mdlSetInputPortWidth
mdlSetOutputPortComplexSignal
mdlSetOutputPortDataType
mdlSetOutputPortDimensionInfo
mdlSetOutputPortSampleTime
mdlSetOutputPortWidth
mdlSetWorkWidths
mdlSimStatusChange
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
Function Reference
FssCallExternalModeFcn
ssCallSystemWithTid
ssDisableSystemWithTid
ssEnableSystemWithTid
ssGetAbsTol
ssGetBlockReduction
ssGetContStateAddress
ssGetContStates
ssGetDataTypeId
ssGetDataTypeName
ssGetDataTypeSize
ssGetDataTypeZero
ssGetDiscStates
ssGetDTypeIdFromMxArray
ssGetDWork
ssGetDWorkComplexSignal
ssGetDWorkDataType
ssGetDWorkName
ssGetDWorkRTWIdentifier
ssGetDWorkRTWStorageClass
ssGetDWorkRTWTypeQualifier
ssGetDWorkUsedAsDState
ssGetDWorkWidth
ssGetdX
ssGetErrorStatus
ssGetExplicitFCSSCtrl
ssGetInlineParameters
ssGetInputPortBufferDstPort
ssGetInputPortComplexSignal
ssGetInputPortConnected
ssGetInputPortDataType
ssGetInputPortDimensions
ssGetInputPortDirectFeedThrough
ssGetInputPortFrameData
ssGetInputPortNumDimensions
ssGetInputPortOffsetTime
ssGetInputPortOptimOpts
ssGetInputPortOverWritable
ssGetInputPortRealSignal
ssGetInputPortRealSignalPtrs
ssGetInputPortRequiredContiguous
ssGetInputPortSampleTime
ssGetInputPortSampleTimeIndex
ssGetInputPortSignal
ssGetInputPortSignalAddress
ssGetInputPortSignalPtrs
ssGetInputPortWidth
ssGetIWork
ssGetIWorkValue
ssGetModelName
ssGetModeVector
ssGetModeVectorValue
ssGetNonsampledZCs
ssGetNumContStates
ssGetNumDataTypes
ssGetNumDiscStates
ssGetNumDWork
ssGetNumInputPorts
ssGetNumIWork
ssGetNumModes
ssGetNumNonsampledZCs
ssGetNumOutputPorts
ssGetNumParameters
ssGetNumRunTimeParams
ssGetNumPWork
ssGetNumRWork
ssGetNumSampleTimes
ssGetNumSFcnParams
ssGetOffsetTime
ssGetOutputPortBeingMerged
ssGetOutputPortComplexSignal
ssGetOutputPortConnected
ssGetOutputPortDataType
ssGetOutputPortDimensions
ssGetOutputPortFrameData
ssGetOutputPortNumDimensions
ssGetOutputPortOffsetTime
ssGetOutputPortOptimOpts
ssGetOutputPortRealSignal
ssGetOutputPortSampleTime
ssGetOutputPortSignal
ssGetOutputPortSignalAddress
ssGetOutputPortWidth
ssGetParentSS
ssGetPath
ssGetPlacementGroup
ssGetPortBasedSampleTimeBlockIsTriggered
ssGetPWork
ssGetPWorkValue
ssGetRealDiscStates
ssGetRootSS
ssGetRunTimeParamInfo
ssGetRWork
ssGetRWorkValue
ssGetSampleTime
ssGetSampleTimeOffset
ssGetSampleTimePeriod
ssGetSFcnParam
ssGetSFcnParamsCount
ssGetSimMode
ssGetSolverMode
ssGetSolverName
ssGetStateAbsTol
ssGetStopRequested
ssGetT
ssGetTaskTime
ssGetTFinal
ssGetTNext
ssGetTStart
ssGetUserData
ssIsContinuousTask
ssIsFirstInitCond
ssIsMajorTimeStep
ssIsMinorTimeStep
ssIsSampleHit
ssIsSpecialSampleHit
ssIsVariableStepSolver
ssPrintf
ssRegDlgParamAsRunTimeParam
ssRegAllTunableParamsAsRunTimeParams
ssRegisterDataType
ssSampleAndOffsetAreTriggered
ssSetBlockReduction
ssSetCallSystemOutput
ssSetDataTypeSize
ssSetDataTypeZero
ssSetDWorkComplexSignal
ssSetDWorkDataType
ssSetDWorkName
ssSetDWorkRTWIdentifier
ssSetDWorkRTWStorageClass
ssSetDWorkRTWTypeQualifier
ssSetDWorkUsedAsDState
ssSetDWorkWidth
ssSetErrorStatus
ssSetExplicitFCSSCtrl
ssSetExternalModeFcn
ssSetInputPortComplexSignal
ssSetInputPortDataType
ssSetInputPortDimensionInfo
ssSetInputPortDirectFeedThrough
ssSetInputPortFrameData
ssSetInputPortMatrixDimensions
ssSetInputPortOffsetTime
ssSetInputPortOptimOpts
ssSetInputPortOverWritable
ssSetInputPortRequiredContiguous
ssSetInputPortSampleTime
ssSetInputPortVectorDimension
ssSetInputPortWidth
ssSetIWorkValue
ssSetModelReferenceSampleTimeInheritanceRule
ssSetModeVectorValue
ssSetNumContStates
ssSetNumDiscStates
ssSetNumDWork
ssSetNumInputPorts
ssSetNumIWork
ssSetNumModes
ssSetNumNonsampledZCs
ssSetNumOutputPorts
ssSetNumPWork
ssSetNumRunTimeParams
ssSetNumRWork
ssSetNumSampleTimes
ssSetNumSFcnParams
ssSetOffsetTime
ssSetOneBasedIndexInputPort
ssSetOneBasedIndexOutputPort
ssSetOptions
ssSetOutputPortComplexSignal
ssSetOutputPortDataType
ssSetOutputPortDimensionInfo
ssSetOutputPortFrameData
ssSetOutputPortMatrixDimensions
ssSetOutputPortOffsetTime
ssSetOutputPortOptimOpts
ssSetOutputPortOverwritesInputPort
ssSetOutputPortSampleTime
ssSetOutputPortVectorDimension
ssSetOutputPortWidth
ssSetParameterName
ssSetParameterTunable
ssSetPlacementGroup
ssSetPWorkValue
ssSetRWorkValue
ssSetRunTimeParamInfo
ssSetSampleTime
ssSetSFcnParamNotTunable
ssSetSFcnParamTunable
ssSetSolverNeedsReset
ssSetStopRequested
ssSetTNext
ssSetUserData
ssSetVectorMode
ssSetZeroBasedIndexInputPort
ssSetZeroBasedIndexOutputPort
ssUpdateAllTunableParamsAsRunTimeParams
ssUpdateRunTimeParamData
ssUpdateDlgParamAsRunTimeParam
ssUpdateRunTimeParamInfo
ssWarning
ssWriteRTW2dMatParam
ssWriteRTWMx2dMatParam
ssWriteRTWMxVectParam
ssWriteRTWParameters
ssWriteRTWParamSettings
ssWriteRTWScalarParam
ssWriteRTWStr
ssWriteRTWStrParam
ssWriteRTWStrVectParam
ssWriteRTWVectParam
ssWriteRTWWorkVect