当前位置: 首页> 房产> 建筑 > vTESTstudio系列13--vTESTstudio中的动态函数库介绍3

vTESTstudio系列13--vTESTstudio中的动态函数库介绍3

时间:2025/8/13 15:29:33来源:https://blog.csdn.net/qq_41602272/article/details/141724331 浏览次数:0次

在上一篇文章中(vTESTstudio系列12--vTESTstudio中的动态函数库介绍2),给大家介绍了如何通过osek_tp.dll的接口去发送诊断指令,本篇文章给大家介绍如何去处理诊断回复内容,确保实际的诊断回复是符合需求。Let's Go!!!

目录

1. CanTp接收数据的函数:

1.1 CanTp_ReceptionInd函数的介绍:

1.2 TestSupplyTextEvent函数的介绍:

1.3 TestWaitForTextEvent函数的介绍:

2.自定义CanTp的接收函数:

2.1 更新CanTp_ReceptionInd函数:

2.2 诊断回复函数:

2.3 编辑测试用例并执行测试:

2.4 有趣之处:


1. CanTp接收数据的函数:

1.1 CanTp_ReceptionInd函数的介绍:

CanTp_ReceptionInd这个函数的功能是通过建立CANTP连接的handle,当收到这个连接的数据时,这个函数就会被自动执行,同时将收到的数据存到data这个数组里面。

使用时我们可以直接使用上述图片的案例放到我们的编辑脚本中:

void CanTp_ReceptionInd( long connHandle, byte data[])
{write( "Received %d byte on connection %d: [%02x] ..." , elcount( data), connHandle, data[0]);
}

1.2 TestSupplyTextEvent函数的介绍:

TestSupplyTextEvent函数的功能发出指定事件的信号,如上述案例中的错误帧事件信号("ErrorFrame occurred!"),这个文本文档是可以自己定义的。

1.3 TestWaitForTextEvent函数的介绍:

TestWaitForTextEvent函数的功能等待来自单个测试模块的指定文本事件的信号。同时,来自另一个测试模块的信号不会影响此等待指令。如果此事件未在aTimeout时间到期之前发生,则等待条件仍将得到解决,这个时候,该函数的返回值不等于1!!!

2.自定义CanTp的接收函数:

2.1 更新CanTp_ReceptionInd函数:

上述的代码可以看出,接收的诊断数据都放在了data的缓存区数组中,不利于我们做诊断回复的处理,我们在上篇文章的第2章节定义了许多变量,其中就有一个接收数据的数组byte ResponseData[8194];同时我们还要再定义一个golbal变量ResponseLength

variables
{byte crc_temp;byte crc_value; //for Diagnostic test parameterlong handle_xml;int g_rxId = 0x691;int g_txId_PhysicalAddr = 0x791;int g_txId_FunctionalAddr = 0x7FF;byte RequestData[8194];byte ResponseData[8194];long ResponseLength = 0;
}

然后我们再对上述的CanTp_ReceptionInd函数做一些处理:

void CanTp_ReceptionInd(long connHandle, byte data[])
{int i = 0;for(i = 0; i<elcount(data); i++){ ResponseData[i] = data[i];}ResponseLength = elcount(data);TestSupplyTextEvent("TpMsgReceived");
}

2.2 诊断回复函数:

做完上述的预处理之后,我们开始编辑我们自定义的诊断回复函数:

export testfunction ReceiveDiagResponse()
{byte ExpectedResponse[8194] = {0x50,0x01,0x00,0x32,0x01,0xF4};long i =0;long result;result = TestWaitForTextEvent("TpMsgReceived", 5000);if(result ==1){for (i = 0; i <= ResponseLength; i++){if (ResponseData[i] == ExpectedResponse[i]){testStepPass("INFO","Diagnostic Response Data[%d] 0x%2x is equal to Expected Respsonse[%d] 0x%2x",i,ResponseData[i],i,ExpectedResponse[i]);}else{testStepFail("INFO","Diagnostic Response Data[%d] 0x%2x is not equal to Expected Respsonse[%d] 0x%2x Please Check!!!",i,ResponseData[i],i,ExpectedResponse[i]);}}}}

上述代码中,我们在2.1中的CanTp_ReceptionInd接收完诊断回复后,向Test Module发送“TpMsgReceived”的文本,然后在自定义的诊断回复函数中去check这个“TpMsgReceived”的文本,当TestWaitForTextEvent的返回值为1时,表明所有的诊断回复数据都被接收到,这个时候我们开始处理这个诊断回复,将它与我们的期望结果一个byte一个byte的去比较,一致就pass,不一致就fail。

2.3 编辑测试用例并执行测试:

测试结果如下所示:

我们可以发现每个byte的数据都是对比一致的,我们再更改一个byte数据使得测试不通过:

可以发现Byte[4]的数据不一致,报告中也是红色的fail。

2.4 有趣之处:

当我把上述代码中的TestSupplyTextEvent和TestWaitForTextEvent两个函数注释掉,然后去重新执行测试脚本,报告如下:

有兴趣的朋友可以评论一下为什么会报错。

关键字:vTESTstudio系列13--vTESTstudio中的动态函数库介绍3

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: