CAPL是CAN汇流排访问编程语言,在汽车电子开发中运行十分广泛,类似C语言,同时是基于事件建模的语言,事件类型包含三种:

  • 汇流排事件
  • 属性事件
  • 时间时间

CAPL时间类型可以从一张表格清楚表示,图片素材来源网路

1. 和时间相关用法

on timer myTimer //表示对myTimer设定的时间到反应

msTimer myTimer; //声明了一个ms定时器,定时单位是毫秒

timer myTimer; //声明了一个以秒为单位的定时器;

定时器设置:

setTimer(myTimer,20); //将定时器设置为20ms,并启动myTimer函数里的动作一次

setTimerCyclic(myTimer,1); //设置定时器myTimer为一个1s为周期的循环定时器;

cancelTimer(myTimer); //停止定时器myTimer

需要执行该时间时间的函数写法:

myTimer
{
tester.dlc =8;
tester.byte(0) = 0x02;
tester.byte(1) = 0x10;
tester.byte(2) = 0x03;
tester.byte(3) = 0x00;
tester.byte(4) = 0x00;
tester.byte(5) = 0x00;
tester.byte(6) = 0x00;
tester.byte(7) = 0x00;
output(tester);
}

2. 消息键盘事件

on message 0x7E0 //监测到0x7E0报文的反应

on message UDSReqeust // 对UDSRequest反应

on message CAN1.123 // 对CAN1通道收到报文123的反应

on message * //对所有消息的反应

on message 0x7E0-0x7E8 //对0x7E0-0x7E8 之间报文的反应

on key『F』 // 按键盘F时触发动作

on key Ctrl-F1 //按Ctrl+F1 触发动作

对于以上两种事件类型是常用到的功能,能满足绝大部分需求。

3. CAPL中数据类型

无符号

  1. byte (1个位元组)
  2. word (2个位元组)
  3. dword(4个位元组)

有符号

  1. int (2个位元组)
  2. long (4个位元组)

浮点型

  1. float
  2. double

4. 消息的申明

message 0x7E0 i14229_extend;

如果键盘时间出发送报文

on key a
{
i14229_extend.dlc = 8; //表示长度
i14229_extend.byte(0) = 0x02; //第0个
i14229_extend.byte(1) = 0x10;
i14229_extend.byte(2) = 0x03;
i14229_extend.byte(3) = 00;
i14229_extend.byte(4) = 00;
i14229_extend.byte(5) = 00;
i14229_extend.byte(6) = 00;
i14229_extend.byte(7) = 00;
output(i14229_extend); //发送该报文
}

如果接收到则作出反应并发出另一帧

on message 0x7E8
{
//extend session
if((this.BYTE(1) == 0x50) || (this.BYTE(2) == 0x03))
{
i14229_seca.dlc = 8;
i14229_seca.byte(0) = 0x02;
i14229_seca.byte(1) = 0x27;
i14229_seca.byte(2) = 0x01;
i14229_seca.byte(3) = 00;
i14229_seca.byte(4) = 00;
i14229_seca.byte(5) = 00;
i14229_seca.byte(6) = 00;
i14229_seca.byte(7) = 00;
output(i14229_seca);
}
}

5. CAPL完整结构

通常可由三部分组成

  1. 定义全局变数
  2. 事件过程
  3. 自定义函数块

推荐阅读:
相关文章