CAPL函数 Test Node中TestWait xxx 常用函数
Posted 蚂蚁小兵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CAPL函数 Test Node中TestWait xxx 常用函数相关的知识,希望对你有一定的参考价值。
- 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用
- 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】
- 🍅 玩转CANoe,博客目录大全,点击跳转👉
📘前言
-
🍅 在Test Node中节点中,CAPL有很多事件等待的内置函数,这篇文章以CAN总线为例,总结下常用函数
-
🍅 演示软硬件环境
Windows11 x64
;CANoe 11 SP2 x64
目录
- 📘前言
- 📙 延时等待(TestWaitForTimeout )
- 📙 等待symbols(信号,系统变量,环境变量)
- 📙等待报文(TestWaitForMessage)
- 📙等待文本出现(TestWaitForTextEvent )
- 📙等待诊断响应
- 📙等待用户输入
- 🌎总结
📙 延时等待(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中,关闭总线,关闭节点,停发报文应该怎么做?