CAPL函数 Test Node中注册事件(TestJoin xxx)函数
Posted 蚂蚁小兵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CAPL函数 Test Node中注册事件(TestJoin xxx)函数相关的知识,希望对你有一定的参考价值。
- 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对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
目录
📙 CAN总线几个代表性注册事件函数
🍅 注册CAN报文事件(TestJoinMessageEvent )
🍅 注册环境变量事件(TestJoinEnvVarEvent)
- 这里help中特意强调,如果在等待环境变量改变的等待指令之前改变了环境变量的值,那么TestWaitForAnyJoinedEvent 函数立即生效
putValue (evMyEnvVar, 1);
TestJoinEnvVarEvent (evMyEnvVar);
TestWaitForAnyJoinedEvent (1000); // Does not wait, is immediately discontinued by an environment variable change!
🍅 注册系统变量事件(TestJoinSysVarEvent)
🍅 注册Symbols 值匹配事件(TestJoinSignalMatch)
- 这个函数的名字虽然是SIgnal ,但是不只是SIgnals,也可以用来表示系统变量和环境变量
🍅 注册期望文本事件(TestJoinTextEvent)
- 可以使用TestSupplyTextEvent函数,来触发文本事件
📙 等待注册事件的发生
🍅 所有已注册的事件全部发生(TestWaitForAllJoinedEvents)
- 只要调用过此函数,先前注册事件,就会被清空,无论测试结果如何
🍅 所有已注册的事件发生了任何一个(TestWaitForAllJoinedEvents)
- 只要调用过此函数,先前注册事件,就会被清空,无论测试结果如何
🍅 返回触发事件时的时间戳(testGetJoinedEventOccured)
- 只要调用过此函数,先前注册事件,就会被清空,无论测试结果如何
📙 测试脚本
🍅 所有已注册的事件全部发生(TestWaitForAllJoinedEvents)
- 这里注册了两个事件:等待100报文出现 和 等待 “ErrorFrame occurred!”文本出现
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();
- 不按下任何按键,打印结果
- 只按下任何按键’a‘,只触发了一个事件,打印结果
- 按下任何按键’a‘和’b‘,触发全部,打印结果
🍅 所有已注册的事件发生了任何一个(TestWaitForAllJoinedEvents)
- 只要调用过此函数,先前注册事件,就会被清空,无论测试结果如何
- 这里注册了两个事件:等待100报文出现 和 等待 “ErrorFrame occurred!”文本出现
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‘,触发一个事件,打印结果
🌎总结
- 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
以上是关于CAPL函数 Test Node中注册事件(TestJoin xxx)函数的主要内容,如果未能解决你的问题,请参考以下文章
CAPL函数 Test Node中TestWait xxx 常用函数
CAPL函数 Test Node中TestWait xxx 常用函数
CAPL函数Test Node中,关闭总线,关闭节点,停发报文应该怎么做?
CAPL函数Test Node中,关闭总线,关闭节点,停发报文应该怎么做?