Project

General

Profile

Actions

Support Request #6259

closed

Read out wrong size of CAN data

Added by hidden about 5 years ago. Updated about 5 years ago.

Status:
Closed
Priority:
Normal
Customer:
AUDI
Department:
TKI
Requester's Priority:
Normal
Support Level:
2nd Level
Resolution:
Solved Issue
Product Issue Numbers:
Platform:
Windows 10 64bit
Topic:
StreamingLib::Reader
FAQ Links:

Description

Hallo,

ich möchte gern mit adtf-streaming lib flexray und Can Daten aus .dat lesen.

Bei der benutzung des Beispiels candump.dat auf dem Trace erzeugt vom Beispiel canwritter, habe ich die can Daten mit ID und 8 bytes richtig bekommen.

Aber beim Traces von ADTF bekomme ich CAN Daten mit mehr als 8 Bytes, und ID passen auch nicht?? pCanMessage->ui8Length (siehe code unter) ist oft mehr als 32 bytes

if (pDataBlock->GetStreamId() == nCanStream)
{
    nMessageCounter++;

    //get the time the block was received as a sample
    tTimeStamp tsReceived = pDataBlock->GetTime();

    //get data from datablock
    tCanMessage *pCanMessage = NULL;

    //get data from block
    pDataBlock->GetData((const tVoid**)&pCanMessage);

    //show can message
    cout << "#" << nMessageCounter << " -- " << tsReceived << " : C" << (int)pCanMessage->ui8Channel << " ID=" << hex << pCanMessage->ui16Id << dec << "[";

    for (int nCounter = 0; nCounter < pCanMessage->ui8Length; nCounter++)
    {
        cout << " " << hex << (int)pCanMessage->pui8Data[nCounter] << dec;
    }

    cout << "]" << endl;
}

Lösung

Ich denke du verwendest die falsche Datenstruktur. In ADTF wird schon lange nicht mehr tCanMessage verwendet sondern tCANData, die ist in der Streaming Library als tADTFCANData verfügbar. Welche CAN Struktur im Sample enthalten ist kannst du über die Größe der Daten ermitteln:

const tVoid* pBlockData;
tInt64 nBlockSize = pDataBlock->GetData(&pBlockData);

if (nBlockSize == sizeof(tADTFCANData))
{
    const tADTFCANData* pCanData = reinterpret_cast<const tADTFCANData*>(pBlockData);
    ...
}
else if (nBlockSize == sizeof(tCANMessage))
{
    const tCANMessage* pCanMessage = reinterpret_cast<const tCANMessage*>(pBlockData);
    ...
}
...

Files

can_trace.dat (3.95 MB) can_trace.dat trace hidden, 2019-02-22 10:05
adtf_streaming_can.JPG (322 KB) adtf_streaming_can.JPG screenshot hidden, 2019-02-22 10:07
Actions #1

Updated by hidden about 5 years ago

  • Project changed from Public Support to 11
  • Status changed from New to In Progress
  • Topic set to StreamingLib::Reader
Actions #2

Updated by hidden about 5 years ago

  • Status changed from In Progress to Customer Feedback Required

Hallo Cedric,

kann es sein, dass es sich nicht um CAN, sondern CAN-FD Daten handelt, wenn du mehr Bytes bekommst ?
Was sagen die Traces in ADTF ?
Hast du eine Beispiel-Datei und dazu passende DBC für uns ?

CAN-FD wird so nicht in ADTF 2.x (und damit Streaming Library) unterstützt.

Actions #3

Updated by hidden about 5 years ago

Hallo Florian,

danke für die schnelle Anwort.

Ich kann dir eine dummy trace mit 2 Channele schicken, wo ich sicher bin, dass es kein FD Daten gibt. Mit ADTF kann ich die Signale lesen.
Screenshot von den Ergebnissen habe ich auch angehängt.
dbc wäre KonfortCan von Audi. Ich darf nicht weiter schicken.

Vielen Dank

Actions #4

Updated by hidden about 5 years ago

Hallo Florian,

konntest du was anfangen, mit was ich dir geschickt (trace + screenshot) habe?

Dnake,
Grüße,
Cédric

Actions #5

Updated by hidden about 5 years ago

  • Description updated (diff)
Actions #6

Updated by hidden about 5 years ago

  • Status changed from Customer Feedback Required to In Progress

@Martin: Hast du noch eine Idee ? Schneidet der Trace View ggf. nach 8 Byte ab und es sind doch CAN FD Daten ?
Oder berücksichtigt der Trace View ggf. ein "New Line" (die CAN Nutzdaten an sich können ja länger sein als 8 Byte, müssen dann eben immer aufgeteilt werden)

Actions #7

Updated by hidden about 5 years ago

Hi Cedric,

ich denke du verwendest die falsche Datenstruktur. In ADTF wird schon lange nicht mehr tCanMessage verwendet sondern tCANData, die ist in der Streaming Library als tADTFCANData verfügbar. Welche CAN Struktur im Sample enthalten ist kannst du über die Größe der Daten ermitteln:

const tVoid* pBlockData;
tInt64 nBlockSize = pDataBlock->GetData(&pBlockData);

if (nBlockSize == sizeof(tADTFCANData))
{
    const tADTFCANData* pCanData = reinterpret_cast<const tADTFCANData*>(pBlockData);
    ...
}
else if (nBlockSize == sizeof(tCANMessage))
{
    const tCANMessage* pCanMessage = reinterpret_cast<const tCANMessage*>(pBlockData);
    ...
}
...

Grüße,

Martin

Actions #9

Updated by hidden about 5 years ago

Hallo Martin, Florian,

danke für die Antwort. Ich habe die Canstruct.h benutzt vom Beispiel (candump, canwriter). Ich probiere mit tADTFCANData, und gebe Rückmeldung.

Grüße,
Cédric

Actions #10

Updated by hidden about 5 years ago

Hallo zusammen,

ich bekomme jetzt meine 8 bytes. Es funktionniert.

noch eine Frage dazu, um das gleiche zu machen mit Flexray Daten welche typ muss ich benutzen? Im adtf_streaminglib_types gibt es kein Flexraydatatype. kann ich einfach
den flexray_frame.h file vom ADTF-device-toolbox nehmen?

Danke
Grüße,
Cédric

Actions #11

Updated by hidden about 5 years ago

  • Status changed from In Progress to To Be Closed
  • Resolution set to Solved Issue
  • Affected Products ADTF Streaming Library 2.9.0 added
  • Platform Windows 10 64bit added

Hi,

ja das geht.

Grüße,

Martin

Actions #12

Updated by hidden about 5 years ago

danke,
der Ticket kann geschlossen werden.

Grüße,
Cédric

Actions #13

Updated by hidden about 5 years ago

  • Project changed from 11 to Public Support
  • Subject changed from adtf-streaming can/flexray lesen to Read out wrong size of CAN data
  • Description updated (diff)
  • Private changed from Yes to No
Actions #14

Updated by hidden about 5 years ago

  • Status changed from To Be Closed to Closed
Actions

Also available in: Atom PDF