CAPL函数 Test Node中注册事件(TestJoin xxx)函数

Posted 蚂蚁小兵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CAPL函数 Test Node中注册事件(TestJoin xxx)函数相关的知识,希望对你有一定的参考价值。


📘前言

  • 🍅 如果你看到这篇文章,我认为你应该先应该了解CAPL中,等待单个事件发生的相关内置函数:CAPL函数 Test Node中TestWait xxx 常用函数因为本次会以CAN总线为例,通过你个TestJoin内置函数来说下,注册多个事件,然后再等待多个事件发生的测试场景

  • 🍅 我们知道CAPL是基于事件驱动的逻辑,我们可以通过on message ,on siganl 。。。等等监控到事件的触发,我们在simulation node节点中常常这样做;但是在Test Node节点中,我们CAPL脚本就不易再这样做了,我们可以通过CAPL自动的一些注册事件的函数,来监控期望事件的发生

  • 🍅 演示软硬件环境 Windows11 x64CANoe 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中,关闭总线,关闭节点,停发报文应该怎么做?

除了定时器,真的没法在Simulation Node 类型的CAPL节点中实现延时了吗?

node 事件监听器