本部分内容我来学习CAPL的数据类型。由于CAPL是一门类C的语言,因此其基本的数据类型跟C语言类似,但也有一些特殊的地方。
1. 全局变量与局部变量
在CAPL中,全局变量需要被声明在vriables部分,同时可以使用直接赋值方法进行初始化。如果没有初始化,编译器会执行自动初始化,默认值为0。全局变量的作用域包括整个CAPL文件以及与此文件有链接的其他CAPL文件。
与C语言不同,局部变量在CAPL中总是被静态的创建。初始化只在程序体启动时执行,当再次进入程序时,局部变量被假定是上一次跳出程序时的值。局部变量的作用域,仅限于当前函数体范围内,即该函数的大括号范围内。
2. 简单变量
(1)整型
整数就是没有小数部分的数字。如表1所示。
(2)浮点型
CAPL提供两种浮点型变量:float和double,如表2所示。
3. 特殊类型
(1)报文
报文是车载网络的最基本的结构部分,CAPL提供了各种网络对应的报文类。这里介绍CAN和LIN。
使用关键字message来声明一个报文变量,默认为CAN报文变量。当有数据库支撑的时候,一个完整的声明应包括message ID或message name。一标识符“x”结尾的ID表示这是一个扩展帧ID。而“*”则表明这条报文在声明时还不含有CAN ID。例如:
on message CAN1.*
{
message *msg
if (this.dir!=rx) return
msg=this
}
切记,使用这种方式声明报文时,一定要指定ID后才能发送出去。
(2)诊断报文
CAPL 通过诊断请求(DiagRequest)和诊断响应(DiagResponse)来实现跟ECU之间的诊断服务交互。
通常情况下,诊断服务需要首先对Diagnostic对象声明和初始化。
DiagRequest ServiceQualifier request;
DiagResponse ServiceQualifier response;
上述声明语句分别声明了诊断请求对象“request”和诊断响应对象“response”;并通过给出诊断服务“ServiceQualifier”进行初始化。这种初始化将在节点仿真开始时被执行一次,并在每次诊断目标(DiagTarget)改变时被执行一次。
(3)系统变量
系统变量是一种特殊的变量,用来描述特殊状态(例如某种事件的触发)或者记录测量数据。一般有系统定义和用户自定义两种,作用域都是在各自命令的空间内。
系统变量的类型及描述如表3所示。
(4)定时器
CAPL提供了两种定时器变量:timer基于秒的时间单位;mstimer基于毫秒的时间单位,例如:
Timer mytimer1;
本部分内容主要介绍了CAPL的数据类型,你是不是掌握了?