T5 / TP 1.6 / ID 0x400 - 0x43F / Ringbus-IDs

AW: ID 0x400 - 0x42A

Am liebsten wäre mir zur Zeit, wenn ich die Zeile beschreiben könnte, wo die Automatik ihre Fahrstufe abbildet. Beim A3 wird dort zum Beipiel beim Schalter der eingelegte Gang angezeigt und der Hinweis runter oder hochzuschalten um den Verbrauch zu reduzieren.

Hallo Leute,

kann mir jemand sagen, bei welchem A3 Modell es diese Ganganzeige gibt?

Danke
Axel
 
AW: ID 0x400 - 0x42A

A3 8P ab bestimmtem Modelljahr (glaube es war 2008+) und dann lässt sich dies ggf. freischalten.
 
AW: ID 0x400 - 0x42A

Hallo,

nach der super Hilfe hier in anderen Themen, hier mal Grundsätzliches zum einbuchen:

Die Ring-IDs im T5 sind 400 bis 41F. Byte 2 und Byte 3 sind Statusregister:

Byte 1: Adresse nächstes Steuergerät -0x400

Byte 2:
000X0000: Sleepmode 0=Nein, 1=Ja
0000000X: Aktiv 0=Nein, 1=Ja
000000X0: Init 0=Nein, 1=Ja
00010001: 11=Aktiv, Sleepmodus
00000001: 01=Aktiv, Normalmodus
00000010: 02=Inaktiv, Initialisierung

Byte3:
x0000000: Einbuchen 0=Nein, 1=JA
10000000: 80=Einbuchen


Ich gehe jetzt davon aus, das die Ring-IDs bekannt sind und man weiss wo man sich im Bus einklinken möchte.

Nehmen wir an, der Bus besteht aus folgenden Geräten und IDs ( alles HEX ):

400->401->402->403->40C->40F->41E

dann sehen die einzelnen IDs folgendermaßen aus:

ID : nächste Adresse/ID im Ring und Status XX
wobei XX sein kann: 01 für aktiv, 11 für aktiv aber bereit zum schlafen ( sleep mode ) und 02 für Initialisierung. ( siehe auch dazu Passat 3C Postings, da wird das ganze ausführlich erläutert)
YY: 80 zum einbuchen.

400: 01 XX YY 00 00 00
401: 02 XX YY 00 00 00
402: 03 XX YY 00 00 00
403: 0C XX YY 00 00 00
40C: 0F XX YY 00 00 00
40F: 16 XX YY 00 00 00 ( Sonderfall, anstatt 1E steht hier 16 als Zeig auf 41E )
41E: 00 XX YY 00 00 00

Um sich nun als z.B. 40D zwischen 40c und 40F einzubuchen, macht man folgendes:
In seinem Programm wartet man auf die vorhergehende ID, das ist zum einbuchen nicht wichtig aber da man später sowieso auf die Vorgänger ID reagieren muss, kann man das auch von Anfang an so machen:

1. Warte auf 40C
2. Schicke 40D 0D 02 80 00 00 00 ! Einbuchen als 40D
Schleife
- 3. Warte auf 40C
- 4. Schicke 40D 0F 01 00 00 00 00 ! Anworten im Ring auf 40C mit Zeige auf 40F
Ende


40C wird übrigens in folgender Reihenfolge auf das einbucgen reagieren:

40C 0F 01 00 00 00 00 : Normale Ring Antwort
40D 0D 02 80 00 00 00 : Initialisierung XX=02, 40D bucht sich ein YY=80
40C 0C 02 00 00 00 00 : 40C initialisiert sich neu XX=02
40C 0D 02 00 00 00 00 : 40C ist immer noch in der Initialisierung da xx=02 zeigt aber schon auf 40D
40C 0D 01 00 00 00 00 : 40C ist wieder im normalen Ring


Hier ein Codefragment für die CC-2:

Code:
function ring_ids() {
int canerror;
int canid;
byte scanbuf[6];
byte rcanbuf[6];
byte cmd;
byte rstat;

  can.init(2,0x000,0x000);
  /* 100kBit */
  can_sl.selectBaudRate(3);
  can.expect(3,0x0);

  scanbuf[3]=0x00;
  scanbuf[4]=0x00;
  scanbuf[5]=0x00;
  
  rstat=0;
  
  loop{
    // Warte auf Meldung oder Tastendruck
    wait(can.rxd(3) | hwcom.rxd());
    // Werte Tastendruck aus fals vorhanden
    if(hwcom.rxd()){
      cmd=hwcom.get();
      // Beim Empfang von L/l den Login/Einbuchen einleiten
      if(cmd=='L' | cmd == 'l'){
        ...
        rstat=1;
      }
      else {
        ...
        return;
      }
    }
    canerror=can.error();
    canid=can.getID(3);
    can.get(3,rcanbuf);
    // Nur Ring-IDs auswerten
    if((canid >= 0x400) & (canid <= 0x41F)){
      if(rstat>0 & canid==0x40C){
        // Erstmal die normale Meldung setzten
        scanbuf[0]=0x0F;
        scanbuf[1]=0x01;
        scanbuf[2]=0x00;
        if(rstat==1){
          // Nur beim ersten Mal einbuchen
          scanbuf[0]=0x0E;
          scanbuf[1]=0x02;
          scanbuf[2]=0x80;
          rstat=2;
        }
        // warte auf freien Kanal
        wait(can.ready(5));
        // Und raus damit
        can.send(5,0x40E,scanbuf,6);
      }
     ...
    }
  }
}

Gruss
Peter
 
Zuletzt bearbeitet:
Zurück
Oben