mikrocontroller.net

Forum: PC-Programmierung Daten aus Response Nachricht auswerten CAPL CANoe (11)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich sende in CAPL Diagnose Nachrichten und möchte die Antworten dann 
auswerten.
/////////////////////////////////////////////////////////////
// ReadEcuIdentification: IdCode                           //
// expected positive response with defined IdCode          //
/////////////////////////////////////////////////////////////
testcase Testcase_ReadEcuIdentification_IdCode()
{
  DiagRequest KLineTester.IDCode req;
  DiagResponse KLineTester.IDCode resp;
  char buffer[100];
  long ret, ret2, ret3, ret4, ret5;
  byte idCode[62];
  byte counter;
  char step[5] = "1.0";
  
  testStep(0, step, "Read Ecu Identification: IdCode"); // Write the current teststep to the testreport
  
  diagGetObjectName(req, buffer, elCount(buffer)); // Get the name of the diagnostic object
  DiagSendRequest(req);
  ret = testWaitForDiagRequestSent(req, 2000); // Wait until the request has been completely sent
  
  if(ret==1) // Request sent
  {
     TestReportWriteDiagObject(req); // Write the request-Object to the testreport
     write("Request has been successfully sent");
     ret2=TestWaitForDiagResponse(req, 5000); // Wait for a response, here for 5000ms. Note: This is no P2 timeout!
        
     if(ret2==1) // Response received
     {
        ret3=DiagGetLastResponse(req,resp); // Get the receveived response
        if(ret3>=0)
        {
           if(diagIsPositiveResponse(resp)) // Is it a positive response?
           {
             DiagGetParameterRaw(resp, "IdCode", idCode, elCount(idCode));  // Retrieve the serial number from the response in raw format
             write("Current IdCode is:");
             for(counter=0; counter<elCount(idCode); counter++)
             {
              write(" 0x%02X", idCode[counter]);
             }
             TestReportWriteDiagObject(resp); // Write the response-Object to the testreport
             ret5 = memcmp(REI_ID_CODE, idCode, elCount(idCode)); // compare received IdCode with the expected IdCode
             if(ret5 == 0) // received IdCode and expected IdCode are same
             {
               testStepPass(0, step, "IdCode has been successfully read"); // teststep accomplished
             }
             else
             {
               testStepFail(0, step, "The received IdCode does not match with the expected IdCode"); // teststep failed
             }
           }
           else // It is a negative Response
           {
             ret4=diagGetResponseCode(resp);
             write("Negative Response, NRC: 0x%02X",(byte)ret4);
             TestReportWriteDiagObject(resp); // Write the response-Object to the testreport
             testStepFail(0, step, "Negative Response. NRC: 0x%02X",(byte)ret4); // teststep failed
           }
        }
        else
        {
          write("Could not retrieve response");
          testStepFail(0, step, "Could not retrieve response"); 
        }
     }
    
     if(ret2==0) // Timeout. No response received
     {
        write("Timeout specified in TestWaitForDiagResponse expired");
        testStepFail(0, step, "Timeout specified in TestWaitForDiagResponse expired");
     }
     if(ret2<0) // Error e.g. transport protocol level
     {
        if(ret2==-92) // This is the error code for P2 or P2* timeouts
        {
          write("TP level error %d, probably P2 or P2* timeout", ret2); 
          testStepFail(0, step, "TP level error %d, probably P2 or P2* timeout", ret2);
        }
        else
        {
          write("Error %d in the diagnostic or transport layer", ret2); 
          testStepFail(0, step, "Error %d in the diagnostic or transport layer", ret2);
        }
     }          
   }
   else
   {
      if(ret==0)
      {
        write("Timeout expired while trying to send request %s", buffer);
        testStepFail(0, step, "Timeout expired while trying to send request %s", buffer);
      }
      if(ret<0)
      {
        write("Internal error %d occured while trying to send request %s", ret, buffer);
        testStepFail(0, step, "Internal error %d occured while trying to send request %s", ret, buffer);
      }
   }      
}

mein Problem liegt bei der Auswertung der empfangenen Nachricht
DiagGetParameterRaw(resp, "IdCode", idCode, elCount(idCode)); // Retrieve the serial number from the response in raw format
write("Current IdCode is:");
for(counter=0; counter<elCount(idCode); counter++)
{
  write(" 0x%02X", idCode[counter]);
}
Hier bekomme ich einen Array, der mit 0x00 gefüllt ist. Im Trace sehe 
ich aber, dass Daten vorhanden sind.
Mein Problem ist, dass ich nicht genau weiß was diese Funktion im Detail 
macht.

In der Hilfe steht
long diagGetParameterRaw (diagResponse obj, char parameterName[], byte* buffer, DWORD buffersize)

was genau ist der parameterName?
In der Hilfe steht nur
parameterName: Parameter qualifier
Damit kann ich aber leider nicht so viel anfangen.

Oder kann ich irgendwie anders an die Daten kommen?

Autor: Erfahrener Entwickler (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Der Code ist ja eine Katastrophe!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.