Simulink Coder

Hauptmerkmale

  • Erzeugt ANSI/ISO C- und C++-Code und ausführbare Programme aus zeitdiskreten, zeitkontinuierlichen und hybriden Simulink- und Stateflow-Modellen
  • Unterstützt die inkrementelle Codegenerierung für große Modelle
  • Unterstützt Integer-, Fließkomma- und Festkomma-Datentypen
  • Generiert Code aus Singleraten-, Multiraten und asynchron ausgeführten Modellen
  • Unterstützt die Singletasking-, Multitasking- und Mehrkern-Ausführung mit oder ohne RTOS
  • Ermöglicht die Parameteranpassung und Signalüberwachung im externen Modus

Ein mit Simulink modelliertes, umfangreiches Flugzeugsystem.

Target-Auswahl und Arbeiten mit Targets

Simulink Model Explorer bietet eine zentrale Stelle in Simulink an, um sämtliche Einstellungen für die Codegenerierung zu konfigurieren. Im Model Explorer können Sie:

  • Targets für die Codegenerierung auswählen
  • Targets für die Codegenerierung konfigurieren
  • Code aus Simulink-Modellen oder einzelnen Subsystemen erzeugen

Der Code Generation Advisor überprüft Ihr Modell und Einstellungen für die Codegenerierung und gibt auf der Grundlage Ihrer vordefinierten Ziele Tipps und Hinweise zur Optimierung der jeweiligen Konfiguration. Sind die besten Einstellungen für ein Projekt ermittelt, können diese als Konfigurationssatz gespeichert und jederzeit mit anderen Modellen wiederverwendet werden.

Large aircraft system modeled using Simulink.
Ein mit Simulink modelliertes, umfangreiches Flugzeugsystem. Der Simulink Coder unterstützt erweiterte Simulink-Funktionen für das Arbeiten mit umfangreichen Modellen, darunter Model-Blocks, Variant-Subsysteme und Bus-Arrays.

Auswählen von Targets

Der Simulink Coder übersetzt Modelle mithilfe von System Target-Files in Quellcode und ausführbare Programme. Target-Files enthalten Informationen zur Umgebung, in der der generierte Code später ausgeführt wird. Zum Lieferumfang des Simulink Coder gehören Target-Files für verschiedene sofort einsatzbereite Konfigurationen. Daneben werden aber auch Targets von Drittanbietern unterstützt und es besteht die Möglichkeit zur Erzeugung eigener Targets. Die folgenden Targets sind bereits im Simulink Coder enthalten:

Generic Real-Time Target: Erzeugt Code, in dem Modellparameter interaktiv optimiert werden können, protokolliert und zeigt Ergebnisse von Echtzeit-Simulationen an. Statische Speicherplatzzuweisung wird benutzt, um eine effiziente Echtzeit-Ausführung zu gewährleisten.

Generic Real-Time Malloc Target: Der generierte Code verwaltet den Speicher dynamisch, wodurch mehrere Instanzen eines Modells oder mehrere verschiedene Modelle in einem einzigen ausführbaren Programm untergebracht werden können.

Rapid Simulation Target (RSim): Bietet eine schnelle und flexible Testplattform für batchgesteuerte und Monte Carlo-Simulationen. Dabei können Solver mit fester oder variabler Schrittweite genutzt und Daten von Einzelläufen in eindeutig zuordenbaren Ausgabedateien gespeichert werden.

Diese vordefinierten Targets sind erweiterbar und ermöglichen so die Erzeugung individueller Laufzeit-Schnittstellen und Gerätetreiber. Sie können daher Ihre ganz spezifische Target-Umgebung mit solchen weiterentwickelten Targets integrieren und von dieser aus auf alle Ausführungs- und Debugging-Funktionen des Simulink Coder zugreifen.

Kompilieren und Ausführen von generiertem Code

Der Simulink Coder verfügt über eine integrierte Unterstützung für das Kompilieren und Ausführen des generierten Codes in gängigen Umgebungen wie etwa:

  • Eclipse-IDE
  • Microsoft® Visual C++®-IDE
  • Linux®
  • Windows®

Mit dem Embedded Coder lässt sich außerdem optimierter C- und C++-Code für Echtzeit-Embedded Systeme generieren.

Definieren und Steuern von Daten

Mit dem Simulink Coder haben Sie die volle Kontrolle darüber, wie die Daten eines Modells im erzeugten Code erscheinen. Zusätzlich enthält er folgende Möglichkeiten zur Datenverwaltung:

  • Datentypen in Ganzzahl-, Fließkomma- und Festkomma-Formaten deklarieren
  • Speicherplatz für die Optimierung und Kalibrierung von Parametern oder Konstanten zuweisen
  • Speicherplatz für die Überwachung und Protokollierung von Signaldaten zuweisen
  • Speicherplatz wiederverwenden und dadurch die lokale Datenhaltung minimieren

Der Simulink Coder erzeugt Code aus Daten, die entweder im Diagramm selbst, aber auch in einem vom Simulink Model Explorer bereitgestellten Data Dictionary gespeichert sind. Sie können also verschiedene Data Dictionarys anlegen und damit aus demselben Modell spezifischen Programmcode für völlig unterschiedliche Targets erzeugen.

Simulink Model Explorer showing various data types and storage classes used in a model.
Simulink Model Explorer mit verschiedenen im gleichen Modell verwendeten Datentypen und Speicherklassen.

Codegenerierung

Der Simulink Coder bietet eine umfassende Unterstützung für die Codegenerierung aus Simulink- und Stateflow-Modellen. Dazu gehören:

  • Model-Blöcke zur inkrementellen Codegenerierung
  • Atomare Subsysteme und Atomare Subcharts zur Wiederverwendung von Code mit wieder einsprungfähigen C-Funktionen
  • Bus-Objekte und Bus-Arrays zur Erzeugung von Strukturen im Code
  • S-Functions zur Simulation und Anbindung von Legacy-Code
  • MATLAB Function Blocks in Simulink und MATLAB-Funktionen in Stateflow zur Codegenerierung aus Modellen, die MATLAB-Komponenten enthalten

Der Simulink Coder unterstützt außerdem die Simulink-Produktfamilie und ermöglicht dadurch die Festkomma-Modellierung, die Modellierung von physikalischen, Signalverarbeitungs- und Kommunikations-Systemen sowie das Rapid Prototyping und HIL-Tests.

Codegenerierungs-Optionen

Im Simulink Coder finden sich verschiedene einstellbare Optionen, die die Ausführung von generiertem Code in Desktop- und Simulationsumgebungen vereinfachen. Hierzu gehören:

  • Wiederverwendung von Code
  • Ausdrucksfaltung
  • Wiederverwendung von Signalspeicher
  • Eliminierung toter Pfade
  • Parameter-Inlining
  • Vorgefertigte mathematische Bibliotheken und mathematische Bibliotheken mit einfacher Genauigkeit (sowohl ISO C als auch GNU C)
Generated code using for-loop fusion and expression folding for a 10-element array model.
Dieser aus einem Array-Modell mit 10 Elementen generierte Code wurde durch For-Schleifen-Fusion und Ausdrucksfaltung optimiert. Der Simulink Coder generiert effizienten und leicht lesbaren Code aus ein- und mehrdimensionalen Signalen.

Ausführen von Code in Echtzeitumgebungen

Der Simulink Coder bietet Ihnen ein umfassendes Framework, mit dem Sie generierten Code in Echtzeit ausführen und in Ihre Ausführungsumgebung integrieren können. Je nach den im Modell definierten periodischen Abtastzeiten erzeugt er entweder Singleraten- oder Multiratencode.

Ausführungsmodi

Der Code kann mit oder ohne RTOS sowie im Singletasking-, Multitasking- oder asynchronen Modus eingesetzt werden.

Singletasking-Modus

Im Singletasking-Modus ruft ein einfacher Scheduler den generierten Code als einzelnen Ausführungsthread auf und verhindert damit die Task Preemption zwischen verschiedenen Abtastraten.

Multitasking-Modus

Im Multitasking-Modus ruft ein deterministischer, ratenmonotoner Scheduler den generierten Code auf und ermöglicht damit die Task Preemption zwischen verschiedenen Abtastraten. In Bareboard-Umgebungen geschieht die Preemption durch verschachtelte Interrupts. In RTOS-Umgebungen werden dazu unterschiedliche Prioritäten und die systeminterne Task Preemption genutzt.

Asynchroner Modus

Im asynchronen Modus werden nichtperiodische oder asynchrone Raten mithilfe von Simulink S-Functions definiert. Der Simulink Coder übersetzt diese Raten in auf die jeweilige Ausführungsumgebung zugeschnittenen Code. Programmcode für Trigger-Subsysteme und für Ereignisse wie etwa Hardware-Interrupts wird dabei jeweils als einzelner, unabhängiger Task modelliert. Simulink Coder verfügt außerdem über eine integrierte Blockbibliothek für asynchrone Systeme, die als Vorlage zur Erzeugung von Bibliotheken für andere individuelle Umgebungen eingesetzt werden kann.

Echtzeit-Implementierung

Simulink und Simulink Coder verfügen über eine umfassende Auswahl Target-unabhängiger Fähigkeiten für die Echtzeit-Implementierung. Hierzu gehören:

  • Die Festlegung individueller Prioritäten für jede einzelne Abtastrate eines Modells
  • Counter und Timer in Produktionsqualität, die sowohl die absolute als auch die verstrichene Zeit exakt berechnen
  • Ein Rate Transition-Block zur Implementierung optimaler Datenübertragungsmechanismen zwischen unterschiedlichen Abtastraten (z. B. Semaphor, Mutex und Double Buffering), die den jeweils besten Trade-Off zwischen Datenintegrität, Determinismus und Performance bieten
  • Eine Überlauferkennung, mit deren Hilfe sich für jede Abtastrate eine eigene Fehlerbehandlungslogik erzeugen lässt

Integration von Legacy-Code

Der generierte Code und seine Laufzeitumgebung können durch Integration von vorhandenem C-, Fortran-, Ada- und C++-Code umfassend für die Simulation und Codegenerierung angepasst werden. Der Simulink Coder enthält dazu Tools wie einen Target Language Compiler (TLC), Custom Code Blocks, Vorlagen-Makefiles, APIs für Build-Prozesse und einen S-Function Builder. Mit dem Legacy Code Tool lassen sich außerdem vorhandene C- und C++-Funktionen schnell und einfach in Simulink-Modelle integrieren, was vor allem bei der Integration von zeitdiskretem Code von Vorteil ist, wie er typischerweise in Embedded Systemen verwendet wird.

Parameter-Optimierung und Protokollieren von Daten

Der Simulink Coder verfügt über Fähigkeiten zur Interaktion mit generierten ausführbaren Programmen und zur Analyse von deren Verhalten und erleichtert damit die Optimierung der Leistung und des Ausführungsverhaltens Ihrer Algorithmen.

Er enthält die folgenden Datenschnittstellen zur Überwachung und Optimierung von Blocksignalen und Parametern:

Target-basierte C-API: Ermöglicht anwendergeschriebenem Code auch außerhalb der MATLAB- und Simulink-Umgebung den Zugriff auf Blockausgaben und -parameter.

Host-basiertes ASAP2-Datenaustausch-File: Ermöglicht die Messung von Daten, Kalibrierung und Systemdiagnose außerhalb der MATLAB- und Simulink-Umgebung mithilfe ASAP2-konformer Datenbeschreibungen.

Externer Simulink-Modus: Ermöglicht den Download neuer Parameterwerte in das ausführbare Programm und den Upload von Signalwerten für die Visualisierung in Simulink und die Aufzeichnung im MATLAB Workspace. (Beim Öffnen des Dialogfeldes eines Quellblocks wird Simulink angehalten und ermöglicht dadurch die Übergabe neuer Parameterwerte. Damit die Änderungen wirksam werden und Simulink weiterarbeitet, muss das Dialogfeld geschlossen werden.)

Probieren Sie Simulink Coder

Testsoftware anfordern

KOSTENLOSES Praktisches Tutorial Mit Eclipse

Tutorial anfordern