首页 文章

如何通过CAPL脚本发送诊断ID(DID)?

提问于
浏览
0

目前,我正在自动化用于测试仪器群中仪表的测试用例 . 我遇到过通过DID将单位从公制更改为美国 . 任何人都可以帮助我使用CAPL脚本发送诊断相关的东西 .

4 回答

  • 1

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

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

  • 0

    如果你有一个诊断库加载到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;
    }
    
  • 1

    长DiagSendRequest(diagRequest obj)

  • 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);
    }
    

相关问题