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>);