Writing S-Functions    

The SimStruct

The file matlabroot/simulink/include/simstruc.h is a C language header file that defines the Simulink data structure and the SimStruct access macros. It encapsulates all the data relating to the model or S-function, including block parameters and outputs.

There is one SimStruct data structure allocated for the Simulink model. Each S-function in the model has its own SimStruct associated with it. The organization of these SimStructs is much like a directory tree. The SimStruct associated with the model is the root SimStruct. The SimStructs associated with the S-functions are the child SimStructs.

SimStruct Macros and Functions Listed by Usage

This section groups SimStruct macros by usage.

Miscellaneous

Macro
Description
ssCallExternalModeFcn
Invoke the external mode function for an S-function.
ssGetModelName
Get the name of an S-Function block or model containing the S-function.
ssGetParentSS
Get the parent of an S-function.
ssGetPath
Get the path of an S-function or the model containing the S-function.
ssGetRootSS
Return the root (model) SimStruct.
ssGetUserData
Access user data.
ssSetExternalModeFcn
Specify the external mode function for an S-function.
ssSetOptions
Set various simulation options.
ssSetPlacementGroup
Specify the execution order of a sink or source S-function.
ssSetUserData
Specify user data.

Error Handling and Status

Macros
Description
ssGetErrorStatus
Get a string that identifies the last error.
ssPrintf
Print a variable-content msg.
ssSetErrorStatus
Report errors.
ssWarning
Display a warning message.

I/O Port

Macro
Description
ssGetInputPortBufferDstPort
Determine the output port that is overwriting an input port's memory buffer.
ssGetInputPortComplexSignal
Get the numeric type (complex or real) of an input port.
ssGetInputPortConnected
Determine whether an S-Function block port is connected to a nonvirtual block.
ssGetInputPortDataType
Get the data type of an input port.
ssGetInputPortDimensions
Get the dimensions of the signal accepted by an input port.
ssGetInputPortDirectFeedThrough
Determine whether an input port has direct feedthrough.
ssGetInputPortFrameData
Determine whether a port accepts signal frames.
ssGetInputPortNumDimensions
Get the dimensionality of the signals accepted by an input port.
ssGetInputPortOffsetTime
Determine the offset time of an input port.
ssGetInputPortOverWritable
Determine whether an input port can be overwritten.
ssGetInputPortRealSignal
Get the address of a real, contiguous signal entering an input port.
ssGetInputPortRealSignalPtrs
Access the signal elements connected to an input port.
ssGetInputPortRequiredContiguous
Determine whether the signal elements entering a port must be contiguous.
ssGetInputPortReusable

Determine whether memory allocated to the input port is reusable.

ssGetInputPortSampleTime
Determine the sample time of an input port.
ssGetInputPortSampleTimeIndex
Get the sample time index of an input port.
ssGetInputPortSignal
Get the address of a contiguous signal entering an input port.
ssGetInputPortSignalAddress
Get the address of an input port's signal (Ada only).
ssGetInputPortSignalPtrs
Get pointers to input signal elements of type other than double.
ssGetInputPortWidth
Determine the width of an input port.
ssGetNumInputPorts
Determine how many input ports a block has.
ssGetNumOutputPorts
Can be used in any routine (except mdlInitializeSizes) to determine how many output ports you have set.
ssGetOutputPortBeingMerged
Determine whether the output of this block is connected to a Merge block.
ssGetOutputPortComplexSignal
Get the numeric type (complex or real) of an output port
ssGetOutputPortDataType
Get the data type of an output port.
ssGetOutputPortDimensions
Get the dimensions of the signal leaving an output port.
ssGetOutputPortFrameData
Determine whether a port outputs signal frames.
ssGetOutputPortNumDimensions
Get the number of dimensions of an output port.
ssGetOutputPortOffsetTime
Determine the offset time of an output port.
ssGetOutputPortRealSignal
Access the elements of a signal connected to an output port.
ssGetOutputPortReusable
Determine whether memory allocated to the output port is reusable
ssGetOutputPortSampleTime
Determine the sample time of an output port.
ssGetOutputPortSignal
Get the vector of signal elements emitted by an output port.
ssGetOutputPortSignalAddress
Get address of an output port's signal (Ada only).
ssGetOutputPortWidth
Determine the width of an output port.
ssSetInputPortComplexSignal
Set the numeric type (real or complex) of an input port.
ssSetInputPortDataType
Set the data type of an input port.
ssSetInputPortDimensionInfo
Specify the dimensionality of an input port.
ssSetInputPortDirectFeedThrough
Specify that an input port is a direct-feedthrough port.
ssSetInputPortFrameData
Specify whether a port accepts signal frames.
ssSetInputPortMatrixDimensions
Specify dimension information for an input port that accepts matrix signals.
ssSetInputPortOffsetTime
Specify the sample time offset for an input port.
ssSetInputPortOverWritable
Specify whether an input port is overwritable by an output port.
ssSetInputPortRequiredContiguous
Specify that the signal elements entering a port must be contiguous.
ssSetInputPortReusable
Specify whether an input port's memory buffer can be reused by other signals in the model.
ssSetInputPortSampleTime
Set the sample time of an input port.
ssSetInputPortSampleTimeIndex
Specify the sample time index of an input port.
ssSetInputPortVectorDimension
Specify dimension information for an input port that accepts vector signals.
ssSetInputPortWidth
Set the width of an input port.
ssSetNumInputPorts
Set the number of input ports on an S-Function block.
ssSetNumOutputPorts
Specify the number of output ports on an S-Function block.
ssSetOutputPortComplexSignal
Specify the numeric type (real or complex) of this port.
ssSetOutputPortDataType
Specify the data type of an output port.
ssSetOutputPortDimensionInfo
Specify the dimensionality of an output port.
ssSetOutputPortFrameData
Specify whether a port outputs framed data.
ssSetOutputPortMatrixDimensions
Specify dimension information for an output port that emits matrix signals
ssSetOutputPortOffsetTime
Specify the sample time offset value of an output port.
ssSetOutputPortReusable
Specify whether an output port's memory can be reused.
ssSetOutputPortSampleTime
Specify the sample time of an output port.
ssSetOutputPortVectorDimension
Specify dimension information for an output port that emits vector signals
ssSetOutputPortWidth
Specify the width of a 1-D (vector) output port.
ssSetOutputPortMatrixDimensions
Specify the dimensions of a 2-D (matrix) signal.
ssSetOutputPortVectorDimension
Specify the dimension of a 1-2 (vector) signal.
ssSetVectorMode
Specify the vector mode that an S-function supports.

Dialog Box Parameters

These macros enable an S-function to access and set the tunability of parameters that a user specifies in the S-function's dialog box.

Macro
Description
ssGetDTypeIdFromMxArray
Return the Simulink data type of a dialog parameter.
ssGetNumParameters
Get the number of parameters that this block has (Ada only).
ssGetNumSFcnParams
Get the number of parameters that an S-function expects.
ssGetSFcnParam
Get a parameter entered by a user in the S-Function block dialog box.
ssSetNumSFcnParams
Set the number of parameters that an S-function expects.
ssSetParameterName
Set the name of a parameter (Ada only).
ssSetParameterTunable
Set the tunability of a parameter (Ada only).
ssGetSFcnParamsCount
Get the actual number of parameters specified by the user.
ssSetSFcnParamNotTunable
Obsolete.
ssSetSFcnParamTunable
Specify the tunability of a dialog box parameter.

Run-Time Parameters

These macros allow you to create, update, and access run-time parameters corresponding to a block's dialog parameters.

Macro
Description
ssRegDlgParamAsRunTimeParam
Register a run-time parameter.
ssUpdateDlgParamAsRunTimeParam
Update a run-time parameter.
ssGetNumRunTimeParams
Get the number of run-time parameters created by this S-function.
ssGetRunTimeParamInfo
Get the attributes of a specified run-time parameter.
ssRegAllTunableParamsAsRunTimeParams
Register all tunable dialog parameters as run-time parameters.
ssSetNumRunTimeParams
Specify the number of run-time parameters to be created by this S-function.
ssSetRunTimeParamInfo
Specify the attributes of a specified run-time parameter.
ssUpdateAllTunableParamsAsRunTimeParams
Update all run-time parameters corresponding to tunable dialog parameters.
ssUpdateRunTimeParamData
Update the value of a specified run-time parameter.
ssUpdateRunTimeParamInfo
Update the attributes of a specified run-time parameter from the attributes of the corresponding dialog parameters.

Sample Time

Macro
Description
ssGetSampleTimeOffset
Get the offset of the current sample time (Ada only).
ssGetSampleTimePeriod
Get the period of the current sample time (Ada only).
ssGetTNext
Get the time of the next sample hit in a discrete S-function with a variable sample time.
ssGetNumSampleTimes
Get the number of sample times an S-function has.
ssGetPortBasedSampleTimeBlockIsTriggered
Determine whether a block that uses port-based sample times resides in a triggered subsystem.
ssIsContinuousTask
Determine whether a specified rate is the continuous rate.
ssIsSampleHit
Determine the sample rate at which an S-function is operating.
ssIsSpecialSampleHit
Determine whether the current sample time hits two specified rates.
ssSampleAndOffsetAreTriggered
Determine whether a sample time and offset value pair indicate a triggered sample time.
ssSetNumSampleTimes
Set the number of sample times an S-function has.
ssSetOffsetTime
Specify the offset of a sample time.
ssSetSampleTime
Specify a sample time for an S-function.
ssSetTNext
Specify the time of the next sample hit in an S-function.

State and Work Vector

Macro
Description
ssGetContStateAddress
Get the address of a block's continuous state vector.
ssGetContStates
Get an S-function's continuous states.
ssGetDiscStates
Get an S-function's discrete states.
ssGetDWork
Get a DWork vector.
ssGetDWorkComplexSignal
Determine whether the elements of a data type work vector are real or complex numbers.
ssGetDWorkDataType
Get the data type of a data type work vector.
ssGetDWorkName
Get the name of a data type work vector.
ssGetDWorkUsedAsDState
Determine whether a data type work vector is used as a discrete state vector.
ssGetDWorkWidth
Get the size of a data type work vector.
ssGetdX
Get the derivatives of the continuous states of an S-function.
ssGetIWork
Get an S-function's integer-valued (int_T) work vector.
ssGetIWorkValue
Get a value from a block's integer work vector.
ssGetModeVector
Get an S-function's mode work vector.
ssGetModeVectorValue
Get an element of a block's mode vector.
ssGetNonsampledZCs
Get an S-function's zero-crossing signals vector.
ssGetNumContStates
Determine the number of continuous states that an S-function has.
ssGetNumDiscStates
Determine the number of discrete states that an S-function has.
ssGetNumDWork
Get the number of data type work vectors used by a block.
ssGetNumIWork
Get the size of an S-function's integer work vector.
ssGetNumModes
Determine the size of an S-function's mode vector.
ssGetNumNonsampledZCs
Determine the number of nonsampled zero crossings that an S-function detects.
ssGetNumPWork
Determine the size of an S-function's pointer work vector.
ssGetNumRWork
Determine the size of an S-function's real-valued (real_T) work vector.
ssGetPWork
Get an S-function's pointer (void *) work vector.
ssGetPWorkValue
Get a pointer from a pointer work vector.
ssGetRealDiscStates
Get the real (real_T) values of an S-function's discrete state vector.
ssGetRWork
Get an S-function's real-valued (real_T) work vector.
ssGetRWorkValue
Get an element of an S-function's real-valued work vector.
ssSetDWorkComplexSignal
Specify whether the elements of a data type work vector are real or complex.
ssSetDWorkDataType
Specify the data type of a data type work vector.
ssSetDWorkName
Specify the name of a data type work vector.
ssSetDWorkUsedAsDState
Specify that a data type work vector is used as a discrete state vector.
ssSetDWorkWidth
Specify the width of a data type work vector.
ssSetIWorkValue
Set an element of a block's integer work vector.
ssSetModeVectorValue
Set an element of a block's mode vector.
ssSetNumContStates
Specify the number of continuous states that an S-function has.
ssSetNumDiscStates
Specify the number of discrete states that an S-function has.
ssSetNumDWork
Specify the number of data type work vectors used by a block.
ssSetNumIWork
Specify the size of an S-function's integer (int_T) work vector.
ssSetNumModes
Specify the number of operating modes that an S-function has.
ssSetNumNonsampledZCs
Specify the number of zero crossings that an S-function detects.
ssSetNumPWork
Specify the size of an S-function's pointer (void *) work vector.
ssSetNumRWork
Specify the size of an S-function's real (real_T) work vector.
ssSetPWorkValue
Set an element of a block's pointer work vector.
ssSetRWorkValue
Set an element of a block's floating-point work vector.

Simulation Information

Macro
Description
ssGetAbsTol
Get the absolute tolerances used by a model's variable-step solver.
ssGetBlockReduction
Determine whether a block has requested block reduction before the simulation has begun and whether it has actually been reduced after the simulation loop has begun
ssGetErrorStatus
Get a string that identifies the last error.
ssGetInlineParameters
Determine whether the user has set the inline parameters option for the model containing this S-function.
ssGetSimMode
Determine the context in which an S-function is being invoked: normal simulation, external-mode simulation, model editor, etc.
ssGetSolverMode
Get the solver mode being used to solve the S-function.
ssGetSolverName
Get the name of the solver being used for the simulation.
ssGetStateAbsTol
Get the absolute tolerance used by the model's variable-step solver for a specified state
ssGetStopRequested
Get the value of the simulation stop requested flag
ssGetT
Get the current base simulation time.
ssGetTaskTime
Get the current time for a task.
ssGetTFinal
Get the end time of the current simulation.
ssGetTNext
Get the time of the next sample hit.
ssGetTStart
Get the start time of the current simulation.
ssIsFirstInitCond
Determine whether this is the first call to mdlInitializeConditions.
ssIsMajorTimeStep
Determine whether the current time step is a major time step.
ssIsMinorTimeStep
Determine if the current time step is a minor time step.
ssIsVariableStepSolver
Determine whether the current solver is a variable-step solver.
ssSetBlockReduction
Request that Simulink attempt to reduce a block.
ssSetSolverNeedsReset
Ask Simulink to reset the solver.
ssSetStopRequested
Ask Simulink to terminate the simulation at the end of the current time step.
 

Function Call

Macro
Description
ssCallSystemWithTid
Execute a function-call subsystem connected to an S-function.
ssSetCallSystemOutput
Specify that an output port element issues a function call.

Data Type

Macro
Description
ssGetDataTypeId
Get the ID for a data type.
ssGetDataTypeName
Get a data type's name.
ssGetDataTypeSize
Get a data type's size.
ssGetDataTypeZero
Get the zero representation of a data type.
ssGetInputPortDataType
Get the data type of an input port.
ssGetNumDataTypes
Get the number of data types defined by an S-function or the model.
ssGetOutputPortDataType
Get the data type of an output port.
ssGetOutputPortSignal
Get an output signal of any type except double.
ssRegisterDataType
Register a data type.
ssSetDataTypeSize
Specify the size of a data type.
ssSetDataTypeZero
Specify the zero representation of a data type.
ssSetInputPortDataType
Specify the data type of signals accepted by an input port.

Real-Time Workshop

Macro
Description
ssGetDWorkRTWIdentifier
Get the identifier used to declare a DWork vector in code generated from the associated S-function.
ssGetDWorkRTWStorageClass
Get the storage class of a DWork vector in code generated from the associated S-function.
ssGetDWorkRTWTypeQualifier
Get the C type qualifier (e.g., const) used to declare a DWork vector in code generated from the associated S-function.
ssGetDWorkRTWTypeQualifier
Set the identifier used to declare a DWork vector in code generated from the associated S-function.
ssGetPlacementGroup
Get the name of the placement group of a block
ssSetDWorkRTWIdentifier
Set the storage class of a DWork vector in code generated from the associated S-function.
ssSetDWorkRTWStorageClass
Set the C type qualifier (e.g., const) used to declare a DWork vector in code generated from the associated S-function.
ssSetPlacementGroup
Specify the name of the placement group of a block.
ssWriteRTW2dMatParam
Write a Simulink matrix parameter to the S-function's model.rtw file.
ssWriteRTWMx2dMatParam
Write a MATLAB matrix parameter to the S-function's model.rtw file.
ssWriteRTWMxVectParam
Write a MATLAB vector parameter to the S-function's model.rtw file.
ssWriteRTWParameters
Write tunable parameters to the S-function's model.rtw file.
ssWriteRTWParamSettings
Write settings for the S-function's parameters to the model.rtw file.
ssWriteRTWScalarParam
Write a scalar parameter to the S-function's model.rtw file.
ssWriteRTWStr
Write a string to the S-function's model.rtw file.
ssWriteRTWStrParam
Write a string parameter to the S-function's model.rtw file.
ssWriteRTWStrVectParam
Write a string vector parameter to the S-function's model.rtw file
ssWriteRTWVectParam
Write a Simulink vector parameter to the S-function's model.rtw file.
ssWriteRTWWorkVect
Write the S-function's work vectors to the model.rtw file.


  Language Support Macro Reference