Kontrollmechanismus

 

Im Allgemeinen besteht die Aufgabe von jedem definierten Funktions­block 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

control_mechanism.png

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 Initialisierung­swert gesetzt.

B:Abort: Sobald die SDO-Abbruch Meldung verfügbar ist, wird der Ausgang ERROR auf den Wert 1 gesetzt und weitere Fehlerinforma­tionen sind in dem Ausgang ERRORINFO verfügbar ("weitere Fehler Register" /DS405/). Die Ausgänge verbleiben so lange, wie der Funk­tionsblock 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 Initialisierung­swerte.

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 gegebenen­falls Fehlerinformation im SDO-Abbruch Datenformat. Wenn keine zusätzliche Fehlerinformation verfügbar ist, dann ist ERRORINFO gleich 0.

Flusssteuerung

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 Funktions­block 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 Funk­tion, die die ID des lokalen Knotens erhält, so arbeiten. Ist die Antwort nicht unmittelbar verfügbar, dann gibt der Funktionsblock die Program­mkontrolle wieder zurück an den Aufrufer, bei Setzung aller Ausgangs­signale 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überschrei­tung erreicht ist, dann setzt der Funktionsblock die Ausgänge auf Fehler­zustand, 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 Gele­genheit 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 Funk­tionsblock, 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ögli­cher 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 bere­itgestellten Daten sind. Bei Schreibanfragen weiß der Benutzer nicht, ob die Eingangsdaten an das Gerät über­tragen werden, bevor diese geändert werden. Des Weit­eren 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 Initialis­ierungswerte gesetzt. Eine mögliche verfügbare Antwort wird ignoriert, genau wie eine laufende Abfrage. Eine stei­gende 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 jeder­zeit 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.“