can sendevorgang abbrechen

Gast #4124354
Lesenswert?
• ▲
▼
Hallo,
ich überfrüfe mit CAN, ob alle anderen Teilnehmer noch da sind. das 
heisst, ich frage nach und die antworten. dazu habe ich zwei Boards mit 
denen ihc das ausprobieren kann (Board A fragt nach, Board B antwortet). 
zur besseren Übersicht, lasse ich eine LED während des sendevorganges 
aufleuchten. Wenn ich jetzt allerdings den stecker von Board B 
herausziehe, kann dieser ja nicht mehr empfangen und auch nicht mehr 
senden. die LED von Board A leuchtet dann aber dauerhaft. Also schickt 
der die Nachricht ja gar nicht auf dem Bus drauf.
kann man das irgendwie ändern, dass er nach einer gewissen Zeit 
abbricht?
1
void __attribute__((interrupt, no_auto_psv)) _T1Interrupt(void)
2
{
3
    LATBbits.LATB0 = 1; // Turn on LED D3
4
    C1TX0B1 = 0x0001; // data - attendance check
5
    C1TX0CONbits.TXREQ = 1; //Start to send
6
    while (C1TX0CONbits.TXREQ == 1) {} //TXREQ reset automatically, when the transmission completes
7
    LATBbits.LATB0 = 0; // Turn off LED D3
8
    IFS0bits.T1IF = 0;  // Clear Timer 1 interrupt flag
9
}
#4124610
Lesenswert?
• ▲
▼
Hallo,

wenn kein weiterer Teilnehmer auf dem Bus ist (also niemand da ist, der 
eine gesendete Botschaft mit ACK quittiert), dann versucht der Sender in 
der Regel, die Nachricht noch einmal zu senden. Je nach Konfiguration 
auch öfter, wobei am Ende der Sender in einen Error-Mode geht, weswegen 
er beim senden "hängen" bleiben kann (TXREQ wird nicht zurückgesetzt, 
sondern das entsprechende Fehlerflag gesetzt).

Allerdings wird das ACK von jedem Busteilnehmer aufgelegt, der einen 
korrekten CAN-Frame erkennt, also auch von Teilnehmern, die nicht 
unbedingt Ziel der Nachricht waren. Wenn man also erkennen möchte, ob 
wirklich noch alle Teilnehmer zuhören, muss man entweder diese zyklisch 
senden lassen (und dann über einen Time-Out erkennen, dass die 
Nachrichten nicht mehr gesendet werden) oder sie aber einzeln abfragen.

Dabei sollten aber zusätzlich noch die verschiedenen Fehlerflags beim 
Sender abgeprüft werden, um das beobachtete "Hängen" zu vermeiden. Die 
abgefragten Empfänger müssen dann ihre Anwesenheit durch eine 
Rückantwort kundtun, wobei der Sender Buch führen muss, wer schon 
geantwortet hat.

Schöne Grüße,
Martin

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.