Contenuto principale

Introduzione alla S-Function

Le S-Function o funzioni di sistema forniscono un potente meccanismo per estendere le capacità dell'ambiente Simulink®. Una S-Function è una descrizione in linguaggio informatico di un blocco Simulink, scritto in MATLAB®, C, C++ o Fortran®. 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.

  • Per i blocchi scritti in MATLAB, utilizzare le S-Function di MATLAB di livello 2. Per implementare la S-Function di MATLAB di livello 2 in un modello di Simulink, utilizzare il blocco Level-2 MATLAB S-Function. Per ulteriori informazioni, vedere Write Level-2 MATLAB S-Functions.

  • Per i blocchi scritti in C, C++ o Fortran, utilizzare le C MEX S-Function. Per implementare la C MEX S-Function in un modello di Simulink, compilare la S-Function utilizzando l'utilità mex e il blocco S-Function. Dopo aver compilato la S-Function e averla implementata utilizzando un blocco S-Function, è possibile personalizzare l'interfaccia utente utilizzando il mascheramento (vedere Scrittura delle maschere del blocco).

Come per altri file MEX, le S-Function sono subroutine collegate dinamicamente che il motore di esecuzione di MATLAB può caricare ed eseguire automaticamente. Per ulteriori informazioni, vedere Create and Implement a Basic C MEX S-Function.

È anche possibile utilizzare il blocco S-Function Builder per integrare codice C o C++, nuovo o esistente, e creare una C MEX S-Function dalle specifiche fornite.

Se si dispone di Simulink Coder™, è possibile utilizzare le S-Function in un modello e generare codice. È anche possibile personalizzare il codice generato per le S-Function scrivendo un file Target Language Compiler (TLC). Per ulteriori informazioni, vedere S-Functions and Code Generation (Simulink Coder).

Principi di funzionamento delle S-Function

Le S-Function definiscono il funzionamento di un blocco durante le diverse fasi della simulazione, come l'inizializzazione, l'aggiornamento, il calcolo delle derivate, la generazione degli output e il termine. In ogni fase della simulazione, il motore di simulazione invoca un metodo per svolgere un'attività specifica. Le nozioni di base sulla S-Function richiedono una conoscenza fondamentale delle relazioni matematiche tra gli input, gli stati e gli output dei blocchi. Per comprendere il funzionamento delle S-Function, è necessario innanzitutto comprendere la matematica alla base della simulazione di un modello da parte di Simulink, ossia le fasi di simulazione. Per informazioni più dettagliate, vedere Simulation Phases in Dynamic Systems.

Matematica dei blocchi Simulink

Un blocco Simulink è costituito da un insieme di input, un insieme di stati, un insieme di parametri e un insieme di output, dove gli output sono una funzione del tempo di simulazione, degli input, dei parametri e degli stati.

Le seguenti equazioni esprimono le relazioni matematiche tra input, output, parametri, stati e tempo di simulazione.

y=f0(t,x,u)                 (Outputs)x˙=fd(t,x,u)                 (Derivatives)xdk+1=fu(t,xc,xdk,u),   (Update)

dove x=[xc;xd].

Fasi della simulazione

L'esecuzione di un modello di Simulink procede per fasi. Nella fase di inizializzazione, il motore di Simulink incorpora i blocchi libreria nel modello, propaga le larghezze dei segnali, i tipi di dato e i tempi di campionamento, valuta i parametri dei blocchi, determina il loro ordine di esecuzione e alloca la memoria. Il motore entra quindi in un loop di simulazione, dove ogni passaggio attraverso il loop è denominato fase di simulazione. Durante ciascuna fase della simulazione, il motore esegue ogni blocco del modello nell'ordine determinato durante l'inizializzazione. Per ogni blocco, il motore invoca funzioni che calcolano gli stati del blocco, le derivate e gli output per il tempo di campionamento attuale. L'intero loop di simulazione continua quindi fino al completamento della simulazione.

Inizializzazione del modello: il modello viene preparato per la simulazione. In questa fase vengono valutati i parametri dei blocchi, viene determinato il loro ordine di esecuzione e viene allocata la memoria per ciascuna operazione. Dopo questa fase, i blocchi passano attraverso un loop di simulazione.

Aggiornamento degli stati continui e del tempo: avviene solo se il modello presenta stati continui. È possibile modificare i metodi per le passi minori, quali mdlOutputs, mdlDerivatives e mdlZeroCrossing per calcolare gli output.

Metodi di chiamata della S-Function

Una S-Function comprende un insieme di metodi di richiamo della S-Function che eseguono le attività richieste in ciascuna fase della simulazione. Durante la simulazione di un modello, in ogni fase della simulazione, il motore di Simulink chiama i metodi appropriati per ciascun blocco S-Function nel modello. Le attività eseguite dai metodi di richiamo della S-Function includono:

  • Compilazione: in questa fase, il motore di Simulink inizializza la S-Function. Le attività includono:

    • L'incorporazione dei blocchi libreria nel modello e la propagazione delle larghezze dei segnali, dei tipi di dato e dei tempi di campionamento

    • L'impostazione del numero e delle dimensioni delle porte di input e di output

    • La valutazione dei parametri dei blocchi e la determinazione del loro ordine di esecuzione

    • L'allocazione delle aree di memoria e archiviazione

  • Calcolo degli output: in questa fase, gli output vengono calcolati fino a quando tutte le porte di output del blocco non sono valide per il passo temporale attuale, ossia tutti i valori di output rientrano in un determinato intervallo di errore.

  • Aggiornamento degli stati discreti: in questa chiamata, il blocco esegue le attività una volta per ciascun passo temporale, come l'aggiornamento degli stati discreti.

  • Metodi inizializza e termina: questi metodi opzionali eseguono le attività di inizializzazione e terminazione richieste dalla S-Function una sola volta. Le attività di inizializzazione possono includere l'impostazione dei dati utente o l'inizializzazione dei vettori di stato in una S-Function. Il metodo di terminazione esegue tutte le azioni necessarie, come la liberazione di memoria, quando la simulazione viene terminata o quando un blocco S-Function viene eliminato da un modello.

  • Integrazione: si applica ai modelli con stati continui e/o zero-crossing non campionati. Se la S-Function presenta stati continui, il motore chiama le parti di output e di derivata della S-Function a passi temporali minori. Questo consente ai risolutori di calcolare gli stati per la S-Function. Se la S-Function presenta zero-crossing non campionati, il motore chiama anche le parti di output e di zero-crossing della S-Function a passi temporali minori, in modo da poter individuare gli zero-crossing.

Per comprendere la terminologia relativa alle simulazioni, in particolare per le S-Function, vedere S-Function Concepts.

Utilizzo delle S-Function nei modelli

  1. Per incorporare una C MEX S-Function in un modello, trascinare un blocco S-function da Simulink Library Browser. In modo analogo, per incorporare una Level-2 MATLAB S-function nel modello, trascinare un blocco Level-2 MATLAB S-function nel modello.

  2. 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 timestwo e premere Apply per aggiungere una C MEX S-Function che moltiplica per due il segnale in ingresso.

Nota

Se il percorso di MATLAB include un file C MEX e un file MATLAB con lo stesso nome a cui fa riferimento un blocco S-Function, il blocco S-Function utilizza il file C MEX.

Passaggio dei parametri alle S-Function

Sia il blocco S-function che la finestra Level-2 MATLAB S-Function Block Parameters consentono di specificare i valori dei parametri da passare alla S-Function corrispondente. Per utilizzare questi campi, è necessario conoscere i parametri richiesti dalla S-Function e l'ordine in cui la stessa li richiede. (Se i parametri non sono noti, consultate l'autore della S-Function, la documentazione o il codice sorgente). Inserire i parametri, separati da una virgola, nell'ordine richiesto dalla S-Function. I valori dei parametri possono essere costanti, nomi di variabili definite nel workspace di MATLAB o del modello, oppure espressioni di MATLAB.

L'esempio seguente illustra l'utilizzo del campo Parameters per inserire parametri definiti dall'utente per una S-Function di MATLAB di livello 2.

In questo esempio, il modello msfcndemo_limintm incorpora la S-Function campione msfcn_limintm.m.

La S-Function msfcn_limintm.m accetta tre parametri: un limite inferiore, un limite superiore e una condizione iniziale. La funzione S-Function genera l'integrale nel tempo del segnale di input se l'integrale nel tempo è compreso tra il limite inferiore e quello superiore, il limite inferiore se l'integrale nel tempo è inferiore al limite inferiore e il limite superiore se l'integrale nel tempo è superiore al limite superiore. La finestra di dialogo nell'esempio specifica rispettivamente un limite inferiore e superiore e una condizione iniziale di -5.0, 5.0 e 0. Scope mostra l'output risultante quando l'input è un'onda sinusoidale di ampiezza 5.

Per informazioni su come accedere ai parametri specificati dall'utente in una S-Function, vedere Processing S-Function Parameters e Handle Errors in S-Functions.

È possibile utilizzare il mascheramento per creare finestre di dialogo e icone personalizzate per i blocchi S-Function. Le finestre di dialogo mascherate possono facilitare la definizione di ulteriori parametri per le S-Function. Per una discussione sul mascheramento, vedere Scrittura delle maschere del blocco.

Casi di utilizzo di una S-Function

È possibile utilizzare le S-Function per una serie di applicazioni, tra cui:

  • Creare nuovi blocchi per scopi generici

  • Aggiungere blocchi che rappresentano i driver del dispositivo hardware

  • Incorporare codice C esistente in una simulazione (vedere Integrate C Functions Using Legacy Code Tool)

  • Descrivere un sistema come un insieme di equazioni matematiche

  • Utilizzare le animazioni grafiche (vedere l'esempio del pendolo invertito Pendolo inverso con animazione)

L'utilizzo più comune delle S-Function è la creazione di blocchi Simulink personalizzati (vedere Nozioni di base sulla scrittura del blocco). Quando si utilizza una S-Function per creare un blocco per scopi generici, è possibile utilizzarlo più volte in un modello variando i parametri con ciascuna istanza del blocco.

Vedi anche

| | |

Argomenti