If
Selezionare l'esecuzione del sottosistema utilizzando una logica simile alla dichiarazione if-else
Librerie:
Simulink /
Ports & Subsystems
Descrizione
Il blocco If, insieme ai blocchi If Action Subsystem che contengono un blocco Action Port implementa la logica if-else per controllare l'esecuzione del sottosistema. Per un esempio che utilizza il blocco If, vedere Select Subsystem Execution.

Esempi
Semantiche dei sottosistemi di Simulink
Questo insieme di esempi mostra diversi tipi di sottosistemi di Simulink® e le semantiche utilizzate per la loro simulazione. Ciascun esempio fornisce una descrizione del modello e delle sottigliezze che regolano il modo in cui il modello viene eseguito.
Blocchi If-Then-Else
Questo esempio mostra l’effetto prodotto dall’introduzione di un’onda sinusoidale nei blocchi If Action Subsystem. È stato progettato per illustrare la somiglianza tra il blocco If Action Subsystem e il blocco Enabled Subsystem.
Modeling Clutch Lock-Up Using If Blocks
Use If/Else subsystems to build a clutch model. An 'If' subsystem models the clutch dynamics in the locked position while an 'Else' subsystem models the unlocked position. One or the other is enabled using the 'If' block. The dot-dashed lines from the 'If' block denote control signals, which are used to enable If/Else (or other conditional) subsystems. Checking any of the boxes on the GUI produces a plot of any of the selected variables (versus time).
Limitazioni
Nota
Le limitazioni elencate in questa sezione si applicano solo alla release R2025b e versioni precedenti.
Il blocco If presenta le seguenti limitazioni:
Non supporta parametri sincronizzabili. I valori di un'espressione
ifoelseifnon possono essere sincronizzati durante una simulazione in modalità normale o di accelerazione, né durante l'esecuzione del codice generato.Per implementare espressioni if-else sincronizzabili, sincronizzare l'espressione al di fuori del blocco If. Ad esempio, utilizzare il blocco Relational Operator per valutare l'espressione al di fuori del blocco If o aggiungere il parametro sincronizzabile come input al blocco If.
Non supporta classi di archiviazione personalizzate. Vedere Organize Parameter Data into a Structure by Using Struct Storage Class (Embedded Coder).
L'espressione if e le espressioni elseif non possono accettare determinati operatori, come
+,-,*e/.
Porte
Input
A partire dalla release R2026a, è possibile modificare le etichette delle porte di input in base alle espressioni logiche utilizzate all'interno del blocco. Per modificare l'etichetta della porta, soffermarsi con il cursore sul testo predefinito u1,u2,...,un e modificarlo.

Per la release R2025b o versioni precedenti, il blocco accetta solo l'etichetta predefinita della porta di input u1,u2,...,un. Gli input u1,u2,...,un devono avere lo stesso tipo di dato. Gli input non possono essere di un tipo definito dall'utente, come ad esempio di tipo enumerato.
Il blocco If non supporta direttamente i tipi di dato in virgola fissa. Tuttavia, è possibile utilizzare il blocco Compare To Constant per aggirare questa limitazione. Vedere Select Subsystem Execution.
Tipi di dati: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | Boolean
Output
Gli output delle porte if, else e elseif sono segnali di azione per i blocchi If Action Subsystem.
Parametri
1Specificare una porta di input.
- intero
Specificare il numero di porte di input. Le porte del blocco sono etichettate con un carattere
'u'seguito da un numero1,2,...,n, dovencorrisponde al numero di input specificati dall'utente.
Utilizzo programmatico
Parametro dei blocchi: NumInputs |
| Tipo: vettore di caratteri |
Valori: '1' | numero intero tra virgolette |
Impostazione predefinita: '1' |
Quando la porta if e tutte le espressioni della porta elseif sono false, la porta else invia un segnale di azione per eseguire il blocco If Action Subsystem collegato.
- on
Mostra la porta else.
- off
Nasconde la porta else.
Utilizzo programmatico
Parametro dei blocchi: ShowElse |
| Tipo: vettore di caratteri |
Valori: 'on' | 'off' |
Impostazione predefinita: 'on' |
Controllare il rilevamento dello zero-crossing.
- on
Rilevare gli zero-crossing.
- off
Non rilevare gli zero-crossing.
Utilizzo programmatico
Parametro dei blocchi: ZeroCross |
| Tipo: vettore di caratteri |
Valori: 'on' | 'off' |
Impostazione predefinita: 'on' |
Da R2025a
Selezionare questo parametro per assicurarsi che nel codice generato da un blocco If siano incluse solo dichiarazioni if-else.
- on
Nel codice generato sono incluse solo dichiarazioni if-else. Questa opzione impedisce l'inclusione di dichiarazioni switch-case nel codice generato.
- off
Quando questo parametro è impostato su off, il codice generato da un blocco If potrebbe contenere dichiarazioni switch-case, che eseguono le stesse operazioni del blocco If.
Utilizzo programmatico
Per impostare il valore del parametro del blocco in modo programmatico, utilizzare la funzione set_param.
Parametro dei blocchi: EnsureIfElseCode |
| Tipo: vettore di caratteri |
Valori: 'on' | 'off' |
Impostazione predefinita: 'off' |
Il blocco If Action Subsystem collegato alla porta if viene eseguito quando l'espressione if associata viene valutata come true.
u1 > 0Specificare l'invio di un segnale di azione sulla porta di output quando l'input
u1è maggiore di0.
Espressione logica (dalla release R2026a)
Utilizzare un intervallo di espressioni logiche, comprese quelle che utilizzano:
Parametri sincronizzabili.
Espressioni generali di MATLAB®, come
x1 > x2 + 5.Oggetti dati come
Simulink.ParametereSimulink.Signalcon classi di storage personalizzate. Per ulteriori informazioni, vedere Create and Apply Storage Class Defined in User-Defined Package (Embedded Coder).Tipo di dato in virgola fissa.
Tipo di dato enumerato.
Array di strutture di MATLAB.
Espressioni con:
Funzioni aritmetiche:
ceil,floor,absesign.Funzioni trigonometriche:
sin,cos,tan,asin,acos,atan,atan2,sinh,coshetanh.Funzioni esponenziali, logaritmiche e radicali:
log,log10,expesqrt.
Espressione logica (release R2025b e precedenti)
Nota
A partire dalla release R2025a, per modificare l'espressione if predefinita (u1 > 0), utilizzare la tabella Expressions. Per un'espressione complessa con più input e operatori, selezionare l'espressione if e modificarla nella casella Expression editor.
Per le versioni precedenti alla release R2025a, questo parametro appare come If expressions nella finestra di dialogo del blocco. È possibile specificare le espressioni logiche utilizzando questo parametro.
Tuttavia, in tutte le versioni di Simulink®, questa espressione appare sul blocco If adiacente alla porta di output if.
L'espressione può includere solo gli operatori <, <=, ==, ~=, >, >=, &, |, ~, () e unary-minus. Operatori come +, -, *, / e ^ non sono consentiti. L'espressione non deve contenere espressioni del tipo di dato, ad esempio int8(6) e non deve fare riferimento a variabili del workspace il cui tipo di dato sia diverso da double o single.
Utilizzo programmatico
Parametro dei blocchi: IfExpression |
| Tipo: vettore di caratteri |
Valori: 'u1 > 0' | espressione logica tra virgolette |
Impostazione predefinita: 'u1 > 0' |
Il blocco If Action Subsystem collegato a una porta elseif viene eseguito quando l'espressione elseif associata viene valutata come true e tutte le altre espressioni if e elseif sono false.
- vuoto
Espressioni logiche non specificate.
Elenco delle espressioni logiche (dalla release R2026a)
Utilizzare un intervallo di espressioni logiche precedentemente non supportate, comprese quelle che utilizzano:
Parametri sincronizzabili.
Espressioni generali di MATLAB, come
x1 > x2 + 5.Oggetti dati come
Simulink.ParametereSimulink.Signalcon classi di storage personalizzate. Per ulteriori informazioni, vedere Create and Apply Storage Class Defined in User-Defined Package (Embedded Coder).Tipo di dato in virgola fissa.
Tipo di dato enumerato.
Array di strutture di MATLAB.
Espressioni con:
Funzioni aritmetiche:
ceil,floor,absesign.Funzioni trigonometriche:
sin,cos,tan,asin,acos,atan,atan2,sinh,coshetanh.Funzioni esponenziali, logaritmiche e radicali:
log,log10,expesqrt.
Espressioni logiche (release R2025b e precedenti)
Nota
A partire dalla release R2025a, per aggiungere e modificare le espressioni elseif, utilizzare la tabella Expressions. Utilizzare i pulsanti di azione a sinistra della tabella per aggiungere, eliminare e spostare le espressioni. La tabella consente di scrivere ogni espressione elseif separatamente piuttosto che in un elenco separato da virgole e di organizzare le espressioni in base alle esigenze di modellazione. Per un'espressione complessa con più input e operatori, selezionare la riga contenente l'espressione elseif e modificarla nella casella Expression editor.
Per le versioni precedenti alla release R2025a, questo parametro appare come Else expressions nella finestra di dialogo del blocco. In queste versioni, specificare un elenco di espressioni logiche separate da virgole.
Tuttavia, in tutte le versioni di Simulink, le espressioni appaiono sul blocco If sotto la porta if e sopra la porta else quando si seleziona la casella di spunta Show else condition.
Le espressioni possono includere solo gli operatori <, <=, ==, ~=, >, >=, &, |, ~, () e unary-minus. Operatori come +, -, *, / e ^ non sono consentiti. Le espressioni non devono contenere espressioni del tipo di dato, ad esempio int8(6) e non devono fare riferimento a variabili del workspace il cui tipo di dato sia diverso da double o single.
Utilizzo programmatico
Parametro dei blocchi: ElseIfExpressions |
| Tipo: vettore di caratteri |
Valori: '' | elenco di espressioni logiche tra virgolette e separate da virgole |
Impostazione predefinita: '' |
Caratteristiche del blocco
Tipi di dati: |
|
Passaggio diretto |
|
Segnali multidimensionali |
|
Segnali di dimensioni variabili |
|
Rilevamento zero-crossing |
|
Ulteriori informazioni
I blocchi If che determinano l'esecuzione di un blocco If Action Subsystem ricevono la copertura della condizione, della decisione e MCDC:
La condizione
ife ciascuna condizioneelseif, se presenti, ricevono la copertura della decisione.Qualsiasi condizione
ifoelseifche contenga un'espressione logica con più condizioni, comeu1 && u2, riceve anche la copertura MCDC e delle condizioni per ciascuna condizione presente nell'espressione.La condizione
elsenon riceve direttamente la copertura. Il caso falso della condizioneifo dell'ultima condizioneelseif, se presente, è il caso vero della condizioneelsee viceversa. Pertanto, la copertura completa del resto del blocco If implica la copertura completa della condizioneelse.
Simulink Coverage™ riporta il numero totale di passi temporali in cui ciascuna condizione if e elseif viene valutata come vera e come falsa. Se la condizione if o elseif viene valutata vera almeno una volta e falsa almeno una volta, la copertura della decisione è del 100%. Se nessuna delle condizioni if o elseif è vera oppure se nessuna delle condizioni if o elseif è falsa, la copertura della decisione è del 50%. Se la condizione precedente if o elseif non è falsa per nessun passo temporale, una condizione elseif può avere una copertura della decisione pari allo 0%.
Poiché il blocco If confronta i propri segnali di input, se si seleziona la metrica di copertura Relational Boundary, il blocco If riceve una copertura dei confini relazionali. Per ulteriori informazioni, vedere Relational Boundary Coverage (Simulink Coverage).
Il report di copertura mostra l'espressione che Simulink Coverage valuta e riporta il numero di passi temporali in cui l'espressione è vera o falsa. Ad esempio, si consideri un caso in cui un blocco If valuta se l'input è diverso da zero; il report di copertura visualizza if(u1 ~= 0) come decisione.

Funzionalità estese
Generazione di codice C/C++
Genera codice C e C++ con Simulink® Coder™.
HDL Coder™ fornisce ulteriori opzioni di configurazione che influiscono sull'implementazione HDL e sulla logica sintetizzata.
Questo blocco ha un'architettura HDL predefinita.
| ConstrainedOutputPipeline | Numero di registri da posizionare sugli output spostando i ritardi esistenti nel progetto. La pipeline distribuita non ridistribuisce questi registri. L'impostazione predefinita è |
| InputPipeline | Numero di stadi della pipeline di input da inserire nel codice generato. La pipeline distribuita e la pipeline vincolata in output possono spostare questi registri. L'impostazione predefinita è |
| OutputPipeline | Numero di stadi della pipeline di output da inserire nel codice generato. La pipeline distribuita e la pipeline vincolata in output possono spostare questi registri. L'impostazione predefinita è |
| SynthesisAttributes | Specifica gli attributi di sintesi per i blocchi e i segnali di output dei blocchi nel modello. Il codice HDL generato contiene questi attributi. Per ulteriori informazioni, vedere SynthesisAttributes (HDL Coder). |
Cronologia versioni
Introduzione prima di R2006aUtilizzare la proprietà del blocco HDL SynthesisAttributes per specificare gli attributi di sintesi del blocco e dei suoi segnali di output. HDL Coder include questi attributi nel codice HDL generato.
A partire dalla release R2026a, il blocco consente di:
Personalizzare l'etichetta della porta di input del blocco If in base alle esigenze di modellazione. In precedenza, per l'etichetta della porta di input era possibile utilizzare solo i nomi predefiniti come
u1,u2e così via.Utilizzare un intervallo di espressioni logiche precedentemente non supportate per le condizioni if ed elseif. Per ulteriori informazioni sull'elenco delle espressioni, vedere il parametro if.
La finestra di dialogo del blocco aggiornata consente di specificare le espressioni logiche in una tabella. Non è più necessario specificare le espressioni elseif in un elenco separato da virgole. Questo cambiamento rende più facile visualizzare e analizzare il flusso logico complessivo. La tabella contiene inoltre nuovi pulsanti di azione che consentono di aggiungere, eliminare e spostare le espressioni if-else verso l'alto e verso il basso. Questi pulsanti sono utili per organizzare le espressioni in base alle esigenze di modellazione. Inoltre, la nuova casella di Editor delle espressioni consente di modificare le espressioni complesse.
Il codice generato contiene espressioni if-else. Questo cambiamento impedisce l'inclusione di dichiarazioni switch-case e migliora la leggibilità del codice generato.
Vedi anche
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleziona un sito web
Seleziona un sito web per visualizzare contenuto tradotto dove disponibile e vedere eventi e offerte locali. In base alla tua area geografica, ti consigliamo di selezionare: .
Puoi anche selezionare un sito web dal seguente elenco:
Come ottenere le migliori prestazioni del sito
Per ottenere le migliori prestazioni del sito, seleziona il sito cinese (in cinese o in inglese). I siti MathWorks per gli altri paesi non sono ottimizzati per essere visitati dalla tua area geografica.
Americhe
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)


