【CAPL】CAPL版 hello world-纯小白入门篇
认识CAPL
一句话总结CAPL:总线通信
- CAPL(Communication Access Programming Language)
- CAPL 是汽车总线开发领域的专用编程语言:汽车总线的开发、测试和仿真
- 专为汽车电子领域的总线通信(如 CAN、LIN、Ethernet 等)设计
- 设计目标:简化总线通信的仿真、监控、测试流程
- 便捷实现对总线数据的发送、接收、处理以及自动化测试逻辑的编写。
CAPL 的核心特点
-
1.面向总线通信
- CAPL 的语法和功能高度适配汽车总线协议(如 CAN、LIN、FlexRay、Ethernet 等)
- 可以直接操作总线上的报文(Message)和信号(Signal),例如:
- 发送自定义 CAN 报文;
- 监听总线上的特定信号并触发响应;
- 模拟 ECU(电子控制单元)的行为。
-
2.类 C 语法,易于上手
- 语法结构:
- 与 C 语言相似
- 包含 变量、函数、条件语句、循环语句等基本要素
- 同时扩展了总线通信相关的专属函数
- 如output()发送报文、on message监听报文等
- 语法结构:
-
3.事件驱动机制
- CAPL 程序主要基于事件触发执行
- 常见事件包括:
- 总线上收到特定报文(on message);
- 定时器超时(on timer);
- 按键或界面操作(on key);
- 系统初始化(on start)。
-
4.集成于汽车总线开发工具
- CAPL 主要在 Vector 的 CANoe(总线仿真与测试工具)和 CANalyzer(总线监控工具)中使用,
- 通过编写 CAPL 脚本,可以实现:
- 仿真 ECU 的发送和接收行为;
- 自动化测试用例(如验证报文触发条件、信号范围等);
- 自定义总线监控逻辑(如报警、数据统计)。
应用场景举例
-
ECU 仿真:
- 通过 CAPL 脚本模拟某个 ECU 向总线发送报文(如车速、油门信号),供其他 ECU 或测试系统验证功能。
-
自动化测试:
- 编写 CAPL 脚本,自动向总线发送特定指令,同时监控响应报文,判断系统是否符合设计要求
- 如 “发送刹车信号后,车速信号应在 1 秒内降至 0”
-
故障注入:
- 通过 CAPL 脚本模拟总线故障(如报文丢失、信号错误),测试系统的容错能力。
1.CAPL的hello world
新建工程后新建网络节点
- 连接CANoe设备
- 打开CANoe,新建工程:new-CAN 500k..
- 新建网络节点:Simulation-右击CAN线-插入网络节点
打开网络节点的CAPL界面
- 在新建的网络节点的左下方小铅笔,打开CAPL界面
- 首先需:选择路径并命名后打开;或选择已有文件打开
使用start编写输出语句hello world
- 左侧大纲:找到system
- 快捷插入start语句,并添加输出语句
- 编译:成功后关闭CAPL Brower
![图片]()
![图片]()
运行CANoe工程
- 小闪电运行,如果成功,可以在write窗口中看到输出的hello world
![图片]()
2.发送一个CAN消息
定义全局变量msg1
- 定义消息变量msg1,并初始化:
- 消息ID为0x555,数据长度dlc为1字节
message 0x555 msg1 = {dlc=1};中: 0x555为message的ID- 应为message初始化格式,参考数组初始化等
- 格式:
message message的ID message的变量名 = {...};
键盘s触发报文发送
- 给报文的第1个字节赋值为0xAA
- 发送此报文
- 打印特定的语句
![图片]()
编译运行,键盘按下s后的trace
- 编译运行成功
- 按下s后,trace窗口可以看到一条报文
- 注:没有BCM连接,这里只有错误帧
![图片]()
3.设置信号值变化
需求分析
- dbc中已定义 报文和信号
- 报文ABS_1
- 此报文下的信号:VehicleSpeed
- 报文ABS_1
- 改变 信号 VehicleSpeed 的值,并监测这个值
- 可以在 Graphics 窗口中监测
- VehicleSpeed 值的变化:
- 2s后:赋值为5 --
sendTimer - 4s后:赋值为50 --
updateTimer - 按键s后:赋值为30 --
on key 's'
- 2s后:赋值为5 --
- 监测定时器:
- 程序运行的1s后开始监测 --
checkTimer
- 程序运行的1s后开始监测 --
定义变量variables
- 定义message和Timer
定义start
- 运行后,立刻开始做的事
- 立刻发送报文
- 立刻开始计时器
尝试按键触发on key
- 当按键s后,触发 VehicleSpeed 值的变化
代码示例
- 以下是示例代码,作为参考
variables { message ABS_1 ABS_1; msTimer checkTimer; msTimer sendTimer; msTimer updateTimer; } on start { output(ABS_1); setTimer(checkTimer, 1000); setTimer(sendTimer, 2000); setTimer(updateTimer, 4000); } on timer sendTimer { $VehicleSpeed = 5; //output(ABS_1); } on timer updateTimer { $VehicleSpeed = 50; //output(ABS_1); //错误的发送报文位置,会导致信号值先拉低为0后变化为指定值 } on key 's' { $VehicleSpeed = 30; } on timer checkTimer { //int speed = $VehicleSpeed; ///int mode = $PowerMode; if($PowerMode == 0 && $VehicleSpeed >40){ write("太快啦!!"); } setTimer(checkTimer,1000); }
核心思路:动手,debug,进步
- 动手编译、运行代码
- 在动手过程中,发现问题,解决问题,积累经验,然后进步
参考链接
- 【CANoe】CAPL实例:红绿灯
- CANOE入门(二): CAPL小白丝滑入门的hello world
- 两万字的CAPL语法基础,一篇文章带你入门
- CAPL脚本编程从入门到精通
- CAPL编程语言快速入门
- CANoe之CAPL编程(CANoe系列其三)
- CANoe教程:CAPL编程






浙公网安备 33010602011771号