Motorsteuerung mittels CANopen

DocBader

Level-1
Beiträge
1
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Erstmal ein großes Hallo an alle.

Habe zurzeit einige Verständnisprobleme mit der CANopen Ansteuerung meines Motors. Hoffe mir kann jemand helfen und dafür sorgen das ich hier etwas schlauer werde, da ich ein absoluter CAN Anfänger bin.

Erstmal zu meinem Aufbau.

Ich hab einen Servomotor ( Schneider Electric BCH0401O02A1C ) und die dazu passende Ansteuerung ( Schneider Electric LXM23AU01M3X ). Diese wird über ein USB-to-CAN compact Interface von IXXAT mit meiner LabVIEW Software auf dem Computer verbunden. IXXAT bietet für LabVIEW eine CAN Bibliothek an und auch ein ausführbares Demo.vci, mit welchem ich CAN Befehle Senden soll.

In dieser Demo.vci kommt es immer zu Fehlern und es passiert einfach nichts.

Meine Eingabemöglichkeiten sind in LabVIEW sind folgende:
- CAN Number
- CAN Baudrate

Arbitration IDDLCCommand CodeIndexSubindexDATA
0000 000000 00 00 00


Wenn ich das bisher richtig verstanden habe, dann müssen die Baudrate der Schnittstelle und der Motorsteuerung übereinstimmen. Das hab ich festgelegt und beide auf 500 kBd gesetzt.

Mit Arbitration ID kann ich leider nichts anfangen. Irgendwo hab ich gelesen das sie auch COB ID genannt wird und mit einer Node-ID addiert wird.
Eine Node-ID hab ich meiner Steuerung zugewiesen. Das ist aber auch das einzige was ich hier wirklich verstanden habe.

DLC steht für Data Lenght Code und sollte doch theoretisch auf auf einen Wert zwischen 1 und 4 gestellt werden, oder? Also je nachdem wieviele Bits bei DATA verwendet werden.

Command Code ist, je nach Anwendung von der Datenlänge abhängig, siehe Tabelle.
Message Type Command Code4 Byte3 Byte2 Byte1 byte
Write Request23h27h2Bh2Fh
Write Response60h60h60h60h
Read Request40h40h40h40h
Read Response43h47h4Bh4Fh
Error Response80h80h80h80h


Index bezeichnet die Adresse der Funktion welche gelesen oder verändert werden soll.

Subindex: keine Ahnung was hier hin kommt. Bisher hab ich noch keine Funktion im Handbuch gesehen die einen Subindex hatte.

DATA: beinhaltet den zu übertragenden Wert.


Was ich zurzeit versuche ist folgendes. Wenn ich die Motorsteuerung mittels der eingebauten Konsole bediene, kann ich einen sogenannten JOG Mode aktivieren und den Motor per Hand mit zwei Pfeiltaste ansteuern und die Umdrehung pro Minute einstellen.

Das möchte ich jetzt über CANopen Befehle in LabVIEW realisieren.
Der Befehl um den Motor zu aktivieren heißt in der eingebauten Konsole P2-30 und wird in der Anleitung mit folgender Adresse definiert:

023Ch , 023Dh (Wieso zwei ???)

Hier die Quelle: LXM23A_Manual_V201_EN.pdf
Auf Seite 336 findet man den Befehl P2-30 und die dazugehörigen Adressen und Werte.

Der Wert zum aktivieren des Motors ist 1.
Da ich den Wert ändern möchte benötige ich als Command Code 2F, da ich nur ein Byte übergeben möchte.
Meiner Meinung nach müsste der Code wie folgt aussehen:

Arbitration IDDLCCommand CodeIndexSubindexDATA
??? (602 = 601 + Node-ID)12F3C 020001 00 00 00


Die werte von Index und DATA werden über Kreuz Bitweise vertauscht. Ich weis nicht wieso, aber laut der Anleitung zur CANopen Programmierung stimmt die Anordnung der Werte. Ich bin mir nur nicht sicher ob die Werte an sich korrekt sind. Und ich weis halt nicht was ich bei Arbitration ID eingeben soll, habe da einfach mal einen Wert aus einem Beispiel zum schreiben neuer Werte übernommen und meine Node ID (=1) hinzuaddiert.

CANopen Anleitung: LXM23A_CANopen_Manual_V200_EN.pdf

Bei der Übertragung kommt es zu Fehlern und ich weis wirklich nicht was ich ändern muss damit es funktioniert. Hoffe jemand kann mir helfen und ich hab mein Problem halbwegs verständlich geschildert.

Mit freundlichen Grüßen
DocBader
 
Zuletzt bearbeitet von einem Moderator:
Also Du wirst nicht herumkommen, Dir ein paar Details der CANopen Spec durchzulesen. Ansonsten wird das hier endlos.

Grundsätzlich gibt es PDO's und SDO's, die auf verschiedenen Identifierbereichen definiert sind. Auch bestimmt der Bereich ob es ein Request vom Master oder ein Response vom Slave ist.

Willst Du also Parameter umschreiben, so ist Dein ID Bereich 600+Node Id richtig, der Response kommt dann entsprechend auf 580+NodeID.

Den anderen Bereich den Du angibt's, sind die Prozessdaten. Dabei ist es merkwürdig mit den zwei Adressen (oder nicht CANopen konform), denn eigentlich hat das zweite PDO einen Offset von 100hex.

Das ist aber nur ein kleiner Teil der CANopen Welt. Wenn Du Deinen Teilnehmer noch konfigurieren musst und anschließend operational zum Senden und Empfangen von PDO#s bringen willst, dann wird es länger ...
 
Zurück
Oben