CAPL 编程系列教程 - 第二十期:CAPL 事件概述

CAPL 编程系列教程的第二十期内容,这一期开始系统性地学习 CAPL 中的事件 (Events)

CAPL 编程系列教程 - 第二十期:CAPL 事件概述

一、 课程回顾与本期目标

  • 回顾: 前面学习了 CAPL 的基础语法(数据类型、变量、运算符、控制流、函数、定时器)以及如何发送报文。
  • 本期目标: 系统性地学习 CAPL 的核心机制——事件驱动模型,了解 CAPL 中常见的事件类型及其触发时机和用途。

二、 CAPL 事件驱动模型回顾

  • 核心: CAPL 是一种基于事件 (Event-based)事件控制 (Event-controlled) 的编程语言
  • 机制: CAPL 代码的执行不是顺序的,而是由 CANoe/CANalyzer 环境中发生的特定事件触发
  • 流程: 当某个特定事件(如收到报文、按下按键、定时器到期等)发生时,如果用户在 CAPL 脚本中编写了处理该事件的事件处理程序 (Event Handler/Procedure)(通常以 on EventName {...} 的形式),那么系统会自动调用并执行该事件处理程序中的代码

三、 CAPL 中常见的事件类型分类与介绍

  • (一) 测量生命周期事件 (Measurement Lifecycle Events)

    • on preStart:
      • 触发时机:在 CANoe 测量开始之前,准备工作阶段
      • 用途:执行一些初始化或准备任务,例如加载测试数据文件、配置初始状态等
    • on start:
      • 触发时机:当 CANoe 测量正式开始,可以收发总线报文的那一刻
      • 用途:执行测量开始时需要进行的操作,如启动周期性发送报文的定时器、设置初始信号值等
    • on preStop:
      • 触发时机:当 CANoe 即将结束测量之前,收到停止请求但尚未完全脱离总线时
      • 用途:执行一些必要的收尾工作,例如发送下线通知报文、保存临时状态等
    • on stopMeasurement:
      • 触发时机:当 CANoe 测量完全结束,已脱离总线之后
      • 用途:执行测量结束后的数据处理、分析、统计、生成报告等任务
  • (二) 用户输入与定时器事件 (Input & Timer Events) (前面已接触)

    • on key <KeyName>:
      • 触发时机:当用户在 CANoe 运行时按下键盘上指定的按键时 (如 'a', 'B', F1 等)
      • 用途:用于手动触发特定的测试动作或脚本逻辑
    • on timer <TimerName>:
      • 触发时机:当名为 <TimerName> 的定时器(timermsTimer 类型)到达设定的时间时
      • 用途:执行延迟任务或周期性任务
  • (三) 报文与信号事件 (Message & Signal Events) (非常常用)

    • on message <ID | MsgName | *>:
      • 触发时机:当 CANoe 接收到总线上符合指定条件的报文时
        • 可以指定具体的报文 ID (如 0x123)。
        • 可以指定 DBC 文件中定义的报文名称 (如 EngineState)。
        • 可以使用通配符 * 来匹配所有接收到的报文。
      • 用途:对接收到的特定报文或所有报文进行处理、分析、记录或响应
    • on signal <SignalName>:
      • 触发时机:当总线上指定信号 (<SignalName>) 的值发生变化时 (从一个值变为另一个不同的值)
      • 前提:需要加载包含该信号定义的 DBC 文件
      • 用途:响应特定信号值的改变,执行相应的逻辑
      • 注意:如果信号值更新了,但值与上次相同,则不会触发 on signal
    • on signal_update <SignalName>:
      • 触发时机:当总线上指定信号 (<SignalName>) 的值被更新时,即使值没有发生变化
      • 前提:需要加载包含该信号定义的 DBC 文件
      • 用途:当需要每次信号出现(无论值是否变化)都执行操作时使用,相对 on signal 用得较少
  • (四) 系统变量事件 (System Variable Events) (后续讲解)

    • on sysVar <SysVarName> / on sysVar_update <SysVarName>
    • 触发时机:当系统变量的值发生变化或更新时
    • 用途:通常与仿真面板 (Panel) 交互相关,用于响应面板控件的变化或更新面板显示 。将在后续讲解系统变量时再详细介绍。

四、 总结与后续

  • 本期系统性地介绍了 CAPL 的事件驱动模型,并分类梳理了常见的事件类型及其触发条件和基本用途。
  • 理解这些事件是编写有效 CAPL 脚本的基础,能够让你在正确的时间点执行正确的代码逻辑。
  • 后续计划:
    • 下一期(第二十一期)将通过实例详细讲解测量生命周期事件 (on preStart, on start, on preStop, on stopMeasurement)。
    • 之后会继续讲解其他重要的事件类型,特别是报文和信号事件。