FC510x - PCI-Karten für CANopen

BootUp der FC510x

 

Einleitung

Die Firmware der FC510x CANopen PCI Karte behandelt jeden einzelnen Knoten individuell. Nach dem Systemstart wird zunächst geprüft, ob die erwarteten Knoten vorhanden sind und grundsätzlich den konfigurierten Geräten entsprechen. Danach wird jeder Knoten zunächst unabhängig von den anderen parametriert und gestartet. Im Folgenden wird das Aufstartverhalten für einen Knoten beschrieben.

 
 

1. Reset All Nodes

Die Aufstart-Sequenz beginnt mit einem globalen Reset Communication Telegramm, um alle Knoten in einen definierten Ausgangszustand zu bringen

 
 

2. Identify Node

Durch SDO Upload des Objekts 0x1000 (Device Type) wird zunächst festgestellt, ob der Knoten vorhanden ist. Dabei wird der vom Knoten gelieferte Inhalt auf Übereinstimmung mit dem erwarteten Wert überprüft. Objekt 0x1000 setzt sich aus Profilnummer und Additional Info zusammen, beide Werte sind im Karteireiter CAN Node zu finden.

Sind sowohl Additional Info als auch Profilnummer auf "0" gesetzt, so wird der zurückgelieferte Inhalt des Objektes 0x1000 nicht überprüft. Eine Antwort mit einem SDO Abort Protokoll wird nicht toleriert; dann wird abgebrochen.

Bei Werten ungleich null erfolgt der nächste Schritt nur bei Übereinstimmung. Ansonsten wird mit Node State 0x04 (SDO Syntax Error at StartUp, bei SDO Abort Protokoll oder falscher Datenlänge) bzw. 0x05 (SDO data mismatch at StartUp, bei fehlender Übereinstimmung) und entsprechender Fehlermeldung im Diag Fenster abgebrochen.

Wenn der Knoten nicht auf das SDO Upload Telegramm antwortet, so wird dieses SDO Protokoll nach Timeout (ca. 2 sec) abgebrochen und dann nach einer Wartezeit (ca. 1 sec) wiederholt, bis der Knoten antwortet. In dieser Phase steht der Node State auf 0x02 (Node not found).

Wenn im Karteireiter CAN Node die Vendor ID, der Product-Code, die Serial No. oder die Revision No. ungleich null konfiguriert wurden, so werden nun die entsprechenden Werte im Objekt 0x1018 des Knotens ausgelesen und verglichen. Nur bei Übereinstimmung wird der Bootup fortgesetzt.

 
 

3. Set SYNC Time

Falls synchrone PDOs konfiguriert wurden wird nun versucht, die vorgesehene Sync-Cycle-Time in Objekt 0x1006 (SYNC Intervall) einzutragen. Da dieses Objekt optional ist, wird der Boot-Up auch bei negativer Quittierung durch den Knoten fortgesetzt - eine Antwort des Knotens ist allerdings erforderlich.

 
 

4. Set PDO Parameter

Falls die Check-Box "Auto-Download der PDO Parameter" im Karteireiter CAN Node angewählt ist (Default), so werden nun die PDO Parameter aller konfigurierten PDOs geschrieben. Es sind dies der Identifier und der Transmission Type. Inhibit Time und Event Time werden dabei nur geschrieben, wenn sie ungleich null konfiguriert wurden.

Wenn der Knoten auf einen SDO Download der PDO Parameter mit einem SDO Abort Protokoll antwortet, so wird der entsprechende Eintrag anschließend gelesen (SDO Upload) und mit dem zu schreibenden Wert verglichen. Bei Übereinstimmung wird fortgesetzt. Auf diese Art können auch read-only PDO Parameter toleriert werden, wenn sie mit den konfigurierten Werten übereinstimmen.

Nur falls der Download bzw. der Vergleich mit den vorhandenen Werten erfolgreich waren erfolgt der nächste Schritt. Ansonsten wird mit Node State 0x04 bzw. 0x05 und entsprechender Fehlermeldung im Diag Fenster abgebrochen.

 
 

5. Set Guarding/Heartbeat

Falls für die Guard Time ein Wert ungleich null konfiguriert ist, werden nun die entsprechenden Parameter im Knoten beschrieben. Da Heartbeat weniger Buslast als Guarding erzeugt wird zunächst versucht, diese Form der Knotenüberwachung auf dem CANopen-Knoten zu starten.

Heartbeat: Eingetragen werden die Guard Time als Producer Heartbeat Time (0x1017) und das Produkt aus (Guard Time x Life Time Factor) als Consumer Heartbeat Time (0x1016). Die FC510x Karte sendet dann zyklisch ihr Heartbeat Telegramm mit der kleinsten konfigurierten Guard Time (die Guard Times können ja für jeden Knoten individuell eingestellt werden). Falls der Knoten den Eintrag der Consumer Heartbeat Time verweigert, so wird angenommen, dass der Knoten die Überwachung des Masters nicht unterstützt - dieses wird toleriert. Falls auch der Eintrag der Producer Heartbeat Time fehlschlägt, so wird das Guarding Protokoll konfiguriert.

Guarding: Falls der Knoten kein Heartbeat unterstützt werden die Guarding Parameter (Guard Time, 0x100C und Life Time Factor, 0x100D) eingetragen.

Schlägt auch dieser Versuch fehl, so wird der Aufstartvorgang mit Node State 0x04 und entsprechender Fehlermeldung im Diag Fenster abgebrochen.

 
 

6. Download User Parameter

Nun werden die im Karteireiter SDOs manuell hinzugefügten Objekte per SDO Download zum Knoten übertragen. Auch hier wird der Wert bei SDO Abbruch zurückgelesen und auf Übereinstimmung geprüft, um read-only Parameter zu tolerieren. Nur bei Erfolg wird fortgesetzt, ansonsten abgebrochen.

 
 

7. Start Node

Nach erfolgreichem Download aller Parameter wird der Knoten durch ein individuelles Start_Remote_Node Telegramm in den Zustand Operational überführt. Ca. 1 s nach diesem Start-Telegramm werden die RxPDOs erstmals an den Knoten geschickt und das Guarding bzw. Heartbeat Protokoll begonnen. Die Knotenüberwachung durch Heartbeat wird dabei erst begonnen, nachdem das Producer Heartbeat Telegramm des Knotens erstmals empfangen wurde.

Da CANopen keine explizite Bestätigung des Startvorgangs vorsieht, kann nur das erstmalige Eintreffen der Transmit PDOs ausgewertet werden. Bis alle konfigurierten TxPDOs eingetroffen sind, bleibt daher der Node State des Knotens auf 0x17 (Expected TxPDO is missing).

Nachdem alle konfigurierten Knoten gefunden, erfolgreich parametriert und individuell gestartet wurden, sendet die FC510x Karte noch ein globales Start_Remote_Node Telegramm (mit Node-ID=0).

 
 

8. SYNC

SYNC Telegramme werden erst geschickt, wenn die höchstpriore verknüpfte Task gestartet wurde. Synchrone TxPDOs werden daher auch erst getriggert, sobald diese Task läuft - auch dies kann eine Ursache für den Node State 0x17 sein.

 
 

Beispiel für eine Boot-Up Sequenz:

Knoten mit Node-ID1, Identifier im hex-Code.

Zeit   ID DLC DATA                    Desrciption
0.1244 00 2  82 00                    Reset communication all nodes
    Alle Knoten werden in Ausgangszustand versetzt
0.1252 601 8 40 00 10 00 00 00 00 00  [1000,00] Initiate Upload Rq.
   Erster Versuch, den Knoten 1 zu finden - Knoten ist noch im Reset
2.1316 601 8 80 00 00 00 00 00 04 05 05040000 [0000,00] Abort: SDO protocol timed out
   
Knoten hat innerhalb SDO Time-Out (2 sec) nicht geantwortet, SDO wird abgebrochen
2.7875 701 1 00                       Boot-up
   Knoten hat Reset durchgeführt und meldet sich mit Boot-Up Nachricht
4.1391 601 8 40 00 10 00 00 00 00 00 [1000,00] Initiate Upload Rq.
   Zweiter Versuch, den Knoten 1 zu finden. Lesezugriff auf Objekt 0x1000
4.1411 581 8 43 00 10 00 91 01 07 00 91 01 07 00 [1000,00] Initiate Upload Rsp. expedited
   
Knoten 1 antwortet mit Profile No. 0x191 (401dez) und Add. Info 0x07
4.1418 601 8 40 18 10 01 00 00 00 00 [1018,01] Initiate Upload Rq.
   
Die Vendor ID wird ausgelesen
4.1434 581 8 43 18 10 01 02 00 00 00 02 00 00 00 [1018,01] Initiate Upload Rsp. expedited
   Knoten 1 antwortet mit Vendor ID 0x02 (= Beckhoff)
4.1442 601 8 23 00 18 01 81 01 00 00 81 01 00 00 [1800,01] Initiate Download Rq. expedited
   Nun wird der Identifier für TxPDO1 geschrieben: 0x181
4.1831 581 8 60 00 18 01 00 00 00 00 [1800,01] Initiate Download Rsp
   Knoten 1 bestätigt den Download
4.1840 601 8 23 01 18 01 81 02 00 00 81 02 00 00 [1801,01] Initiate Download Rq. expedited
   Identifier für TxPDO2 ist 0x281
4.2223 581 8 60 01 18 01 00 00 00 00 [1801,01] Initiate Download Rsp
4.2230 601 8 23 00 14 01 01 02 00 00 01 02 00 00 [1400,01] Initiate Download Rq. expedited
    Identifier für RxPDO1 ist 0x201
4.2347 581 8 60 00 14 01 00 00 00 00 [1400,01] Initiate Download Rsp
4.2356 601 8 2f 00 18 02 ff 00 00 00 ff [1800,02] Initiate Download Rq. expedited
   Transmission Type für TxPRO1 ist 0xFF=255
4.2737 581 8 60 00 18 02 00 00 00 00 [1800,02] Initiate Download Rsp
4.2744 601 8 2f 01 18 02 ff 00 00 00 ff [1801,02] Initiate Download Rq. expedited
   Transmission Type für TxPRO2 ist 0xFF=255
4.3133 581 8 60 01 18 02 00 00 00 00 [1801,02] Initiate Download Rsp
4.3141 601 8 2f 00 14 02 ff 00 00 00 ff [1400,02] Initiate Download Rq. expedited
   Transmission Type für RxPRO1 ist 0xFF=255
4.3252 581 8 60 00 14 02 00 00 00 00 [1400,02] Initiate Download Rsp
4.3264 601 8 2b 17 10 00 64 00 00 00 64 00 [1017,00] Initiate Download Rq. expedited
   Heartbeat Producer Time ist 0x64=100ms
4.3279 581 8 60 17 10 00 00 00 00 00 [1017,00] Initiate Download Rsp
4.3287 601 8 23 16 10 01 2c 01 7f 00 2c 01 7f 00 [1016,01] Initiate Download Rq. expedited
   Heartbeat Consumer Time ist 0x012C=300ms, Node ID des Heartbeat Producers (hier: FC5101) ist 0x7F
4.3304 581 8 60 16 10 01 00 00 00 00 [1016,01] Initiate Download Rsp
4.3312 601 8 23 00 55 00 00 00 ff ff 00 00 ff ff [5500,00] Initiate Download Rq. expedited
   User Parameter: Index 0x5500, SI 0, Wert 0x00 00 FF FF
4.3321 701 1 7f                       T0 Preoperational
   Knoten 1 setzt erstes Heartbeat Telegramm ab, FC5101 beginnt die Überwachung
4.4679 581 8 60 00 55 00 00 00 00 00 [5500,00] Initiate Download Rsp
4.4686 601 8 2f 23 64 00 01 00 00 00 01 [6423,00] Initiate Download Rq. expedited
   User Parameter: Index 0x6423, SI 0, Wert 0x01
4.4700 581 8 60 23 64 00 00 00 00 00 [6423,00] Initiate Download Rsp
4.4707 00 2 01 01                     Start Node
   Knoten 1 wird individuell in Operational überführt
4.4717 701 1 7f                       T0 Preoperational
   Das nächste Heartbeat Telegramm wird abgesetzt bevor der Statusübergang abgeschlossen ist
4.4986 181 1 00 00
   Knoten 1 ist Operational und sendet sein TxPDO1 und TxPDO2
4.4989 281 4 00 00 00 00 00 00 00 00
4.5786 701 1 05                       T0 Operational
4.6390 281 4 00 00 08 00 00 00 08 00
4.6411 281 4 00 00 00 00 00 00 00 00
4.6891 701 1 05                       T0 Operational
4.7951 701 1 05                       T0 Operational
4.9032 701 1 05                       T0 Operational
5.0048 281 4 00 00 08 00 00 00 08 00
5.0070 281 4 00 00 00 00 00 00 00 00
5.0094 701 1 05                       T0 Operational
5.0153 281 4 00 00 08 00 00 00 08 00
5.0174 281 4 00 00 00 00 00 00 00 00
5.1129 701 1 05                       T0 Operational 
....
5.4755 00 2 01 00                     Start all nodes
   Nun werden alle Knoten gestartet
5.4847 201 1 00 00
   ca. 1 sec nach Start von Knoten 1 wird das RxPDO1 erstmals geschickt