CAPL 编程系列教程 - 第二十七期:常用内置函数之日志启停控制 (基础)

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 界面右下角的日志状态图标(是否有存盘动画)和项目目录下是否生成日志文件来判断日志记录是否在进行。

三、 使用 CAPL 控制日志启停

  1. 准备工作:
    • 在 CANoe Measurement Setup 中添加一个 Logging Block。
    • 将该 Logging Block 的触发模式设置为 Triggered (如 Single Trigger)。
    • 在 Simulation Setup 中添加一个 CAPL 网络节点 (Network Node),并关联一个 .can 文件用于编写控制逻辑。
  2. 启动日志记录 (startLogging):
    • 函数: startLogging()
    • 作用: 当调用此函数时,会触发 CANoe 中所有配置为 Triggered 模式(且当前未激活)的 Logging Block 开始记录日志。
    • 参数: 本期讲解的是无参数版本,控制所有模块。(注:下一期会讲带参数控制特定模块的版本)
    • 调用时机: 通常在某个事件处理程序中调用,当满足开始记录的条件时执行。例如,在 on signal 事件中,当报警信号变为激活状态时调用。
  3. 停止日志记录 (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 窗口输出提示,并且日志模块状态恢复,日志文件停止增长。
    • 检查生成的日志文件内容,确认只记录了信号开启期间的数据。

五、 总结与后续

  • 本期学习了如何使用基本的 startLogging()stopLogging() 函数,结合事件(如 on signal)来控制 CANoe 日志记录的启停。
  • 这是在自动化测试或长时间数据采集中,根据特定条件精确记录数据的实用方法。
  • 下一期 (第 28 期): 将讲解这两个函数的重载形式,学习如何控制特定名称的 Logging Block,以及如何设置预触发和后触发时间