CAPL Script
CANoe / CANalyzer 编程

学习CAPL 脚本用于汽车测试

CAPL(通信访问编程语言)是一种基于 C 的语言,让您能够控制 CAN、LIN 和 FlexRay 总线上的仿真、测试和诊断。

什么是 CAPL?

想象一下,您正在开发一个车门控制器 ECU。该控制器需要接收中央系统的锁定/解锁命令,控制车窗移动,并发送车门状态反馈。但在开发过程中,其他 ECU 还没有准备就绪。

CAPL 弥合了这一差距。它让您能够创建虚拟 ECU,发送测试命令,仿真总线流量,并在硬件到达之前验证您的 ECU 的行为。

CAPL 是事件驱动的:不是从连续运行的 main() 函数开始,而是定义处理程序来响应消息、定时器、键盘输入等事件。它与 CANoe/CANalyzer 无缝集成,提供全面的汽车测试功能。

您可以用 CAPL 构建什么

仿真不存在的 ECU

创建与真实 ECU 行为相同的虚拟 ECU。在硬件可用之前的软件在环测试非常完美。

temperature_sensor.can
// Simulate a temperature sensor sending data every 100ms
variables {
    msTimer tempTimer;
    float currentTemp;
}

on start {
    currentTemp = 20.0;
    setTimer(tempTimer, 100);
}

on timer tempTimer {
    currentTemp = currentTemp + (random() % 10 - 5) * 0.1;
    message 0x3A tempMsg;
    tempMsg.byte(0) = (byte)(currentTemp * 10);
    output(tempMsg);
    setTimer(tempTimer, 100);
}

自动化测试用例

编写自动验证 ECU 响应的测试用例。检查时序、数据值和总线行为,无需人工检查。

test_door_lock.testcase
// Test case: Verify door lock response time
testcase TC_LockResponseTime()
{
    message 0x200 cmd;
    cmd.byte(0) = 0x01;
    output(cmd);

    // Wait for response with 1 second timeout
    testWaitForMessage(0x201, 1000);

    if (responseReceived) {
        testStepPass("Response within time limit");
    } else {
        testStepFail("No response received");
    }
}

诊断服务

使用标准化诊断协议与 ECU 通信。读取故障码、配置参数和执行例程。

diagnostics.can
// Read DTCs (Diagnostic Trouble Codes)
variables {
    DiagRequest NRC_DTCs.GetDTCInformation req;
}

on start {
    req = DiagRequest NRC_DTCs.GetDTCInformation;
    req.SetParameter("DTCStatusMask", 0xFF);
    req.Send(1000);

    if (req.WaitForResponse(2000)) {
        write("DTC Read Successful");
    }
}

总线分析与日志

监控总线流量、过滤特定消息并记录数据用于调试和性能分析。

bus_monitor.can
// Monitor and log specific CAN messages
on message CAN1.200 {
    write("Time: %1.3f | ID: 0x%X | DLC: %d",
          this.Time, this.ID, this.DLC);

    byte cmd = this.byte(0);
    byte param = this.byte(1);

    if (cmd == 0x05 && param > 0x10) {
        write("High priority command!");
    }
}

核心概念

事件驱动

CAPL 程序等待事件(消息、定时器、按键)而不是顺序运行。每个处理程序响应一个特定的触发器。

总线导向

像 message 和 signal 这样的内置数据类型使直接读取和写入 CAN/LIN/FlexRay 数据变得很自然。

基于 C 的语法

如果您了解 C 语言,您会有宾至如归的感觉。变量、函数、控制流——都很熟悉,但针对总线特定任务进行了简化。

与 CANoe 集成

CAPL 在 CANoe/CANalyzer 内运行,让您完全访问仿真、测试和诊断功能。

您的学习路径

按照此分步教程掌握从基础到高级主题的 CAPL 编程。