Forum: Mikrocontroller und Digitale Elektronik CANopen - diverse Fragen


von Roland B. (roland_b69)


Lesenswert?

Hallo,

ich möchte mehrere Schrittmotoren in Betrieb nehmen.
Diese verfügen über das CANopen-Protokoll.

Ich habe ein Interface der Firma Kvaser und mit deren gratis API kann 
ich beliebige CAN-Frames schicken.

Nun bin ich am überlegen selbst etwas zu entwickeln, da ich bisher 
keinen kostenlosen / günstigen CANopen-Stack finden konnte, der mit 
einem Kvaser-Inferface kompatibel ist.

Meine Idee ist eine fertige Gratissoftware wie "Kickdrive Zero" zur 
Konfiguration (SDO) zu nutzen und die Schrittmotoren (kompatibel mit CiA 
402) hinterher direkt mit selbst erzeugten Frames (PDO) zu betreiben.

Ich bin kein professioneller Programmierer und dies ist mein Erstkontakt 
mit der CAN-Welt.

Ist mein Vorhaben realistisch oder habt ihr bessere Ideen?

Ich habe bisher schon eine ganze Weile im Internet gesucht, aber bisher 
leider nirgendwo ein vollständiges Beispiel für einen ganzes CANopen 
Telegramm gefunden. Kennst jemand eine Seite / Quelle, bei der man 
wirklich nachvollziehen kann, wie sich ein komplettes Diagramm 
zusammensetzt, so dass man danach selbst ein gültiges Diagramm inklusive 
Kontrollfeld usw. schreiben kann?

Vielen Dank für die Hilfe :-)

von Christian K. (christian_rx7) Benutzerseite


Lesenswert?

Schau dir mal die LPC11Cxx an, mit denen hatte ich auch meinen ersten 
richtigen CANopen Kontakt.
Das CiA 401 ist in den Beispielen enthalten und sollte sich eigentlich 
leicht auf das 402er erweitern lassen.
Christian_RX7

von fbi (Gast)


Lesenswert?

Roland B. schrieb:
> Ist mein Vorhaben realistisch oder habt ihr bessere Ideen?

Kommt drauf an wieviel Geld und/oder Zeit Du hast.
Du müßtest Dich zumindest durch die CIA Specs wühlen. Insbesondere die 
300er Serie (speziell 301,302) und ntürlich die 402. Interessant dürfte 
auch die EN_50325_4 sein.
Wenn Du da durch bist, dann kanst Du auch die Can-Frames 
auseinandernehmen und wieder zusammenbasteln.

Hier mal ein paar Auszüge aus meiner Linksammlung:
http://www.canopen.us/
http://www.canopenbook.com/
http://www.canopenbook.com/microcanopen.htm
http://www.canopenmagic.de/
http://www.esacademy.com/

von fbi (Gast)


Lesenswert?


von fbi (Gast)


Lesenswert?


von Roland B. (roland_b69)


Lesenswert?

Vielen Dank für die vielen Informationen :-)

Ich hab mich durch die Links gekämpft und warte gerade auf das Buch 
"Embedded Networking With CANopen". Das dauert aber noch ne Weile, bis 
die Bibliothek das hat ;-)

Weiterhin habe ich noch einen Link gefunden, den ich für eine sehr 
hilfreiche Erklärung halte, auch wenn nicht alles perfekt ist:
http://mobilecontrols.ifmefector.com/attachment.php?s=eaab30e433650341a7604198c383f928&attachmentid=261&d=1371649692

Von hier stammt der Link:
http://mobilecontrols.ifmefector.com/showthread.php?p=681

Allerdings habe ich noch immer ein riesiges Fragezeichen :-(
Wenn ich mir eine SDO Nachricht ansehe, dann ist diese wie folgt 
aufgebaut:

COB ID (XXX), DLC(8), Command(byte), Index(byte0, byte1), 
Sub-index(byte), Date(byte0 bis byte4)

Normalerweise kenne ich es so, dass man Binärzahlen so schreibt, dass 
das niederwertigste Bit rechts steht.
Jetzt steht hier aber z.B., dass beim Index byte0 links von byte1 steht. 
Bedeutet das jetzt, dass ich die ganze Bitfolge einfach "spiegeln" muss, 
oder muss das so gesplittet werden, dass ich die Bitfolge nach 4 byte 
trenne und einfach überkreuze?
Generell ist mir nicht klar, wie herum die Bitfolgen angegeben werden. 
Selbst bei dem "Commandbyte" weiß ich nicht, ob das niederwertigste Bit 
links oder rechts steht.

Das ist jetzt vielleicht eine dumme Frage, aber die Nullen, um bei einer 
kleinen Zahl auf ein ganzes Byte zu kommen werden immer auf der 
höherwertigeren Seite aufgefüllt, oder?

Vielen Dank :-)

von Peter P. (Gast)


Lesenswert?

Vielleicht hilft dir der folgende Link weiter:

https://wiki.wireshark.org/CANopen

Vielleicht auch, wenn du den Beispiel-Trace, der dort zu finden ist,
mal mit Wireshark öffnest?
Wobei ich meinen alten Wireshark auf die Schnelle nicht dazu gebracht
habe, auch ein CANopen Decoding durchzuführen...

von Peter P. (Gast)


Lesenswert?

Letzte Version von Wireshark installieren (meiner war
scheinbar zu alt) und dann via

https://ask.wireshark.org/questions/41447/enable-canopen-protocol

zeigt bei mir jetzt CANopen Decoding an.

von Jürgen (Gast)


Lesenswert?

Hey,
ganz so schwierig ist es nicht.
Meist hören diese Teilnehmer auf eines der angesprochenen Profile.
Zumeist sind diese dann aber nur rudimänter implementiert,
so das man mit ein paar CAN-Open Kommandos und ein paar Zusätzlichen 
Befehlen sich durch die Statemachine hangeln kann.
Letzlich wird dann nur Steuerword uns Sollwert bedient und evtl. muß ein 
Heartbeat erzeugt/bearbeitet werden.

Am besten siehst Du Dir einen Trace eines Anlaufs an, darin ist dann 
alles enthalten.
Grüße
Jürgen

von Thomas T. (runout)


Lesenswert?

Hi,

im "CiA Draft Standard 301" ist das CANopen-Protokoll genau erklärt.

CANopen ist schon mehr "industrial" und man sollte nicht erwarten,
dass man einen Stack für lau bekommt.

Microchips hatte mal in einer PIC-App-Note einen Quellcode für CANopen 
drin.

das wäre noch eine Quelle:
http://www.inteliss.com/index.php/en/product-canopen-stack

NMT, PDO, SDO können alle
Die guten können auch sdo-bloc-upload/download

Der PCAN-Diag (kostenlos) oder PCAN-Explorer
sind zur Diagnose ganz brauchbar.

grüße runout

von LTC1043 (Gast)


Lesenswert?

Thomas T. schrieb:
> CANopen ist schon mehr "industrial" und man sollte nicht erwarten,
> dass man einen Stack für lau bekommt.

Als OSS gibts das schon:
http://sourceforge.net/projects/canopennode/

Gabe damit sehr gute Erfahrungen gemacht.

Cheers

von Steffen R. (steffen_rose)


Lesenswert?

Roland B. schrieb:
> Jetzt steht hier aber z.B., dass beim Index byte0 links von byte1 steht.

Bei der CANopen Standardisierung mußte man sich entscheiden, ob man 
Werte, für die man mehr als ein Byte benötigt im Little oder Big Endian 
Format überträgt. Man hat sich für das Little Endian Format entschieden.

https://de.wikipedia.org/wiki/Byte-Reihenfolge

von Steffen R. (steffen_rose)


Lesenswert?

fbi schrieb:
> Du müßtest Dich zumindest durch die CIA Specs wühlen. Insbesondere die
> 300er Serie (speziell 301,302) und ntürlich die 402. Interessant dürfte
> auch die EN_50325_4 sein.

Genau!

CiA301 kann jeder downloaden. Es ist nur eine Registrierung notwendig.
Bei CiA402 wird es schwierig, wenn man nur wenig Geld ausgeben will. 
Jedoch habe ich bisher nur Produkthandbücher gesehen, die die relevanten 
Teile beinhalten. So dass man notfalls darauf verzichten könnte. 
Natürlich werden dann ein paar Fragezeichen bleiben. Aber man bekommt 
die Antriebe zumindest in Betrieb.

http://www.can-cia.org/can-knowledge/canopen/cia402/

Ist es ein Bastlerprojekt oder kommerziell?
Bevor man einen eigenen Stack in Angriff nimmt, wäre eine CANopen 
Schulung ratsam.

von Thomas T. (runout)


Lesenswert?

He, he

"canopennode" unterstützt ja ne ganze Menge Microcontroller
sowie Linux nativ,

Wäre gut zu wissen, ob es dort auch eine Raspi-Lösung gibt.
I.d.R. verwenden die immer einen SPI/CAN-Controller (z.B. MCP2515)

Den Treiber müsste man vielleicht aus Linux "klauen"
oder Linux unterstützt "canopennode" sogar "out of the box".

Grüße Runout

von Steffen R. (steffen_rose)


Lesenswert?

canopenNode ist die Applikationsseite. Es baut auf den Devicetreiber 
auf, welcher ggf. Teil des Kernels ist.

von Roland B. (roland_b69)


Lesenswert?

Vielen Dank euch allen :-)

Das Wireshark Logfile war ganz hilfreich und mit der Byte-Reihenfolge 
habe ich auch wieder etwas neues gelernt.

Die Cia 301 werde ich mir als nächstes ansehen.
Auf die 402 muss ich wohl verzichten, aber das Datenblatt der Motoren 
sagt eigentlich alles Notwendige.

Es handelt sich um ein Bastelprojekt ohne kommerziellen Hintergrund.

Die genannte "canopennode" unterstützt leider mein Interface nicht, aber 
die Herstellereigene API ist nicht schlecht und ein CANopen Frame zu 
generieren scheint machbar. ;-)

Ich werde probieren eigene SDO-Nachrichten zu schreiben.
Für meine Zwecke würde es reichen, wenn ich bestimmte Nachrichten fest 
implementiere.

von Steffen R. (steffen_rose)


Lesenswert?

Roland B. schrieb:
> Die genannte "canopennode" unterstützt leider mein Interface nicht, aber
> die Herstellereigene API ist nicht schlecht und ein CANopen Frame zu
> generieren scheint machbar. ;-)

Dann erweitere canopennode doch einfach. Ist bestimmt einfacher als 
alles selbst zu schreiben.

von Roland B. (roland_b69)


Lesenswert?

Steffen R. schrieb:
> Roland B. schrieb:
>> Die genannte "canopennode" unterstützt leider mein Interface nicht, aber
>> die Herstellereigene API ist nicht schlecht und ein CANopen Frame zu
>> generieren scheint machbar. ;-)
>
> Dann erweitere canopennode doch einfach. Ist bestimmt einfacher als
> alles selbst zu schreiben.

Gute Idee, ich werde es mir mal ansehen :-)

von Tobias W. (wagnertobse)


Lesenswert?

Ich habe schon einige Erfahrungen mit canfestival gemacht (canopen lib). 
Die lib ist recht umfangreich und Objekte lassen sich sehr bequem mit 
einen Python GUI erstellen.
Läuft bei mir stabil auf einen stm32, einen tms570 und einen embedded 
Linux in Slave und master betrieb.

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.