CanOpen Hack

Gast #6741570
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
Gast #6741597
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).
Persönliche Seite #6743408
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
Gast #6744672
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 ;-)
Angehängte Dateien:
Persönliche Seite #6744677
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
Gast #6744775
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
Angehängte Dateien:
Gast #6744875
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
Gast #6744880
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
Gast #6749202
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?
Persönliche Seite #6749213
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]
Gast #6749216
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
Persönliche Seite #6749238
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.
Gast #6749317
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
Persönliche Seite #6749375
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]
Gast #6750054
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
Angehängte Dateien:
Persönliche Seite #6750093
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.
Gast #6750224
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
Gast #6750251
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
Persönliche Seite #6750281
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
Gast #6750291
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.
Gast #6750498
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.
Gast #6751427
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
...
Angehängte Dateien:

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