CAPL编程基础
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中数据类型
无符号
- byte (1个位元组)
- word (2个位元组)
- dword(4个位元组)
有符号
- int (2个位元组)
- long (4个位元组)
浮点型
- float
- 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完整结构
通常可由三部分组成
- 定义全局变数
- 事件过程
- 自定义函数块
推荐阅读: