CAPL 中诊断相关API(一)
定义诊断请求或响应
diagRequest ECU.funcA request_name //定义请求
diagResponse ECU.funcA response_name //定义响应
ECU:诊断目标节点
在CANoe中设置ECU
Step 1:
Step 2:
Step 3:
在CAPL程序中定义时应与CANoe中的设置保持一致,如上图中设置为 Door
,则CAPL函数中也要使用 Door.*
diagRequest Door.funcA request_A
diagResponse Door.funcA response_A
发送诊断请求 & 接收诊断响应
1.发送
request_A.SendRequest();
2.接收
TestWaitForDiagResponse(request_A, 5000);
request_A::请求对象
5000:超时时间
配合 switch
使用,更方便点
switch( TestWaitForDiagResponse( idReq, 200))
{
case 0: // Timeout: The ECU did not respond within 200 ms.
write("No answer from ECU!");
TestStepFail("Read ID", "No answer from ECU!");
break;
case 1: // response received
TestReportWriteDiagResponse(idReq); // write response to report
if( diagGetLastResponseCode(idReq) == -1)
{
// A positive response was received
write("ECU Diagnostics Identification: %d", (long)diagGetRespParameter(idReq,"Diagnostic_Identification"));
TestStepPass("Read ID", "Positiv response received!");
}
else // A negative response was received
{
write( "ECU Diagnostics Identification failed: 0x%x", diagGetLastResponseCode( idReq));
TestStepFail("Read ID", "Negative response received");
}
break;
default: // internal or setup error
TestStepFail("Read ID", "Error in TestCase! Verdict unreliable.");
}
将诊断请求 / 响应写入报告
TestReportWriteDiagObject (diagRequest req);
TestReportWriteDiagObject (diagResponse resp);
TestReportWriteDiagResponse (diagRequest req);
获取最后一次诊断响应的代码
long diagGetResponseCode (diagResponse resp);
long diagGetLastResponseCode (diagRequest req);
long diagGetLastResponseCode ();
该函数可以用来区别响应是积极响应还是消极响应
获取诊断请求 / 响应的原始数据
long diagGetPrimitiveByte( diagRequest request, DWORD bytePos);
long diagGetPrimitiveByte( diagResponse response, DWORD bytePos);
bytePos:数据位置,从0开始
diagGetPrimitiveByte(request_A, 0);
Request_A.GetPrimitiveByte(0);
获取诊断请求 / 响应的参数名称
long diagGetParameterName (diagResponse obj, dword paramNo, char buffer[], dword buffersize)
long diagGetParameterName (diagRequest obj, dword paramNo, char buffer[], dword buffersize)
diagGetParameterName (request_A, 0, buffer, elCount(buffer));
request_A.GetParameterName(0, buffer, elCount(buffer));
获取诊断请求 / 响应的参数
long diagGetParameter (diagResponse obj, char parameterName[], double output[1])
long diagGetParameter (diagRequest obj, char parameterName[], double output [1])
double diagGetParameter (diagResponse obj, char parameterName[])
double DiagGetParameter (diagRequest obj, char parameterName[])
long diagGetParameter (diagResponse obj, long mode, char parameterName[], double output[1])
long DiagGetParameter (diagRequest obj, long mode, char parameterName[], double output [1])
double diagGetParameter (diagResponse obj, long mode, char parameterName[])
double diagGetParameter (diagRequest obj, long mode, char parameterName[])
该函数在我电脑上无法调用成功。。。不知道什么原因,日后在研究研究