Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

Implementazione delle funzioni di MATLAB in Simulink con i blocchi MATLAB Function

I blocchi MATLAB Function consentono di definire funzioni personalizzate nei modelli di Simulink® utilizzando il linguaggio di MATLAB®. I blocchiMATLAB Function supportano la generazione di codice C/C++ da Simulink Coder™ e Embedded Coder®.

Utilizzare questi blocchi quando:

  • Si dispone di una funzione di MATLAB esistente che modella una funzionalità personalizzata oppure quando è facile creare una funzione di questo tipo.

  • Il modello richiede una funzionalità personalizzata che non è o non può essere catturata nel linguaggio grafico di Simulink.

  • Risulta più facile modellare una funzionalità personalizzata utilizzando una funzione di MATLAB piuttosto che un diagramma del blocco Simulink.

  • La funzionalità personalizzata che si desidera modellare non include stati dinamici continui o discreti. Per modellare gli stati dinamici, utilizzare le S-function. Vedere Creazione e configurazione di funzioni S di MATLAB.

Calcolo della media e della deviazione standard con un blocco MATLAB Function

Questo esempio parte da un modello che include un blocco MATLAB Function e guida alla personalizzazione del blocco per calcolare la media e la deviazione standard di un vettore di valori.

Apertura del modello

Il modello call_stats_block1 include un blocco MATLAB Function vuoto e i blocchi necessari per l'esempio. Aprire il modello.

Programmazione del blocco MATLAB Function

Programmare il blocco per calcolare la media e la deviazione standard di un vettore di valori.

  1. Per aprire l'Editor del blocco MATLAB function, fare doppio clic sul blocco MATLAB Function. Viene visualizzata una funzione predefinita nell'Editor del blocco MATLAB function con due variabili: un argomento di input e uno di output.

    This image shows the MATLAB Function Block Editor after it has been opened from the call_stats_block1 model. It includes a default function.

  2. Definire gli input e gli output della funzione modificando la dichiarazione della funzione:

    function [mean, stdev] = stats(vals)
    

    Questa dichiarazione definisce una funzione chiamata stats con tre variabili. La dichiarazione definisce un argomento di input vals e due argomenti di output mean e stdev.

  3. In una nuova riga, dopo la dichiarazione della funzione, aggiungere il seguente codice:

    % Calculates a statistical mean and a standard
    % deviation for the values in vals.
    
    len = length(vals);
    mean = avg(vals,len);
    stdev = sqrt(sum(((vals-avg(vals,len)).^2))/len);
    plot(vals,"-+");
    
    function mean = avg(array,size)
    mean = sum(array)/size;
    
  4. Uscire dal blocco. Il blocco aggiorna i nomi delle porte. La funzione genera mean e stdev che corrispondono alle porte di output mean e stdev del blocco e la funzione di input vals che corrisponde alla porta di input vals del blocco.

  5. Completare i collegamenti al blocco MATLAB Function come mostrato.

    This shows connected signals between the blocks established in the previous image.

  6. Salvare il modello come call_stats_block2.

Controllo delle proprietà delle variabili del blocco MATLAB Function

È possibile controllare e gestire le proprietà delle variabili nei blocchi MATLAB Function. Vedere Create and Define MATLAB Function Block Variables. In questo esempio, verificare che l'argomento di input vals erediti le sue proprietà di tipo e grandezza:

  1. Fare doppio clic sul blocco MATLAB Function.

  2. Aprire il pannello Symbols e Property Inspector. Nella scheda Function, fare clic su Edit Data.

    Il pannello Symbols visualizza i nomi delle variabili nella colonna Name. La colonna Type determina l'assegnazione della porta dell'argomento della funzione e la sua posizione nella dichiarazione della funzione. In questo esempio, vals è assegnato a una porta di input. mean e stdev sono assegnati alle porte di output. Se si modifica la voce Type per una delle due variabili, cambia anche la dichiarazione della funzione.

  3. Controllare le proprietà per vals. Nel pannello Symbols, fare clic sulla riga vals. Il Property Inspector si aggiorna per mostrare le proprietà di vals. La proprietà Scope corrisponde alla colonna Type.

    Solo alcune proprietà possono essere ereditate: Size, Unit, Complexity e Type. Le variabili indicano che ereditano queste proprietà quando Size è -1, Unit è inherit, Complexity è Inherited e Type è Inherit: Same as Simulink. In questo esempio, vals utilizza questi valori per Size e Type.

Controllare le altre variabili del blocco MATLAB Function selezionandole nel pannello Symbols.

Per impostazione predefinita, le variabili di input e output appena definite ereditano la loro grandezza, unità, complessità e tipo. Se si desidera che le variabili utilizzino una grandezza, un'unità o un tipo specifico, è possibile specificare esplicitamente queste proprietà. Ad esempio, inserire [2 3] nella proprietà Size per specificare la variabile come una matrice 2-by-3. Per ulteriori informazioni, vedere Define and Modify Variable Data Types e Specify Size of MATLAB Function Block Variables.

Costruzione della funzione

Dopo aver inserito il codice in un blocco MATLAB Function è possibile verificare la presenza di errori nel codice e costruire la funzione. Vedere Debug MATLAB Function Blocks.

Quando si costruisce un modello, MATLAB utilizza un compiler per compilare il codice del blocco MATLAB function. Se sul sistema sono installati più compiler supportati da MATLAB, è possibile cambiare il compiler predefinito utilizzando il comando mex -setup. Vedere Change Default Compiler. Per vedere un elenco di compiler supportati, aprire Supported and Compatible Compilers (Compiler supportati e compatibili), fare clic sulla scheda corrispondente al proprio sistema operativo, trovare la tabella Simulink Product Family e andare alla colonna For Model Referencing, Accelerator mode, Rapid Accelerator mode, and MATLAB Function blocks.

In Simulink, fare clic su Run per simulare il modello. Il software costruisce il blocco MATLAB Function quando costruisce il modello e genera i dati dalla funzione ai due blocchi Display.

Preparazione del blocco per la generazione di codice

Per generare codice C/C++ standalone da un modello che contiene blocchi MATLAB Function, utilizzare Simulink Coder o Embedded Coder.

Selezione di un compiler supportato per la simulazione e le build di generazione di codice

Per vedere un elenco di compiler supportati, aprire Supported and Compatible Compilers (Compiler supportati e compatibili), fare clic sulla scheda corrispondente al proprio sistema operativo, trovare la tabella Simulink Product Family e andare alla colonna Simulink Coder.

Generazione di codice per il blocco MATLAB Function

Se si dispone di una licenza Simulink Coder o Embedded Coder, è possibile generare codice dal modello. Per generare codice:

  1. Nel modello call_stats_block2, fare doppio clic sul blocco MATLAB Function.

  2. Aprire l'applicazione Simulink Coder o Embedded Coder.

  3. Nella scheda C Code, Build per compilare e costruire il modello di esempio.

    Se si verifica un errore relativo al risolutore Variable-step, aprire la finestra Parametri di configurazione, quindi fare clic su Solver nel pannello di sinistra. In Solver selection, impostare Type su Fixed-step e generare nuovamente il codice. Per saperne di più sulle differenze tra risolutori a passo fisso e a passo variabile, vedere Fixed-Step Versus Variable-Step Solvers.

Vedi anche

| |

Argomenti complementari

Siti web esterni