Großer Beleg Entwicklung eines CANopen-Netzwerkes Jan Blumenthal 17.09.2001
Vortragsgliederung Grundlagen von CANopen Zielsetzungen bei der Entwicklung Softwareüberblick CANopen-API CANopenConsole Zusammenfassung
CANopen Protokoll für den CAN-Bus Implementierung verschiedener Netzwerkdienste: Interne Datenbank (Object Dictionary) Segmentierung von Datenströmen (SDO) Echtzeitfähigkeit (PDO) Netzwerkmanagement (NMT) Fehlermanagement (NMT-Error Control) Netzwerküberwachung (Heartbeat, Life guarding) Synchronisation von Teilnehmern (SYNC)
Ziele der CANopen-API Ziele: - Funktionsfähigkeit und Standardkonformität - Portabilität (PC, C166, Windows, Linux) - Hohe Performance und geringer Speicherverbrauch - Unterstützung mehrerer Instanzen - Fernwartung - Entlastung der Prozessanwendung Einsatzszenarien: CAN - Bus Kamera Kamera 1 1 Kamera Kamera 2 2 Kamera Kamera 3 3 Kamera Kamera 1 1 Kamera Kamera 2 2 Kamera Kamera 3 3 CAN - Bus 1 Lei Leit - t PC P C Serielle Verbindung Lei Leit t - P PC C VPN CAN - Bus 2 RemoteP Remote - PC C Kamera Kamera 4 4 Kamera Kamera 5 5 Kamera Kamera 6 6
Schichtenmodell der CANopen-API Vorteile: Standardisierte Schnittstellen Vollständige Kapselung Nutzung der CAN-API Applikation Applikation Applikation CANopen CANopen CANopen CAN-Treiber (SJAC166) CAN-Hardware (C166/SJA1000) CAN-Treiber (Hyperstone) CAN-Hardware (Hyperstone) CAN-Treiber (VCIPCI) CAN-Hardware (PCI-Karte) CAN-BUS
Komponenten der CANopen-Software Anwendung Prozessumgebung CANopen- API OD Remote- Control NMT SDO PDO COEnvironment COApplication Verwaltung der CANopen Instanz Einbindung in das Betriebssystem Definition der CANopen-Anwendung CAN-API Hardwareunabhängige Treiber Hardwaretreiber CANEnvironment Einbindung der Hardwaretreiber
Besonderheiten der CANopen-API Benutzen von Handles Keine dynamische Speicherallozierung Nachrichtenverarbeitung: Interrupt Polling Loops Ereignisgesteuerte Abarbeitung Callbacks Remote Objects FPGA
CANopen Console Administrierungssoftware Eigenschaften: Konsolenprogramm Unterstützung mehrerer Instanzen Skripting Fernwartung Kommunikation über Sockets Objekt-orientierter Entwurf Multithreading Aufbau: CommandSocket 1 Device 1 Console Command- Manager CommandSocket 2 Device 2 CommandSocket 3 Device 3
Remote Control Optionales Softwaremodul in der CANopen-API Übertragung von Kommandos an Geräteanwendungen Beispiel: reset 1 Console Ein/Ausgabe Command- Manager Socket- & device commands CommandSocket device commands RS232 Geräteanwendung Serielle Übertragung Serielle Übertragung
Kopplung der Software Unterstützung verschiedener Administrierungsvarianten Graphisch (MFC) Textbasiert (Console) Console Ein/Ausgabe Command- Kommandos Manager Socket- & device commands CommandSocket VCIPCI device commands MFC-Anwendung Direkter Zugriff CANopen Geräteanwendung
Zusammenfassung CANopen-API Stand - Portabel - Weitestgehend standardkonform - Fernwartbar - Multisessionfähig Zukunft - Echtzeittest - Konformitätstest CANopen Console - Windows Version - Telnet-fähig - Portabilität der EClasses
Vielen Dank
Beispielanwendung Steuerung eines Netzwerkes durch einen Leit-PC Kritischer Bereich d CAN-Bus Kamera 1 Kamera 2 Leit-PC d
CANopen Referenz-Modell Anwendungsprozess Anwendung Anwendung Darstellung Sitzung Transport Vermittlung Verbindung Bitübertragung Verbindung Bitübertragung
Gerätemodell von CANopen Object Dictionary: Interne Datenbank Unterschiedliche Datentypen (int, char) Kommunikation Object Dictionary Anwendung Zustandsmaschine Anwendungsobjekt Eintrag 1 Kommunikationsobjekt Eintrag 2... Kommunikationsobjekt Anwendungsobjekt Eintrag n Kommunikationsobjekt Anwendungsobjekt CAN-Bus Prozess
Typische Main-Funktion #include <stdio.h> #include <CANopen/CANopen.h> OPTOERROR APP_ConfigureCANopen(CO_HANDLE *cohandle); // external, defined in COEnvironment.c void main() { CO_HANDLE handle; // CANopen Handle char buffer[consolebuffersize]; // buffer for remote commands } if (! (CO_InitCANopen(&handle, APP_ConfigureCANopen)) ) // init CANopen { TRACE1("Camera: %d ready!\n",(int)(handle.nodeid)); while (1) // endless loop { CO_MessageLoop(&handle); // call message loop if ( GetRemoteCommand(buffer) ) // new remote command received? CO_RemoteCommand(&handle, buffer); } } CO_EndCANopen(&handle);
Komponenten der CANopenConsole Kommandotypen: - Konsolenkommandos (help, quit) - Socketkommandos (socket, init) - Gerätekommandos (od, nmt) - Systemkommandos (dir, ls) Sessionhandling Socketverwaltung Kommandoparser Betriebssystemanpassung (EClasses) Console- Commands Device- Commands Socket- Commands System- Commands CANopen Session Socket- Handling Command- Parser Command- Alias EClasses
EClasses Klassenbibliothek Sammlung einfacher Basisklassen EThread EEvent EFile EString Plattformunabhängig