CanOpen Telegramm Aufbau

Gast #391123
Lesenswert?

Habe ein kleines Problem mit der zusammensetzung eines CanOpen
Telegramms.


640    | 2F |    01 64    |    01  | 11 22 33 44
Node_ID| ?? | Objekt-Index|Subindex| Nutzdaten

Was ist  ^^ das ? Also 2F wieß nicht woraus ich mir die bilden kann
auch in meiner Telegramm stehen diese nicht mit drin.

Kann mir jemand von euch dabei Helfen?
Gast #391125
Lesenswert?

Ich entnehme aus meinem CANopen Buch für die ID:
Bit 31(MSB)   Value 0 = PDO Valid; 1 = PDO Invalid
Bit 30        Value 0 = RTR allowed on this PDO; 1 = not allowed
Bit 29        Value 0 = 11Bit ID; 1 = 29Bit ID
Bit 28-11     Value if Bit 29=0; if Bit 29=1: Bits 28-11 of COB ID
Bit 10-0(LSB) Value x; Bits 10-0 of COB ID

Weiss nicht so wirklich, ob dir das was hilft =/
Habe schon seit längerem nichtmehr mit CANopen gearbeitet.

Freundlichen Gruss
Michael S.
Gast #391126
Lesenswert?

Ich denke es handelt sich um das SDO Download expedited protocol.

2f = Schreibt das 1 Byte in den Serverknoten Objekt Verzeichnis.

 | 600 + nodeID | 0 | 2f | Objekt-Index | Subindex | Nutzdaten |

Nutzdaten: nur 1 Byte enthält Daten, der Rest ist nicht Definiert also
           auf 0 setzen.


MfG
Cnud Grevenitz
Gast #391128
Lesenswert?

Hallöchen erstmal Danke für die Antworten nur  leider bin ich immer noch
nicht weiter gekommen.
Hab hier mal einen Log von Telegrammen

Es ist mir immer noch ein Rätzel was die ersten 2Byte zu bedeuten haben
auch aus der Beschreibung der Hardware geht es nicht hervor.

          |  nodeID | ?? | Objekt-Index | Subindex |  Nutzdaten  |
Gesendet  |  640    | 40 |  00   62     |    01    | FF 00 00 00 |
Empfangen |  5C0    | 4f |  00   62     |    01    | 00 00 00 00 |

Gesendet  |  640    | 40 |  00   65     |    01    | 2d 00 00 00 |
Empfangen |  5C0    | 4b |  00   65     |    01    | 00 00 00 00 |

Gesendet  |  640    | 40 |  00   62     |    01    | 00 00 00 00 |
Empfangen |  5C0    | 4b |  01   64     |    01    | e0 21 00 00 |
Gast #391131
Lesenswert?

Wie Jörn schon richtig schreibt, ist das bei den SDO-Sequenzen die
Antwort-Kennung, die je nach Datentyp (im Payload) verschieden ist:

        | Lesebefehle
-----------------------------------------------
Befehl  | 40h | HaInd | SubIn |
Antwort | 4Fh | HaInd | SubIn | D0
-----------------------------------------------
Befehl  | 40h | HaInd | SubIn |
Antwort | 4Bh | HaInd | SubIn | D0 D1
-----------------------------------------------
Befehl  | 40h | HaInd | SubIn |
Antwort | 43h | HaInd | SubIn | D0 D1 D2 D3
-----------------------------------------------

In der ersten Doppel-Reihe steht das 4Fh als Kennung für 8 Bit, in der
zweiten Doppel-Reihe steht das 4Bh als Kennung für 16 Bit und in der
letzten Doppelreihe steht das 43h als Kennung für 32 Bit
(zurückgegebenen Datentyp = Payload).

MFG,

Stephan

P.S. Die entsprechende Kennung bei Schreibbefehlen ist 2Fh (Befehl, mit
8 Bit Datentyp), 2Bh (Befehl, mit 16 Bit Datentyp) und 23h (Befehl, mit
32 Bit Datentyp).
Gast #597990
Lesenswert?

Hallo ich verwende einen neuen Mikrocontroller von Infineon Typ 
Bezeichnung XC888. Das Senden und Empfangen von CAN Nachrichten 
funktioniert soweit.
Möchte nun ein CanOpen Protokoll in C für diesen Mikrocontrollertyp 
umsetzen.
Hat von euch einer einen C Code wie sowas realiisert werden könnte?
Gast #598874
Lesenswert?

Eine CAN Nachricht ist dann z.B. so aufgebaut:

CAN Header|Command oder Replay|Object Index|Sub-Index|Reserved oder Data

Dies bedeutet laut CANOpen habe ich pro CAN Nachricht keine 8 Byte als 
Nutzdaten sondern nur 4 Byte.

Ich habe immer gedacht CAN Header (ID) und dann die 8 Byte Nutzdaten.
Gast #598952
Lesenswert?

Der Master soll z.B. am Busteilnehmer 1 eine Anforderung senden. Dieser 
sendet dann die Nutzdaten auf den Bus. Jetzt soll aber ein anderer 
Busteilnehmer z.B. Nr. 3 die Nutzdaten empfangen und dementsprechend auf 
den LED's anzeigen.
Woher weiss der Busteilnehmer 3 dass er gemeint ist?
#601017
Lesenswert?

Hab zwar noch 0-Ahnung von CAN, aber ich wüde es so machen.

Master holt Daten von Slave1 und sendet die Daten an Slave2. Slave2 
lässt LED leuchten.??

Nicht so schwer, oder??

Meine Frage:
1. Ich hab einen CAN-Bus quer durchs Haus. Kann ich mit einem zweiten 
Master über die gleichen Leitungen Senden/Empfangen? (Kollision?)

2. Kann man mit einem yP(mit CAN Treiber) den Bus mitprotokollen 
(sniffen), damit man das laufende Protokoll entschlüsseln kann? Die 
Nodeaddressen hab ich! Sind Raumthermostate.
Gast #601577
Lesenswert?

CAN arbeitet normalerweise nachrichten-/objekt-orientiert. Das heißt 
hier, der Knoten x lauscht auf das Objekt A, egal, wer es sendet. Es muß 
also nicht vom Master abgeholt und wieder irgendwohin geschickt werden. 
Es reicht völlig, wenn der produzierende Knoten (z.B. der 
Tasten-Einleser) den Tastendruck als Objekt A auf dem Bus mitteilt. Alle 
(vorher so konfigurierten) Knoten, die Objekt A sehen wollen, reagieren 
dann darauf.
Ich weiß nicht genau, ob und wie CANOpen das unterstützt, es sollte aber 
schon gehen, schließlich ist das einer der wesentlich Vorteile von CAN.

Ahoi, Martin
Gast #601609
Lesenswert?

Ganz simpel: Wenn Slave1 einen Tastendruck erkennt, schickt er diese 
Information als CAN-Nachricht auf den CANBus. In CANOpen müßte das als 
PDO konfiguriert sein.
Slave2 ist so konfiguriert, daß er auf diese PDOs hört und reagiert, 
d.h. er schaltet dann seine LED an.
Einen Master braucht es dann also nicht mehr.
Lediglich zum Hochfahren/Konfigurieren könnte ein Master erforderlich 
sein, falls die Konfigurieration nicht fest im Programm steckt.

Besser verständlich?

Ahoi, Martin
Gast #601646
Lesenswert?

Das bedeutet die CAN-ID besteht dann nur aus der Nummer des Message 
Objektes?
Wie ist dann die Busteilnehmernummer z.B. vom SLAVE1 enthalten?

Das Prinzip das du mir soeben erläutert hast, ist sozusagen der Remote 
Betrieb. Sende Remote Bit (Anforderung) vom SLAVE2. Auf SLAVE1 wird 
gewrtet bis Remote Bit emfpangen wurde, dieser sendet dann die Nutzdaten 
auf dem gleichen CAN-ID. Ist dies so korrekt?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren