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

