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
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.
"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).
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
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 ;-)
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.orghttps://www.frenzel-berg.de/produkte/canopen-chip/ein-ausgang/co4011-fl-single-chip.html
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
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
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
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ß
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?
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]
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.
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
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
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]
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
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.
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
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
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.
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?
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
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
...