CAPL 中诊断相关API(一)

发布于:2023-01-22 ⋅ 阅读:(392) ⋅ 点赞:(0)


定义诊断请求或响应

diagRequest ECU.funcA request_name		//定义请求
diagResponse ECU.funcA response_name		//定义响应

ECU:诊断目标节点

在CANoe中设置ECU
Step 1:
在这里插入图片描述
Step 2:
在这里插入图片描述
Step 3:
添加CDD文件,设置诊断目标ECU

在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[])

该函数在我电脑上无法调用成功。。。不知道什么原因,日后在研究研究


网站公告

今日签到

点亮在社区的每一天
去签到