Forum: Mikrocontroller und Digitale Elektronik CanOpen Hack


von RainerZufall24 (Gast)


Lesenswert?

Hallo,
ich habe eine Gerät welches mittels CAN-Open Interface bedient wird.
Leider habe ich keine Infos zu der Schnittstellt (Adressraum / 
Nachrichten / etc.)
Wenn ich meinen USB-2-Can anstecke (und den Bus mitlese) und das Gerät 
bootet, dann kommt eine Nachricht zurück von der ID 763 Daten 00.
Das ist meiner Meinung nach die BootUp Message. Die kommt auch immer 
wieder wenn ich ein Reset hinsende ( ID :0 , Data: 82 00).

Leider kommt bei einem OPerational Befehl (ID: 0,  Data: 01 00) keine 
Nachricht zurück.

Kennt ihr eine Möglichkeit wie ich mit dem Teil erst einmal grundlegend 
sprechen kann?

Mache ich bei den o.g. Kommandos etwas falsch?
Kennt ihr weitere Befehle die mir vielleicht weiterhelfen würden?

VG
RainerZufall24

von Andras H. (kyrk)


Lesenswert?

Ich habe mal Gegoogelt um was für ein Gerät es sich handeln könnte:
https://de.wikipedia.org/wiki/Ger%C3%A4t

Eventuell wäre einfacher wenn du den Gerät beschreiben würdest. 
Vielleicht kennt jemand das Gerät. Hat bestimmt auch ein Typnummer.

von RainerZufall24 (Gast)


Lesenswert?


von Martin (Gast)


Lesenswert?

"ID 763 Daten 00": Hartbeat-Telegramm beim Start mit einem Datenbyte 
(immer 0). Damit hast du auch die Adresse des Knotens: 63h.

Dass nach einem Start-Knoten die digitalen Eingänge nicht gesendet 
werden, deutet auf eine ältere Version des CANopens.

Versuche ein Remote Request (read digital) zu senden (180h + 63h = 1E3).

von RainerZufall24 (Gast)


Lesenswert?

Da kommt leider noch nichts.
Ich habe die Daten mal inkremierten lassen.
Es kommt nur eine BootUp Msg bei 81 und bei 82.

von RainerZufall24 (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch etwas ...

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

Hallo,
du könntest versuchen den zyklischen Heartbeat einzuschalten. Dann 
kannst du über 764h zumindest den NMT Status verfolgen.
Der sollte bei deinem Startversuch (01 00 auf ID 0) auf 5 gehen 
(Operational)

Heartbeat Objekt ist auf Adresse 1017h
[664h][8][2B 17 10 00 E8 03 00 00]
stellt den HB auf 1s.

Um welches Gerät handelt es sich und welches device profil wird 
verwendet?
Dazu kannst du Objekt 1000h lesen
[664h][8][40 00 10 00 00 00 00]

Grüße
Christopher

von RainerZufall24 (Gast)


Angehängte Dateien:

Lesenswert?

Super!!!!! Ich raste aus.
Das klappt.

HeartBeat gibt die 05 zurück.
Außerdem  kommt auf die Anfrage des Dev. Profils eine:
43 00 10 00 91 01 0F 00  zurück.

Gibt es da irgendwo im Netz eine Tabelle oder kann da jeder Hersteller 
reinschreiben was er will?

Hättest du einen Link zu einer (nicht zu komplizierten) Tabelle mit den 
ganzen Befehlen zu dem eingesetzten Profil?

Vielen Dank für deine Hilfe ;-)

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

Glückwunsch!
Es handelt sich um ein CiA401 Gerät, d.h. ein modular I/O device mit
- Digital Inputs implemented
- Digital Outputs implemented
- Analog Inputs implemented
- Analog Outputs implemented

Die CiA Dokumente sind nicht öffentlich zugänglich. Du musst dich bei 
der can-cia registrieren und kannst dann das Dokument herunterladen.

Von dem Hersteller solltest du aber auch ein EDS File bekommen. Das ist 
einfach mit einem Texteditor lesbar, aber komfortabler wäre CAN-EDS von 
Vektor.

Was hast du denn vor?
Für einen groben Überblick kannst du dir das Datenblatt von einem 
anderen CiA401 ansehen, z.B. den CO4011a von Frenzel + Berg. Der hat nur 
die Analog Outputs nicht.

Grüße
Christopher


https://www.can-cia.org

https://www.frenzel-berg.de/produkte/canopen-chip/ein-ausgang/co4011-fl-single-chip.html

von RainerZufall24 (Gast)


Angehängte Dateien:

Lesenswert?

NaJa.... ich machs mal kurz.

Ist nicht gewünscht bzw. Hersteller will keine Infos an uns geben.
Wenn ich's richtig interpretiere könnte ich doch mit die gemappten PDO's 
ausgeben (die Anzahl) lassen unter Adresse 1A00 Subindex 0
Kannst du mir noch sagen wie ich von der Adresse auf den eigentlichen 
Telegramminhalt komme?
Also von 1A00 Subindex 0 zu COBID und Daten 00 00 00 00 00 00 00 00 ?
Da stehe ich grad auf dem Schlauch.

VG Rainer

von Louis (Gast)


Lesenswert?

Hallo,
von der Adresse kommst Du gar nicht auf den Inhalt, die sagt nur dass es 
sich um ein PDO (z.B.) von einem bestimmten Gerät handelt.
Die Info welches PDO, also welcher Wert, steht dann in den Daten.

Google mal nach "canopen Boterenbrood" damit solltest Du eine PDF von 
H.Boterenbrood finden die CANOpen ziemlich gut beschreibt.

lg
Louis

von Louis (Gast)


Lesenswert?

Hallo nocheinmal,

bitte entschuldige, ich habe PDO und SDO verwechselt(wieder mal). Mit 
SDOs kannst Du einzelne Werte abfragen, PDOs sind "häufige" Nachrichten 
die Hersteller-spezifisches Format haben. Was die einzelnen Bits in 
einem PDO bedeuten kann also nur der Hersteller oder Reverse-Engineering 
an den Tag bringen

lg
Louis

von RainerZufall24 (Gast)


Lesenswert?

Danke für die Antwort. Ich lese mich ersmal in das Document ein.
Was anderes als das rev.Engineering bleibt mir nicht übrig.

Danke

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

Hallo RainerZufall,

Objekt 1A00h ist das Mapping Objekt zu TPDO1.
Subindex 0 gibt an welches der höchste adressierbare Subindex ist.
In Subindex 1 bis (theoretisch) 255 stehen dann die gemappten Objekte.
[Index LSB][Index MSB][Subindex][Länge in bit]

Die COB-ID des TPDO1 findest du in Objekt 1800h.1
Das sollte auf 40000180h stehen

Gruß

von RainerZufall24 (Gast)


Lesenswert?

Hallo zusammen,
ich hab das Gefühl ich begreife es nicht...
Wenn ich eine  40 00 01 80 00 00 00 00 an 663 sende erhalte ich:
von 5E3 folgende Daten: 80 00 01 80 00 00 02 06

Auch wenn ich den SubIndex erhöhe kommt immer das gleiche.

Was sagt mir die Antwort nun?
ist die Antwort 80 ein ErrorCode oder wiederum ein Command Specifier?

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

RainerZufall24 schrieb:
> Wenn ich eine  40 00 01 80 00 00 00 00 an 663 sende
Du versuchst Subindex 128 von Objekt 1000h zu lesen. Der Existiert 
nicht:

RainerZufall24 schrieb:
> 5E3 folgende Daten: 80 00 01 80 00 00 02 06
06020000h: Object not found.
Ich hätte eher 06090011h erwartet: Subindex does not exist.

Cob Id von TPDO1 ist auf Objekt 1800h.1 zum Lesen ein SDO
[663][8][40 00 18 01 00 00 00 00]

Antwort wird etwa so aussehen
[5E3][8][43 00 18 01 80 01 00 40]

von RainerZufall24 (Gast)


Lesenswert?

Ich glaub das war wieder ein Fehler von mir.
Nun sieht es so aus:
Auf     ID 663 -> 40 00 18 00 00 00 00 00
Antwort:   5E3 -> 4F 00 18 00 05 00 00 00


Auf     ID 663 -> 40 00 18 01 00 00 00 00
Antwort:   5E3 -> 43 00 18 01 E3 01 00 C0

Auf     ID 663 -> 40 00 18 02 00 00 00 00
Antwort:   5E3 -> 4F 00 18 02 01 00 00 00

Auf     ID 663 -> 40 00 18 03 00 00 00 00
Antwort:   5E3 -> 4B 00 18 03 00 00 00 00

Auf     ID 663 -> 40 00 18 04 00 00 00 00
Antwort:   5E3 -> 80 00 18 04 11 00 09 06

Nun trotzdem wieder die Frage: Was kann ich den Daten lasen?

VG
Rainer

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

RainerZufall24 schrieb:
> Auf     ID 663 -> 40 00 18 01 00 00 00 00
> Antwort:   5E3 -> 43 00 18 01 E3 01 00 C0
Der PDO ist abgeschaltet. Lösch mal das 63.bit
[663][8][22 00 18 01 E3 01 00 40]

Zyklisches senden einschalten
[663][8][2F 00 18 02 ff 00 00 00]
[663][8][2B 00 18 05 64 00 00 00]

Wenn dann kein PDO auf COB ID 01E3h kommt, dann ist da einfach nichts 
gemappt.

Ich wiederhole meine Frage:
Christopher B. schrieb:
> Was hast du denn vor?

RainerZufall24 schrieb:
> Wenn ich's richtig interpretiere könnte ich doch mit die gemappten PDO's
> ausgeben (die Anzahl) lassen unter Adresse 1A00 Subindex 0
ja. Aber Objekte, nicht PDOs. Du liest die Objekte die auf PDO1 gemappt 
sind.
[663][8][40 00 1A 0-8 00 00 00 00]

RainerZufall24 schrieb:
> Nun trotzdem wieder die Frage: Was kann ich den Daten lasen?
ist das erste Byte 80, dann ist es ein Fehler. Byte 1-3 sind Objekt und 
Subindex, die letzten vier Byte sind die Daten LSB first.

: Bearbeitet durch User
von RainerZufall24 (Gast)


Lesenswert?

Christopher B. schrieb:
>> Was hast du denn vor?

Am liebsten die Kisten in Betrieb nehmen.
Das Teil ist eigentlich in so einer Art Batterie-Container verbaut.
Es ist kein Display oder Taster daran. Nur ein Harting-Stecker welche 
eben u.a. eine Can-Schnittstelle mitführt.


Hier die Antworten:
   ID 663 ->  43 00 18 01 E3 01 00 40
AW:ID 5E3 ->  43 00 18 01 E3 01 00 C0

     ID 663 -> 2F 00 18 02 FF 00 00 00
AW:  ID 5E3 -> 60 00 18 02 00 00 00 00

     ID 663 -> 2B 00 18 05 64 00 00 00
AW:  ID 5E3 -> 60 00 18 05 00 00 00 00


Bin ich überhaupt richtig in der Annahme dass man das EInschalten über 
die PDO's macht ?
Ich hab bisher mit CAN-Open nicht viel zu tun gehabt.
Außer mal ein paar Antriebsregler einzurichten ist da nichts passiert.
Da hatte man (glaube ich) die SDO nur zum parametrieren genutzt.

Hast du /ihr sonst ncoh Ideen was man machen könnte?
VG Rainer

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

Christopher B. schrieb:
> Der PDO ist abgeschaltet. Lösch mal das 63.bit
> [663][8][22 00 18 01 E3 01 00 40]

du hast das Objekt gelesen

RainerZufall24 schrieb:
> ID 663 ->  43 00 18 01 E3 01 00 40
> AW:ID 5E3 ->  43 00 18 01 E3 01 00 C0

von RainerZufall24 (Gast)


Lesenswert?


von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

Jein.
Dein TPDO ist immer noch abgeschaltet.
sende das nochmal, dann sollte es kommen.
[663][8][22 00 18 01 E3 01 00 40]

Wenn du wissen willst welche Objekte darauf gemappt sind, musst du 
Objekt 1A00h Subindex 1 bis 8 lesen. Hab ich dir oben auch schonmal 
aufgeschrieben wie das geht.
Christopher B. schrieb:
> [663][8][40 00 1A 0-8 00 00 00 00]

Wenn du nicht weiterkommst, lese 1018h aus und notiere die Antworten
Das geht so
[663][8][40 18 10 01 00 00 00 00] und
[663][8][40 18 10 02 00 00 00 00]

von RainerZufall24 (Gast)


Angehängte Dateien:

Lesenswert?

Guten Morgen,
hier die Antworten als Bild eingefügt:

Bei [663][8][22 00 18 01 E3 01 00 40] kommen leider keine zyklischen 
Nachrichten.

Bei [663][8][40 00 1A 0-8 00 00 00 00] erhalte ich:
Bei SubIdx 0 -> 4F 00 1A 00 00 00 00 00
bei allen anderen -> 43 00 1A (1-8) 00 00 00 00
Wenn ich richtig gelesen habe ssagt mir das, dass 4 Byte Nutzdaten 
enthalten sind.
Spaßeshalber habe ich mal SubIDX auf 10 gesetzt. Da kommt wieder ein 
Fehler 80 ...

Auf Adresse 40 10 18 00 00 00 00 00 erhalte ich
            4F 18 10 00 04 00 00 00
Sind hier vier SubIndizes verwendet ...?

Auf Adresse 40 18 10 (1-4) 00 00 00 00 erhalte ich
            43 18 10 (1-4) ff ff ff ff

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

RainerZufall24 schrieb:
> Bei [663][8][22 00 18 01 E3 01 00 40] kommen leider keine zyklischen
> Nachrichten.
>
> Bei [663][8][40 00 1A 0-8 00 00 00 00] erhalte ich:
> Bei SubIdx 0 -> 4F 00 1A 00 00 00 00 00
> bei allen anderen -> 43 00 1A (1-8) 00 00 00 00

wie bereits geschrieben
Christopher B. schrieb:
> Wenn dann kein PDO auf COB ID 01E3h kommt, dann ist da einfach nichts
> gemappt.

RainerZufall24 schrieb:
> Auf Adresse 40 10 18 00 00 00 00 00 erhalte ich
>             4F 18 10 00 04 00 00 00
> Sind hier vier SubIndizes verwendet ...?
ja richtig. Das muss auch vier haben, es ist das Identity object, aber 
subindex 1 darf nicht FFFFFFFF sein. Das ist im reserved Bereich. Sieht 
so aus als ob dein Teil gar nicht CANopen konform ist, vielleicht 
bekommst du deswegen auch kein EDS.

Dann kannst du dir entweder die benötigten Objekte auf die PDOs mappen 
so wie du es magst, oder deine benötigten Daten per SDO abgreifen.

Digital Inputs sind in Objekt 6000h. Subindex 0 gibt an, wieviele (n) 8 
Bit inputs es gibt und die sind dann (jeweils 8 bit) auf den Subindex 1 
bis n.
Es könnte auch sein, dass es auch mit Objekt 6100h (16 Bit per Transfer) 
oder 6120h (32 bit) gibt.

Für Digitale Outputs gilt dasselbe.
Objekt 6200h (8 bit)
Objekt 6300h (16 bit)
Objekt 6320h (32 bit)

Analog wenn es kann ist dann in den Objekten 6400h ff.

von RainerZufall24 (Gast)


Lesenswert?

Ok. Bei den 6000h Addressen  ist auch nichts.
Ich habe eine das Byte mal inkrementieren lassen und folgendes Ergebnis:
gesendet: 40 00 xx 00 00 00 00 00
1
43  0 10  0 91  1  F  0
2
4F  0 12  0  2  0  0  0
3
4F  0 14  0  2  0  0  0
4
4F  0 16  0  0  0  0  0
5
4F  0 16  0  0  0  0  0
6
4F  0 18  0  5  0  0  0
7
4F  0 1A  0  0  0  0  0
8
4F  0 22  0  8  0  0  0
9
4F  0 30  0  3  0  0  0
10
4F  0 38  0  2  0  0  0
11
4F  0 50  0  4  0  0  0
Bei alle anderen kommt eine 80 zurück.
Hilft das irgendwie?
Ich hoffe du verlierst nicht die Nerven von meinen stupiden Fragen / 
Antworten ;-()


Ich glaube es macht jetzt wiederum Sinn die SubIdx einzeln abzuklappern 
und zu schauen das da ankommmt..?

VG Rainer

von RainerZufall24 (Gast)


Lesenswert?

gesendet: 40 00 22 xx 00 00 00 00
1
43  0 22  1 30 30 33  0
2
43  0 22  1 30 30 33  0
3
43  0 22  2 30 30 35  0
4
43  0 22  2 30 30 35  0
5
43  0 22  3 30 30 35  0
6
43  0 22  3 30 30 35  0
7
43  0 22  4 30 30 35  0
8
43  0 22  4 30 30 35  0
9
43  0 22  5 30 30 41 53
10
43  0 22  6 30 30 41 53
11
43  0 22  7 30 30 41 53
12
43  0 22  8 30 30 41 53


gesendet: 40 00 30 xx 00 00 00 00
1
4F  0 30  0  3  0  0  0
2
4B  0 30  1  7  A  0  0
3
4B  0 30  2  0  0  0  0
4
41  0 30  3  0  2  0  0


gesendet: 40 00 38 xx 00 00 00 00
1
4F  0 38  0  2  0  0  0
2
41  0 38  1 28  0  0  0
3
4F  0 38  2  0  0  0  0

gesendet: 40 00 50 xx 00 00 00 00
1
4F  0 50  0  4  0  0  0
2
4F  0 50  1  0  0  0  0
3
4F  0 50  2  0  0  0  0
4
4B  0 50  3  0  0  0  0

Kannst du hieraus etwas lesen außer das es Herstellerspezifische 
Festlegung sind und die Länge (4F  4B  41) ?

VG Rainer

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

RainerZufall24 schrieb:
> Ok. Bei den 6000h Addressen  ist auch nichts.
was heißt das?
Die Objekte 2000h bis 5FFFh brauchst du gar nicht lesen. Die sind 
Herstellerspezifisch und da bekommen wir nichts raus ohne den 
Hersteller.

Handelt es sich um dieses Batterieding aus deinem zweiten Beitrag?
Dann hat es eventuell doch keine digitalen Eingänge, obwohl es die laut 
Objekt 1000h implementiert.
Wahrscheinlich kann es nur Analogwerte anzeigen (eventuell Ladezustand 
oder sowas).

Lies doch mal Objekt 6400h, 6401h, 6402h, 6403h und 6404h. Jeweils 
Subindex 0.
also
40 0-4 64 00 00 00 00 00

von RainerZufall24 (Gast)


Lesenswert?

Ja, es geht noch um die Batterie.
Bei allen 6xxx kommt eine 80 als Antwort. (oder ich mache was falsch )

Ich könnte mir vorstellen das es da auch (wie. z.B. Motorcontrollern) 
eine art Enable Signal gibt mit dem am das Teil erstmal in eine Art 
Betriebsbereitschaft versetzt.
Notmalerweise sind da mehrere von den Batterie verschaltet (in einer Art 
Container).

Ich probier das dann mit den 60er Adressen nochmal.

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

Sorry, aber dann sieht das nicht nach einem gültigen CANopen Knoten aus. 
Es behauptet CiA401 zu implementieren, implementiert aber nicht mal die 
mandatory Objekte. Sogar das Identity Objekt (1018h) ist nicht korrekt 
drin.

Eigentlich ist es nicht notwendig, aber du hast das Gerät schon vorher 
immer in den Operational Mode gesetzt oder?

von RainerZufall24 (Gast)


Lesenswert?

Ja, hab ich auf operation gestellt.
Also ... auch bei der 64 00 kommen Fehler (80).

Ich habe einfach mal probiert und etwas gesendet:

Hier habe ich zyklisch das Byte 5 erhöht:
1
Send: 23  0 38  1 30  0  0  0
2
AW:   80  0 38  1  0  0  0  8
3
Send: 23  0 38  1 31  0  0  0
4
AW:   80  0 38  1  0  0  0  8
5
Send: 23  0 38  1 32  0  0  0
6
AW:   60  0 38  1  0  0  0  0  <<--
7
Send: 23  0 38  1 33  0  0  0
8
AW:   80  0 38  1  0  0  0  8
9
Send:23  0 38  1 34  0  0  0
Interesantwer weise kommt das alle 10 Sek.
Hier die Zeitstempel
1
00:16:15.524
2
00:16:25.525
3
00:16:35.526
4
00:16:45.526
5
00:16:55.527
Das ist mir bei allen 38er Adresse aufgefallen.

von RainerZufall24 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
wie ich gelesen habe bedeutet die Antwort 60 eine "successfull write" 
also Werte wurden erfolgreich geschrieben.

RainerZufall24 schrieb:
> gesendet: 40 00 38 xx 00 00 00 00

> 4F  0 38  0  2  0  0  0

> 41  0 38  1 28  0  0  0

> 4F  0 38  2  0  0  0  0

Noch mal zum Verstädnis:
Ich habe hier auf Adresse 38 00 zwei Objekte.
Objekt 1: Adresse 38 01 mit der Länge 28 Bit????
Objekt 2: Adressse 38 02 Länge 0?
Oder zeigt das Byte 4 ("28" schon den aktuellen Zustand der Adresse?

Würde bedeuten dass wenn ich auf ...
>Send: 23  0 38  1 32  0  0  0
... diese Antwort erhalte ...
>AW:   60  0 38  1  0  0  0  0

... müsste ich ja eigentlich mit 40 0 38 1 00 00 00 00
als Antwort eine 60 0 38 1 32 0 0 0  erhalten.
Was bedeutet Byte 1 (also das was hier immer auf 0 ist).
Wenn ich mir den Telegrammaufbau ansehen kommt doch der Index auf Byte 
1.

Nach dem angehängten Bild muss ich ja folgendes Abfragen:

40 60 00 00 00 00 00 00

40 60 01 00 00 00 00 00
...

von RainerZufall24 (Gast)


Lesenswert?

Ach nein!
Da war doch die Reihenfolge getauscht:

40 00 18 10 ...

 entsprichte 40h (read Byte 0) +

 1800h(Index, Byte 2 & 1) +

10h (subIndex Byte 3) +

 Daten (Byte 4-7)

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.