# Parametrierung CANopen für eine igus D1



## LeFish (27 August 2020)

Hallo allerseits,

ich bin gerade dabei eine CANopen Verbindung zwischen einer Beckhoff EL6751 Klemme und einer igus dryve D1 Motorsteuerung zu parametrieren.

Anhand des online verfügbaren EDS-Files, welches nur Basisobjekte beinhaltet möchte ich mittels CANeds mein eigenes schreiben, welches alle im Handbuch der D1 aufgelisteten Objekte als PDOs verfügbar macht. Ich habe dazu ein Bild angehängt. Die unterstrichenen Adressen sind parametriert. 
	

		
			
		

		
	

Anhang anzeigen 50854


Den derzeitigen (unvollständigen) Stand des EDS-Files habe ich als zip angehängt. 
	

		
			
		

		
	

Anhang anzeigen 50853


Ich habe begonnen die RxPDOs zu parametrieren. Ich möchte auf RxPDO1 alle PDOs zur Steuerung der D1 haben. Auf RxPDO2 sind alle Bewegungsparameter (Geschwindigkeit und Position). Derer gibt es nach meiner Logik 9.

Jetzt habe ich das Problem, dass nach einladen der erstellten EDS Datei in TwinCAT unter RxPDO2 nur die ersten zwei Einträge ("607Ah Target Position" und "6081h Profile Velocity") als verlinkbare Prozessvariablen angezeigt werden. 
	

		
			
		

		
	

Anhang anzeigen 50855


Wenn ich unter Node/Online nachsehe ergibt sich folgendes Bild:
Anhang anzeigen 50857


Es werden jedoch für alle verfügbaren Adressen Werte unter Node/Online angezeigt.
Anhang anzeigen 50858


Was mache ich falsch?

Danke für eure Hilfe!

Beste Grüße
LeFish


----------



## oliver.tonn (27 August 2020)

PDOs sind auf 8 Byte beschränkt und die sind bei Dir mit den zwei Positionen schon erreicht. Kann man hier nachlesen.


----------



## LeFish (27 August 2020)

Ok, das klingt einleuchtend.

Dann wäre da noch die Möglichkeit weitere PDOs anzulegen.

Habe mal ein Test-File erstellt:
	

		
			
		

		
	

Anhang anzeigen 50865

Bei dem habe ich einen RxPDO5 und einen TxPDO5 hinzugefügt.


Beim reinladen der EDS Datei in TC meckert er (für Tx und Rx gleichermaßen): 
	

		
			
		

		
	

Anhang anzeigen 50864


Ich klicke beide male auf "JA".

Wenn ich nun die Konfiguration auf die SPS lade, bekomme ich am CANopen-Node einen Fehler:    4 = SDO syntax error at StartUp
Anhang anzeigen 50866

bzw. unter Diag vom Node: SDO-Upload-Error 1804, SI 1: Object does not exist in the object dictionary

Anhang anzeigen 50867


Mir scheint, als könnten nur jeweils 4 PDOs existieren (?!)

Was bringen mir dann aber die ganzen schönen und nützlichen Objekte lt. Handbuch, wenn ich nicht alle auf den Bus legen kann, sondern nur max. jeweils 8 Variablen zu je max 32bit!

Oder habe ich da einen groben Denkfehler?


----------



## oliver.tonn (27 August 2020)

Na ja, meist braucht man ja nicht alle Objekte als PDOs, also als zyklische Objekte in Echtzeit. Es gibt in TC3 Funktionsbausteine mit denen man CAN Objekte auslesen kann, dann allerdings nicht zyklisch.


----------



## oliver.tonn (27 August 2020)

Wenn ich der von mir verlinkten Doku glauben darf gibt es bis zu 512 RX und TX PDOs, allerdings muss das Gerät dies auch unterstützen. Ich denke nicht, dass man einfach die EDS Datei anpassen kann um mehr PDOs zu erhalten.


----------



## LeFish (27 August 2020)

Ich glaube auch, dass der Node das unterstützen muss und die D1 nur 4+4 PDOs unterstützt.

Auch habe ich zB bei Wikipedia gefunden, dass bis zu 255 Subindizes auf einer Adresse dranhängen dürfen. Zitat: "Ein Index kann wiederum bis zu 255 Subindizes enthalten. " von https://de.wikipedia.org/wiki/CANopen
Aber klar, wenn das Fenster nur 8byte groß ist tu ich mir schwer 255 32bit-Werte zu übertragen =)

Meinst du mit dem von dir oben erwähnten Funktionsbaustein zum Auslesen den FB_EcSoERead aus der Bibliothek Tc2_EtherCAT?

Kennst du ein Beispiel, wo zB ein 4Byte-Wert (vielleicht sogar über CANopen) abgefragt oder beschrieben wird?

Sorry für meine blöde Frage, aber ich mach das zum ersten mal und eine Referenz würde mir sehr helfen. Ich hab auch noch keine Bus-Erfahrung im Allgemeinen, wie man vielleicht schon gemerkt hat =)

DANKE!


----------



## LeFish (27 August 2020)

Ich habe mich jetzt mit den Prozessvariablengrößen und der Aufteilung auf die 4 +4 TxRxPDOs gespielt.

Ich konnte alle Objekte der D1 hinzufügen und sehe diese auch im TC3/IO:
	

		
			
		

		
	

Anhang anzeigen 50877


Das aktuelle, von mir bearbeitete EDS-File habe ich angehängt: 
	

		
			
		

		
	

Anhang anzeigen 50878


Wo mir nun das Verständnis fehlt: Obwohl ich im EDS die PDOs mit deren Adressen neu definiert habe, werden mir noch immer die im default-EDS hinterlegten Werte angezeigt.

Konkret heißt das:
Statusword liegt auf 6041h und wird mir auch dort angezeigt:
Anhang anzeigen 50879

Obwohl ich jedoch auf TxPDO2.0 die Adresse 6067h (Position_window) im EDS-File definiert habe, wird mir der Wert von 6041h (Statusword) = 1088 angezeigt.
Anhang anzeigen 50880

Im von igus verfügbaren Default-EDS liegt genau auf TxPDO2.0 6041h:
Anhang anzeigen 50881



Wie kann ich der D1 die neue  (meine) Parametrierung beibringen? Oder geht das nicht?

Danke für eure Unterstützung!


----------



## oliver.tonn (28 August 2020)

Also ich habe es gerade mal probiert und bei mir hat es geklappt.
Ich habe bei PDO1 mal den Eintrag DefaultValue von 60410010 auf 60680010 geändert und nachdem ich den Slave neu hinzugefügt habe stand im PDO die andere Zuordnung drin. Du musst natürlich den Slave löschen und wieder einfügen.
Was ich nicht weiß ist, was man wo außer dem Daten Typ noch ändern muss. Ich hatte mal statt "StatusWord" "Position Actual Value" genommen, aber obwohl ich den Datentyp auf 4 geändert habe hatte der I/O nur 2 Bytes und nicht 4. und der Typ war immer noch UINT statt DINT.


----------



## LeFish (28 August 2020)

oliver.tonn schrieb:


> Was ich nicht weiß ist, was man wo außer dem Daten Typ noch Andern muss. Ich hatte mal statt "StatusWord" "Position Actual Value" genommen, aber obwohl ich den Datentyp auf 4 geändert habe hatte der I/O nur 2 Bytes und nicht 4. und der Typ war immer noch UINT statt DINT.



Ich glaube genau daran scheitere ich auch.
"StatusWord" hat genau 2Byte, "Position Actual Value" hat 4Byte lt D1 Handbuch.

Du hast wahrscheinlich keine igus D1 zum ausprobieren. Aber meine Annahme ist, wenn du jetzt eine dranhängen würdest, bekämst du den wert von "StatusWord" und er wird dir als "Position Actual Value" in IO von TC ausgegeben. Genau das geschieht nämlich bei mir.

Meine Annahme ist, dass die igus D1 auf der Adresse 0x0 am Bus immer die 2Byte von "StatusWord" schreibt, egal ob du dort TwinCat-seitig "Position Actual Value" erwartest.

Unter Node/Online sieht man, dass meine Einstellungen lt. EDS ignoriert werden:
Anhang anzeigen 50888


In meinem EDS-File habe ich unter 

1A00:1 die Adresse 6041h definiert (PASST)
1A00:2 die Adresse 6061h definiert (PASST NICHT, hier steht am Bus nichts)
1A00:3 die Adresse 6098h definiert (PASST NICHT, hier steht am Bus nichts)
1A00:4 die Adresse 6064h definiert (PASST NICHT, hier steht am Bus nichts)

1A01:1 die Adresse 6067h definiert (PASST NICHT, hier steht am Bus das defaultmäßige 6041h)
1A01:2 die Adresse 606Ch definiert (PASST NICHT, hier steht am Bus das defaultmäßige 6064h)

Was mir also noch fehlt ist, dass ich dem Bus das Mapping lt. meinem EDS-File mitteile. Er hat noch immer die defaultmäßigen Einträge lt. Default-EDS von igus hinterlegt.


----------



## StructuredTrash (28 August 2020)

Den Igus wird die EDS-Datei nicht interessieren, die soll ja nur anderen mitteilen, was er zu bieten hat. Wenn der Igus ein variables Mapping unterstützt, musst Du das vermutlich direkt im Antrieb einstellen. Was sagt denn die Igus-Doku dazu?


----------



## LeFish (28 August 2020)

Igus hält sich dazu in der Doku recht bedeckt. Hier die aus meiner Sicht relevante Seite dazu in der Doku https://igus.widen.net/content/kda7...=sRW4bwaiJA5b0j4CsOQeFTan1Y5-hYnZ4UJtu0L41dI=

(S.82)
	

		
			
		

		
	

Anhang anzeigen 50890


Es stehen max. 4 RxTxPDOs zur Verfügung.

Zu PDO-Mapping steht nur: Wird in der Mastersteuerung vorgenommen.

Der Telegrammaufbau dürfte prinzipiell passen - ich bekomm ja Werte.

In Byte1,2,3 wird das Objekt definiert. 
Die Werte für die drei Bytes kommen aus dem EDS, oder?

Die igus bietet ein Webinterface. Dort kann man aber nur CAN-ID und Baudrate einstellen, sowie CAN prinzipiell aktivieren. Auch kann man die Steuerung über CAN dominant stellen.
Das habe ich alles eingestellt.

Zu PDOs/Mapping etc. findet man auf dem Webinterface leider nichts.


----------



## StructuredTrash (28 August 2020)

LeFish schrieb:


> Zu PDO-Mapping steht nur: Wird in der Mastersteuerung vorgenommen.


Das heisst (hoffentlich), dass der IGUS vom Master gesendete Mapping-Parameter akzeptiert. Ob TwinCat das aber auch weiss? Ich kenne es von meinen CanOpen-Geräten nur so, dass TwinCat nur die COB-IDs und die Übertragungsart sendet. Schau mal in dem IGUS Can node im Reiter SDOs, dort stehen alle Objekte, die die EL6751 beim Start an den IGUS sendet. Evtl. musst Du dort die Mapping-Parameter komplett von Hand eingeben.


----------

