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

发布于:2023-01-18 ⋅ 阅读:(277) ⋅ 点赞:(0)

📘前言

  • 🍅 在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();
}

在这里插入图片描述

🌎总结

23

7

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

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

网站公告

今日签到

点亮在社区的每一天
去签到