Forum: Mikrocontroller und Digitale Elektronik Frage zu CAN- Kommunikation mit Master- Slave


von Marcel K. (viewer)


Lesenswert?

Hallo Forumgemeinde,
ich habe eine Frage zur CAN Kommunikation. Ich habe mich in das Thema 
CAN eingearbeitet aber jetzt stehe ich vor dem Problem dass ich den 
Nutzen des Remote- Frame nicht ganz verstehe.

Mein Aufbau:
Ich habe drei Experimentierboards mit jeweils einem MCP2515. Ein Board 
soll ein Master sein und die andern zwei sind die Slaves. Die Slaves 
sollen nach "Power On" in einen "Wartezustand" gehen.  Der Master sendet 
ein Broadcast das die Slaves Ihre Adresse senden sollen. Jetzt kommt 
meine Frage. Der Master sendet ein "Extended- Data Frame Broadcast 
Telegramm"  den die beide Slaves empfangen. Wie sollen die Slaves mit 
Ihrer Adresse auf dieses Telegramm antworten? Soll ein Slave auf ein 
Extended Data Frame mit einem extended remote Frame antworten? Ein 
Remote Frame darf ja eigentlich keine Daten enthalten. Würde es also 
reichen das der Slave einfach seine ID als Adresse sendet und so hat der 
Master die Adresse?
Aber wie bekommt der Master bestimmte Daten von einem Slave? Ich habe es 
so verstanden, dass ein remote Frame zum empfangen von Daten benutzt 
wird. Aber wie?
Ich würde mich freuen wenn mir jemand eine Info dazu geben könnte.
Vielleicht gibt es auch ein Link zu einer Seite auf der beschrieben ist 
wie so eine Master- Slave Kommunikation ablaufen sollte.
Viele Grüße,
Marcel

von Otto (Gast)


Lesenswert?


von Marcel K. (viewer)


Lesenswert?

Hallo Otto,

ja diesen Link kenne ich natürlich. Das erklärt aber nicht meine Frage 
wie die Slaves auf ein Broadcast- Telegramm antworten sollen. Soll die 
Antwort wieder ein "extended Data Frame" sein oder sollte es ein 
"extended remote Frame" sein.

Grüße...

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

klingt alles sehr nach einem Protokoll das auf dem CAN gefahren wird. 
CAN ist OSI Layer 2 (und mehr deckt CAN im OSI-Modell nicht ab) und 
kennt keine Master/Slave Beziehungen.

Matthias

von Marcel K. (viewer)


Lesenswert?

Hi,
mich würde halt interessieren ob jemand schon soetwas ähnliches gemacht 
hat. Sollte als Antwort auf eine Anfrage ein Remote- Frame oder ein 
Daten-Frame folgen.

Grüße...

von TestX .. (xaos)


Lesenswert?

1. CAN ist ein multimaster bus - es gibt keine slaves..

2. ein von dir bezeichneter "remote frame" ist ein "remote REQUEST 
frame" ... dh ein teilnehmer kann damit ein bestimmtes telegram (data 
frame) anfordern, wenn es gerade gebraucht wird - dadurch kann man bei 
sporadisch benötigten daten sehr viel bandbreite sparen, da die daten 
nicht ständig auf den bus gesendet werden müssen.
was du mit "adressen" machen willst ist mir nich ganz klar - möchtest du 
1nen knoten als "master" definieren und die anderen als "slaves" und 
diese "slaves" sollen dynamisch bestimmte adressen bekommen ? 1...n ?

von Marcel K. (viewer)


Lesenswert?

Hallo Andi D.,

ja genau. Es werden mithilfe der Slaves RGBW- LED's gesteuert. Die 
Slaves haben z.B. die Adresse 3 und 5. Bevor der Master, der den 
Farbverlauf steuert, seine Arbeit beginnt, muss er wissen wie viele LED- 
Treiber am CAN angeschlossen sind. Die Slaves können über DIP- Schalter 
adressiert werden. Daher wollte ich wissen wie die Slaves am besten auf 
einen Broadcast antworten sollen. Ist die Slaveadresse ein Data-Request 
oder nur ein Bestätigungstelegramm welches einfach als extended Data 
Frame gesendet werden kann.
Ich bin mir sicher, das der eine oder andere das hier in ähnlicher weise 
schon mal gemacht hat.

Grüße,
Marcel

von hahaha (Gast)


Lesenswert?

Lass die Finger von Remoteframes.

Das ist bei jedem uC anderst implementiert.
Ich habe damit schon die übelsten Effekte im Zusammenhang
mit CANOpen erlebt. Auch die CiA sagt mittlerweilse dass
Remoteframes nicht mehr unterstützt werden sollten.....

von hahaha (Gast)


Lesenswert?

Marcel K. schrieb:
> ja genau. Es werden mithilfe der Slaves RGBW- LED's gesteuert. Die
> Slaves haben z.B. die Adresse 3 und 5. Bevor der Master, der den
> Farbverlauf steuert, seine Arbeit beginnt, muss er wissen wie viele LED-
> Treiber am CAN angeschlossen sind. Die Slaves können über DIP- Schalter
> adressiert werden. Daher wollte ich wissen wie die Slaves am besten auf
> einen Broadcast antworten sollen. Ist die Slaveadresse ein Data-Request
> oder nur ein Bestätigungstelegramm welches einfach als extended Data
> Frame gesendet werden kann.
> Ich bin mir sicher, das der eine oder andere das hier in ähnlicher weise
> schon mal gemacht hat.

Guck dir doch mal an wie CANOpen das macht.
Lehne dich doch einfach an was bestendes an.

Gruß Eddi

von Rolf Magnus (Gast)


Lesenswert?

Marcel K. schrieb:
> ja genau. Es werden mithilfe der Slaves RGBW- LED's gesteuert. Die
> Slaves haben z.B. die Adresse 3 und 5.

Adressen gibt es beim CAN nicht, genau wie Slaves. Wie schon Matthias 
meinte, muß man da noch ein weieres Protokoll drüberstülpen, wenn man 
das will.

 Bevor der Master, der den
> Farbverlauf steuert, seine Arbeit beginnt, muss er wissen wie viele LED-
> Treiber am CAN angeschlossen sind. Die Slaves können über DIP- Schalter
> adressiert werden. Daher wollte ich wissen wie die Slaves am besten auf
> einen Broadcast antworten sollen.

Es gibt beim CAN nichts anders als Broadcasts.

> Ist die Slaveadresse ein Data-Request oder nur ein Bestätigungstelegramm
> welches einfach als extended Data Frame gesendet werden kann.

Extended Data Frame heißt erstmal nur, daß die CAN-ID der Botschaft 29 
Bit breit ist. Beim Standard CAN wären es 11.

von Marcel K. (viewer)


Lesenswert?

Hallo,
ich habe mir in den letzten Minuten nochmal genau übrlegt wie das sein 
sollte. Ich denke ich habe den falschen Ansatz. Ich sollte weg von 
Master/Slave- Gedanke.
Der "Farb- Master" sendet ein Broadcast mit seiner Adresse. Dann 
Antworten die "Farb- Slaves" mit Ihrer Adresse an die Broadcast- 
Adresse. Jeder hat die gleichen Rechte! Der "Farb- Master" empfängt die 
Adressen der angeschlossenen "Farb- Slaves" und kennt so alle Adressen. 
Alles über die "extended Data Frames"
>Ich denke das ist der bessere Weg!!!

von Karl H. (kbuchegg)


Lesenswert?

Marcel K. schrieb:
> Hallo,
> ich habe mir in den letzten Minuten nochmal genau übrlegt wie das sein
> sollte. Ich denke ich habe den falschen Ansatz. Ich sollte weg von
> Master/Slave- Gedanke.
> Der "Farb- Master" sendet ein Broadcast mit seiner Adresse. Dann
> Antworten die "Farb- Slaves" mit Ihrer Adresse an die Broadcast-
> Adresse.

Dein Gedankengang mit Adresse ist irgendwie falsch.
Am CAN Bus wird nichts in der klassischen Form adressiert.
Jeder Teilnehmer legt einfach seine Daten auf den Bus und wen es auch 
immer interessiert, der holt sich diese Daten vom Bus.

Die Idee hinter CAN ist es, eben keine Adressen zu verwenden. Da gibt es 
einen Knoten der legt ein CAN-Paket auf den Bus und dieses Paket ist so 
markiert, dass es die aktuelle Geschwindigkeit enthält. D.h. der 
Radsensor schreibt nicht ins Paket rein: An den Tacho, sondern der 'ruft 
ins Haus hinein': Wen es auch immer interessiert, wir fahren momentan 
60km/h. Und wer auch immer mit dieser Information etwas anfangen kann, 
der wertet sie aus und reagiert entsprechend. Ob das der Tacho ist, der 
die Anzeige entsprechend einstellt oder der Autoradio, der daraufhin 
etwas lauter wird oder die Zentralverriegelung, die die Türen absperrt, 
all das interessiert den Radsensor nicht. CAN-Knoten stellen einfach nur 
ihre Informationen zur Verfügung. Es sind die Daten selbst die 
identifiziert werden. Die Idee hinter dem Request ist es, dass einer am 
Bus einfach mal in die Runde ruft: Ich bräuchte mal die Motordrehzahl! 
Wieder interessiert er sich nicht dafür, welcher Sensor dafür zuständig 
ist, er will einfach nur einen Wert haben, wer auch immer dafür 
zuständig ist, ihn zu liefern. Und der zuständige legt dann eben ein 
Paket auf den Bus, in dem die aktuelle Drehzahl drinnen steht. Und 
wieder kann sich das jeder holen, der es haben will. unter anderem 
derjenige, der die Information angefordert hat.

Das ist die Idee hinter CAN.
Natrülich kannst du jetzt anstelle der Zuordnung, dass die ID 54 die 
aktuelle Geschwindigkeit kennzeichnet auch so tun, als ob das die 
Adresse eines CAN Knotens wäre. Das kann dir keiner verbieten, aber die 
eigentliche Idee hinter CAN ist eine andere.

D.h. löse dich von dem Gedanken, dass ein CAN-Knoten eine Adresse hat. 
Der ist für eine RGB-LED zuständig und die hat eine ID. Dein 'Master' 
ruft also ins Blaue hinein: RDB-LED im Wohnzimmer auf 58 setzen. Und wer 
dann auch immer für diese LED zuständig ist, der führt das aus. Das ein 
Knoten für diese LED zuständig ist, das kann der Knoten zb über ein 
Mäuseklavier erfahren.
Im Endeffekt ist der Unterschied zur Adressierung gar nicht mal so groß. 
Aber die Denkweise ist eine andere.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

Bedenke das CAN keine Absenderadressen kennt. Es kennt eigentlich gar 
keine Adressen im eigentlichen Sinn. Ich würde deine Slaves mit einer 
über die DIP-Schalter einstellbaren ID (2, 4, 6, ...) senden lassen 
(zyklisch) Der "Master" empfängt einfach alle IDs und sendet dann die 
Einstellungen an diese ID + 1 auf die wiederrum die Slaves hören. 
Primitiv aber funktioniert.

BTW
Was sind das für LED-Module mit CAN?

Matthias

von Marcel K. (viewer)


Lesenswert?

Hallo  Karl Heinz Buchegger,

Danke für Deine ausfürliche Erklärung. Das weiß ich echt zu 
schätzen!!!!!
Ich kenne die Idee von CAN natürlich weil ich schon einiges darüber 
gelesen habe. Aber Du hast Recht. Ich bin da vom Thema abgekommen da ich 
gerne Adressieren wollte!
Ich finde es gut, dass Du mich nochmal auf den Grundgedanken von CAN 
gebracht hast! Ich werde mein Vorhaben nochmal überdenken.

Vielen Dank für Deinen hilfreichen Beitrag!

von Marcel K. (viewer)


Lesenswert?

Hallo Matthias,
das sind natürlich Module im Eigenbau!! ;o)
Ich habe die ganze Zeit mit RS485 gearbeitet aber ich fand CAN sehr 
intersannt da ich mich um keine Kollision mehr kümmeren muss.

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
Noch kein Account? Hier anmelden.