2. CANoe工程与CAPL运行环境搭建

CAPL脚本不能脱离CANoe工程独立运行。一个可执行的CAPL自动化测试环境,本质上由四层构成:CANoe软件本体、工程文件(.cfg)、网络数据库(.dbc/.arxml/.ldf)、以及挂在仿真节点上的CAPL程序。本节按“装软件—建工程—导数据库—配节点—写CAPL”的顺序,把这条链路一次打通。

一、CANoe安装与授权配置

CANoe安装包通常包含CANoe主程序、CANalyzer、CANoe Option等组件。安装时需注意三点:一是选择与硬件匹配的驱动,Vector接口卡(VN1610、VN5610、VN1640等)需要安装Vector Driver Setup,否则CANoe启动后看不到通道;二是安装路径避免中文和空格,推荐 C:\Vector\CANoe\,因为部分CAPL编译器和数据库解析器对路径字符敏感;三是授权方式,CANoe使用Vector License Client管理License,可以是USB加密狗,也可以是绑定网卡MAC的软授权。

安装完成后,通过 Help → About CANoe 确认版本号与已授权选项。做CAPL自动化测试,至少需要基础CANoe License;若涉及LIN、FlexRay或以太网,还需对应Option。授权异常时,CANoe会以Demo模式启动,此时CAPL的output()、testWaitForTimeout()等函数可能受限,务必先解决授权再进入后续配置。

二、创建CANoe工程

启动CANoe,选择 File → New → Configuration,进入工程配置界面。新建工程后先做两件事:保存为 .cfg 文件(例如 CAPL_Demo.cfg),并设置工程工作目录。工程文件记录了网络拓扑、节点、数据库绑定和CAPL节点引用,是后续所有配置的容器。

接着配置通道。在 Simulation Setup 视图中,右键 CAN Networks 添加一条CAN总线,设置波特率。教学示例中常用500 kbps,采样点默认80%。若使用真实硬件,需在 Hardware → Network Hardware Configuration 中把通道映射到具体接口卡端口,例如 CAN1 → VN1610 Channel 1;若暂时无硬件,可勾选 Simulated Bus 进行离线验证。

三、导入网络数据库

数据库是CAPL访问报文的“字典”。在 Simulation Setup 中右键总线,选择 Add Database,导入 .dbc(CAN)、.ldf(LIN)或 .arxml(AUTOSAR)。导入后,CANoe会自动解析出报文、信号、节点和属性。

导入后必须做一次核对:在 Database 视图中展开报文列表,确认报文ID、DLC、信号起始位和长度与设计一致。常见问题是DBC中信号字节序(Intel/Motorola)写错,导致CAPL读出的物理值完全不对。例如某车速信号 VehicleSpeed 定义在 0x123 报文的第0字节,长度8位,因子0.5,偏移0,则CAPL中 $VehicleSpeed 读到的原始值乘以0.5才是km/h。若发现数值异常,优先回查DBC而非CAPL代码。

CANoe工程与CAPL运行环境搭建链路 ① CANoe软件 主程序 + Driver Setup License Client授权 ② 新建工程.cfg Simulation Setup 通道/波特率500kbps ③ 导入数据库 .dbc / .ldf / .arxml 核对ID/DLC/字节序 ④ 仿真节点 Network Node 绑定CAPL程序 CAPL Browser 编写 / 编译 / 生成 .can 文件 运行期数据流 总线报文 0x123 / 0x456 CAPL事件 on message / on timer 测试判定 Write / TestReport CAPL节点在仿真节点上运行,通过数据库符号访问信号,输出测试结果

四、CAPL Browser与仿真节点配置

在 Simulation Setup 中右键总线,选择 Insert Network Node,双击节点进入 CAPL Browser。CAPL Browser是CAPL的编辑、编译和调试环境,左侧是程序结构树(includes、variables、functions、event handlers),右侧是代码编辑区。

一个最小可运行的CAPL节点包含三部分:全局变量、事件处理、输出逻辑。示例代码如下:

/* CAPL_Demo.can —— 周期发送车速并监测响应 */
variables
{
  msTimer tSend;
  int   gCycle = 100;   // 发送周期,单位ms
}

on start
{
  setTimer(tSend, gCycle);
  write("CAPL节点已启动,周期=%d ms", gCycle);
}

on timer tSend
{
  $VehicleSpeed = 60.0;   // 物理值60 km/h,按DBC因子自动换算
  output($VehicleSpeed);  // 发送到总线
  setTimer(tSend, gCycle);
}

on message 0x456
{
  if (this.dir == RX)
  {
    write("收到响应报文 0x456,DLC=%d", this.dlc);
  }
}

代码写完后点击 Compile,CAPL Browser会生成 .can 文件。若编译报错,常见原因有三类:变量未声明、事件名拼写错误、数据库符号未导入。编译通过后,节点图标由灰色变为彩色,表示已绑定CAPL程序。

五、启动验证与常见问题

点击CANoe工具栏的 Start(闪电图标)启动工程。观察 Write 窗口是否输出“CAPL节点已启动”,Trace 窗口是否出现周期100 ms的 0x123 报文。若报文未出现,按以下顺序排查:

  • 节点是否处于“激活”状态(图标非灰色);
  • 通道是否映射到正确的硬件端口或Simulated Bus;
  • CAPL中 output() 的报文是否在数据库中有定义;
  • 波特率是否与总线其他节点一致。
建议在工程目录下建立 Database/、CAPL/、Report/ 三个子目录,分别存放DBC、CAPL源码和测试报告,便于后续自动化脚本统一管理路径。