Project

General

Profile

Actions

Support Request #1985

closed

CAN Config Codec struct creation

Added by hidden about 6 years ago. Updated almost 6 years ago.

Status:
Closed
Priority:
Normal
Customer:
VW
Department:
CARMEQ
Requester's Priority:
Normal
Support Level:
2nd Level
Resolution:
Solved Issue
Product Issue Numbers:
Platform:
Windows 10 64bit
Topic:
DeviceTB::CAN
FAQ Links:

Description

Supportanfrage

Dear Sir or Madam,
I use the "CAN Config Codec Ext" from the package ADTF Device Toolbox 2.6.0 to convert CAN-Data to C-structs. An example struct looks like this:
struct B { int v; };
struct C { int v; };
struct A { B b; C c; };
I try to convert data to structure A, but some of my samples do not have the value "C". My goal is that nevertheless the structure "A" is created.
Can I somehow achieve this goal, e.g. by setting default values for "C" or by using other data types?

Lösung

Dazu musst du einen Trigger definieren oder mit einen Makro arbeiten, ansonsten wird das Sample erst generiert, wenn alle notwendigen Daten anliegen.
Die dazu das Usermanual der Device TB
  • Kap. 2 Config Codec—Signal Configurator (allgemein)
  • Kap. 2.9.4 Triggers
  • Kap. 2.10 Description of built in Macros

Variante 1: Verwendung eines Triggers
In der Anleitung ist von einem optionalen Trigger die Rede.
Muss dieser beim CAN_Config_Codec_Ext aktiviert werden? Wenn ja, wie?

Im Signal Config Filter Editor (startbar via Kontextmenu/Rechtsklick) des CAN Config Codec Ext Filters.
Dort kannst du bei einem Pin neben Strukturen auch einen Trigger setzen.

Angenommen ich setze die Property „timeout“, wird dann nach der gesetzten Zeit das Objekt am Output generiert?

Ich habe mal versucht deine Struktur nachzubauen und haben einen Timeout von 1 (Sekunde) gesetzt:

Nun wird jede Sekunde die Struktur generiert und am Ausgangspin versendet.
Als Wert ist immer der zuletzt empfangene (also auf dem Busliegende) gesetzt.
In meinem Bsp. wird nur das Kombi Signal (also die Struktur B gesendet) jede Sekunde gesendet (Counter 1), ESP liegt nicht auf dem Bus und hat demnach den default Wert (hier 0):

In einem zweiten Bsp. schicke ich zusätzlich alle 5 Sekunden auch das ESP Signal (Struktur A) mit Counter 2:

Was setzt der Codec für den Wert „c“ in dem strukt A ein?
Oder müssen die fehlenden Werte durch C++-Code ergänzt werden?

Als Wert ist immer der zuletzt empfangene (also auf dem Busliegende) gesetzt.

Die CAN-Daten kommen von einem Harddisk_Player. Womit muss der Trigger verbunden werden?

Der Trigger muss mich nichts "verbunden" werden, die Quelle ist egal.
In meinem Bsp. ist es ein Timeout, ich kenne ja meine Zyklus Zeit.
Du kannst ihn auch auf Botschaften setzen, die müssen dann aus der Database (DBC) kommen.

Variante 2: Nutzung eines Makros
Anscheinend benötige ich das Element Macro $CONSTANT$. Muss das Makro im CAN_Config_Codec_Ext gesetzt werden
oder werden die Daten von dem Makro vorverarbeitet? Wie geschieht das?

Für deinen Use Case eher unbrauchbar, weil der Wert dann immer gesetzt wird, egal was auf dem Bus liegt oder das Signal ankommt oder nicht.
Das Makro Thema würde ich in deinem Use Case ignorieren.


Files

timeout_result.png (43.1 KB) timeout_result.png hidden, 2018-04-05 18:22
timeout_result_2.png (46 KB) timeout_result_2.png hidden, 2018-04-05 18:22
timeout_setup.png (29.4 KB) timeout_setup.png hidden, 2018-04-05 18:22
~WRD000.jpg (823 Bytes) ~WRD000.jpg hidden, 2018-04-09 16:45
Actions

Also available in: Atom PDF