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 M S-Functions

    Introduction
        S-Function Arguments
        S-Function Outputs

    Defining S-Function Block Characteristics
    Processing S-Function Parameters
    Examples of M-File S-Functions
        Simple M-File S-Function Example
        Example - Continuous State S-Function
        Example - Discrete State S-Function
        Example - Hybrid System S-Function
        Example - Variable Sample Time S-Function

Writing S-Functions in C

    Introduction
        Creating C MEX S-Functions

    Building S-Functions Automatically
        S-Function Builder Dialog Box
        Setting the Include Path

    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

    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

    Work Vectors
        Work Vectors and Zero Crossings
        Example Involving a Pointer Work Vector
        Memory Allocation

    Function-Call Subsystems
    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

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
        MEX S-Function Wrapper
        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
        The Direct-Index Lookup Table Algorithm
        The Direct-Index Lookup Table Example

    Creating Code-Reuse-Compatible S-Functions

S-Function Callback Methods

    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
        ssGetBlockReduction
        ssGetContStateAddress
        ssGetContStates
        ssGetDataTypeId
        ssGetDataTypeName
        ssGetDataTypeSize
        ssGetDataTypeZero
        ssGetDiscStates
        ssGetDTypeIdFromMxArray
        ssGetDWork
        ssGetDWorkComplexSignal
        ssGetDWorkDataType
        ssGetDWorkName
        ssGetDWorkRTWIdentifier
        ssGetDWorkRTWStorageClass
        ssGetDWorkRTWTypeQualifier
        ssGetDWorkUsedAsDState
        ssGetDWorkWidth
        ssGetdX
        ssGetErrorStatus
        ssGetInlineParameters
        ssGetInputPortBufferDstPort
        ssGetInputPortComplexSignal
        ssGetInputPortConnected
        ssGetInputPortDataType
        ssGetInputPortDimensions
        ssGetInputPortDirectFeedThrough
        ssGetInputPortFrameData
        ssGetInputPortNumDimensions
        ssGetInputPortOffsetTime
        ssGetInputPortOverWritable
        ssGetInputPortRealSignal
        ssGetInputPortRealSignalPtrs
        ssGetInputPortRequiredContiguous
        ssGetInputPortReusable
        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
        ssGetOutputPortBeingMerged
        ssGetOutputPortComplexSignal
        ssGetOutputPortDataType
        ssGetOutputPortDimensions
        ssGetOutputPortFrameData
        ssGetOutputPortNumDimensions
        ssGetOutputPortOffsetTime
        ssGetOutputPortRealSignal
        ssGetOutputPortReusable
        ssGetOutputPortSampleTime
        ssGetOutputPortSignal
        ssGetOutputPortSignalAddress
        ssGetOutputPortWidth
        ssGetParentSS
        ssGetPath
        ssGetPlacementGroup
        ssGetPortBasedSampleTimeBlockIsTriggered
        ssGetPWork
        ssGetPWorkValue
        ssGetRealDiscStates
        ssGetRootSS
        ssGetRunTimeParamInfo
        ssGetRWork
        ssGetRWorkValue
        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
        ssSetExternalModeFcn
        ssSetInputPortComplexSignal
        ssSetInputPortDataType
        ssSetInputPortDirectFeedThrough
        ssSetInputPortFrameData
        ssSetInputPortMatrixDimensions
        ssSetInputPortOffsetTime
        ssSetInputPortOverWritable
        ssSetInputPortRequiredContiguous
        ssSetInputPortReusable
        ssSetInputPortSampleTime
        ssSetInputPortSampleTimeIndex
        ssSetInputPortVectorDimension
        ssSetInputPortWidth
        ssSetIWorkValue
        ssSetModeVectorValue
        ssSetNumContStates
        ssSetNumDiscStates
        ssSetNumDWork
        ssSetNumInputPorts
        ssSetNumIWork
        ssSetNumModes
        ssSetNumNonsampledZCs
        ssSetNumOutputPorts
        ssSetNumPWork
        ssSetNumRunTimeParams
        ssSetNumRWork
        ssSetNumSampleTimes
        ssSetNumSFcnParams
        ssSetOffsetTime
        ssSetOptions
        ssSetOutputPortComplexSignal
        ssSetOutputPortDataType
        ssSetOutputPortFrameData
        ssSetOutputPortMatrixDimensions
        ssSetOutputPortOffsetTime
        ssSetOutputPortReusable
        ssSetOutputPortSampleTime
        ssSetOutputPortVectorDimension
        ssSetOutputPortWidth
        ssSetParameterName
        ssSetParameterTunable
        ssSetPlacementGroup
        ssSetPWorkValue
        ssSetRWorkValue
        ssSetRunTimeParamInfo
        ssSetSampleTime
        ssSetSFcnParamNotTunable
        ssSetSFcnParamTunable
        ssSetSolverNeedsReset
        ssSetStopRequested
        ssSetTNext
        ssSetUserData
        ssSetVectorMode
        ssUpdateAllTunableParamsAsRunTimeParams
        ssUpdateRunTimeParamData
        ssUpdateDlgParamAsRunTimeParam
        ssUpdateRunTimeParamInfo
        ssWarning
        ssWriteRTW2dMatParam
        ssWriteRTWMx2dMatParam
        ssWriteRTWMxVectParam
        ssWriteRTWParameters
        ssWriteRTWParamSettings
        ssWriteRTWScalarParam
        ssWriteRTWStr
        ssWriteRTWStrParam
        ssWriteRTWStrVectParam
        ssWriteRTWVectParam
        ssWriteRTWWorkVect