Im Allgemeinen besteht die Aufgabe von jedem definierten Funktionsblock der CAA_Cia405.Library darin, einen oder mehrere Parameter zu lesen oder zu schreiben. Solche Parameter können Variablen oder Zustände von an CANopen angeschlossenen Geräten (SDO, EMCY, NMT-Zustand) oder lokalen Knoten (eigene Knotennummer, CANopen Kernel Zustand) sein. Aus diesem Grunde legt jeder Funktionsblock im Allgemeinen das gleiche Verhaltensmuster an den Tag.
Ein typisches Verhalten der Steuerungssignale ENABLE, CONFIRM und ERROR wird beim SDO-Zugriff gezeigt:
Request/Response Diagramm
Die Spitze bei Symbol zeigt den Zeitpunkt, wann das Ereignis auftritt. Das Symbol
weist darauf hin, dass die Meldung ignoriert wird. Hohe Pegel bei ENABLE und CONFIRM signalisieren TRUE; niedrige Pegel signalisieren FALSE. Hoher Pegel bei ERROR signalisiert einen Wert > 0; niedriger Pegel signalisiert Wert = 0.
SPS Zyklen: Das Diagramm zeigt, dass zwischen dem Signalablauf und den SPS Zyklen kein Zusammenhang besteht, z.B. die Antwort kann sofort oder einige SPS Zyklen später verfügbar sein.
Timeout: Die Zeitkontrolle startet mit einer steigenden Flanke bei ENABLE. Ein Timeout Ereignis tritt auf, wenn keine Antwort verfügbar ist, bevor die Zeitkontrolle den Timeout-Wert erreicht. Wenn Timeout stattfindet, dann ist ERROR = 3 und ERRORINFO enthält gegebenenfalls Fehlerinformation im SDO-Abbruch Datenformat. Wenn keine zusätzliche Fehlerinformation verfügbar ist, dann ist ERRORINFO gleich 0.
Request:
Der Zustand "no error" wie auch "error" zeigt, dass das Request Ereignis unmittelbar mit der an Eingang ENABLE erkannten steigenden Flanke auftritt, d.h. es wird an eine untergeordnete Software Ebene übergeben. Die Ausgänge bleiben auf ihre Initialisierungswerte stehen. Die Programmkontrolle wird an den Aufrufer zurückgegeben, wenn die Antwort oder Abbruch nicht sofort verfügbar ist.
A:Response: Sobald eine SDO-Antwort Meldung verfügbar ist, wird der Ausgang CONFIRM auf TRUE gesetzt und bleibt solange TRUE, solange der Funktionsblock mit dem Eingang ENABLE=TRUE aufgerufen wird. Wenn der Funktionsblock mit ENABLE=FALSE aufgerufen wird, dann wird CONFIRM auf FALSE, sprich Initialisierungswert gesetzt.
B:Abort: Sobald die SDO-Abbruch Meldung verfügbar ist, wird der Ausgang ERROR auf den Wert 1 gesetzt und weitere Fehlerinformationen sind in dem Ausgang ERRORINFO verfügbar ("weitere Fehler Register" /DS405/). Die Ausgänge verbleiben so lange, wie der Funktionsblock mit der Eingang ENABLE = TRUE aufgerufen wird. Wenn der Funktionsblock mit ENABLE = FALSE aufgerufen wird, dann werden ERROR und ERRORINFO auf 0 gesetzt, d.h. auf deren Initialisierungswerte.
C: ENABLE = FALSE bevor Response oder Abort verfügbar: Sobald der Funktionsblock mit ENABLE = FALSE aufgerufen wird, werden die Ausgänge auf deren Initialisierungswerte gesetzt, d.h. CONFIRM = FALSE, ERROR = 0, ERRORINFO = 0. Eine möglicherweise verfügbare Response oder Abort werden ignoriert, genau so wie später eintreffende Response oder Abort.
D: Timeout: Wenn ein Funktionsblock aufgerufen wird und es wird eine Zeitüberschreitung erkannt und Response oder Abort sind nicht verfügbar, dann ist ERROR = 3 und ERRORINFO enthält gegebenenfalls Fehlerinformation im SDO-Abbruch Datenformat. Wenn keine zusätzliche Fehlerinformation verfügbar ist, dann ist ERRORINFO gleich 0.
Der Funktionsblock bleibt im Leerlauf, d.h. alle Ausgänge sind auf deren Initialisierungswerte gesetzt und es wird keine Operation ausgeführt, solange der Eingang ENABLE gleich FALSE ist. Die Anzahl Aufrufe ist unerheblich.
Sobald ENABLE eine steigende Flanke realisiert, startet der Funktionsblock die Ausführung, d.h. er wird die Eingangswerte lesen und eine Anfrage an die untergeordnete Software stellen, z.B. einen bestimmten Parameter zu lesen oder zu schreiben. Wenn auf die Anfrage eine Antwort unmittelbar verfügbar ist, wie der Rückgabewert nach einem Funktionsaufruf, dann wird der Funktionsblock seine Ausgänge sofort setzen und seine Aufgabe abschließen. Zum Beispiel könnte eine Funktion, die die ID des lokalen Knotens erhält, so arbeiten. Ist die Antwort nicht unmittelbar verfügbar, dann gibt der Funktionsblock die Programmkontrolle wieder zurück an den Aufrufer, bei Setzung aller Ausgangssignale auf aktiver Zustand, z.B. CONFIRM = FALSE und ERROR = 0.
Bei jedem Aufruf des Funktionsblocks werden die Verfügbarkeit der Antwort und gegebenenfalls die Zeitüberschreitung überprüft. Eingangsänderungen, außer ENABLE, werden ignoriert.
Wenn die Antwort einen Fehlerzustand meldet oder die Zeitüberschreitung erreicht ist, dann setzt der Funktionsblock die Ausgänge auf Fehlerzustand, z.B. CONFIRM = FALSE und ERROR <> 0 und beendet seine Aufgabe.
Wenn die Antwort Erfolg meldet, dann setzt der Funktionsblock die Ausgänge auf Zustandsbestätigung, d.h. CONFIRM = TRUE und ERROR = 0 und, wenn es eine Leseabfrage war, die Datenausgänge auf die aktuellen abgefragten Werte und schließt seine Aufgabe ab.
Hinweis
In /DS405/ ist nicht klar festgelegt, ob der Funktionsblock a) sofort, b) beim nächsten Aufruf oder c) nach der nächsten steigenden Flanke des Eingangs ENABLE erneut ausgeführt wird. Damit andere Funktionsblöcke die Gelegenheit erhalten, auf das selbe Gerät auf dem selben SDO-Kanal zuzugreifen, wird empfohlen, zumindest einen SPS Zyklus (b) abzuwarten, bevor die Ausführung erneut gestartet wird. Dadurch wird verhindert, dass ein Funktionsblock, der dauerhaft mit Eingang ENABLE = TRUE aufgerufen wird, die Kommunikation mit einem Gerät blockieren kann. In den Fällen a) und b) besteht ein möglicher Nachteil darin, dass der Funktionsblock nicht auf die Verfügbarkeit einer neuen Antwort, z.B. neue Daten, hinweisen kann. Der Benutzer weiß nicht , wie alt die bereitgestellten Daten sind. Bei Schreibanfragen weiß der Benutzer nicht, ob die Eingangsdaten an das Gerät übertragen werden, bevor diese geändert werden. Des Weiteren ist es unsicher, die gleichen Daten mehrere Male zu übertragen. Aus diesen Gründen ist es ratsam, die Ausführung nicht erneut zu starten, wenn ENABLE gleich TRUE verbleibt (c). Wenn ENABLE gleich FALSE wird, dann werden alle Ausgänge sofort auf deren Initialisierungswerte gesetzt. Eine mögliche verfügbare Antwort wird ignoriert, genau wie eine laufende Abfrage. Eine steigende Flanke von ENABLE startet die Flusssteuerung von Neuem.
Hinweis
In /DS301/ (V 4.02 Kap. 9.2.2.1.7) wird in Bezug auf SDO-Abbruch Folgendes definiert: „Der Dienst kann jederzeit von beiden, sowohl vom Clienten, als auch vom Server einer SDO, ausgeführt werden. Wenn der Kunde einer SDO einen ausstehenden Dienst bestätigt hat, dann wird der Abbruch als Bestätigung für diesen Dienst betrachtet.“