# Problem beim Ansteuern Maxon Motor mit Beckhoff über CANopen



## mrx3 (20 Februar 2009)

Ich versuche seit Tagen einen Maxon-Motor mit der Maxon Steuerung EPOS 70/10 anzusprechen mit Beckhoff Kommunikationssystem. 

Die Kommunikation läuft über CANopen, weil die EPOS-Steuerung das unterstützt. Die EPOS-Steuerung wird an einer CANopen-Klemme EL6751 (von Beckhoff) angeschlossen. Von dieser Klemme geht es über EtherCAT-Klemme EK1100 (von Beckhoff) an PC. 

So. Ich versuche über dieses System den Motor anzusteuern. 

Das Problem ist: die Kommunikation ist unstabil, teilweise abgebrochen. Die EPOS-Steuerung meldet immer "CAN PDO length error". 

Ich habe alles richtig eingestellt: Abschlusswiderstand, CAN-ID, Bitrate, Leitung usw... EDS-File von EPOS habe ich auch. Keine Komponente ist kaputt, ich habe jede einzelne getauscht (Motor, Steuerung, Beckhoff-Teil...). Ich kann es nicht erklären. 

Kann mir jemand bitte helfen? Ich bin jetzt total verzweifelt.


----------



## zotos (20 Februar 2009)

Welche Kommunikationsbausteine verwendest Du denn?

Hast Du es mal mit den Beispielprojekt vom Hersteller versucht?

http://www.etracker.de/lnkcnt.php?e...load/Product/Zip/EPOS-IEC1131 Beckhoff -E.zip


----------



## mrx3 (20 Februar 2009)

Das Beispiel von Maxon habe ich auch. Aber es ist ein anderes System als ich benutze.

Ich nutze EtherCAT-Klemme EK1100, CANopen-Klemme EL6751. Der EPOS ist an CANopen-Klemme EL6751 angeschlossen.

Also das Beispiel nutzt mir gar nicht. Die Beckhoff-Hotline können mir auch nicht weiterhelfen. Denn schließlich liegt das Problem nicht ganz bei Beckhoff.

Bitte HILFE!!!


----------



## zotos (20 Februar 2009)

Also das ganze läuft aber eben instabil?

Mal so ins blaue geschossen. Wie lang die Zykluszeit von Deiner Steuerung nicht das die Kommunikation über den Canbus nicht nachkommt.


----------



## mrx3 (21 Februar 2009)

Zykluszeit könnte das Problem sein.

Ich habe aber die Standard-Einstellung genommen.

Ich weiß auch nicht genau, mit welcher Zykluszeiten es arbeitet.
- Die Zykluszeit auf der EPOS-Motor-Steuerung kann man nicht einstellen (glaube ich, habe nicht gefunden)
- Die Zykluszeit von dem SPS-Programm, weiß ich nicht wie man das einstellt.

Welche Zykluszeit meinst du, von EPOS-Steuerung oder SPS-Programm?
Wo kann ich die Zykluszeit in PLC Control einstellen?


----------



## mrx3 (22 Februar 2009)

Hat jemand geschafft, den EPOS-Steuerung (70/10 oder 25/4) über CANopen anzusteuern?


----------



## MasterOhh (24 Februar 2009)

Moin!

Also ich arbeite viel mit Maxon + Beckhoff.

Derzeit habe ich 6 EPOS 70/10 an einer BX8000 SPS und die laufen wie geschmiert.

Den PDO length Error kann ich mir nicht erklären. Wenn du den EPOS mit der Software von Maxon konfiguriert hast, dann kannst du ja nicht mehr als 8 Byte pro PDO zusweisen. 
Kann es vieleicht sein das eine Variable von der SPS nicht den passenenden Datentyp hat?

Das einzige was bei mir am Anfang des öfteren auftrat, war nen Datenstau im CAN Bus weil ich alle PDOs per Default asyncron betrieben habe. Und wenn dann natürlich an jedem PDO nen Ereignis ist und alle gleichzeitig senden wollen ist irgendwann der Kanal dicht.
Abhilfe dafür ist die PDOs synchron senden und empfangen zu lassen um halt solche Staus zu vermeiden. 

Vieleicht kannst du ja mal die CAN Konfig von deinem 70/10 posten, wenns nicht zuviel arbeit ist.

Ansonsten ist ja Beckhoff + Maxon+ CAN open relativ narrensicher. Man braucht nichtmal viel Ahnung von der Materie um alles zu konfigurieren.


----------



## mrx3 (24 Februar 2009)

Danke MasterOhh.

Ich habe die PDOs nun synchron eingestellt, bei EPOS, als auch bei TwinCAT. Ich habe 4 RxPDO und 4 TxPDO wie default gelassen, und keine hat über 8 Byte Mapping.

Es läuft tatsächlich viel stabiler, aber... nur wenn die GUI von Maxon gerade geöffnet ist! :shock:

Sobald ich die GUI zumache, oder Polling in GUI stoppe, oder den Seriell-Stecker rausziehe, dann läuft der Motor nicht mehr gleichmäßig (er soll alle 500ms die Richtung wechselt, wie das SPS-Beispiel von Maxon). Das rote LED von der CANopen-Klemme EL6751 fängt auch an zu blinken. Ab und zu kommt sogar den Fehler "CAN Passive Mode error" in dem EPOS.

Ich frage mich was hat die CANopen-Kommunikation mit der Seriell-Schnittstelle RS232 zu tun?

Morgen bei der Arbeit, werde ich CAN Konfig von dem EPOS 70/10 posten. Das Ding macht mich langsam wahnsinnig.


----------



## mrx3 (25 Februar 2009)

Hallo MasterOhh und alle andere,

ich habe hier dazu die Screenshot von der CAN-Konfiguration angefügt.


----------



## MasterOhh (25 Februar 2009)

Hmm, Also das Object Dictionary hilft mir jetzt nicht wirklich weiter.

Ich nehme mal an, du hast zuerst im Startup Wizard deine Motorparameter eingestellt, dann evtl. nen autotuning gemacht. Und danach im CANopen Wizard deine PDOs belegt und vieleicht noch die I/O Configuration angepasst.

Danach hast du im Systemmanager von Twincat nach Boxen am CAN Bus gescannt und der hat den EPOS Node 1 gefunden. Baudrate auf 1M gestellt und den PDOs deine Ein-bzw- Ausgangsvariablen zugewiesen (zeige Variablen => unbenutzt; zeige Variablentypen => passende Größe), (incl. Transfertyp 1(cyc,sync) bzw. 255 (async))
Danach hast du die Zuordnung erzeugt, geprüft und auf die SPS geladen. 

Wenn du jetzt den Motor mit deinem Twincatprogramm steuern willst zickt er rum? Ist dein Programm korrekt? (Mode of Operation gesetzt, Control Word richtig gesetzt, zwischendurch immer auf das Feedback vom EPOS gewartet (der is langsamer als die SPS) )etc..... ?


----------



## mrx3 (25 Februar 2009)

Die Konfiguration habe ich gemacht genau so wie du beschrieben hast. Nur beim SPS-Programm ist es anders. Und zwar so:

Es gibt eine Bibliothek von Maxon, mit den ganzen Funktionsblöcken, womit man ziemlich alles mögliches mit dem Motor machen kann. Problem ist: alle Funktionsblöcke haben als Inputs nur die ADS-Adresse und Node-Id, aber kein Controlword.

Von daher habe ich auch gar keine Verknüpfung mit den PDOs gebraucht. Ich habe nur eine dummy Variable, verknüpft mit irgendeine Variable von der EL6751, damit TwinCAT nicht meckert.

Sprich, die Funktionblöcke lesen die Motordaten direkt aus der Object Directory über ADS-Adresse. Wie liest du dann sonst die Daten aus der Motor?

Asserdem das Verhalten mit der Maxon GUI über RS232, kann du das erklären?


----------



## MasterOhh (26 Februar 2009)

Ich lasse die Bibliothek von Maxon links liegen. 
Um den Betriebsmodus zu wählen nutze ich "Mode of Operation". Zum setzen der jeweils benötigten Betriebsparameter nehme ich das "Controlword". Als Feedback bekomme ich dann "Mode of Operation Display" und das "Statusword" zurück. 

Sollwerte wie "Velocity Mode Setting Value" oder "Target Position" schreibe ich via RX PDO auf den EPOS und Ist Werte ("Velocity Mode actual Value" bzw. Positionmode actual Value") bekomme ich über die TX PDOs geschickt. 

In meinem Programm habe ich nen Funktionsblock in dem ich alle von mir benötigten Modi definiert habe (Vel - Mode, Pos- Mode, Current - Mode und Homing). Meine 6 Motoren sind jeweils eine Instanz von diesem FB. 
Wenn ich einen Motor in einen bestimmten Modus gesetzt habe, kann ich einfach die Sollwerte über die mit den PDOs verknüpften Variablen schreiben.
ADS brauche ich für diese Grundfunktionen überhaupt nicht.

Schau mal in die Firmware Dokumentation von dem 70/10. Da ist eigentliche diese Prozedere sehr ausführlich beschrieben und vorallem die Funktionen von Control und Statusword gut erklärt.

Das der Motor richtig funktioniert wenn du dich mit Hilfe der EPOS Software mit dem Controller verbindest, könnte daran liegen das die Software dann die Steuerung übernimmt und die SPS nix mehr zu sagen hat.


----------



## mrx3 (26 Februar 2009)

Eigentlich wenn die RS232-Verbindung besteht, steuert das SPS-Programm auch mit. Schließlich ist der Motor auch so gelaufen, wie er im SPS-Programm sein soll, nur eben stabiler wenn RS232 mit dabei ist.

Es gibt in dem EPOS auch ein RS232-CAN-Gateway, durch das man über RS232 den CAN-Bus ansprechen kann. Kann sein, das durch diese  RS232-Verbindung etwas auf dem CAN-Bus geändert wurde, so dass es alles bei mir stabiler läuft. :-? Kann auch sein, dass es ein Bug ist.

Wenn du deine EPOS mit BX8000 steuert, musst du ganz am Anfang die Verbindung initialisieren? So eine Art von "Port öffnen" oder so? Oder ist es bei dir einfach "Strom einschalten", "Mode auswählen" und dann "steuern"?


----------



## MasterOhh (27 Februar 2009)

Einfach nur Strom an, Mode wählen, Controlword setzen, Statusword prüfen und dann SollWerte schreiben. 
Da ich sämtliche Ein und Ausgangsvariablen direkt mit ihren Gegenstücken auf dem EPOS über CANopen verknüpft habe, brauche ich in meinem Programm nichtmal die AMSNetID oder gar die NodeIDs zu wissen. 

Ich muss mal schauen ob ich aus meinem Programm irgendwie ein kleines Beispiel extrahieren kann wenn ich ne ruhige Minute finde.


----------



## mrx3 (27 Februar 2009)

Ja, ein kleines Beispiel wäre nett.

Verstehe ich das so richtig?
Alle freigeschalteten PDO (Rx und Tx) von EPOS müssen verknüpft werden. Also es darf ein einziges PDO von EPOS unverknüpft bleiben. Oder wie ist es bei dir?


----------



## MasterOhh (27 Februar 2009)

Also, du hast ja sicher schon genaue Vorstellungen was du mit dem Motor machen willst. Damit weißt du auch welche Funktionen von dem EPOS benötigt werden. Damit kannst du ganz einfach rausfinden (EPOS Firmware Spezifikationen) welche Parameter der EPOS über CANopen senden und empfangen muss/soll.
Diese Parameter legst du mit dem CANopen Wizard auf die PDOs, dabei brauchst du nicht alle PDO vollpacken. Wenn dir 2 RX PDOs und 1 TX PDO reichen, bleibt der Rest einfach leer. 

Jetzt verknüpfst du die Variablen aus deinem Programm mit den Parametern des EPOS (im Systemmanager). Auch hier musst du nicht alle Parameter verknüpfen, macht aber Sinn, weil man ja eh nur das sendet und empfängt was man wirklich braucht.

Im Anhang ist mal ein kleiner Ablauf, wie ich einen Motor in den Profile Position Mode versetze. Das lässt sich ganz leicht als Funktionsblock umsetzen. Wenn der Ablauf in dem Leerlaufblock angekommen ist, kann man dem Motor mit TargetPos beliebige Sollpositionen zuweisen, die dieser dann anfährt.
Ich hoffe das macht die Sache etwas verständlicher.


----------



## mrx3 (1 März 2009)

Hi MasterOhh,

es hat endlich geklappt. Ich bin sooo erleichtert. Es lag wirklich an den Verknüpfungen. Ich habe alles von vorn gemacht, PDO freigeben die ich wirklich brauche, die richtigen Datentype gesetzt, und Verknüpfung mit Variable erstellt. Und es funktioniert.

Ich habe weiterhin die Bibliothek von Maxon benutzt. Die funktioniert auch sehr gut. Damit ist das Problem nun erledigt.

Ich danke dir für deine Hilfsbereitschaft, MasterOhh; dir noch viel Erfolg bei der Arbeit.

Bis dann. Ciao.


----------



## MasterOhh (2 März 2009)

Freut mich das es nu funktioniert. Damit hast du den komplizierten Teil hinter dir


----------



## Matze_0501 (12 September 2017)

Hallo Ihr Lieben,
ich bin neu hier im Forum und auch ein blutiger Anfänger in der SPS-Welt. Normalerweise bin ich in der Mikrocontrollerprogrammierung mit C# zuhause.
Nun schreibe ich meine Master Abschlussarbeit und arbeite mich gerade in Beckhoff/ TwinCat 3 ein.

Mein Problem ist ein Ähnliches, wie aus diesem Beitrag, darum versuche ich mein Glück an dieser Stelle.
*Ich möchte einen Maxon DC-Motor mit Encoder über EtherCat --> CANopen --> EPOS 24/5 (275512) ansteuern.*

Was funktioniert:
- Ansteuern des Motors per EPOS Studio (Serielle Schnittstelle USB-to-Serial / RS232), sowie Konfiguration und Parametrierung ist kein Problem
- TwinCat 3 unter VisualStudio 2015 (Deutsch) läuft problemlos
- "Automatische" Konfiguration/ Scan sämtlicher Geräte, einschließlich EPOS-Knoten funktioniert
- Standardmäßig werden 4 TxPDO's und 4 RxPDO's angelegt
- Über die Auswahl des Knotens --> Reiter "ADS" --> Onlinezugriff kann Problemlos auf das "Object Dictionary" zugegriffen, geschrieben und gelesen werden (z.B. Velocity Mode mit Drehzahlvorgabe --> Motor dreht)  --> *Funktioniert aber nur im "Config-Mode"
*
Jetzt zu meiner Frage: Kann mir jemand vielleicht Step-by-Step erklären, wie ich die PDO's (und sonstiges) konfiguriere/ konfigurieren muss, damit ich im RUN-Modus in meiner SPS-Routine per CANopen den Motor steuern kann? Vielleicht mit einem kleinen Programmbeispiel?

Ich habe mal ein paar Bilder von meiner aktuellen Konfiguration/ Aufbau angehängt.

Ich hoffe wirklich Ihr könnt mir dabei helfen.
Ganz herzlichste Grüße,
Mathias


----------

