- 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用
- 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】
- 🍅 玩转CANoe,博客目录大全,点击跳转👉
🍅 如果你看到这篇文章,我认为你应该先应该了解CAPL中,等待单个事件发生的相关内置函数:CAPL函数 Test Node中TestWait xxx 常用函数因为本次会以CAN总线为例,通过你个TestJoin内置函数来说下,注册多个事件,然后再等待多个事件发生的测试场景
🍅 我们知道CAPL是基于事件驱动的逻辑,我们可以通过on message ,on siganl 。。。等等监控到事件的触发,我们在simulation node节点中常常这样做;但是在Test Node节点中,我们CAPL脚本就不易再这样做了,我们可以通过CAPL自动的一些注册事件的函数,来监控期望事件的发生
🍅 演示软硬件环境 Windows11 x64 ; CANoe 16 demo



putValue (evMyEnvVar, 1);
TestJoinEnvVarEvent (evMyEnvVar);
TestWaitForAnyJoinedEvent (1000); // Does not wait, is immediately discontinued by an environment variable change!







on key 'a'
{
message 100 msg;
msg.DLC = 1;
msg.BYTE(0) = 0xff;
output(msg);
}
on key 'b'
{
TestSupplyTextEvent("ErrorFrame occurred!");
}
testcase WaitForAllEvent()
{
const dword waitDuration = 10000; // [ms]
long eventHandle1, eventHandle2;
int64 eventTime1 , eventTime2 ;
long res;
eventHandle1 = TestJoinMessageEvent(100);
eventHandle2 = TestJoinTextEvent("ErrorFrame occurred!");
res = TestWaitForAllJoinedEvents(waitDuration);
if (res > 0) // all events ocurred, last one is stored in res
{
write("All expected events occured");
}
else
{
if (testGetJoinedEventOccured(eventHandle1, eventTime1) == 1)
{
write("Received 100 message at %I64d", eventTime1);
}
else
{
write("Not Received 100 message ");
}
if (testGetJoinedEventOccured(eventHandle2, eventTime2) == 1)
{
write("Errorframe occured at %I64d", eventTime2);
}
else
{
write("No Errorframe");
}
}
}
void MainTest ()
{
WaitForAllEvent();
}



testcase WaitForAnyEvent()
{
const dword waitDuration = 10000; // [ms]
long eventHandle1, eventHandle2;
int64 eventTime1 , eventTime2 ;
long res;
TestCaseTitle("Demo","WaitForAnyJoinedEvents");
eventHandle1 = TestJoinMessageEvent(100);
eventHandle2 = TestJoinTextEvent("ErrorFrame occurred!");
write("eventHandle1:%d",eventHandle1);
write("eventHandle2:%d",eventHandle2);
res = TestWaitForAnyJoinedEvent (waitDuration);
if (res > 0)
{
if (res == eventHandle1)
{
res = testGetJoinedEventOccured(res, eventTime1);
write("Received 100 message at %I64d", eventTime1);
}
if (res == eventHandle2)
{
res = testGetJoinedEventOccured(res, eventTime2);
write("Errorframe occured at %I64d", eventTime2);
}
}
else
{
write("No one event occured.");
}
}
void MainTest ()
{
//WaitForAllEvent();
WaitForAnyEvent();
}
按下任何按键’a‘,触发一个事件,打印结果




- 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。