Realisierung der FB

Die PLCopen FB bilden intern folgendes Zustandsdiagramm ab.

Zustände innerhalb eines FB.
Abb.: Zustände innerhalb eines FB.

Der nachfolgend aufgezeigte Zustandsautomat in IEC 61131-3 Structured Text zeigt das Gerüst für die Realisierung der Beauftragung innerhalb eines FB. Die einzelnen Aktionen sind dabei im Pseudo-Code gehalten.

(*==========================================================*)

(*     Zustandsverteiler für die HLI Beauftragung           *)

(*==========================================================*)

CASE fb_state OF

(*==========================================================*)

(*==========================================================*)

FB_IDLE,

FB_ERROR:(*                                                 *)

IF ( tr_execute.Q = TRUE OR retry ) THEN

  (* checking of the FB's input parameters                  *)

  (* check whether transition is allowed                    *)

  (* try to send the MC order.                              *)

  (* IF (sendorder = OK) THEN fb_state := FB_ACTIVE; END_IF *)

END_IF

(*==========================================================*)

(*==========================================================*)

ACTIVE:(*                                                   *)

IF ( tr_execute.Q = TRUE OR retry) THEN

  (* check whether FB's ax_ref connection has changed since idle state*)

  (* checking of the FB's input parameters *)

  (* check whether transition is allowed *)

  (* try to send send the MC order. *)

END_IF

(* collection of Acknowledge *)

(* IF (Acknowledge = OK) THEN fb_state := FB_IDLE; END_IF *)

(*==========================================================*)

(*==========================================================*)

ELSE

(*// default: Unerlaubter Zustand *)

END_CASE;

Die FBs kennen keine Reset-Transition, vielmehr wird nach einem vorangegangenen FB_ERROR nach erneutem Antriggern des FBs einfach versucht die neue Beauftragung durchzusetzen. Deshalb unterscheidet der Zustandsverteiler für die HLI Beauftragung nicht zwischen FB_IDLE und FB_ERROR.

Der Zustand FB_RETRY tritt nicht als expliziter Zustand im Zustandsverteiler auf sondern wird in den Zuständen FB_IDLE, FB_ERROR und FB_ACTIVE jeweils in einer Variablen gehalten für den Fall, dass der FB im entsprechenden Zustand nicht auf Anhieb eine Beauftragung durchsetzen kann.

Die eindeutige Auftragsnummer wird als globales SPS Datum gehalten und von den FB nur zum Zeitpunkt nach einer erfolgreichen Beauftragung aus den Zuständen FB_IDLE und FB_ERROR heraus inkrementiert, und in seinen Instanzdaten vermerkt.

Bei einer Beauftragung aus dem Zustand FB_ACTIVE heraus wird ein neuer Auftrag mit derselben Auftragsnummer an den MC geschickt und ein FB-interner Zähler, wie viele Aufträge einer Auftragsnummer unterwegs sind, inkrementiert.

Diese Methode erspart eine aufwendige Verwaltung der Auftragsnummern die beauftragt wurden und der zugehörigen eingegangenen Quittierungen.

Wenn ein FB angetriggert wird, überprüft er, ob der Zustandsübergang, der durch die Ausführung des FB im FBSD ausgelöst würde (konjunktiv!), im momentanen Zustand des FBSD überhaupt erlaubt ist („transition allowed“). Falls dies nicht der Fall ist, wird der Auftrag gar nicht erst abgesetzt sondern der FB meldet einen Beauftragungsfehler (= Fehler auf FB Ebene). Der Achszustand ändert sich in einem solchen Fall niemals, da ja überhaupt gar kein Auftrag abgesetzt wurde. Näheres dazu finden Sie im folgenden Kapitel.