# CANopen-Gerät ohne eds-file ansprechen



## Dave86 (19 Januar 2011)

Hallo zusammen,

ich stehe zur Zeit vor einer kleinen Herausforderung. Ich möchte mit der EL6751 eine Kommunikation zu einem CANopen-Gerät aufnehmen. 

Zu diesem Slave gibts kein eds-file. Gibt es die Möglichkeit trotzdem eine Verbindung zu meinem CANopen-Slave herzustellen? In erster Linie geht es mir vor allem da rum, meinen Slave online zu sehen. 

Gruß

Dave


----------



## trinitaucher (19 Januar 2011)

Du legst den Slave mit den notwendigen PDOs an und gut is.


----------



## Controllfreak (19 Januar 2011)

was ist das für ein gerät?


----------



## mainzelmann (19 Januar 2011)

Hast du die Node-ID und die Baudrate richtig eingestellt?


----------



## Dave86 (19 Januar 2011)

@ trinitaucher: Ich habe bei Beckhoff angerufen und die haben mir das gleiche empfohlen, bin da gerade dran das zu realisieren. Die entsprechenden PDOs kann ich aus der Installations-/ Bedienungsanleitung des Gerätes entnehmen. 

@controllfreak: Es handelt sich dabei um einen Hubhöhensensor der Firma Linde (The Linde Group).

@mainzelman: Genau jetzt kommt das seltsame. Wenn ich die Klemme "CANopen over EtherCAT" wähle, sehe ich nirgends die Möglichkeit, wo ich die Baudrate bzw. Node-ID einstellen kann... .


----------



## Verpolt (19 Januar 2011)

Dave86 schrieb:


> @mainzelman: Genau jetzt kommt das seltsame. Wenn ich die Klemme "CANopen over EtherCAT" wähle, sehe ich nirgends die Möglichkeit, wo ich die Baudrate bzw. Node-ID einstellen kann... .



Wird das nicht vom Master geschrieben?


----------



## StructuredTrash (19 Januar 2011)

Dave86 schrieb:
			
		

> Wenn ich die Klemme "CANopen over EtherCAT" wähle, sehe ich nirgends die  Möglichkeit, wo ich die Baudrate bzw. Node-ID einstellen kann...


Die EL6751 taucht im Projektbaum 2 mal auf, zuerst im EtherCat-Ordner und dann noch mal als eigenes Gerät. Der CanOpen-Feldbus, der an der EL6751 hängt, wird mit dem zweiten Eintrag konfiguriert. Die Baudrate wird im Karteikartenreiter "EL6751" eingestellt.
Dann musst du an den zweiten EL6751-Eintrag eine Box anfügen, und zwar einen "CanOpen Node" aus dem Ordner "Verschiedenes" der Auswahlliste. Im Karteikartenreiter "Can Node" dieser Box stehen die allgemeinen Einstellungen, unter anderem auch die Node ID.
An den CanOpen Node fügst Du dann die benötigten TxPDO's und RXPDO's an. Innerhalb der PDO's kannst Du Variablen deklarieren (max. 8 Byte/PDO), die Du später mit I/O-Variablen des PLC-Programms verknüpfst.


----------



## mainzelmann (19 Januar 2011)

Verpolt schrieb:


> Wird das nicht vom Master geschrieben?


Also ich kenn mich mit dem Beckhoff-Master nicht aus, aber normalerweise ist es doch so, dass man im Master die Slaves mit einer bestimmten Node-Id projektiert. In den Slaves muss diese Node-Id natürlich auch eingestellt werden. Das erfolgt entweder über einen Schalter (Dip-Switch, Drehschalter, etc.) oder über Parameter die man per SDO schreibt. Genau so ist es auch mit der Baudrate. Im Master wird sie projektiert und in den Slaves per Schalter oder Parameter eingestellt. 

Typischerweise wird der Slave, wenn er nicht per Schalter konfiguriert wird, mit Standard-Node-Id und -Baudrate ausgeliefert, die im Handbuch nachzulesen sind. Wäre also hilfreich zu wissen was es genau für ein Slave ist und ob er frisch vom Werk kommt.

Hast du einen Can-Analyzer (welcher den Datenverkehr auf dem Bus mitschreibt)?


----------



## trinitaucher (20 Januar 2011)

1. den EtherCAT Salve in den E/A-Konfiguration unter "EtherCAT" anlegen (oder einscannen lassen).
Wird automatisch eingescannt, wird eigentlich auch gleich gefragt, ob ein entsprechendes CANopen-Gerät angelegt werden soll.
2. *Zusätzlich* zum EtherCAT nun noch ein CanOpen in die E/A-Geräte einfügen. Man kann dann glaub ich direkt "CanOpen über EL6751-0000 (Master)" (oder so ähnlich) auswählen. Beim automatischen EtherCAT Scan sollte das automatisch geschene, s. 1.
3. Beim CanOpen-Gerät gibt's dann den EL6751 Karteireiter. Hier stellst du auch die Baurate ein.
http://infosys.beckhoff.com/index.p...l6751/html/tcsysman_el6751_config.htm&id=6365
Unter diesem Gerät im Baum die Box "CanOpen Node" anfügen:
http://infosys.beckhoff.com/index.php?content=../content/1031/el6751/html/CANopenNode.htm&id=
Unter diesen dann die Rx und Tx PDOs einfügen. Welche genau und die wie aufgebaut solltest du in der Doku vom Hersteller finden oder dort erfragen.

... ist eigentlich nicht's besonderes schwieriges.


----------



## Dave86 (7 Februar 2011)

Ich habe nach langer Zeit endlich eine Kommunikation zu meinem Gerät aufbauen können (s. Anhang). Die Heartbeat-Botschaft beider Slaves kann ich somit empfangen.

Um meine Slaves jedoch vom Pre-Operational Modus in den Operational-Modus zu versetzen muss ich das Objekt "0x00" mit dem Wert "0x0100" senden. Jedoch klappt das nicht so, wie ich es mir vorstelle. Ich parametriere unter "Ausgänge" die ersten Nachricht (COB-ID, Länge, Werte) -> forcen -> eintragen -> aufheben und am Ausgang tut sich nichts (weiterhin im Pre-Operational Modus). 

Was mache ich falsch?


----------



## StructuredTrash (7 Februar 2011)

In Deinem Eingangspost schreibst Du, das es sich um ein CanOpen-Gerät handelt. Und der Empfang von Heartbeat Messages ist ja auch ein eindeutiges Zeichen dafür, das es sich um ein solches Gerät handelt. Dann kannst Du statt eines "Can Interface" aber einen "CanOpen Node" an die EL6751 hängen. Dann erledigt der CanOpen Master das Netzwerk-Management automatisch und Du brauchst Dich nur noch um die Prozessdaten kümmern.


----------



## Dave86 (8 Februar 2011)

Die Geschichte mit der CAN-Node habe ich mittlerweile fallen gelassen. Wenn ich meine PLC anhand eines CAN-Nodes konfigurieren möchte, geht gar nichts, sprich: ich bekomm keine Kommunikation zustande. 

Gibts denn keine Möglichkeit, "etwas" über das CAN-Interface zu machen oder brauche ich für mein Vorhaben unbedingt den CAN-Node?


----------



## trinitaucher (8 Februar 2011)

Beckhoff bietet m. W. nur CANopen an. Das ist ein Master-Slave-System und man benötigt folglich einen Master (PC) und min. einen Slave ("Node").


----------



## StructuredTrash (8 Februar 2011)

Ich habe selbst noch nie ein "Can Interface" benutzt, aber ich denke mal, dass es nicht ausreicht, die Message-Daten einzutragen. Irgendwie muss die Kommunikation anschliessend angestossen werden, vielleicht durch Erhöhen eines der TxQueue-Counters um die Anzahl der zu sendenden Messages. Einfach mal ausprobieren.


----------



## Dave86 (8 Februar 2011)

StructuredTrash schrieb:


> Ich habe selbst noch nie ein "Can Interface" benutzt, aber ich denke mal, dass es nicht ausreicht, die Message-Daten einzutragen. Irgendwie muss die Kommunikation anschliessend angestossen werden, vielleicht durch Erhöhen eines der TxQueue-Counters um die Anzahl der zu sendenden Messages. Einfach mal ausprobieren.


 
Japp, genau. Das denke ich nämlich auch, dass ich die Kommunikation zuerst anstoßen muss. Ich habe es bereits so probiert, wie du es beschrieben hast: Du Erhöhen des "TxCounters" der Ausgänge, habe ich mir erhofft, dass die Nachricht in meinen Eingängen ankommen sollte. Jedoch hat sich da nichts verändert. Außer, dass der "TxCounter" der Eingänge sich ebenfalls um 1 erhöht hat. 

Hm... ich hab mich jetzt mal direkt an Beckhoff gewandt, mal sehen, was die zurückschreiben. Wenn ich Neues weiß, würde ich mich melden.


----------



## Cerberus (8 Februar 2011)

Dave86 schrieb:


> Um meine Slaves jedoch vom Pre-Operational Modus in den Operational-Modus zu versetzen muss ich das Objekt "0x00" mit dem Wert "0x0100" senden. Jedoch klappt das nicht so, wie ich es mir vorstelle. Ich parametriere unter "Ausgänge" die ersten Nachricht (COB-ID, Länge, Werte) -> forcen -> eintragen -> aufheben und am Ausgang tut sich nichts (weiterhin im Pre-Operational Modus).


 
Hast du mal darauf geachtet, in welcher Reihenfolge du die Werte setzt? Ich hab im Info-Sys hierzu mal was gefunden:



> Die zu ladenden Objekte müssen entweder mit Complete-Access oder mit der Konsistenzklammerung (erst Subindex 0 auf 0 setzen, dann Subindex 1-n schreiben, dann Subindex 0 auf n setzen) übertragen werden.


 
Quelle:
http://infosys.beckhoff.com/index.p...1/html/el6751_layer2_statemachine.htm&id=6458


----------



## Dave86 (10 Mai 2011)

*Einen Schritt weiter!*

Hallo zusammen,

bei der Verwendung des "CAN Interface" ist es, wie bereits gesagt, wichtig die Reihenfolge der Empfangs- bzw. Sendezähler zu beachten. 

Unter der folgenden url: http://infosys.beckhoff.com/index.p...l6751/html/tcsysman_el6751_config.htm&id=6390 ist unter dem Punkt "CAN Interface" Beispielcode für das Empfangen und Senden von CAN-Nachrichten aufgeführt. Ich habe mich an diesem Beispiel stark orientiert und für meine Anwendung angepasst und siehe da... es funktioniert. 

Viele Grüße

Dave


----------



## Dave86 (23 Mai 2011)

Hallo zusammen,

irgendwie hab ich, als ich mich diesem Thema gewidmet habe, die Ansteuerung meines Gerätes mit dem "CANopen Node" nicht hinbekommen. Letzte Woche habe ich mich nun nochmal dran versucht und siehe da, es funktioniert problemlos.

Auf jedenfall ist es um einiges übersichtlicher und logischer aufgebaut/ gegliedert, wie mit dem CAN Interface. 

Viele Grüße

Dave


----------



## Cerberus (23 Mai 2011)

Hast du uns vielleicht noch nen Screenshot oder sowas?


----------



## Dave86 (23 Mai 2011)

Klar doch! Bitte schön!


----------

