0

目前,我正在自动化测试用例以测试仪表组中的仪表。我遇到过通过 DID 将单位从公制更改为美制的情况。任何人都可以帮助我如何使用 CAPL 脚本发送与诊断相关的内容。

4

4 回答 4

1

试试这个可能是使用SendDiagRequest(reqobj);

==================================================== ==============

  1. 在矢量独木舟中添加相应的 CDD 文件
  2. 在独木舟设置中设置目标 ECU
  3. 您必须定义每个字节值的服务内容,可以在 CAN 跟踪中获取这些值
  4. 在 CAPL 中创建服务对象并使用 SendDiagRequest(reqobj) 发送它;
于 2016-09-28T07:02:22.400 回答
1

如果您将诊断库加载到 CANoe(CDD/ODX/PDX 等)中,那么它通常会定义传输协议,该协议会将您的 Tx 和 Rx 分段,它们的长度超过 8 个字节。

你的帖子说你正在自动化你的测试用例。这在 CANoe 的测试模块中做得最好。如果您加载了 CDD,您可以将 DID 从 CAPL 浏览器符号窗格(通过诊断过滤)拖到 CAPL 中,例如在 diagRequest 之后拖拽“DID_01_ReadInfo”。

long size;
byte returnBytes[4096];
diagRequest  DID_01_ReadInfo  readInfoReq;   // diag request object
diagResponse DID_01_ReadInfo  readInfoResp;  // diag reponse object

diagSendRequest(readInfoReq); 

switch (testWaitForDiagResponse(readInfoReq, 2000)) // 2 sec timeout
{
  case 0: // timeout
          teststepfail("No reply from ECU");
          break;

  case 1: // response received

          if (diaggetLastResponseCode(readInfoReq) == -1) 
          { 
            teststepPass("Positive Response");

            // Get the number of bytes from the last response and store in 'returnBytes'
            diagGetLastResponse(readInfoReq, readInfoResp);
            size = diagGetPrimitiveData(readInfoResp, returnBytes, elCount(returnBytes));   
          }
          else 
          {
            teststepfail("Negative Response");
          }
          break;
}
于 2017-12-21T17:00:23.853 回答
0

像这样的东西可以做到:

fControlMessage(message 0x496 mystream)
{
    if (0x10 == mystream.byte(0) && Abfrage == 1) //First Frame von ISO_Lenkhilfe_Resp, erstes Byte auf 0x10 überprüfen
    {
       msDiag_FlowControl.byte(0) = 0x30; // Flow Control 
       msDiag_FlowControl.byte(1) = 0x0F; // Block Size ist 15
       msDiag_FlowControl.byte(2) = 0x00; // 20ms Abstand bei aufeinanderfolgenden Frame
       RequestLenght = mystream.byte(1);  // Gibt die Länge(Anzahl) der Datenbytes an
       RequestLenght = RequestLenght - 6; // 6 Byte Nutzdaten abziehen

        Abfrage = 0;
       //write("Send first Flow Control");
       output(msDiag_FlowControl);
}
于 2018-07-26T12:24:46.877 回答
0

长 DiagSendRequest (diagRequest obj)

于 2016-09-30T07:22:38.803 回答