Introduzione alle S-function |
Cos’è una S-Function.Una S-Function è una descrizione, mediante linguaggio di programmazione, di un sistema dinamico, il cui codice può essere scritto utilizzando i linguaggi Matlab o C. Le S-Function scritte con quest’ultimo linguaggio sono compilate come MEX-file (Memory Executable) utilizzando il comando mex disponibile all'interno dell'ambiente Matlab. Il codice generato è contenuto in una libreria dinamica o DLL (Dynamic Link Library), che viene invocata dal Matlab in modo dinamico, ovvero il Matlab, nel momento in cui il Simulink ne richiede l'uso, cerca la DLL nel path del Matlab e ci si collega utilizzando le funzioni che la DLL esporta. Una volta effettuato, il collegamento diventa stabile (la DLL risulta in permanente utilizzazione da parte del Matlab) per cui la DLL non è più cancellabile (da Explorer) o modificabile (da un programma esterno a Matlab) finché dal Matlab non viene eseguita l'istruzione "clear mex" o viene ricompilata di nuovo tramite l'istruzione "mex". La forma di una S-Function è molto generale e può descrivere sistemi continui, discreti e ibridi. Quasi tutti i modelli Simulink possono essere, quindi, realizzati come S-Function. Le S-Function vengono inglobate nei modelli Simulink utilizzando il blocco S-Function nella sottolibreria Nonlinear Block (Matlab 5.x) o User-Defined Blocks (Matlab 6.x). Accedendo alla finestra di dialogo del blocco è possibile specificare il nome della S-Function da utilizzare. Si tenga presente che qualora esistano due S-Function, di cui una scritta come C MEX-file e l’altra come M-file (Matlab file), sarà la prima ad essere utilizzata. Si possono utilizzare le finestre di Simulink e le relative istruzioni per inserire documentazioni inerenti al blocco, inserire parametri additivi ecc. Quando utilizzare una S-Function.L’utilizzo più comune di una S-Function è come blocco utente di Simulink. E’ possibile utilizzarle in svariate applicazioni, tra cui citiamo:
Una stessa S-function può essere utilizzata in più punti della stessa simulazione, modificando solamente i parametri con cui la S-function viene invocata. Caratteristiche generali delle S-Function.Ciascun blocco interno ad un modello Simulink possiede le seguenti caratteristiche generali: un vettore degli ingressi u, un vettore delle uscite y, ed un vettore degli stati x, come nella seguente figura: Il vettore degli stati può contenere stati continui, discreti, o una combinazione di essi. La relazione matematica tra ingressi, uscite, e stati sono espresse dalle seguenti equazioni:
dove x = [xc , xd]. Il vettore
degli stati viene quindi suddiviso in due parti: una contenete gli stati
continui e l’altra i discreti. Gli stati continui occupano la prima parte
del vettore, e i discreti la seconda. Per blocchi privi di stati x è
un vettore vuoto. Nei MEX-file delle S-Function, ci sono due vettori separati
per gli stati
continui e discreti. Stadi di simulazione e routine di S-Function.Durante l’esecuzione di un modello Simulink effettua chiamate successive ai singoli blocchi, e quindi anche alle S-Function, onde effettuare su essi specifiche operazioni relative allo stadio attuale in cui si trova la computazione, es. inizializzazione del blocco, definizione dei parametri, calcolo delle uscite e così via. La successione di questi stadi può essere visualizzata con il presente diagramma di flusso: Figura 2: Come
Simulink esegue la simulazione L’esecuzione di questi passi è realizzata mediante routine che eseguono il loro compito durante ciascun passo.Queste azioni si possono classificare come:
Introduzione alle C-MEX S-Function.Le C-MEX S-Function sono realizzate come funzioni in linguaggio C. Esiste un set di routine per S-Function le quali vengono chiamate direttamente da Simulink per eseguire il loro compito e possono essere utilizzate nella scrittura delle S-Function. Tabella 1: Stadi di simulazione.
Concetti di base.Una piena comprensione dei seguenti concetti aiuterà ad una corretta scrittura delle S-Function:
Direct
feedthrough
Con questo termine si definisce la caratteristica del nostro algoritmo di presentare un’influenza diretta degli ingressi sulle uscite.Una S-Function ha questa caratteristica se:
Un esempio di algoritmo che non richiede direct feedthrough è il seguente:
dove x è lo stato, dx/dt è la derivata rispetto al tempo, u è l’ingresso e y l’uscita. Impostazione dinamica dell’ampiezza dell’ingressoLe S-Function possono essere realizzate in modo tale da prevedere un’impostazione dinamica dell’ampiezza dell’ingresso, determinata cioè a tempo di esecuzione e stabilita dall’ampiezza delle uscite dei blocchi collegati alla S-Function, essa può essere utilizzata per definire il numero di stati continui, discreti e il numero di uscite. Le C-MEX S-Function consentono, quindi, di definire porte di accesso e di uscita multiple di forma vettoriale. Vedremo in seguito esempi in tal senso. Impostazione del tempo di
campionamento e dell’offset.
Le C-MEX S-Function consentono un alto grado di flessibilità nello stabilire quando avviene l’esecuzione fornendo il seguente insieme di scelte:
TimeHit
= (n * period) + offset Dove n è un intero, e il suo primo valore è sempre zero.
Si potranno definire questi parametri utilizzando le routine di S-Function appropriate che vedremo in Esempi di C-MEX S-Function possono essere trovati nella directory simulink/src, ne citiamo alcune: timestwo.c, csfunc.c, dsfunc.c, dlimint.c, vsfunc.c, mixed.c ed altre. Questa pagina è stata aggiornata il 03/01/04. Testo originale: Massimo Demofonte Aggiornamento e adattamento: Leonardo Daga |
Leonardo
Daga's Warehouseâ,
http://leonardodaga.insyde.it |