Skip to main content

Beispiel: CANopen

Produkt: CODESYS CANopen Manager SL

Dieses Beispiel befasst sich mit der Programmierschnittstelle des Kommunikationsstacks des CANopen-Master- und CANopen-Slaves. Das Projekt enthält Beispiele für SDO, NMT, Diagnose und die dynamische Konfiguration der Kommunikationsparameter (Baudrate, Netzwerk-ID, Node-ID), und vieles mehr.

Beschreibung

Das Projekt enthält verschiedene Beispiele für die Verwendung der Programmierschnittstelle des CANopen-Master und CANopen-Slave-Stack. Es werden unter anderem die folgenden Themen behandelt:

  • SDO (expedited, segmented, block), Zugriff auf das Objektverzeichnis

  • Netzwerk-Management (NMT)

  • Diagnose (CANopen-Zustand, EMCY)

  • Event-Handler für Objektverzeichnis und CANopen-Manager-Zustandsmaschine

  • Rekonfigurieren: Dynamisches Ändern von Baudrate, Netzwerk-ID und Node-ID

  • Zugriff auf die CAN-Konfiguration mit Hilfe der Gerätediagnosebibliothek

Weitere Informationen

Das Projekt umfasst einen CANopen-Manager und einen CANopen-Slave-Stack, die über CANbus miteinander kommunizieren. Für die Inbetriebnahme des Projekts werden zwei miteinander verbundene CAN-Schnittstellen benötigt. Dies lässt sich am einfachsten mit der Steuerung CODESYS Control Win und einem 2-kanaligen USB-CAN-Adapter wie beispielsweise PEAK PCAN-USB Pro oder zwei 1-kanaligen Adaptern realisieren.

Damit die Kommunikation funktioniert, muss die jeweilige Laufzeitsystemkomponente in der Konfigurationsdatei eingetragen werden.

Für weitere Informationen siehe: Runtime-Konfiguration.

Das Projekt kann durch ein Geräteupdate der SPS auch auf jeder Steuerung mit zwei CAN-Schnittstellen betrieben werden. Das Projekt ist in drei Bereiche unterteilt:

CANbus Examples

  • ChangeBaudrate: Dynamische Änderung der Baudrate zur Laufzeit durch Rekonfiguration

  • EnableDisableCANbus: Dynamische Aktivierung und Deaktivierung eines CANbus zur Laufzeit durch Rekonfiguration

  • GetCANbus: Generische Suche einer projektierten CANbus-Instanz mit Hilfe der Gerätediagnose-Bibliothek

CANopen Master Examples

Diagnose

  • ReceiveEMCYFromAllDevicesExample: Empfang von Emergency-Nachrichten durch CiA405.RECV_EMCY

  • ReceiveEMCYFromOneDeviceExample: Empfang von Emergency-Nachrichten für ein bestimmtes Gerät durch CIA405.RECV_EMCY_DEV

  • GetCANopenKernelStateExample: Erkennung des CANopen-Kernel-Status durch CIA405.GET_CANOPEN_KERNEL_STATE

  • GetStateExample: Erkennung des CANopen-Zustands eines Slaves durch CIA405.GET_STATE

Netzwerk-Management

  • GetCANopenManagerNodeIDExample: Ermittlung der CANopenManager-Node-ID mit Hilfe von CiA405.

  • GET_CANOPEN_KERNEL_STATE: NMT_Example: Senden von NMT-Anfragen mit Hilfe von CIA405.NMT

SDO (Azyklische Datenübertragung)

  • ExpeditedReadExample: Lesen eines Objekts <= 4 Bytes über SDO (expedited transfer) mittels CiA405.SDO_READ4

  • ExpeditedWriteExample: Schreiben eines Objekts <= 4 Bytes über SDO (expedited transfer) mittels CIA405.SDO_WRITE4

  • SegmentedAndBlockReadExample: Lesen eines Objekts beliebiger Länge über SDO (segmentierter Transfer oder Blocktransfer) mittels CiA405.SDO_READ_DATA

  • SegmentedAndBlockWriteExample: Schreiben eines Objekts beliebiger Länge über SDO (segmentierter Transfer oder Blocktransfer) über CiA405.SDO_WRITE_DATA

Allgemeine API-Funktionen

  • CANopenManagerAPI: Demonstriert die Verwendung aller Methoden und Eigenschaften der CANopen-Manager-Instanz

  • CANopenManagerEventHandler: Beispielhafte Implementierung eines CANopen-Event-Handlers

  • CANopenRemoteDeviceAPI: Demonstriert die Verwendung aller Methoden und Eigenschaften einer CANopenRemoteDevice-Instanz

CANopen Slave Examples

Diagnose

  • GetLocalDeviceInfoExample: Demonstriert das Auslesen des CANopen-Status sowie der Node-ID

Netzwerk-Management

  • ChangeNodeIDExample: Änderung der Node-ID zur Laufzeit

  • NMTExample: Änderung des lokalen CANopen-Status

Objektverzeichnis

  • ReadObjektExample1: Lesen eines Objekts aus dem lokalen Objektverzeichnis

  • ReadObjectExample2: Alternatives Beispiel zu ReadObjectExample1

  • WriteObjectExample1: Schreiben des Werts eines Objekts im Objektverzeichnis

  • WriteObjectExample2: Alternatives Beispiel zu WriteObjectExample1

  • CountObjects: Traversieren über alle Objekte des Objektverzeichnisses mit Hilfe von _3SCSS.ObjectIterator

  • GetPDOInfo: Zusätzliches Beispiel für das Traversieren des Objektverzeichnisses

  • ObjectDictionaryEventHandler: Exemplarische Implementierung eines Objektverzeichnis-Eventhandlers

Systemvoraussetzungen und Einschränkungen

Programmiersystem

CODESYS Development System Version 3.5.14.0 oder höher

Laufzeitsystem

CODESYS Control Win Version 3.5.14.0

Zusatzkomponenten

Zwei CAN-Interfaces

Hinweis

_example_icon.png DOWNLOAD Projekt