CAPL函数 Test Node中TestWait xxx 常用函数

Posted 蚂蚁小兵

tags:

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


📘前言

  • 🍅 在Test Node中节点中,CAPL有很多事件等待的内置函数,这篇文章以CAN总线为例,总结下常用函数

  • 🍅 演示软硬件环境 Windows11 x64CANoe 11 SP2 x64

目录


📙 延时等待(TestWaitForTimeout )

1️⃣ CAPL脚本中,实现等待,是通过TestWaitForTimeout 这个函数实现的

  • 注意,这个函数无法在simulation node CAPL中使用的
  • 注意参数不要等于0,等于0就无限挂起了


2️⃣ 一段行代码,关闭Engine节点

/*@!Encoding:936*/

testcase ContrloNode(char node[])

    testSetEcuOffline(node);


void MainTest ()

  ContrloNode("Engine");




3️⃣ 运行结果,Engine节点的报文都停发了

📙 等待symbols(信号,系统变量,环境变量)

  • 等待symbols值匹配用TestWaitForSignalMatch 函数

  • 这个函数可以适用于信号,系统变量和环境变量

  • 如果信号值和你等待的值一样,那么函数没有等待立刻返回

  • 如果变量是数组的话,不接受int/float类型


🍅 信号示例

  • 简化代码如下,项目应用可以再丰富:
testcase TestWaitSymbols_signal (Signal * Name)

  long result;
  result = TestWaitForSignalMatch(Name, 80, 100000);
  if(result==1)
    testStepPass("", "xxxx passed");
  else
     TestStepFail("", "xxxx failed"); 
  



void MainTest ()


   //TestWaitUser_1();
   //TestWaitUser_2();
  TestWaitSymbols_signal(EngineSpeed);
  


  • 简单测试下结果

🍅 系统变量示例

  • 简化代码如下,项目应用可以再丰富:
testcase TestWaitSymbols_sysvar ()

  long result;
  result = TestWaitForSignalMatch(sysvar::Engine::EngineSpeedDspMeter, 80, 100000);
  if(result==1)
    testStepPass("", "xxxx passed");
  else
     TestStepFail("", "xxxx failed"); 
  


void MainTest ()


   //TestWaitUser_1();
   //TestWaitUser_2();
  //TestWaitSymbols_signal(EngineSpeed);
   TestWaitSymbols_sysvar();



  • 简单测试下结果

🍅 环境变量示例

  • 简化代码如下,项目应用可以再丰富:
testcase TestWaitSymbols_Var ()

  long result;
  //result = TestWaitForSignalMatch(sysvar::Engine::EngineSpeedDspMeter, 80, 100000);
   result = TestWaitForSignalMatch(en_bmw_test, 1, 100000);
  if(result==1)
    testStepPass("", "xxxx passed");
  else
     TestStepFail("", "xxxx failed"); 



void MainTest ()


   //TestWaitUser_1();
   //TestWaitUser_2();
  //TestWaitSymbols_signal(EngineSpeed);
   TestWaitSymbols_Var();



  • 简单测试下结果

📙等待报文(TestWaitForMessage)

  • 针对CAN 报文,其它总线,可以查找类似函数
  • 可以传参message类型或者Dword类型
  • 可以 不传参数报文,收到任何一帧报文就输出


2️⃣ 简单代码

testcase TestWaitMessage (dword can_id) 

  long result;
  //result = TestWaitForSignalMatch(sysvar::Engine::EngineSpeedDspMeter, 80, 100000);
   result = TestWaitForMessage(can_id, 100000);
  if(result==1)
    write("received");
  else
    write("not received");



void MainTest ()


   //TestWaitUser_1();
   //TestWaitUser_2();
   //TestWaitSymbols_signal(EngineSpeed);
   // TestWaitSymbols_Var();
    TestWaitMessage(0x123);



📙等待文本出现(TestWaitForTextEvent )

  • 这个函数非常好用,它可以让我们自定义触发事件,
  • 这个函数和 TestSupplyTextEvent 函数配合使用


2️⃣ 简单代码,可以通过案件’a’来实现事件触发

on key 'a'

  TestSupplyTextEvent("test string");




testcase TestWaitTextEvent  (char aText[], dword aTimeout) 

  long result;
  result = TestWaitForTextEvent(aText, aTimeout);
  if(result==1)
    write("received");
  else
    write("not received");



void MainTest ()


   //TestWaitUser_1();
   //TestWaitUser_2();
   //TestWaitSymbols_signal(EngineSpeed);
   // TestWaitSymbols_Var();
   // TestWaitMessage(0x123);
     TestWaitTextEvent("test string",10000);


📙等待诊断响应

  • TestWaitForDiagRequestSent:等待诊断发送完毕
  • TestWaitForDiagResponse:等待诊断响应完毕


2️⃣ 简单代码,可以通过案件’a’来实现事件触发

  • 下面代码是基于simulation 工程,所以没有ECU做出response
  • 常规诊断大致就这样发,根据具体情况,再封装成函数就比较通用了


testcase TestWaitDiag  () 

  DiagRequest Door.DefaultSession_Start req;
  long result;

  req.SendRequest();
  // waits until request is completely sent
  if (TestWaitForDiagRequestSent(req, 100)== 1)
  
     TestStepPass("Request was sent successfully!");   
      if (TestWaitForDiagResponse(req, 1000)== 1)
         TestStepPass("Response was Received successfully!");   
       else
          TestStepFail("Response was not Received");
  

  else
    TestStepFail("Request could not be sent!");



void MainTest ()


   //TestWaitUser_1();
   //TestWaitUser_2();
   //TestWaitSymbols_signal(EngineSpeed);
   // TestWaitSymbols_Var();
   // TestWaitMessage(0x123);
    // TestWaitTextEvent("test string",10000);
  TestWaitDiag();




📙等待用户输入

  • TestWaitForStringInput
  • TestWaitForValueInput
  • TestWaitForTesterConfirmation
  • 因为这三个函数会弹出对话框,需要认为干预,自动化程度高的测试平台,我们一般不用

🍅 等待用户输入字符串(TestWaitForStringInput )

  • 等待用户输入字符串,并可以用TestGetStringInput函数去获取输入的字符串


2️⃣ 这里我们简单选个form 2 来测试下

testcase TestWaitUserDoSomething()

  char resultStr[100];
  if (1== TestWaitForStringInput("Please enter your name", 20000))
  
     TestGetStringInput(resultStr, 100);
     Write("name = %s", resultStr);
  


void MainTest ()


  TestWaitUserDoSomething();




🍅 等待用户输入数字或字符串(TestWaitForValueInput )

  • 可以输入十进制或者16进制数字,但只能数数字
  • 读取的时候可以用 TestGetValueInput 函数读取,输出用%f;也可以用TestGetStringInput 函数去读取,作为字符串格式


testcase TestWaitUse_2 ()

  char resultStr[100];
  if (1== TestWaitForValueInput ("Please enter your ID", 20000))
  
    Write("Test ID = %.f", TestGetValueInput());
    TestGetStringInput(resultStr, 100);
    Write("Test ID = %s", resultStr);
  
  


void MainTest ()


   //TestWaitUse_1();
   TestWaitUse_2();


🌎总结

  • 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!

  • 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。

以上是关于CAPL函数 Test Node中TestWait xxx 常用函数的主要内容,如果未能解决你的问题,请参考以下文章

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

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

CAPL函数Test Node中,关闭总线,关闭节点,停发报文应该怎么做?

CAPL函数Test Node中,关闭总线,关闭节点,停发报文应该怎么做?

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

XML调用 CAPL Test Function