Hauptinhalt

Selector

Eingangselemente aus Vektor, Matrix oder mehrdimensionalem Signal auswählen

  • Selector block

Bibliotheken:
Simulink / Signal Routing
HDL Coder / Signal Routing

Beschreibung

Der Selector-Block extrahiert ausgewählte Elemente eines Eingangsvektors, einer Eingangsmatrix oder eines mehrdimensionalen Eingangssignals basierend auf den angegebenen Indizes. Die extrahierten Signale können anders als die Eingangssignale gruppiert werden.

Auf Grundlage des Werts, den Sie für den Parameter Number of input dimensions eingeben, wird eine Tabelle mit Indizierungseinstellungen angezeigt. Jede Zeile der Tabelle entspricht einer der Eingangsdimensionen in Number of input dimensions. Für jede Dimension definieren Sie die zu bearbeitenden Elemente des Signals. Legen Sie ein Vektorsignal als 1-D-Signal und ein Matrixsignal als 2-D-Signal fest. Wenn Sie den Selector-Block für mehrdimensionale Signaloperationen konfigurieren, ändert sich das Blocksymbol.

Ziehen wir als Beispiel ein 6-D-Signal mit einem eins-basierten Indexmodus heran. Die Tabelle des Selector-Blockdialogs ändert sich und zeigt eine Zeile für jede Dimension an. Wenn Sie Dimensionen wie in der folgenden Tabelle dargestellt definieren, ist die Ausgabe Y = U(1:end,2:6,[1 3 5],Idx4:Idx4+7,Idx5,Idx6(1):Idx6(2)), wobei Idx4, Idx5 und Idx6 die Indexports für die Dimensionen 4, 5 und 6 sind. Weitere Informationen finden Sie unter Elemente mithilfe des Selector-Blocks aus einem mehrdimensionalen Array wählen.

ZeileIndexoptionIndexAusgangsgröße
1Select all  
2Starting index (dialog)25
3Index vector (dialog)[1 3 5] 
4Starting index (port) 8
5Index vector (port)  
6Starting and ending indices (port)  

Sie können ein Array aus Bussen als Eingangssignal für einen Selector-Block verwenden. Weitere Informationen zur Definition und Verwendung einer Reihe von Bussen finden Sie unter Group Nonvirtual Buses in Arrays of Buses.

Hinweis

Der Selector-Block ändert die Dimensionalität (Anzahl Dimensionen) der Eingangssignale nicht. Wenn Sie die Dimensionalität des Signals auf die von Ihnen angegebenen Dimensionen ändern müssen, verwenden Sie den Reshape-Block.

Beispiele

alle erweitern

Dieses Beispiel zeigt zwei Selector-Blöcke mit derselben Art Eingangssignale, aber zwei verschiedenen Einstellungen für Index Option.

Beide Selector-Blöcke wählen 7 Werte aus dem Eingangssignal aus, das in den Eingangsport geleitet wird. Der Selector1-Block gibt ein Signal mit fester Größe aus; der Selector2-Block hingegen ein Signal mit variabler Größe, dessen kompilierte Signaldimension 10 statt 7 beträgt.

Der Selector1-Block setzt die Index Option auf Index vector (port), hierbei wird das Eingangssignal von Constant1 als Indexvektor verwendet. Die Dimension des Ausgangssignals ist 7, der Display-Block zeigt also die 7 Werte des Constant1-Blocks an. Der Selector2-Block setzt den Parameter Input port size auf 10, die Größe des größten Eingangssignals zum Selector2-Block.

Der Selector2-Block setzt zudem die Index Option auf Starting and ending indices (port). Der Ausgang wird daraufhin auf die Größe des Parameters Input port size (10) gesetzt, obwohl die Größe des Eingangssignals 7 beträgt.

Dieses Beispiel zeigt, wie Sie mithilfe eines Selector-Blocks Elemente aus einem mehrdimensionalen Array wählen. In diesem Beispiel verwenden Sie verschiedene Indizierungsoptionen des Blocks, um die Elemente eines 6-D-Arrays auszuwählen und zu extrahieren.

Öffnen Sie das Modell.

mdl = "extractmultidimarray.slx";
open_system(mdl)

Model that selectively extracts elements form a 6-D array.

Den Block konfigurieren

Das Eingangsarray U ist ein 6-D-Array mit den Dimensionen 6-mal-6-mal-6-mal-9-mal-7-mal-5 mit einem eins-basierten Indizierungsmodus. Das Modell lädt das Eingangsarray mithilfe des PreLoadFcn-Callbacks aus der Datei inputSignal. Mithilfe der folgenden Auswahlsemantik und verschiedenen Indexoptionen können Sie Elemente aus jeder Dimension des Arrays auswählen. In diesem Beispiel wird der eins-basierte Indexmodus für das Eingangsarray verwendet. Dementsprechend geben die Zeilennummern (erste Spalte der Tabelle) direkt auf die Dimensionen des Eingangsarrays an. Beispielsweise ist Zeile 1 Dimension 1 des Eingangsarrays und so weiter.

  • Verwenden Sie Select All, um alle Elemente von Dimension 1 zu extrahieren.

  • Verwenden Sie Starting Index (dialog), um das dritte und vierte Elemente von Dimension 2 zu extrahieren. Setzen Sie die Spalte Index auf 3 und die Spalte Output Size auf 2.

  • Verwenden Sie Index vector (dialog), um das erste, dritte und fünfte Element von Dimension 3 zu extrahieren. Setzen Sie die Spalte Index auf [1 3 5].

  • Verwenden Sie Starting Index (port), um die ersten acht Elemente von Dimension 4 zu extrahieren. Der Constant-Block Const1, der mit dem Port Idx41 verbunden ist, stellt den Start-Indexwert 1 zur Verfügung. Setzen Sie die Spalte Output Size auf 8.

  • Verwenden Sie Index vector (port), um das zweite, dritte und vierte Element von Dimension 5 zu extrahieren. Der Constant-Block Const2, der mit dem Port Idx51 verbunden ist, stellt den Start-Indexwert [2:4] zur Verfügung.

  • Verwenden Sie Starting and ending indices (port), um einen Bereich von Elementen von Dimension 6 zu extrahieren. Die Auswahl reicht vom dritten bis zum fünften Element. Der Constant-Block Const3, der mit dem Port Idx61 verbunden ist, stellt den Bereich [3 5] zur Verfügung.

Configure Selector block dialog box.

Signal protokollieren

Führen Sie die Simulation aus und verwenden Sie den Block „To Workspace“, um das Signal in der Variable Y zu protokollieren.

Y = sim(mdl);

Erweiterte Beispiele

Einschränkungen

  • Der Index-Parameter kann während der Simulation nicht abgestimmt werden. Ist die Index Option für eine Dimension auf Index vector (dialog) oder Starting index (dialog) gesetzt und Sie geben im Block-Dialogfeld für den entsprechenden Index einen symbolischen Wert an, einschließlich eines Simulink.Parameter-Objekts, wird der Instantwert zum Start der Simulation über die gesamte Simulation hinweg verwendet und der Parameter erscheint im generierten Code als Inline-Wert. Siehe Tune and Experiment with Block Parameter Values. Mithilfe von Index-Ports können Sie den Auswahlindex dynamisch anpassen.

Ports

Eingabe

alle erweitern

Eingangssignal und Quelle von Elementen für das Ausgangssignal.

Datentypen: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus | image

Externer Port, der einen Index für die Auswahl des entsprechenden Ausgangselements angibt.

Sie können eine Ganzzahl mit benutzerdefinierter Breite (beispielsweise eine 15-Bit- oder 23-Bit-Ganzzahl) als Index-Signalwert angeben. Wenn Sie die Breite der Ganzzahl konfigurieren, müssen Sie den Mode als Fixed point festlegen, wobei Word length kleiner gleich 65.535, Slope gleich 1 und Bias gleich 0 sein muss. Weitere Informationen zum Angeben eines Festkomma-Datentyps finden Sie unter Specify Data Types Using Data Type Assistant.

Abhängigkeiten

Um einen externen Indexport zu aktivieren, setzen Sie in der entsprechenden Zeile der Tabelle Index Option Index Option auf Index vector (port), Starting index (port) oder Starting and ending indices (port).

Datentypen: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

Ausgabe

alle erweitern

Aus ausgewählten oder umgeordneten Elementen des Eingangssignals generiertes Ausgangssignal.

Datentypen: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus | image

Parameter

alle erweitern

Gibt die Anzahl Dimensionen des Eingangssignals an.

Programmatische Verwendung

Blockparameter: NumberOfDimensions
Typ: Zeichenvektor
Werte: integer
Standardwert: '1'

Gibt den Indizierungsmodus an. Ist One-based ausgewählt, gibt der Index 1 das erste Element des Eingangsvektors an. Ist Zero-based ausgewählt, gibt der Index 0 das erste Element des Eingangsvektors an.

Programmatische Verwendung

Blockparameter: IndexMode
Typ: Zeichenvektor
Werte: 'One-based' | 'Zero-based'
Standardwert: 'One-based'

Definiert über die Dimension, wie die Elemente des Signals indiziert werden sollen. Wählen Sie aus der Liste eine Option aus:

  • Select all

    Keine weitere Konfiguration erforderlich. Alle Elemente werden ausgewählt.

  • Index vector (dialog)

    Aktiviert die Spalte Index. Geben Sie den Vektor der Element-Indizes ein.

  • Index vector (port)

    Keine weitere Konfiguration erforderlich.

  • Starting index (dialog)

    Aktiviert die Spalten Index und Output Size. Geben Sie den Startindex des auszuwählenden Elementbereichs in der Spalte Index und die Anzahl der auszuwählenden Elemente in der Spalte Output Size ein.

  • Starting index (port)

    Aktiviert die Spalte Output Size. Geben Sie die Anzahl der auszuwählenden Elemente in der Spalte Output Size ein.

  • Starting and ending indices (port)

    Keine weitere Konfiguration erforderlich.

    Diese Option resultiert in einem Ausgangssignal variabler Größe. Bei einer Aktualisierung wird die Ausgangsdimension auf dieselbe Größe wie die Eingangssignal-Dimension gesetzt. Bei der Ausführung wird die Ausgangsdimension auf Basis des Signals, das in den Index geleitet wird, aktualisiert.

    Bei der Protokollierung der Ausgangssignaldaten werden nicht ausgewählte Signale mit NaN-Werten aufgefüllt.

Die Spalten Index und Output Size werden nach Bedarf angezeigt.

Programmatische Verwendung

Blockparameter: IndexOptionArray
Typ: Zellenarray aus Zeichenvektoren
Werte: {'Select all'} | {'Index vector (dialog)'} | {'Index vector (port)'} | {'Starting index (dialog)'} | {'Starting index (port)'} | {'Starting and ending indices (port)'}
Standardwert: {'Index vector (dialog)'}

Verwenden Sie IndexOptions, wenn Sie einen Zeichenvektor statt eines Zellenarrays aus Zeichenvektoren nutzen.

Wenn die Index Option Index vector (dialog) ist, geben Sie die Indizes der relevanten Elemente ein.

Wenn die Index Option Starting index (dialog) ist, geben Sie den Startindex des auszuwählenden Elementbereichs ein.

Programmatische Verwendung

Blockparameter: IndexParamArray
Typ: Zellenarray aus Zeichenvektoren
Werte: Ganzzahlen
Standardwert: {'[1 3]'}

Verwenden Sie Indices, wenn Sie einen Zeichenvektor statt eines Zellenarrays aus Zeichenvektoren nutzen.

Gibt die Breite des Block-Ausgangssignals an.

Programmatische Verwendung

Blockparameter: OutputSizeArray
Typ: Zellenarray aus Zeichenvektoren
Werte: Ganzzahlen
Standardwert: {'1'}

Verwenden Sie OutputSizes, wenn Sie einen Zeichenvektor statt eines Zellenarrays aus Zeichenvektoren nutzen.

Geben Sie die Breite des Block-Eingangssignals für 1-D-Signale an. Geben Sie -1 ein, um den Wert des vorgelagerten Blocks zu übernehmen.

Programmatische Verwendung

Blockparameter: InputPortWidth
Typ: Zeichenvektor
Werte: integer
Standardwert: '3'

Geben Sie hier das Zeitintervall zwischen Abtastvorgängen an. Um die Abtastzeit zu vererben, setzen Sie diesen Parameter auf -1. Weitere Informationen finden Sie unter Festlegen der Abtastzeit.

Abhängigkeiten

Dieser Parameter ist nur sichtbar, wenn Sie einen anderen Wert als -1 festgelegt haben. Mehr dazu erfahren Sie unter Blocks for Which Sample Time Is Not Recommended.

Programmatische Verwendung

Um den Wert des Blockparameters programmatisch festzulegen, verwenden Sie die Funktion set_param.

Parameter: SampleTime
Werte: "-1" (Standardeinstellung) | scalar or vector in quotes

Aktivieren Sie dieses Kontrollkästchen, um Simulink® während der Simulation im Accelerator- oder Rapid-Accelerator-Modus prüfen zu lassen, ob Indexwerte außerhalb des Bereichs der gültigen Indizes für die relevanten Dimensionen des Eingangssignals liegen. Befindet sich ein Index außerhalb des Bereichs, stoppt Simulink die Simulation und zeigt eine Fehlermeldung an.

Hinweis

Wenn Sie dieses Kontrollkästchen nicht auswählen, könnten Indexwerte außerhalb des Bereichs zu einem undefinierten Verhalten während der Simulation im Accelerator- oder Rapid-Accelerator-Modus führen.

Simulink führt dieser Prüfung bei einer Simulation im normalen Modus durch, unabhängig davon, ob Sie dieses Kontrollkästchen aktivieren.

Programmatische Verwendung

Parameter: RuntimeRangeChecks
Typ: Zeichenvektor
Werte: 'Off' | 'On'
Standardwert: 'Off'

Blockeigenschaften

Datentypen

Boolean | double | enumerated | fixed point | half | integer | single

Direct Feedthrough

Nein

Mehrdimensionale Signale

Ja

Signale mit variabler Größe

Ja

Erkennung von Nulldurchgängen

Nein

Erweiterte Fähigkeiten

alle erweitern

C/C++ Codegenerierung
Generieren von C und C++ Code mit Simulink® Coder™.

PLC-Codegenerierung
Generieren strukturierten Textcodes mit Simulink® PLC Coder™.

Festkommakonvertierung
Entwerfen und Simulieren von Festkommasystemen mit Fixed-Point Designer™.

Versionsverlauf

Eingeführt vor R2006a

alle erweitern