S-Function
Includere S-function nel modello
Librerie:
Simulink /
User-Defined Functions
Descrizione
Il blocco S-Function consente di integrare nei modelli di Simulink gli algoritmi di S-function o di funzioni di sistema scritti in C, C++ o Fortran®, noti come C MEX S-function. È possibile utilizzare il blocco per implementare C MEX S-function di Level-1 o Level-2. Per incorporare la S-function in un modello, dopo aver compilato la C MEX S-function:
Trascinare un blocco S-function da Simulink Library Browser nel modello.
Aprire la finestra di dialogo Block Parameters e specificare il nome della S-function nel campo S-function name per fornire la funzionalità al blocco S-function. Ad esempio, digitare
timestwoe selezionare Apply.
Una S-function è una descrizione in linguaggio informatico di un blocco Simulink®, scritto in MATLAB®, C, C++ o Fortran. Se sono presenti S-function C, C++ e Fortran, è necessario che siano compilate come file MEX utilizzando l'utilità mex (vedere Build C MEX Function). Le S-function definiscono il funzionamento di un blocco durante le diverse fasi della simulazione, come l'inizializzazione, l'aggiornamento, il calcolo delle derivative, la generazione degli output e il termine. Le S-function utilizzano una sintassi di chiamata speciale denominata API della S-function che consente di interagire con il motore di Simulink. Questa interazione è molto simile a quella che avviene tra il motore e i blocchi Simulink integrati. In ogni fase della simulazione, il motore di simulazione invoca un metodo per svolgere un'attività specifica.
Ad esempio, di seguito è riportato un esempio di una semplice C MEX S-function chiamata timestwo.c che genera un output doppio del suo input.
#define S_FUNCTION_NAME timestwo /* Specifies the name of the S-function (timestwo) */
#define S_FUNCTION_LEVEL 2 /* Specifies that the S-function is in the Level 2 format */
#include "simstruc.h" /* Defines the data structure */
static void mdlInitializeSizes(SimStruct *S) /* Initialize the input and output ports and their size */
{
ssSetNumSFcnParams(S, 0);
if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) {
return; /* Parameter mismatch reported by the Simulink engine*/
}
if (!ssSetNumInputPorts(S, 1)) return;
ssSetInputPortWidth(S, 0, DYNAMICALLY_SIZED);
ssSetInputPortDirectFeedThrough(S, 0, 1);
if (!ssSetNumOutputPorts(S,1)) return;
ssSetOutputPortWidth(S, 0, DYNAMICALLY_SIZED);
ssSetNumSampleTimes(S, 1);
/* Take care when specifying exception free code - see sfuntmpl.doc */
ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE);
}
static void mdlInitializeSampleTimes(SimStruct *S) /* Set the sample time of the S-function as inherited */
{
ssSetSampleTime(S, 0, INHERITED_SAMPLE_TIME);
ssSetOffsetTime(S, 0, 0.0);
}
static void mdlOutputs(SimStruct *S, int_T tid) /* Calculate the block output for each time step */
{
int_T i;
InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0);
real_T *y = ssGetOutputPortRealSignal(S,0);
int_T width = ssGetOutputPortWidth(S,0);
for (i=0; i<width; i++) {
*y++ = 5.0 *(*uPtrs[i]);
}
}
static void mdlTerminate(SimStruct *S){} /* Perform tasks at the end of the simulation */
#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */
#include "simulink.c" /* MEX-file interface mechanism */
#else
#include "cg_sfun.h" /* Code generation registration function */
#endifLe S-function seguono una forma generale e possono ospitare sistemi continui, discreti e ibridi. È possibile implementare un algoritmo in una S-function e utilizzare il blocco S-Function per aggiungerlo a un modello di Simulink. Dopo aver scritto la S-function e averne inserito il nome in un blocco S-Function (disponibile nella libreria di blocchi User-Defined Functions (Funzioni definite dall'utente)), è possibile personalizzare l'interfaccia utente utilizzando il mascheramento. In questo esempio, la funzione timestwo.c viene compilata utilizzando mex timestwo.c e viene implementata utilizzando il blocco S-Function.

Il blocco S-Function visualizza il nome della S-function specificata e il numero delle porte di input e di output specificate dalla S-function. I segnali collegati agli input devono avere le dimensioni specificate dalla S-function per gli input.
Nota
Utilizzare il blocco Level-2 MATLAB S-Function per includere una S-function di MATLAB di livello 2 nel diagramma del blocco.
Esempi
Porte
Input
Output
Parametri
Caratteristiche del blocco
Funzionalità estese
Cronologia versioni
Introduzione prima di R2006a

