Kurzanleitung CAPL - ias.uni-stuttgart.de
Transcription
Kurzanleitung CAPL - ias.uni-stuttgart.de
Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Praktische Übungen im Labor „Automatisierungstechnik“ Versuch Nr. 6 Einführung in das Bussystem FlexRay am Beispiel Steer-by-Wire Kurzanleitung CAPL Kurzanleitung CAPL V 1.1 2 Inhaltsverzeichnis INHALTSVERZEICHNIS ...................................................................................................... 2 1 CAPL ................................................................................................................................. 3 2 OPERATOREN ................................................................................................................ 4 2.1 2.2 2.3 3 DATENTYPEN ................................................................................................................ 5 3.1 3.2 4 ARITHMETISCHE OPERATOREN ............................................................................................................... 4 BOOLSCHE OPERATOREN ........................................................................................................................ 4 ZUWEISUNGSOPERATOREN ...................................................................................................................... 4 TYPE CASTING ........................................................................................................................................ 5 AUTOVERVOLLSTÄNDIGUNG ................................................................................................................... 5 CAPL SYNTAX................................................................................................................ 6 4.1 FALLUNTERSCHEIDUNG........................................................................................................................... 6 4.1.1 if/else .................................................................................................................... 6 4.1.2 switch ................................................................................................................... 7 4.2 SCHLEIFEN .............................................................................................................................................. 8 4.2.1 while ..................................................................................................................... 8 4.2.2 do while ................................................................................................................ 8 4.2.3 for ......................................................................................................................... 9 4.3 4.4 FUNKTION ............................................................................................................................................. 10 KEYWORD „THIS“ .................................................................................................................................. 10 5 CAPL BROWSER.......................................................................................................... 11 6 ZUGRIFF AUF DATEN ................................................................................................ 12 6.1 6.2 6.3 ZUGRIFF AUF SYSTEMVARIABLEN ......................................................................................................... 12 FRAMES SENDEN ................................................................................................................................... 12 ZUGRIFF AUF SIGNALE .......................................................................................................................... 12 Kurzanleitung CAPL V 1.1 3 1 CAPL Die Communication Access Programming Language (CAPL) ist eine C ähnliche Skriptsprache. In CANoe und CANalyzer können damit unterschiedlichste Anwendungen zur Entwicklung, zum Test oder zur Emulation der ECUs realisiert werden. In diesem Dokument wird die in CANoe integrierte Programmiersprache CAPL vorgestellt. Es werden die Eigenschaften des CAPL Browsers, siehe Abbildung 1.1, und die daraus resultierenden Möglichkeiten auf Ereignisse zu reagieren beschrieben. Dies geschieht über einfaches Eventhandling der Busereignisse, POC-States und Tastatureingabe. Ebenfalls kann bequem auf die einzelnen Signale, Frames und PDUs zugegriffen werden. Es ist auch möglich eigene Funktionen und ein GUI zu erstellen, mit deren Hilfe komplexe Simulationsumgebungen erstellt werden können. (1) (2) (3) (4) Liste alle Ereignisse Globale Variablen CAPL Syntax des ausgewählten Ereignisse Compiler Mitteilungen Abbildung 1.1 CAPL Browser Ebenfalls wird eine Übersicht der wichtigsten CAPL Deklarationen, Typenbeschreibungen, Syntax und Grammatik zur Verfügung gestellt. HINWEIS: Falls die gewünschte Information in diesem Dokument nicht zu finden ist, nutzen Sie bitte die Programm-Hilfe F1. Kurzanleitung CAPL V 1.1 4 2 Operatoren 2.1 Arithmetische Operatoren Symbol + * / Operation Addition Subtraktion Negierung Multiplikation Division Beispiel x=y+2 x=y-2 x = -x x=y*2 x=y/2 % ++ ++ --- Modulo Postfix Increment Prefix Increment Postfix Decrement Prefix Decrement sec = min % 60 y = x++ y = ++x y = x-y = --x Beschreibung Setzt x gleich dem Wert von y plus 2 Setzt x gleich dem Wert von y minus 2 Setzt x gleich dem Wert von minus x Setzt x gleich dem Wert von y mal 2 Setzt x gleich dem Wert von y geteilt durch 2 Setzt sec gleich dem Rest von min geteilt durch 60 Setzt y gleich x bevor x + 1 Setzt y gleich x nach x + 1 Setzt y gleich x bevor x - 1 Setzt y gleich x nach x -1 2.2 Boolsche Operatoren Symbol ! || Operation logical NOT logical OR && logical AND Beispiel Beschreibung if (!x) Wahr, wenn x FALSE ist. if (x<0 || x>59) Wahr, wenn x auserhalb von 0 bis 59 liegt if (x>0 && Wahr, wenn x zwischen 1 und 12 liegt x>13) 2.3 Zuweisungsoperatoren Symbol = += -= *= /= %= <<= >>= &= |= ^= Operation Zuweisung Addition und Zuweisung Subtraktion und Zuweisung Multiplikation und Zuweisung Division und Zuweisung Modulo Linksschieben und Zuweisung Rechtsschieben und Zuweisung AND OR XOR Beispiel x = 16 x += 4 x -= 3 x *= 8 x /= 32 x %= 10 x <<= 1 x >>= 2 x &= 0x0F x|= 0x01 x ^= 0x01 Beschreibung Setzt x gleich 16 Setzt x gleich dem Wert von y minus 2 Setzt x gleich dem Wert von minus x Multipliziert x mit 8 Dividiert x durch 32 Schiebt x 1 bit nach links Schiebt x 2 bit nach rechts Isoliert die letzten 4 Bits von x Setzt das niederste Bit von x auf 1 Toggelt das niedrigste Bit von x Kurzanleitung CAPL V 1.1 5 3 Datentypen Data char byte int word long dword float double message timer msTimer Type character byte integer word long integer double word single precision floating point single precision floating point a communication message Timer (Einheit s) Timer (Einheit ms) Size 8 bit 8 bit 16 bit 16 bit 32 bit 32 bit 64 bit 64 bit - Unsigned/Signed unsigned unsigned signed unsigned signed unsigned signed signed - 3.1 Type Casting Beispiel: int sum; sum = (int)(1.6 + 1.7); sum = (int) 1.6 + (int) 1.7; 3.2 Autovervollständigung Über die Tastenkombination Strg + Leertaste kann auf die Autovervollständigungsfunktion im CAPL-Browser zugegriffen werden. Beispiel: SysSe… Kurzanleitung CAPL V 1.1 4 CAPL Syntax 4.1 Fallunterscheidung 4.1.1 if/else Allgemein: if ( Bedingung ) Anweisung; if ( Bedingung ) { Anweisung_1; … } else { Anweisung_2; … } Beispiel: if ( Gewicht <= Grenzwert ) Aktuelles_Gewicht = Gewicht; if ( Gewicht <= Grenzwert ) { Aktuelles_Gewicht = Gewicht; } if ( Anzeige_Minuten >= 60 ) { Anzeige_Minuten = 0; } else { Anzeige_Minuten = Anzeige_Minuten + 1; } 6 Kurzanleitung CAPL V 1.1 4.1.2 switch Allgemein: switch ( Ausdruck ) { case Wert_1: Anweisung_1; Anweisung_2; … break; case Wert_2: Anweisung_1; Anweisung_2; … break; … default: Anweisung_1; Anweisung_2; … break; } Beispiel: switch ( Farbwahl ) { case ‘rot’: write (“Farbe: Rot.”); break; case ‘blau’: write (“Farbe: Blau.”); break; case ‘gelb’: write (“Farbe: Gelb.”); break; default: write (“Unbekannte Farbe.”); break; } 7 Kurzanleitung CAPL V 1.1 4.2 Schleifen 4.2.1 while Allgemein: while ( Ausdruck ) {Anweisung_1; Anweisung_2; … } Beispiel: byte binaryArray[16] int number = 1234; int index = 0; while ( number != 0) { binaryArray[index++]=number % 10; number = number / 10 } → Ergebnis 11010010 4.2.2 do while Allgemein: do {Anweisung_1; Anweisung_2; … } while ( Ausdruck ) Beispiel: byte binaryArray[16] int number = 1234; int index = 0; do { binaryArray[index++]=number % 10; number = number / 10 } while ( number != 0); → Ergebnis 11010010 8 Kurzanleitung CAPL V 1.1 4.2.3 for Allgemein: for ( Ausdruck_1; Ausdruck_2; Ausdruck_3;) {Anweisung_1; Anweisung_2; … } Beispiel: byte binaryArray[16] int number = 1234; for (index = 0;number != 0;index++ ) { binaryArray[index++]=number % 10; number = number / 10 } → Ergebnis 11010010 9 Kurzanleitung CAPL V 1.1 10 4.3 Funktion Allgemein: Datentyp function ( Datentyp Übergabe_Var1; Datentyp Übergabe_Var1;) {Anweisung_1; Anweisung_2; … } Beispiel: void PrintMe(int num, char msg[]) { write (“%d %s”,num msg); } PrintMe(1,”Fehler”); // Funktionsaufruf long Mult(int x, int y) { int i; long result; result = 1; for (i = 1; i <= y; i++) result *= x; return result; } xy = Mult(2,4); // Funktionsaufruf 4.4 Keyword „this“ Mit Hilfe von „this“ kann innerhalb der jeweiligen Prozedur auf das auslösende Ereignis zugegriffen werden. Beispiel: on envVar LEDSwitch { int val; // reagiert auf die Änderung von LED Switch val = getValue(this); } // zuweisen des Werts Kurzanleitung CAPL V 1.1 11 5 CAPL Browser Im CAPL Browser kann auf unterschiedliche Ereignisse mit sogenannten Event-Prozeduren reagiert werden. Dabei handelt es sich um folgende Ereignisse: System – ReStart, Start, PreStop, StopMeasurement FlexRay – Slot, StartCycle, Frame, NullFrame, FrameError, Symbol, PocStates, Error, PDU Signal – Change, Update Systemvariablen – Change, Update Timer Keyboard Environment Tritt das gewünschte Ereignis ein, wird die jeweilige Prozedur aufgerufen. Diese kann einfach durch Rechtsklick auf die entsprechende Kategorie erstellt werden. Anschließend wird automatisch ein Prozedurrumpf erstellt. Möchte man beispielsweise auf eine spezielle Systemvariable reagieren, kann man über einen Rechtsklick auf die Datenbank zugreifen und die gewünschte Systemvariable auswählen. Kurzanleitung CAPL V 1.1 12 6 Zugriff auf Daten 6.1 Zugriff auf Systemvariablen Wert holen: <Variable> = SysGetVariableInt(sysvar::<SysVarName>); Wert setzen: SysSetVariableInt(sysvar:: <SysVarName>, <Wert>); 6.2 Frames senden Mit FIBEX Datenbasis: on preStart { statMsg.Message = globVar; // durch das Initialisieren, wird auf FRSetSendFrame (statMsg); // dem FR-Interface der Sendepuffer // reserviet } variables { FRFrame StFr_Status statMsg; } // Deklaration des Frames statMsg on key ‘s’ { statMsg.sigGlobal_Info = 0x7F; // Wert zuweisen FRUpdateStatFrame (statMsg); // Update Frame Buffer } 6.3 Zugriff auf Signale Wert holen: <Variable> = GetSignal(<FR_Frame::SignalName>); Wert setzen: SetSignal(<FR_Frame::SignalName>, <Wert>);