Writing S-Functions

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


 Overview of S-Functions