1 / 19

Modellbasierte Software-Entwicklung eingebetteter Systeme

Modellbasierte Software-Entwicklung eingebetteter Systeme. Prof. Dr. Holger Schlingloff Institut für Informatik der Humboldt Universität und Fraunhofer Institut für offene Kommunikationssysteme FOKUS. Noch Fragen?. Schema für Controller in C? Was ist ein Codegenerator?

kiana
Download Presentation

Modellbasierte Software-Entwicklung eingebetteter Systeme

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Modellbasierte Software-Entwicklung eingebetteter Systeme Prof. Dr. Holger Schlingloff Institut für Informatik der Humboldt Universität und Fraunhofer Institut für offene Kommunikationssysteme FOKUS

  2. Noch Fragen? • Schema für Controller in C? • Was ist ein Codegenerator? • Prinzip der Übersetzung Scicos – C? • Behandlung von Schleifen? • Unterschied Gleitkomma-Festkomma? • Codeoptimierungen – welche? • Absicherung der Codegenerierung? • X-in-the-Loop: Was ist X?

  3. Codegenerierung • Codegenerierung aus SysML/UML • Codegenerierung aus State Machines • Codegenerator ist „Compiler für Modelle“ • Wiederverwendung • schnelle Prototyp- und Produkterstellung • erhöhte Zuverlässigkeit gegen Programmierfehler • automatische Optimierung des generierten Codes • Ziel: automatische Übersetzung von Modellen in ausführbaren (C-) Code

  4. Codegenerierung aus SysML • Requirement Diagramme • (noch) nicht wirklich für Code verwendbar • Blockdiagramme (BDD/IBD) • VHDL-Code • experimentelle Tools (RTaW, c-Lab U Paderborn) • SysML to SystemC • Aktivitätsdiagramme • zur Spezifikation des Kontrollflusses • Zustandsdiagramme

  5. Example Source: Mura, Panda, Prevostini: Executable models and Verifivation from MARTE and SysML

  6. UML Codegenerierung • (Fast) jedes UML Tool behauptet, Code generieren zu können • Wiki listet ca. 100 Tools auf (“Comparison of code generation tools”) • Unterschiedliche Fähigkeiten • Meist: Erzeugung von Schablonen • Hohe Schule: Round-trip Engineering • Für Eclipse-UML: Acceleo, Modelio (Softeam)

  7. Modelio – Demo vertagt

  8. UML Zustandsmaschinen • neben Klassendiagrammen die am häufigsten zur Codegenerierung verwendete Diagrammart • Übertragung der operationellen Semantik in die Zielsprache • Beispiel: Hugo-RT, U Augsburg • nimmt beliebiges (Papyrus-) Modell • erzeugt Java und Promela (für Model-Checking)

  9. Schema • Paradigma für funktionale Systemeinput-process-output • Paradigma für eingebettete Systemeloop{sense-think-act} • Hauptschleife, endlos wiederholt: - lies Sensorwerte - berechne Abweichung oder Aktion - schreibe Aktuatorwerte • Innerhalb der Berechnung können verschiedenen Modi (Zustände) angenommen werden • Codegeneratoren folgen diesem Paradigma

  10. Beispiel Pacemaker

  11. Example: VDI-Pacemaker • Verhalten (vereinfacht) • wait for an atrial pulse to be sensed • wait for at most the AV delay • if within this time a ventricular pulse is detected, goto step 1. • otherwise, generate a ventricular pulse and goto step 1.

  12. off tape play dn up up up dn dn memory dn Allgemeines Übersetzungsschema s = off; while (true) { dequeue i from input stack; case s of off: case i of dn: s = tape; end; tape: case i of dn: s = memory; up: s = off; end; memory: case i of dn: s = play; up: s = off; end; play: case i of dn: s = tape; up: s = off; end; end; } Variable s ist der aktuelle Zustand; Variable i ist der aktuelle Input

  13. off tape play dn up up up dn dn memory dn Sprungtabellentechnik table=[state]x[input][state]: table=[[off,dn,tape],[tape,up,off], [tape,dn,memory],...] s=off; while (true){ dequeue i from input stack; s=table[s,i]; } Variable s ist der aktuelle Zustand; Variable i ist der aktuelle Input

  14. Codegenerierung für Zustandsmaschinen • Behandlung des Event-Pools • Behandlung von Parallelität • Hierarchisierung • Completion Events • History-States Übersetzungsschema s = s0; while (true) { dequeue (trigger); let Enabled = {tT | t=(s,(e,c,a),s´), c = true, e=0 or trigger  e} if (Enabled not empty) { choose some t=(s,(e,c,a),s´) from Enabled; execute a; //potentially enqueing other triggers s = s´; } }

  15. Beispiel: VisualState Codegenerierung

  16. Menschen- vs. maschinenlesbarer Code

  17. Verifikation und Reportgenerierung • Schlüsselwort: Modellprüfung (model checking)

More Related