Hallo zusammen, ich habe mir Platinen mit ESP32 & MAX3051ESA+T bestückt und diese in einem CAN-Verbund gebracht. Meine Busleitung hat 65 Ohm (auf einer Strecke von ~40m). An der Strecke hängen 8 Module welche sauber über 100 Stunden miteinander Kommunizieren (alle quer Beet). *Kommunizieren habe ich hier erstmal so definiert, dass alle in einem Intervall von ~1 Sekunde eine Nachricht absetzen und alle alle 30-60 (random) Sekunden nochmal 10 Nachrichten (als Block) absetzen. Jeder schreibt ein Logbuch und merkt sich wann das letzte mal einer der anderen Module eine Nachricht geschrieben hat. Sobald 3 Sekunden nichts kommt, wird ein Log aufgeschrieben (Modul4 hat um 10:27 Uhr nicht geantwortet). Vom Prinzip läuft alles Sauber... Sobald ich jetzt aber weitere Module an den Bus hänge (Strecke bleibt gleich) funktioniert entweder das neue oder eines (oder mehrere) der alten Module nicht mehr. Irgendwie hab ich das Gefühl, dass es hier eine Grenze von 8 Modulen gibt? Ich verwende die Library CAN Version 0.3.1 von sandeepmistry. Arbeite mit einer Baudrate von 200Kbit (geht aber auch mit 50 nicht besser). hat jemand eine Ahnung, warum der Bus ab der 9. 10.... Platine Probleme macht? Und wie kann ich das Umgehen? Ich habe vor etwa 25 dieser Platinen auf einer Strecke von 70m zu vernetzen. Kennt jemand evtl. eine bessere Library. Oder muss ich meine Hardware anders aufbauen? 1000 Dank für jeden Tipp -S
Sebastian schrieb: > Sobald ich jetzt aber weitere Module an den Bus hänge (Strecke bleibt > gleich) funktioniert entweder das neue oder eines (oder mehrere) der > alten Module nicht mehr. Was geht denn nicht mehr? Geht GAR nichts mehr? > Irgendwie hab ich das Gefühl, dass es hier eine Grenze von 8 Modulen > gibt? Nicht beim CAN. > Ich verwende die Library CAN Version 0.3.1 von sandeepmistry. > Arbeite mit einer Baudrate von 200Kbit (geht aber auch mit 50 nicht > besser). Das ist nicht das Problem. > hat jemand eine Ahnung, warum der Bus ab der 9. 10.... Platine Probleme > macht? Nö. Das musst du schon rausfinden. Betreibe eine systematische Fehlersuche. > Und wie kann ich das Umgehen? Gar nicht. Siehe oben! > Ich habe vor etwa 25 dieser > Platinen auf einer Strecke von 70m zu vernetzen. Das ist an sich kein Problem. > Kennt jemand evtl. eine bessere Library. Oder muss ich meine Hardware > anders aufbauen? Naja, die 65 Ohm Kabel sind eher ungewöhnlich, CAN will eigentlich eher um die 100-120 Ohm sehen. Das KANN ein Problem sein, muss aber nicht. Hast du deinen Bus beidseitig terminiert? Ich tippe auf ein Softwareproblem. Vermutlich sind Adressen mehrfach vergeben oder deine Protokollsoftware verhaspelt sich anderweitig. Kürze die Software soweit zusammen, daß du manuell nur einzelne Nachrichten von einem Knoten absetzt. Damit Sendet man nach und nach an alle Adressen. Dann prüft man, ob die bei den anderen Knoten ankommen. Dann geht's weiter.
Hm, danke für die Info, sehe schon, ich muss das mit dem Oszi ran und mehr messen. naja, ich hab vorne und hinten 120Ohm dran, das gibt 60 Ohm und dazu noch die Leitung. Aber genau da ist das Problem mit den Adressen, ich kann bei dieser Library keine Adressen zuweisen. Ich kann nur eine Sende-ID verwenden. Und ich habe jeden Modul einfach eine Aufsteigende Zahl gegeben 101, 102, 103,... 108, 109!! und wenn jetzt das 3. Modul ne Nachricht schickt dann sieht diese so aus: ID: 103 - MSG00025 (ich hab da nen Zähler, der bis 99999 zählt und dann wieder bei 0 anfängt) die 103 bekommt aber JEDES Modul. Das lässt sich zwar leicht filtern, ist aber nicht so, dass Modul 5 Explizit ne Nachricht an Modul 3 senden kann (was mir deutlich lieber wäre, aber eben diese Library nicht kann). Schlimm ist halt, wenn ich dann andere Module entferne, geht wieder alles (d.h. die Hardware oder Software sind theoretisch gleich - und Fehler sind eher Allgemein bezogen und nicht auf ein "schlechtes Modul" zurückzuführen). Definition von "geht nicht": Es kommunizieren weiterhin 7 oder 8 Module miteinander. Welche genau lässt sich schwer sagen, meist sind es "die alten". Aber ich hatte auch schon mal den Fall, dass ein altes ausgestiegen ist und das neue funktioniert hat. - es hängen aber noch weitere Module am Bus welche eben nicht kommunizieren (nichts senden aber auch nichts empfangen - ich gehe davon aus, dass diese "beim Senden" sich aufhängen, weil die Nachricht nicht verschickt werden kann.
Sebastian schrieb: > die 103 bekommt aber JEDES Modul. Das lässt sich zwar leicht filtern, > ist aber nicht so, dass Modul 5 Explizit ne Nachricht an Modul 3 senden > kann (was mir deutlich lieber wäre, aber eben diese Library nicht kann). Lies Dich mal zum Thema CAN ein... Bei CAN werden Nachrichten adressiert und keine Geräte/Busteilnehmer. Ein Teilnehmer kann auch viele Message-IDs senden und/oder empfangen. Oder auch nur senden oder nur empfangen. Jeder Teilnehmer kann prinzipiell alles empfangen, im CAN-Controller wird gefiltert, welche Nachrichten denn tatsächlich an den Stack weitergereicht werden sollen. Nur wenn bei einem Empfänger die Nachricht durch den Filter "passt", wird die Nachricht acknowleged. Wenn eine Nachricht kein Acknowledge bekommt, weil sich kein Knoten dafür interessiert, ist das senderseitig ein Fehler. Wie der Sender das handhabt, ist von der Implementierung abhängig - ggf. geht er in einen Fehlerzustand und sendet anschließend einfach gar nicht mehr.
Sebastian schrieb: > Hm, danke für die Info, sehe schon, ich muss das mit dem Oszi ran und > mehr messen. Tu das. > Aber genau da ist das Problem mit den Adressen, ich kann bei dieser > Library keine Adressen zuweisen. Ich kann nur eine Sende-ID verwenden. > Und ich habe jeden Modul einfach eine Aufsteigende Zahl gegeben > 101, 102, 103,... 108, 109!! Das sind die Adressen vom CAN. Passt schon. > und wenn jetzt das 3. Modul ne Nachricht schickt dann sieht diese so > aus: > > ID: 103 - MSG00025 > (ich hab da nen Zähler, der bis 99999 zählt und dann wieder bei 0 > anfängt) Das ist Unsinn, denn CAN kann im Normalbetrieb nur 2048 Adressen ansprechen. Außerdem vergibt man nicht immer fortlaufende Adressen für jede neue Nachricht, sondern an sich sind die fest, so wie eine Postanschrift. > die 103 bekommt aber JEDES Modul. Das lässt sich zwar leicht filtern, > ist aber nicht so, dass Modul 5 Explizit ne Nachricht an Modul 3 senden > kann (was mir deutlich lieber wäre, aber eben diese Library nicht kann). Glaub ich nicht. Bei CAN hört und empfängt JEDER Busteilnehmer ALLE Nachrichten. Erst durch den Filter wird entschieden, welche auf dem Teilnehmer ausgewertet wird oder nicht. > Schlimm ist halt, wenn ich dann andere Module entferne, geht wieder > alles Was geht denn nicht? Siehe oben. > (d.h. die Hardware oder Software sind theoretisch gleich - und > Fehler sind eher Allgemein bezogen und nicht auf ein "schlechtes Modul" > zurückzuführen). Klingt umso mehr nach einem Softwareproblem. > Definition von "geht nicht": Es kommunizieren weiterhin 7 oder 8 Module > miteinander. Welche genau lässt sich schwer sagen, Das läßt sich SEHR genau sagen, wenn man die Kommunikation mithört. Dazu gibt es verschiedene Tools, z.B. CANUSB. http://canusb.com/ Dort sieht man JEDE Nachricht auf dem Bus, incl. Zeitstempel. > meist sind es "die > alten". Aber ich hatte auch schon mal den Fall, dass ein altes > ausgestiegen ist und das neue funktioniert hat. - es hängen aber noch > weitere Module am Bus welche eben nicht kommunizieren (nichts senden > aber auch nichts empfangen - ich gehe davon aus, dass diese "beim > Senden" sich aufhängen, weil die Nachricht nicht verschickt werden kann. Du spekulierst. Lass das. Siehe Fehlersuche.
mh schrieb: > durch den Filter "passt", wird die Nachricht acknowleged. In Teutonien, wo sogar der CAN-Bus erfunden wurde, nennt man das BESTÄTIGUNG!! Diese Denglisch Kauderwelsch ist einfach nur widerlich und DUMM!
mh schrieb: > Nur wenn bei einem Empfänger die Nachricht > durch den Filter "passt", wird die Nachricht acknowleged. Nein! Ein ACK wird von jedem Knoten erzeugt, wenn die Nachricht korrekt mit CRC ist, egal, ob sie später durchs Filter passt oder nicht. Die Filterei passiert erst später. Jeder Knoten überprüft jede Nachricht auf Korrektheit. Das muss auch so passieren, damit die Prioritätssteuerung der Identifier funktioniert.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.