FB_MTP_ServiceControl

FB_MTP_ServiceControl 1:

Der Funktionsbaustein FB_MTP_ServiceControl ermöglicht das Ausführen von Prozeduren aus unterschiedlichen Quellen: interne SPS-Logik, manuelle Bedienung (z. B. über OPC-UA) oder Leitsystem (z. B. über OPC-UA). Schaltanfragen und Wertevorgaben werden über den Service Mode verwaltet.

FB_MTP_ServiceControl 2:

Bei dem FB_MTP_ServiceControl handelt es sich um einen abstrakten Funktionsbaustein. Dieser kann nicht instanziiert, sondern muss abgeleitet werden (siehe Abschnitt Syntax)!

FB_MTP_ServiceControl 3:

Für die Verwendung von Diensten wird die Verwendung des MTP-Engineerings und die darin enthaltene automatische Codegenerierung empfohlen!

Prozeduren

Am Eingang Procedures werden alle dem Dienst zugehörigen Prozeduren als ARRAY[*] OF POINTER TO FB_MTP_Procedure übergeben. Ein Dienst benötigt mindestens eine Prozedur.

Die Auswahl einer Prozedur erfolgt über die Variablen ProcedureInt, ProcedureOp, ProcedurExt in Abhängigkeit des Zustands des Service Mode des Dienstes. Über ProcedureReq wird die aktuell vorgewählte Prozedur-ID angezeigt, welche beim Start des Dienstes verwendet wird. Bei ungültiger Prozedur-ID wird hier eine 0 ausgegeben. ProcedureCur zeigt die aktuell gestartete Prozedur an. Es kann immer nur eine Prozedur zur gleichen Zeit ausgeführt werden.

Parameter

Am Eingang ConfParameters werden alle dem Dienst zugehörigen Konfigurationsparameter als ARRAY[*] OF POINTER TO FB_MTP_ParameterElement übergeben.

Am Eingang ProcParameter werden alle dem Dienst zugehörigen Prozedurparameter als ARRAY[*] OF POINTER TO FB_MTP_ParameterElement übergeben.

Die dienstweite Übernahme neuer Werte für die Parameter erfolgt nach dem gleichen Prinzip wie in den Unterkapiteln von ParameterElements beschrieben. Es werden die Wertvorgaben aller dem Dienst zugewiesenen Parameter auf einmal übernommen. Über die Variable VReq der Parameter können die zu übernehmenden Werte vorher geprüft werden.

Die Freigabe für die Übernahme erfolgt über die Variable ProcParameterApplyEn für Prozedurparameter bzw. über die Variable ConfigParameterApplyEn für Konfigurationsparameter. Eine dienstweite Freigabe ist nur möglich, wenn alle Prozedurparameter bzw. Konfigurationsparameter die Freigabe ApplyEn = TRUE erteilt haben.

Je nach Zustand des Service Mode erfolgt die dienstweite Werteübernahme für Prozedurparameter über die Variablen ProcParameterApplyInt, ProcParameterApplyOp oder ProcParameterApplyExt bzw. über die Variablen ConfigParameterApplyInt, ConfigParameterApplyOp oder ConfigParameterApplyExt für die Konfigurationsparameter, wenn Apply = TRUE ist.

Berichtswerte

Am Eingang ReportValues werden alle dem Dienst zugehörigen Berichtswerte als ARRAY[*] OF POINTER TO FB_MTP_ReportValue übergeben. Über den Eingang ReportValueFreeze können alle Reportwerte V des Dienstes eingefroren werden. Sollte sich der Wert des Eingangswerts VIn in dieser Zeit mehr als einmal ändern, wird dies am Ausgang MissedValue = TRUE des Parameters angezeigt.

Das untenstehende Bild zeigt eine Übersicht der zu übergebenen Arrays:

FB_MTP_ServiceControl 4:
FB_MTP_ServiceControl 5:

Sollten keine ConfParameter, ProcParameter oder kein RequiredEquipment benötigt werden, übergeben Sie ein leeres Array.

Dienstzustandsautomat

Der Dienstzustandsautomat hat 16 Zustände auf fünf Ebenen (Level). Die Zustände sind unterteilt in transiente und nicht-transiente Zustände. Die transienten Zustände werden über Steuerbefehle des Steuerworts erreicht. Nicht transiente Zustände werden nach erfolgreicher Abarbeitung der transienten Zustände (SC) erreicht. Eine Ausnahme ist der Zustand Execute. Dieser kann sowohl transient, als auch nicht-transient sein. Dies wird über die Variable IsSelfCompleting in der Prozedur definniert.

Der Dienstzustandsautomat ist nach dem untenstehenden Schema aufgebaut:

FB_MTP_ServiceControl 6:

Der Dienstzustandsautomat kann in unterschiedlichen Schleifen betrachtet werden:

Hauptschleife

Die Hauptschleife zum Ausführen der prozesstechnischen Hauptfunktion(en) des Automaten beinhaltet die folgenden Zustände:

Idle→Starting→Execute→Completing→Completed→Resetting→Idle

Daneben können noch folgende Schleifen betrachtet werden:

Pause-Schleife

Die Pause-Schleife kann nur aus dem Zustand Execute gestartet werden. Beendet wird sie durch den Befehl Resume oder durch einen Befehl, der in einen Zustand höherer Ebene führt.

Beispiel:

Execute→Pausing→Paused→Resuming→Execute

Hold-Schleife

Die Hold-Schleife kann aus den Zuständen aus Ebene 2 oder geringer gestartet werden. Beendet wird sie durch den Befehl Unhold oder durch einen Befehl, der in einen Zustand höherer Ebene führt.

Beispiel:

Execute→Holding→Held→Unholding→Execute

FB_MTP_ServiceControl 7:

In der MTP-Richtlinie dient die Hold-Schleife der Implementierung der in einem Fehlerfall auszuführenden Logik.

Stop-Schleife

Die Stop-Schleife kann aus den Zuständen aus Ebene 3 oder geringer gestartet werden. Beendet wird sie durch den Befehl Reset oder Abort.

Execute→Stopping→Stopped→Resetting→Idle

FB_MTP_ServiceControl 8:

In der MTP-Richtlinie dient die Stop-Schleife der Implementierung der Logik zum Stoppen des Dienstes.

Abort-Schleife

Die Abort-Schleife kann aus den Zuständen aus Ebene 4 oder geringer gestartet werden. Beendet wird sie durch den Befehl Reset.

Execute→Aborting→Aborted→Resetting→Idle

FB_MTP_ServiceControl 9:

In der MTP-Richtlinie dient die Abort-Schleife der Implementierung der Logik zum schnellen Stoppen des Dienstes.

Steuerung des Dienstzustandsautomaten

Die Variable CommandEn gibt die einzelnen Steuerbefehle des Steuerworts frei. Über die Variablen CommandInt, CommandOp und CommandExt kann das Steuerwort (siehe E_MTP_Command) in Abhängigkeit des Zustands des Service Mode für den Dienstzustandsautomaten vorgegeben werden.

Alle Zustände können mit einem Steuerbefehl, sofern dieser freigegeben ist, in einen Zustand höherer Ebene überführt werden: z. B. können mit dem Befehl Hold alle Zustände der Ebenen 1 und 2 in den Zustand Holding überführt werden.

Ausführung von Prozeduren

Erfolgt der Befehl Start, wird die zu ausgewählte Prozedur in den Zustand Starting überführt. Alle anderen Prozeduren, die dem Dienst zugewiesen sind, werden gesperrt.

Die Ausführung der Zustände, mit Ausnahme von Idle, erfolgt in den gleichnamigen Methoden der ausgewählten Prozedur. Bei der Ausführung von transienten Zuständen erfolgt der Zustandsübergang (SC), wenn die jeweilige Methode TRUE zurückgibt. Nach erfolgreicher Ausführung gehen sie in ihren Folgezustand über.

Erst wenn der Dienstzustandsautomat sich wieder im Zustand Idle befindet, kann eine andere Prozedur ausgewählt und gestartet werden. Über die Variable StateCur wird der aktuelle Zustand des Dienstzustandsautomaten angezeigt (siehe E_MTP_State).

Abhängigkeiten mit Service Mode

Wird der Service Mode aus dem Zustand Offline in einen der beiden anderen Zustände Operator oder Automatic* überführt, befindet sich der Dienstzustandsautomat immer im Zustand Idle. Ein Zurückführen des Service Mode in den Zustand Offline ist nur möglich, wenn der Dienstzustandsautomat sich im Grundzustand Idle befindet. Ein Umschalten zwischen Operator und Automatic* ist unabhängig vom Zustand des Dienstzustandsautomaten möglich und verändert nicht dessen aktuellen Zustand.

Positionsbeschreibung

Um den aktuellen Stand des Dienstes näher zu beschreiben, kann eine Textliste angelegt werden. In dieser können die einzelnen Arbeitsschritte näher beschrieben werden. Über die Variable PosTextID kann auf die einzelnen Arbeitsschritte in der Textliste verwiesen werden.

FB_MTP_ServiceControl 10:

Für die Positionsbeschreibung wird die Verwendung des MTP-Engineerings und des darin enthaltenen MTP-Exports empfohlen, da die Textliste nicht über OPC-UA zur Verfügung gestellt wird, sondern in der MTP-Datei beschrieben wird!

Dienst-Bediener-Interaktion

Während der Laufzeit kann eine Interaktion zwischen Dienst und Bediener erfolgen. Hierzu werden Textlisten mit Fragen und zugehörigen Antworten angelegt. Über die Variable QuestionID verweist der Dienst auf eine Frage in der Textliste. Sie bekommen zu der Frage Antwortmöglichkeiten angezeigt. Bei Auswahl einer Antwort wird diese über die Variable InteractQuestionID an den Dienst geschrieben. Die Variable AdditionalInfo ermöglicht es, weitere Informationen in Textform bereitzustellen.

FB_MTP_ServiceControl 11:

Für die Dienst-Bediener-Interaktion wird die Verwendung des MTP-Engineerings und des darin enthaltenen MTP-Exports empfohlen, da die Textlisten nicht über OPC-UA zur Verfügung gestellt werden, sondern in der MTP-Datei beschrieben werden!

Im untenstehenden Beispiel werden die Prozeduren, Konfigurationsparameter und Reportwerte im Deklarationsteil einer Ableitung des FB_MTP_ServiceControl deklariert und in Arrays zusammengefasst. Anschließend werden diese im Rumpf des FB_MTP_ServiceControl aufgerufen. Somit sind alle dienstrelevanten Prozeduren, Parameter und Reportwerte an einem Ort zusammengefasst.

Dabei kann immer nur eine Prozedur zur gleichen Zeit ausgeführt werden. Das Starten einer Prozedur kann nur erfolgen, wenn der Dienst im Zustand Idle ist.

Syntax

FUNCTION_BLOCK FB_MTP_Service EXTENDS FB_MTP_ServiceControl
VAR
///Procedures – Parameters and Required Equipment
///Procedure 1
   <ProcParametersArray1>    : ARRAY[0..<n>] OF POINTER TO FB_MTP_ParameterElement := [ADR(<ProcParam_0>), ADR(<ProcParam_1>)];
   <RequiredEquipmentArray1> : ARRAY[0..<n>] OF I_MTP_ReqEq := [ADR(<ReqEq_0>), ADR(<ReqEq_1>)];

///Procedure 2
   <ProcParametersArray2>    : ARRAY[0..<n>] OF POINTER TO FB_MTP_ParameterElement := [ADR(<ProcParam_1>), ADR(<ProcParam_2>)];

   <RequiredEquipmentArray2> : ARRAY[0..<n>] OF I_MTP_ReqEq := [ADR(<ReqEq_0>), ADR(<ReqEq_1>)];

///Procedures
   ProcedureArray          : ARRAY[1..<n>] OF POINTER TO FB_MTP_Procedure := [ADR(<Procedure_1>), ADR(<Procedure_1>)];

///ConfigurationParameters
   ConfParameterArray      : ARRAY[0..<n>] OF POINTER TO FB_MTP_ParameterElement := [ADR(<ConfParameter_0>)]

///ProcedureParameters
   ProcParameterArray      : ARRAY[0..<z>] OF POINTER TO FB_MTP_ParameterElement := [ADR(<ProcParameter_0>), ADR(<ProcParameter_1>), ADR(<ProcParameter_2>)];

///ReportValues
   ReportValueArray        : ARRAY[0..<n>] OF POINTER TO FB_MTP_ReportValue [ADR(<ReportValue_0>)]
END_VAR

VAR_INPUT
///Procedures
   <Procedure_1>             : FB_Procedure := (<initial values>);
   <Procedure_2>             : FB_Procedure := (<initial values>);

///ConfigurationParameters
   < ConfParameter_0>        : FB_MTP_AnaServParam := (<initial values>);

///ProcedureParameters
   (<ProcParameter_0>        : FB_MTP_AnaServParam := (<initial values>);
   (<ProcParameter_1>        : FB_MTP_AnaServParam := (<initial values>);
   (<ProcParameter_2>        : FB_MTP_AnaServParam := (<initial values>);

///ReportValues
   (<ReportValue_0>: FB_MTP_AnaReportValue := ((<initial values>);
END_VAR
<Procedure_1>(
   ProcParameters    := <ProcParametersArray_1>,
   RequiredEquipment := <RequiredEquipmentArray_1>);

<Procedure_2>(
   ProcParameters    := <ProcParametersArray_2>,
   RequiredEquipment := <RequiredEquipmentArray_2>);

SUPER^(
   Procedures     := ProcedureArray,
   ConfParameters := ConfParameterArray,
   ProcParameters := ProcParameterArray,
   ReportValues   := ReportValueArray);

Weitere Eigenschaften

Name des Objekts

Objektbeschreibung

WQC

OSLevel

Service Mode

FB_MTP_ServiceControl 12: Eingänge

Name

Typ

Beschreibung

OPC-UA-Zugriff

TagName

STRING

Name der Schnittstelle

-

TagDescription

STRING

Beschreibung der Schnittstelle

-

WQC

BYTE

Worst Quality Code

Lesen

OSLevel

BYTE

Level muss für Anlage definiert werden. Wert 0 ist reserviert für lokale Bedienung.

Lesen/schreiben

Procedures 

ARRAY [*] OF POINTER TO FB_MTP_Procedure

Array mit allen zum Dienst gehörenden Prozeduren

-

ConfParameters 

ARRAY [*] OF POINTER TO FB_MTP_ParameterElement

Array mit allen zum Dienst gehörenden Konfigurationsparametern

-

ProcParameters 

ARRAY [*] OF POINTER TO FB_MTP_ParameterElement

Array mit allen zum Dienst gehörenden Prozedurparametern

-

ReportVaIues

ARRAY [*] OF POINTER TO FB_MTP_ReportValue

Array mit allen zum Dienst gehörenden ReportValues

-

Commandlnt 

DWORD

Internal Steuerwort (relevant, wenn StateAutAct = TRUE und SrcIntAct = TRUE)

Lesen

Procedurelnt 

DWORD

Internal Prozedurvorwahl (relevant, wenn StateAutAct = TRUE und SrcIntAct = TRUE)

Lesen

CommandEn 

DWORD

Freigabe von Steuerbefehlen des Steuerworts

Lesen

State*

Src*

 

Siehe Service Mode

 

PosTextID 

DWORD

ID-Variable für den Positionstext

Lesen

InteractQuestionID 

DWORD

ID-Variable für den Fragetext

Lesen

InteractAddInfo 

STRING

Zusätzliche Information zur aktuellen InteractQuestionID

Lesen

ProcParamAppIyInt 

BOOL

Alle zum Dienst gehörenden Internal Prozessparameterwerte VInt übernehmen. (Relevant, wenn StateAutAct = TRUE und SrcIntAct = TRUE)

Lesen

ConfigParamAppIyInt 

BOOL

Alle zum Dienst gehörenden Internal Konfigurationsparameterwerte VInt übernehmen. (Relevant, wenn StateAutAct = TRUE und SrcIntAct = TRUE)

Lesen

ReportVaIueFreeze 

BOOL

1: Einfrieren aller Reportwerte des Dienstes

0: Reportwerte des Dienstes nicht einfrieren

Lesen/schreiben


FB_MTP_ServiceControl 13: Ausgänge

Name

Typ

Beschreibung

OPC-UA-Zugriff

StateCur 

DWORD

Aktueller Zustand des Dienstzustandsautomaten

Lesen

ProcedureCur 

DWORD

Aktuell verwendete Prozedur

Lesen

ProcedureReq 

DWORD

Aktuell vorgewählte Prozedur, welche bei Start ausgeführt wird.

Lesen

State*

Src*

 

Siehe Service Mode

 

ProcParamAppIyEn 

BOOL

Freigabe Prozedurparameterübernahme:

1: Parameter können übernommen werden.

0: Parameter können nicht übernommen werden.

Lesen

ConfigParamAppIyEn

BOOL

Freigabe Konfigurationsparameterübernahme:

1: Parameter können übernommen werden.

0: Parameter können nicht übernommen werden.

Lesen


Externe Variablen

Name

Typ

Beschreibung

OPC-UA-Zugriff

State*

Src*

BOOL

Siehe Service Mode

 

CommandOp

DWORD

Operator Steuerwort (relevant, wenn StateOpAct = TRUE)

Lesen/schreiben

CommandExt

DWORD

External Steuerwort (relevant, wenn StateAutAct = TRUE und SrcExtAct = TRUE)

Lesen/schreiben

ProcedurOp

DWORD

Operator Prozedurvorwahl (relevant, wenn StateOpAct = TRUE)

Lesen/schreiben

ProcedureExt

DWORD

External Prozedurvorwahl (relevant, wenn StateAutAct = TRUE und SrcExtAct = TRUE)

Lesen/schreiben

InteractAnswerID

DWORD

ID-Variable für den Antworttext

Lesen/schreiben

ProcParamAppIyOp 

BOOL

Alle zum Dienst gehörenden Operator Prozessparameterwerte VOp übernehmen. (Relevant, wenn StateOpAct = TRUE)

Lesen/schreiben

ProcParamAppIyExt 

BOOL

Alle zum Dienst gehörenden External Prozessparameterwerte VExt übernehmen. (Relevant, wenn StateAutAct = TRUE und SrcExtAct = TRUE)

Lesen/schreiben

ConfigParamAppIyOp 

BOOL

Alle zum Dienst gehörenden Operator Konfigurationsparameterwerte VOp übernehmen. (Relevant, wenn StateOpAct = TRUE)

Lesen/schreiben

ConfigParamAppIyExt 

BOOL

Alle zum Dienst gehörenden External Konfigurationsparameterwerte VExt übernehmen. (Relevant, wenn StateAutAct = TRUE und SrcExtAct = TRUE)

Lesen/schreiben

FB_MTP_ServiceControl 14: Methoden

Name

Typ

Beschreibung

Idle 

 

Nicht transienter Initialzustand. Es wird keine prozesstechnische Funktion ausgeführt.

IsActuatorsInternal

BOOL

1: Alle dem Dienst zugeordneten Aktoren befinden sich im Zustand Internal.

IsActuatorsManual

BOOL

1: Alle dem Dienst zugeordneten Aktoren befinden sich im Zustand Manual.

IsActuatorsOffline

BOOL

1: Alle dem Dienst zugeordneten Aktoren befinden sich im Zustand Offline.

IsActuatorsOperator

BOOL

1: Alle dem Dienst zugeordneten Aktoren befinden sich im Zustand Operator.

IsActuatorsAutomatic

BOOL

1: Alle dem Dienst zugeordneten Aktoren befinden sich im Zustand Automatic.

IsReqEqInternal

BOOL

1: Alle dem Dienst zugeordneten Aktoren und PID-Logik befinden sich im Zustand Internal

IsReqEqManual

BOOL

1: Alle dem Dienst zugeordneten Aktoren und PID-Logik befinden sich im Zustand Manual

IsReqEqOffline

BOOL

1: Alle dem Dienst zugeordneten Aktoren und PID-Logik befinden sich im Zustand Offline

IsReqEqOperator

BOOL

1: Alle dem Dienst zugeordneten Aktoren und PID-Logik befinden sich im Zustand Operator

IsReqEqAutomatic

BOOL

1: Alle dem Dienst zugeordneten Aktoren und PID-Logik befinden sich im Zustand Automatic

SetActuatorsInternal

BOOL

Alle dem Dienst zugeordneten Aktoren werden in den Zustand Internal überführt.

SetActuatorsManual

BOOL

Alle dem Dienst zugeordneten Aktoren werden in den Zustand Manual überführt.

SetActuatorsOffline

BOOL

Alle dem Dienst zugeordneten Aktoren werden in den Zustand Offline überführt.

SetActuatorsOperator

BOOL

Alle dem Dienst zugeordneten Aktoren werden in den Zustand Operator überführt.

SetActuatorsAutomatic

BOOL

Alle dem Dienst zugeordneten Aktoren werden in den Zustand Automatic überführt.

SetReqEqInternal

BOOL

Alle dem Dienst zugeordneten Aktoren und PID-Logik werden in den Zustand Internal überführt.

SetReqEqManual

BOOL

Alle dem Dienst zugeordneten Aktoren und PID-Logik werden in den Zustand Manual überführt.

SetReqEqOffline

BOOL

Alle dem Dienst zugeordneten Aktoren und PID-Logik werden in den Zustand Offline überführt.

SetReqEqOperator

BOOL

Alle dem Dienst zugeordneten Aktoren und PID-Logik werden in den Zustand Operator überführt.

SetReqEqAutomatic

BOOL

Alle dem Dienst zugeordneten Aktoren und PID-Logik werden in den Zustand Automatic überführt.

SetOffline 

BOOL

Den Dienst in den Zustand Offline überführen.

SetOperator 

BOOL

Den Dienst in den Zustand Operator überführen.

SetAutomaticIntern

BOOL

Den Dienst in den Zustand AutomaticIntern überführen.

SetAutomaticExtern

BOOL

Den Dienst in den Zustand AutomaticExtern überführen.

SetProcParamAppIy
En 

BOOL

Wertvorgabe (Eingangsvariable der Methode ApplyEn) für Eingangsvariable ApplyEn der Prozedurparameter:

Alle dem Dienst zugeordneten Dienstparameter (wenn SyncOnly = FALSE)

Alle dem Dienst zugeordneten Dienstparameter mit Eingangsvariable Sync = TRUE (wenn Eingangsvariable der Methode SyncOnly = TRUE)

SetConfigParamAppIyEn 

BOOL

Wertvorgabe (Eingangsvariable Methode ApplyEn) für Konfigurationsparameter:

Alle dem Dienst zugeordneten Dienstparameter (wenn SyncOnly = FALSE)

Alle dem Dienst zugeordneten Dienstparameter mit Eingangsvariable Sync = TRUE (wenn Eingangsvariable der Methode SyncOnly = TRUE)

ToOnline

BOOL

Implementierung von Logik bei Verlassen des Zustands Offline.

ToOffline

BOOL

Implementierung von Logik bei Betreten des Zustands Offline.