# TwinCAT PLC CANOpen Schnittstelle programmieren



## Sale (24 März 2011)

Programmierung der Kommunikation für den CAN-Bus.
Protokoll: CANOpen.
Hardware: Beckhoff CX1010 und CANopen Master Klemme EL6751.

Hallo Gemeinde,

muss mit den obigen HW-Komponenten über CANopen eine Verbindung zu einem Regler aufbauen. 
Im TwinCATSysMng ist die HW konfiguriert und läuft auch einwandfrei. Nur SW-technisch habe ich leider überhaupt keine Ahnung,
wie die Kommunikation ausprogrammiert werden kann. soll heißen: keine Ahnung wie ich Messages empfangen und versenden kann?
Praktisch wären Programmbeispiele oder vorgefertigte FB's aus einer .lib. 

Bitte helft mir!
Daberer


----------



## StructuredTrash (24 März 2011)

Bei CanOpen werden die Prozessdaten in sogenannten Prozessdatenobjekten (PDO) ausgetauscht, in den meisten Fällen ereignisgesteuert, d. h. nur bei Änderung der Daten. Das erledigt die EL6751 allein, im PLC-Programm brauchst Du dafür nichts weiter tun. Dort stehen die Daten wie andere I/O's zur Verfügung.

Ich nehme an, dass Du den Regler mit Hilfe einer zugehörigen EDS-Datei im Systemmanager eingebunden hast. Wieviel Du jetzt noch von Hand nachtragen musst, hängt von der Auskunftsfreudigkeit dieser Datei ab. Evtl. musst Du selbst RxPDO's (Ausgänge aus PLC-Sicht) und TxPDO's (Eingänge aus PLC-Sicht) und danach in den PDO's Variablen anlegen. Die kannst Du dann wie gewohnt mit PLC-Variablen verknüpfen.

Für detailliertere Tips müsstest Du schon die EDS-Datei des Reglers hochladen. Auch ein Systemmanager-Screenshot wäre hilfreich, um zu sehen, welche Strukturen für den Regler im Projektbaum schon vorhanden sind.


----------



## Cerberus (24 März 2011)

Zusätzlich zu den PDOs gibt es noch die SDOs. Diese können azyklisch von der Steuerung gelesen und geschrieben werden. Steuerungsseitig passiert das per ADS-Zugriff.

Näheres zur CanOpen-Klemme findest du hier:

http://infosys.beckhoff.com/index.p.../1031/el6751/html/bt_el6751_title.htm&id=6512


----------



## Sale (24 März 2011)

Hallo, 

anbei screenshots vom TcSysMngCnfFile und die ESD-Datei.
mit der HW-Konfig des SystemManagers bin ich - glaube ich zumindest - auf dem richtigen Weg. 
Hab nur nicht gewuss wie ich die Kommunikation im PLC-Projekt selbst ausprogrammieren soll.


----------



## trinitaucher (24 März 2011)

Du verknüpfst die Prozessdaten vom Gerät mit den Ein-/Ausgängen des SPS-Projekts und gut is.


----------



## Sale (24 März 2011)

hab ich gemacht. kann nun auch senden. 
Problem: "CAN-Controller warning limit reached" bekomme ich von der Box
zurückgesendet. 

Zur Info: Habe den CANopenFrame im FreeRun-Mode übertragen. 

Benötige ich einen Sende-/Empfangsmechanismus auch bei ereignisgesteuertem Datenaustausch?

Dachte das erkennt das SlaveDevice automatisch, wenn sich die SendeDaten ändern ... ???

Vielen Dank im Voraus!


----------



## Cerberus (24 März 2011)

Mal ne Frage, um Verwirrung zu vermeiden:

Spricht der Regler CAN oder CANopen?


----------



## Sale (24 März 2011)

Der Regler kommuniziert über das CANopen-Protokoll


----------



## Sale (24 März 2011)

Hallo, 

werde mich jetzt ausloggen. Gibt schließlich noch mehr als nur Arbeit.

Vielen Dank Leute. Es rennt zwar noch nicht, aber ihr habt mir einen Stoß in die richtige Richtung gegeben und mir gezeigt, dass ich nicht total auf dem Holzweg war. 


Danke!
Sale


----------



## trinitaucher (24 März 2011)

Sale schrieb:


> Benötige ich einen Sende-/Empfangsmechanismus auch bei ereignisgesteuertem Datenaustausch?


Du gibts zu jedem PDO auf einem Karteireiter den "Transport Type" an. Der bestimmt, ob der Datenaustausch asynchron (ereignisgesteuert) oder synchron (zyklisch) erfolgt:
http://infosys.beckhoff.com/index.p...031/el6751/html/co_comprocessdata.htm&id=6532 (Mitte)
http://infosys.beckhoff.com/index.p.../1031/el6751/html/co_pdoparameter.htm&id=6533

Möglicherweise erwartet der Slave eine zyklische Kommunikation, vielleicht sogar mit geringerer Zykluszeit als die Free-Run-Zykluszeit.


----------



## Sale (10 April 2011)

Danke Leute, 

hat mittlerweile alles funktioniert. 
Es wäre fast an einem HW-Prob gescheitert. 
War durch die fehlenden Monitoring-Möglichkeiten nicht leicht herauszubekommen.


----------



## AdamMax (30 September 2020)

Hallo liebe Forum Mitglieder.
Ich habe noch eine Frage zu dem Thema. 

Ich würde gerne eine CAN Nachricht mit 8 Byte versenden und das zyklisch mit 100ms Takt. Über die Zuweisung Data[0..7] klappt das auch.
Meine Frage ist nur wie kann ich die COB-ID so konfigurieren, dass die Nachricht zyklisch mit 100ms versendet wird?

Habe hier PCAN Explorer und kann dort eine Nachricht z.B. zyklisch mit 50,100 oder 1000ms (frei wählbar) versenden.
Von der SPS werden die Daten auch korrekt empfangen.

Nur senden klappt noch nicht.


----------

