在上期的文章(vTESTstudio系列11--vTESTstudio中的动态函数库介绍1)中,我们详细介绍了osek_tp.dll的接口,本章开始给大家介绍如何通过osek_tp.dll的接口去发送诊断指令,Let‘s Go!!!
目录
1. CanTp发送数据的函数:
1.1 CanTpSetTxIdentifier的介绍:
1.2 CanTpSendData的介绍:
2. 自定义CanTp的发送函数:
2.1 初始化CANTP的函数:
2.2 诊断请求函数:
2.3 编辑测试用例:
2.4 测试结果:
1. CanTp发送数据的函数:
1.1 CanTpSetTxIdentifier的介绍:
CanTpSetTxIdentifier函数的功能是设置诊断请求的报文ID,入参有两个,一个是CanTpCreateConnection的返回值,另一个是需要输入的诊断请求报文的ID。
1.2 CanTpSendData的介绍:
CanTpSendData函数的功能是发送诊断请求的实际数据和实际长度。
2. 自定义CanTp的发送函数:
为了方便后续的脚本开发,我们先将一些公用的变量设置成global变量去定义,如下所示:
variables
{
byte crc_temp;
byte crc_value;
//for Diagnostic test parameter
long handle_xml;
int g_rxId = 0x691;
int g_txId_PhysicalAddr = 0x791;
int g_txId_FunctionalAddr = 0x7FF;
byte RequestData[8194];
byte ResponseData[8194];
}
2.1 初始化CANTP的函数:
首先我们需要定义一个初始化配置CANTPHandle的函数,如下代码所示:
void InitializeCanTpHandle()
{
CanTpCloseConnection(handle_xml);
handle_xml = CanTpCreateConnection(0);
CanTpSetRxIdentifier(handle_xml,g_rxId);
CanTpSetMaxCANFDFrameLength(handle_xml, 64);
CanTpSetBitRateSwitch(handle_xml, 1);
CanTpSetSTmin(handle_xml, 0x14);
CanTpSetBlockSize(handle_xml, 8);
}
可以发现上述代码其实就是在定义上篇文章中介绍的osek_tp.dll的接口.
2.2 诊断请求函数:
然后我们开始发送一个最简单的指令1001,我们这边写了一个简单的发送诊断请求的函数:
export testfunction SendDiagRequest()
{
//initial
RequestData[0] = 0x10;
RequestData[1] = 0x01;
InitializeCanTpHandle();
CanTpSetTxIdentifier(handle_xml,g_txId_PhysicalAddr);
CanTpSendData(handle_xml,RequestData,2);
testStepPass("INFO","Diagnostic Request send successfully!!!");
}
上述代码我们强制将RequestData数组的前两个数值分别设置成0x10,0x01;
然后设置用物理寻址去发送诊断请求;
通过CanTpSendData这个函数将诊断数据发送出去;
最后在测试报告中添加发送诊断请求成功的提示信息。
2.3 编辑测试用例:
我们在vTESTStudio中简单定义了一个测试用例,然后将我们定义的函数添加进去,编译生成测试用例:
2.4 测试结果:
将生成的Test.vtuexe加载到CANoe工程中去执行测试脚本。
测试报告如下:
可以发现我们在函数中添加发送诊断请求成功的提示信息在测试报告中得到了体现,也表明1001这个诊断请求发送出去了,然后我们在CANoe的Trace窗口去实际检查一下诊断报文:
可以发现Trace窗口能够看到ID为0x791的诊断请求报文,发送的内容就是1001,在时间戳上也可发现发送的诊断请求的时间与测试报告中的时间戳一致。
当然,我们也发现了发送完诊断请求后,ECU自动回复了这条诊断请求,那么如何处理这个诊断回复呢,我们下章开始介绍如何处理诊断回复,敬请期待!!!