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
Folie 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?
Folie 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
Folie 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
Folie 5 Example Source: Mura, Panda, Prevostini: Executable models and Verifivation from MARTE and SysML
Folie 6
Folie 7
Folie 8 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)
Folie 9 Modelio Demo vertagt
Folie 10 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)
Folie 11 Schema Paradigma für funktionale Systeme input-process-output Paradigma für eingebettete Systeme loop{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
Folie 12 Beispiel Pacemaker
Folie 13 Example: VDI-Pacemaker Verhalten (vereinfacht) 1. wait for an atrial pulse to be sensed 2. wait for at most the AV delay 3. if within this time a ventricular pulse is detected, goto step 1. 4. otherwise, generate a ventricular pulse and goto step 1.
Allgemeines Übersetzungsschema dn tape off up up up dn dn memory dn play Variable s ist der aktuelle Zustand; Variable i ist der aktuelle Input 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; H. Schlingloff, SS2014 modellbasierte Software-Entwicklung eingebetteter Systeme } Folie 14
Folie 15 Sprungtabellentechnik dn tape off up up up dn dn memory dn play Variable s ist der aktuelle Zustand; Variable i ist der aktuelle Input 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];
Folie 16 Codegenerierung für Zustandsmaschinen Behandlung des Event-Pools Behandlung von Parallelität Hierarchisierung Completion Events History-States Übersetzungsschema s = s 0 ; 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 ;
Folie 17 Beispiel: VisualState Codegenerierung
Folie 18 Menschen- vs. maschinenlesbarer Code
Folie 19 Verifikation und Reportgenerierung Schlüsselwort: Modellprüfung (model checking)