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