CAPL基础语法

2023-12-16 16:34:50


1.变量的声明与定义

在程序运行过程中,其值可以被改变的量称为变量。变量可以用于保存用户输入的数据,也可以保存程序运行时产生的中间结果或最终结果。

1.1变量名

(1)只能使用字母字符、数字和下划线
(2)名称的第一个字符不能是数字
(3)区分大小写字符
(4)不能将CAPL关键字用作名称
(5)不能将CAPL的函数名和对象名用作变量名
(6)变量名的字符长度最好不要超过32个(编译系统只能识别前32个字符)
(7)变量名最好具有易读性,“见名知意”

CAPL关键字分类
数据类型关键字:int, byte, long etc.
控制语句关键字:if, else
存储类型关键字:static, extern
其他关键字:const, message

1.2全局变量与局部变量

全局变量

在variables部分声明全局变量
可通过直接赋值进行初始化,如果没有初始化,编译器自动初始化为0
全局变量的作用域:整个CAPL文件以及与此文件有链接的其他CAPL文件

局部变量

与C语言不同,局部变量在CAPL中总是被静态地创建。这意味着初始化只在程序体启动时执行,当再次进入程序时,局部变量被假定是上一次跳出程序时的值。局部变量的作用域,仅限于当前函数体范围内,即该函数的大括号范围内。

1.3简单变量

整型:整数就是没有小数部分的数字,如3、201、-3412和0。根据数值的大小不同,CAPL提供了以下几种整型
整数

字符:区别于C语言,CAPL未将char类型(长度1B)归类至整型中,这是因为在CANoe中提供了byte类型。如果数据是具体数值则应使用
byte,而对于字符,则应用char(字符串使用char数组)。char类型和byte类型之间可以直接转换,例如:

byte data1 =100;
char ch1 = 'd';
ch1 = 0x62;
data1 = 's';

浮点型:CAPL提供两种浮点型变量:float和double
浮点型

1.4复合类型

结构 struct

结构名在程序中必须唯一
简单类型、枚举类型或者其他的结构都可以作为结构的成员

枚举 enum

枚举的成员名必须唯一(否则将有可能代替隐藏数据库中同名的报文和信号)
如果没有在声明枚举的同时对成员进行赋值,编译器将按照成员声明的顺序对成员进行初始化(第一个为0,往后依次加1)

数组 Array

CAPL直接用字符串初始化字符数组的行为
CAPL也支持多维数组
CAPL通过内建函数elCount(数组名)来获得数组成员的个数

1.5特殊类型

报文

报文(CAN/LIN messages)是车载网络最基本的构成部分,CAPL提供了各种网络相对应的报文类。这里主要介绍CAN报文和LIN报文。
使用关键字message来声明一个报文变量,当使用message声明报文变量时,默认变量为CAN报文变量。当有数据库支撑的时候,一个 完 整 的 声 明 应 该 包 括 message ID 或 者 message name 。 结 合database的例子,使用ID 0xA或者报文名来声明一条数据库中的EngineData报文。例如

message 0xA m1;
message 100 m2;
message EngineData m3;

以标识符“x”结尾的ID表示这是一个扩展帧ID,例如,100x。
而“*”则表明这条报文在声明时还不含有CAN ID。
如果需要在CAN1网络上发送一条指定的报文,报文名:magicMessage;报文ID:0x252;包含8个字节0x03 3B 40 00 00 00 00 00;可以定义如下:

magicMessage.CAN =1;
magicMessage.ID = 0x252;
magicMessage.DLC = 8;
magicMessage.Byte(0) = 0x03;
magicMessage.Byte(1) = 0x3B;
magicMessage.Byte(2) = 0x40;
magicMessage.Byte(3) = 0x00;
magicMessage.Byte(4) = 0x00;
magicMessage.Byte(5) = 0x00;
magicMessage.Byte(6) = 0x00;
magicMessage.Byte(7) = 0x00;
output(magicMessage);

诊断报文

通过诊断请求 ( DiagRequest )和诊断响应(DiagResponse)这两个对象来实现和ECU之间的诊断服务交互
在声明诊断对象时进行初始化

DiagRequest ServiceQualifier request;
DiagResponse ServiceQualifier response;

定时器

CAPL提供了两种定时器变量:timer和msTimer
timer基于秒
msTimer基于毫秒

文章来源:https://blog.csdn.net/qq_41908302/article/details/135032721
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。