完成诊断测试模块的基本配置后(例如,可以在MainTest函数中选择目标ECU),可以在测试模块内执行等待诊断事件
if(diagSetTarget("Door")!=0)//选择目标ECU{testStepFail("Diag configuration", "Error in selection of target ECU");return;}
测试用例中先发送诊断请求:
diagRequest Door.DefaultSession_Start kDiagReq;//定义诊断请求对象
diagSendRequest(kDiagReq);//发送诊断请求
诊断通信中,CAN总线由于网络层消息长度限制,对于诊断数据比较大的请求或响应,通常需要多帧(连续帧)才能发送完。从Tester发送诊断请求到ECU,到ECU接收到诊断请求后回复诊断响应,这个过程中所有的数据发送完毕,一次完整的诊断通信才算是完成。这个过程有时相当长时间
所以当Tester使用函数diagSendRequest(kDiagReq)发送诊断请求时,不能马上接收诊断响应。必须要确保诊断请求发送完毕,才能开始接收诊断响应
可以使用函数testWaitForDiagRequestSent()判断上一次的诊断请求是否发送完毕(防止诊断请求有连续帧的情况)
if(testWaitForDiagRequestSent(kDiagReq, 200)!=1)//判断诊断请求是否发送完毕
{if(testWaitForDiagRequestSent(kDiagReq, 2000)!=1)//又等待10倍时间{testStepFail("WaitDia