CAPL 编程系列教程的第二十七期内容 ,主要讲解如何使用 CAPL 代码来控制 CANoe 中的日志记录 (Logging) 功能的启动和停止。
CAPL 编程系列教程 - 第二十七期:常用内置函数之日志启停控制 (基础)
一、 课程回顾与本期目标
- 回顾: 前面学习了 CAPL 的文件操作。
- 本期目标: 学习使用 CAPL 内置函数来控制 CANoe 中日志记录模块 (Logging Block) 的启动 (
startLogging) 和停止 (stopLogging)。 - 应用场景: 在长时间测试(如实车路试)中,避免记录大量无关数据,只在特定事件发生时(如盲区报警、故障出现、特定功能激活等)才开始记录日志,事件结束后停止记录,从而生成更小、更聚焦、更便于分析的日志文件。
二、 CANoe 日志记录 (Logging) 基础
- 前提: 需要了解 CANoe 具有记录总线数据的能力。
- Logging Block:
- 在 CANoe 的 Measurement Setup (测量设置) 面板中,可以添加
Logging Block(日志记录块) 组件。 - 配置:
- 可以重命名 Logging Block (如 "贾老师Logging")。
- 可以配置日志文件的存储路径(推荐项目下的
Logs文件夹)、文件名(可以使用变量如模块名)、存储格式(如BLF二进制,ASC文本格式 - 方便阅读但体积大)。 - 可以配置过滤器 (Filter),选择性地记录特定报文、信号或排除系统变量等(本期未细讲)。
- 触发模式 (Mode):
- 默认 (
Entire Measurement): 工程一开始运行就自动记录,直到工程停止。 - Triggered (Single Trigger / Multiple Triggers): 需要外部触发(如 CAPL 调用函数)才会开始记录。本期主要使用
Single Trigger模式,配合 CAPL 控制。
- 默认 (
- 在 CANoe 的 Measurement Setup (测量设置) 面板中,可以添加
- 验证: 通过观察 CANoe 界面右下角的日志状态图标(是否有存盘动画)和项目目录下是否生成日志文件来判断日志记录是否在进行。
三、 使用 CAPL 控制日志启停
- 准备工作:
- 在 CANoe Measurement Setup 中添加一个 Logging Block。
- 将该 Logging Block 的触发模式设置为 Triggered (如
Single Trigger)。 - 在 Simulation Setup 中添加一个 CAPL 网络节点 (Network Node),并关联一个
.can文件用于编写控制逻辑。
- 启动日志记录 (
startLogging):- 函数:
startLogging() - 作用: 当调用此函数时,会触发 CANoe 中所有配置为 Triggered 模式(且当前未激活)的 Logging Block 开始记录日志。
- 参数: 本期讲解的是无参数版本,控制所有模块。(注:下一期会讲带参数控制特定模块的版本)
- 调用时机: 通常在某个事件处理程序中调用,当满足开始记录的条件时执行。例如,在
on signal事件中,当报警信号变为激活状态时调用。
- 函数:
- 停止日志记录 (
stopLogging):- 函数:
stopLogging() - 作用: 当调用此函数时,会停止 CANoe 中所有当前正在记录的 Logging Block。
- 参数: 本期讲解的是无参数版本。
- 调用时机: 通常在某个事件处理程序中调用,当满足停止记录的条件时执行。例如,在
on signal事件中,当报警信号变回非激活状态时调用。
- 函数:
四、 示例:根据大灯信号控制日志启停
- 场景: 模拟当车辆大灯 (Headlight) 信号开启时开始记录日志,关闭时停止记录。
- 实现:
Code snippet
/* CAPL Script for Logging Control */ includes {} variables {} // 事件处理:当 Headlight 信号值发生变化时 on signal Headlight { // this 代表当前 Headlight 信号的物理值 (0 或 1) if (this == 1) { // 如果信号值变为 1 (大灯开启) write("大灯开启,开始记录日志..."); startLogging(); // 启动日志记录 } else { // 否则 (信号值变为 0,大灯关闭) write("大灯关闭,停止记录日志。"); stopLogging(); // 停止日志记录 } } - 验证:
- 配置好 CANoe 环境(加载包含
Headlight信号的 DBC,添加 Logging Block 并设为 Triggered 模式,添加 CAPL 节点并关联上述脚本)。 - 启动 CANoe 工程,此时日志不记录。
- 在仿真面板或通过其他方式改变
Headlight信号的值。 - 当
Headlight变为 1 时,观察到 Write 窗口输出提示,并且日志模块状态变为 Active,开始生成日志文件。 - 当
Headlight变为 0 时,观察到 Write 窗口输出提示,并且日志模块状态恢复,日志文件停止增长。 - 检查生成的日志文件内容,确认只记录了信号开启期间的数据。
- 配置好 CANoe 环境(加载包含
五、 总结与后续
- 本期学习了如何使用基本的
startLogging()和stopLogging()函数,结合事件(如on signal)来控制 CANoe 日志记录的启停。 - 这是在自动化测试或长时间数据采集中,根据特定条件精确记录数据的实用方法。
- 下一期 (第 28 期): 将讲解这两个函数的重载形式,学习如何控制特定名称的 Logging Block,以及如何设置预触发和后触发时间。