-> 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
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.
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:
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
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 ID | DLC | Command Code | Index | Subindex | DATA |
00 | 00 00 | 00 | 00 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 Code | 4 Byte | 3 Byte | 2 Byte | 1 byte |
Write Request | 23h | 27h | 2Bh | 2Fh |
Write Response | 60h | 60h | 60h | 60h |
Read Request | 40h | 40h | 40h | 40h |
Read Response | 43h | 47h | 4Bh | 4Fh |
Error Response | 80h | 80h | 80h | 80h |
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 ID | DLC | Command Code | Index | Subindex | DATA |
??? (602 = 601 + Node-ID) | 1 | 2F | 3C 02 | 00 | 01 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: