You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用CAPL为CANoe不同测试用例修改指定信号的取值

针对CANoe测试用例动态修改持续发送报文信号值的解决方案

以下是3种生产环境常用的实现方式,适配不同的测试开发场景:

1. 测试用例直接调用信号赋值API(最通用方案)

  • 适用场景:CAPL测试用例、XML测试用例都支持,无需修改原有仿真节点的发送逻辑
  • 操作方法:
    在每个测试用例的初始化阶段直接对目标信号赋值,CANoe会自动覆盖节点原有的信号默认值,后续节点周期性发送报文时会自动携带新的信号值,直到你下一次修改该信号。
    CAPL测试用例示例代码:
    testcase TC_01_SigValueIs0()
    {
      // 测试用例启动后优先设置信号值,nodeA替换为实际发送节点名
      $nodeA::msg1::sig1 = 0;
      $nodeA::msg1::sig2 = 10;
      // 此处编写对应测试逻辑
      ...
    }
    
    testcase TC_02_SigValueIs1()
    {
      $nodeA::msg1::sig1 = 1;
      $nodeA::msg1::sig2 = 20;
      // 此处编写对应测试逻辑
      ...
    }
    

2. 系统变量绑定信号值(适合批量管理场景)

  • 适用场景:需要统一管理多信号取值、或多个测试用例需要联动修改信号的场景
  • 操作方法:
    1. 在CANoe的「Environment/System Variables」模块新建自定义系统变量,例如SysVar::Msg1::Sig1Val
    2. 修改发送msg1的节点CAPL代码,将信号值和系统变量绑定:
    on message msg1
    {
      this.sig1 = @SysVar::Msg1::Sig1Val;
      output(this);
    }
    
    1. 不同测试用例中仅需要修改对应系统变量的值即可:
    testcase TC_03()
    {
      @SysVar::Msg1::Sig1Val = 5;
      ...
    }
    

3. XML测试用例修改信号值

如果使用CANoe Test Module的XML格式测试用例,直接调用<SetSignal>标签即可:

<Testcase title="TC_04_SigValueIs3">
  <SetSignal node="nodeA" message="msg1" signal="sig1" value="3"/>
  <!-- 后续测试步骤 -->
  ...
</Testcase>

注意:所有信号修改操作都是即时生效的,修改后节点下一次发送报文就会携带新值,不需要重启仿真。如果需要测试用例执行完恢复默认信号值,可以在测试模块的TestPostamble阶段统一重置信号取值即可。

内容的提问来源于stack exchange,提问作者Shubham Diwate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:09:03