22 Stimmen

Wie man eine einfache CANopen-Schicht programmiert

Wir haben ein Roboterprojekt, bei dem die Motorsteuerungen mit CANopen für die Kommunikation. Ich muss mit diesen Motorsteuerungen über einen Master-Mikrocontroller kommunizieren. Das Problem ist, dass ich eine CANopen-Schicht in diesem Mikrocontroller entwickeln muss, aber ich weiß nur, wie man auf niedriger Ebene (CAN) sendet und empfängt.

Ich weiß nicht viel über CANopen (PDO, SDO, Heartbeat, Objektverzeichnis, usw.). Ich habe versucht, die CiA-Spezifikationen zu lesen, aber es war sehr kompliziert. Ich wäre dankbar, wenn mir jemand die richtige Richtung weisen oder mir ein gutes Tutorial zur Programmierung einer einfachen CANopen-Schicht geben könnte.

14voto

Da dies ein Thema von allgemeinem Interesse zu sein scheint, stimme ich zu, dass das Verständnis der vollständigen Originalspezifikationen eine etwas schmerzhafte Erfahrung sein kann. Hier ist also ein Vorschlag für "get your drive going", im Gegensatz zu "Implementierung der ganzen Sache":

  • Prüfen Sie, ob Ihre CANopen-Antriebe über die CiA 402-Standardobjekte bedient werden können, und aus Performance-Gründen wäre es völlig in Ordnung, PDOs NICHT zu konfigurieren und zu verwenden, und Sie brauchen auch keinen Heartbeat, usw. Normalerweise schalten Sie die Zustandsmaschine des Antriebs (Objekt 6040h, Steuerwort), stellen den Betriebsmodus ein (Objekt 6060h) und setzen zusätzliche Parameter wie "profile position velocity".

  • Dann implementieren Sie nur beschleunigte SDO-Überweisungen . (Siehe http://en.wikipedia.org/wiki/CANopen .) SDO-Download dient zum Schreiben/Ändern eines Objekts auf Ihrem Laufwerk. SDO-Upload dient zum Lesen eines Objekts.

  • Ich schlage vor, eine PC-Software zu verwenden, die SDOs lesen und schreiben kann und einen CAN-Bus-Monitor hat. (Unser Kickdrive Zero Freeware kann das tun, aber eigentlich sollte jedes andere PC-Tool für CANopen funktionieren). Führen Sie einige Lese- und Schreibbeispiele für die Datentypen und Objekte durch, die Sie benötigen. Schauen Sie sich an, wie dies in Frames auf CAN-Ebene übersetzt wird. Bei einfachen Integer-Datentypen ist es immer nur ein Frame für die Anfrage und einer für die Antwort.

  • Erstellen Sie nun einen einfachen Protokollstack auf Ihrem Mikrocontroller, der die SDO-Anfragen zum Herunter- und Hochladen senden und die Antworten verarbeiten kann.

Haftungsausschluss - die obigen Ausführungen haben nicht einmal annähernd etwas mit der "Implementierung von CANopen", der "Unterstützung von CANopen" oder gar der "Konformität mit CANopen" zu tun. Es geht darum, "Ihren Antrieb so schnell wie möglich und ohne Code von Drittanbietern zu bewegen". Was manchmal das Richtige ist.

4voto

Alex Punkte 1436

Wir haben unsere CANopen-Schicht von Grund auf sowohl für eingebettete ARM- als auch für Windows-PC-Geräte implementiert. Es ist nicht unmöglich, anders als frühere Antworten Sie vielleicht glauben machen. Wenn Sie nur die Grundfunktionen von CANopen benötigen und die Konzepte des Protokolls schnell erlernen können, können Sie die Dinge recht schnell zum Laufen bringen.

Sie werden die CiA-Spezifikation lesen müssen, daran führt kein Weg vorbei, aber am Anfang könnte sie sich als etwas überwältigend erweisen. Ich empfehle, dass Sie mit der Lektüre von " Eingebettete Netzwerktechnik mit CAN und CANopen " von Pfeiffer, Ayre und Keydel. Darin werden die grundlegenden Konzepte gut erklärt, was wiederum zum besseren Verständnis der Spezifikation beiträgt.

1voto

Stefan Punkte 42586

Leider gibt es keine einfach CANopen-Schicht. Um CANopen zu unterstützen, müssen Sie die ganze Sache implementieren.

Ich schlage vor, dass Sie eine CANopen-Bibliothek von einem Drittanbieter kaufen. Normalerweise sind sie nicht billig, aber in Anbetracht der Zeit, die Sie benötigen würden, um dies selbst zu implementieren, ist es billiger als Ihr Gehalt für diese Zeit.

Wir haben in den letzten Jahren der PORT GmbH ANSI-C CANopen-Bibliothek Bibliothek, die im Vergleich zu anderen Bibliotheken, die wir ausprobiert haben, preisgünstig ist und nur wenige Fehler aufweist.

1voto

Jason Machacek Punkte 974

Wir verwenden den MicroCANopen-Stack mit dem Manager-Add-on, das Sie hier finden: http://www.canopenstore.com/pip/microcanopen.html

Es ist relativ günstig im Vergleich zu anderen Stacks, obwohl wir es auf allen Knoten in unserem Netzwerk verwenden, so dass ich keine Aussage darüber machen kann, wie es mit anderen CANOpen-kompatiblen Geräten funktioniert.

0voto

robert.berger Punkte 12431

Wenn es sich um etwas Kommerzielles handelt, würde ich die Implementierung von CANopen nicht in Betracht ziehen. Das wird Sie (selbst für eine Teilmenge) zwischen vier und sechs Monaten kosten (wenn Sie wirklich wollen, dass es funktioniert). Ich weiß nicht, wie hoch Ihr Stundenlohn ist und welche Anforderungen Sie an die Zeit bis zur Marktreife haben. Das müssen Sie selbst ausrechnen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X