FB_ModuleControllerTpi – Allgemeine Informationen

Übersicht

Typ

Funktionsbaustein

Verfügbar ab

V1.1.0.0

Verwendet von:

PacDrive-Pilot-Vorlagen-Architektur

Aufgabe

Die POU FB_ModuleController kapseln

Beschreibung

Dieser Funktionsbaustein aktiviert/deaktiviert alle dazugehörigen Achsmodul-Funktionsbausteine, wenn er aktiviert/deaktiviert ist. Er ist aktiviert, wenn die Maschine aktiviert ist (iq_stMachineItf.i_xEnable) und der Ausgang q_xActive anzeigt, dass der Funktionsbaustein aktiviert ist und korrekt arbeitet.

Die Achsen werden über den Eingang i_pstSubModuleInterface festgelegt. Die Struktur wird mit Hilfe eines Zeigers übertragen, so muss nur die Startadresse anstatt der gesamten Struktur übertragen werden. Mit der Funktion AXM.FC_UpdateSubModuleInterfaceEight wird jede Achse in der Submodulschnittstelle aktualisiert.

Der hauptsächliche Zweck des Funktionsbausteins ist es, Befehlstabellen abzuarbeiten. Eine Befehlstabelle ist eine sortierte Liste von Befehle, mit der Aktionen individueller Achsen oder Achsgruppen zugeordnet werden.

Der Funktionsbaustein wartet, bis er eine Änderung in der Standardmodulschnittstelle der Maschine erkennt, insbesondere die Signale diCMD und diStartStep, und leitet die Bearbeitung ein. Der iq_diCmd der Maschine wird normalerweise am Anfang oder Ende einer Betriebsart geändert. Die Standardmodulschnittstelle der Maschine enthält die Signale zum Steuern der Maschine und wird über den Ein-/Ausgang iq_stMachineItf übergeben.

Wenn iq_diCMD ungleich 0 wird, wird in der Liste der Befehlstabellen nach der festgelegten Befehlstabelle vom Typ iq_diCMD gesucht. Die Befehlstabelle wird dann folgendermaßen bearbeitet:

  • Den ersten Befehl in der Tabelle lesen, den Ausgang q_xCmdActive setzen und den Ausgang q_xCmdDone zurücksetzen.

  • Den Befehl zu der festgelegten Achse oder zu allen von einer Gruppe festgelegten Achsen schicken. Die Achsen erhalten ihre Befehle durch den in ihrer Submodulschnittstelle enthaltenen Eingang iq_diCMD.

  • Warten, bis iq_diCMD von allen ausgewählten Achsen 0 wird. Zeigt an, dass die Achsen ihre Befehle abgearbeitet haben.

  • Nächsten Befehl in der Tabelle lesen.

  • Alles wiederholen, bis die Tabelle vollständig abgearbeitet wurde, und den Ausgang q_xCmdActive auf FALSE und q_xCmdDone auf TRUE setzen.

Befehlstabellen können mit den Funktionen TPL.FC_InitCmdTableCmd, TPL.FC_InitCmdTableModule und TPL.FC_InitCmdTable erstellt werden. Achsgruppen werden mit der Funktion TPL.FC_InitCmdGroup definiert.

Eine Liste, die alle Befehlstabellen enthält, wird über den Eingang i_pstListOfCmdTables übergeben. Die Struktur wird mit Hilfe eines Zeigers übertragen, so muss nur die Startadresse anstatt der gesamten Struktur übertragen werden. Einzelne Befehlstabellen werden mit der Funktion TPL.FC_UpdateCmdTableListElementSimpleTen der Befehlstabellenliste hinzugefügt. Eine Liste aller vorhandener Gruppen wird über den Eingang i_pstSubModuleGroups übertragen.

Am Ausgang q_etDiag kann der interne Zustand des Funktionsbausteins abgelesen werden und die zugehörige Meldung am Ausgang q_sMsg. In der globalen Ausnahmeliste, die mit dem Eingang iq_stExceptionList definiert ist, und in der globalen Loggingliste, die mit dem Eingang iq_stLogDataList festgelegt ist, werden Fehler protokolliert.

Dies ist ein Funktionsbaustein, der eine Instanz davon benötigt, um deklariert zu werden.

Schnittstelle

Eingang

Datentyp

Beschreibung

i_udiNumberOfSubModules

UDINT

Legt die Anzahl der Submodule fest, die im Modul enthalten sind.

i_udiNumberOfCmdTables

UDINT

Legt die Anzahl der Befehlstabellen fest.

i_pstSubModulesItf

POINTER TO ST_StandardModuleInterface

Definiert den Zeiger zur Standardmodulschnittstelle für die Achsen.

i_pstListofCmdTables

POINTER TO ST_CmdTable

Definiert den Zeiger für die Befehlsliste.

i_pudiSubModuleGroups

POINTER TO UDINT

Legt den Zeiger in der Gruppenliste fest.

i_xCancelTable

BOOL

Bricht bei einer steigenden Flanke die Ausführung einer Tabelle ab.

Ausgang

Datentyp

Beschreibung

q_xActive

BOOL

Gibt an, dass der Funktionsbaustein freigeschaltet ist und korrekt arbeitet.

q_xReady

BOOL

Die POU ist bereit, Aufträge entgegenzunehmen.

q_etDiag

GD.ET_Diag

Diagnoseklasse

q_etDiagExt

ET_DiagExt

Diagnosemeldung

q_sMsg

STRING[80]

Gibt die entsprechenden Ergebnisse zur Statusmeldung an.

q_xCmdActive

BOOL

Zeigt an, dass ein Befehl in Bearbeitung ist.

q_xCmdDone

BOOL

Zeigt an, dass sich der Funktionsbaustein im Leerlauf befindet oder die Bearbeitung einer Befehlstabelle beendet ist.

q_diActiveStep

ET_DiagExt

Liefert die letzte Schrittanzahl oder den momentan ausgeführten Befehl.

q_diCmdActive

DINT

Liefert den zuletzt akzeptierten Befehl oder den momentan ausgeführten Befehl.

q_udiActiveSubModule

UDINT

Liefert das letzte Modul oder die letzte Gruppe, die einen Befehl erhalten hat, oder das Modul oder die Gruppe, die momentan einen Befehl erhält.

q_xWaitForStartStep

BOOL

Zeigt eine angehaltene Befehlstabelle an.

Ein-/Ausgang

Datentyp

Beschreibung

iq_stMachineItf

ST_StandardModuleInterface

Definiert die Standardmodulschnittstelle für die Maschine.

iq_stExceptionList

ST_ExceptionList

Legt die globale Fehlerliste fest.

iq_stLogDataList

ST_LogDataList

Legt die globale Loggingliste fest.

Diagnosemeldungen

q_etDiag

q_etDiagExt

Aufzählungswert

Beschreibung

OK

DeactivatingSubModules

38

Die Submodule werden deaktiviert.

OK

ExecuteStep

40

Schritt wird ausgeführt.

OK

WaitAtNegativeStep

41

Warten an einem negativen Schritt.

OK

WaitCmdsDone

43

Warten, bis Befehle verarbeitet sind.

OK

WaitForCmd

39

Warten auf einen Befehl.

ExecutionAborted

CmdTimeout

108

Die Verarbeitung eines Befehls erfolgte nicht in der definierten Zeit.

ExecutionAborted

MissingModuleCall

94

Ein Modul kann nicht aufgerufen werden.

InputParameterInvalid

CmdOfListOfCmdTablesDuplicate

101

Ein Befehl der Befehlstabelle ist doppelt.

InputParameterInvalid

CmdOfListOfCmdTablesZero

100

Ein Befehl der Befehlstabelle ist leer/null.

InputParameterInvalid

CmdTableDublicatePointer

102

Ein Zeiger auf eine Befehlstabelle ist doppelt.

InputParameterInvalid

CmdTableNoLastStep

107

Die Befehlstabelle hat keinen Abschlussschritt/letzten Schritt.

InputParameterInvalid

GroupNumberInvalid

109

Die Nummer einer Gruppe ist ungültig.

InputParameterInvalid

ListOfCmdTablesInvalid

95

Die Liste der Befehlstabellen ist ungültig.

InputParameterInvalid

ModuleIdInvalid

67

Die ID des Moduls ist ungültig.

InputParameterInvalid

NumberOfCmdStepsRange

98

Die Anzahl der Schritte eines Befehls ist außerhalb des gültigen Bereichs.

InputParameterInvalid

NumberOfCmdTablesRange

34

Die Anzahl der Befehlstabellen ist außerhalb des gültigen Bereichs.

InputParameterInvalid

NumberOfSubModulesRange

66

Die Anzahl der Submodule ist außerhalb des festgelegten Bereichs.

InputParameterInvalid

PointerCmdTableInvalid

36

Der Zeiger auf CmdTable ist ungültig.

InputParameterInvalid

PointerListOfCmdTablesInvalid

33

Der Zeiger auf ListOfCmdTables ist ungültig.

InputParameterInvalid

PointerSubModuleGroupsInvalid

104

Der Zeiger auf SubmoduleGroups ist ungültig.

InputParameterInvalid

PointerSubModulesItfInvalid

97

Der Zeiger SubmodulesItf ist ungültig.

InputParameterInvalid

SizeOfListOfCmdTablesInvalid

99

Die Größe der ListOfCmdTables ist ungültig.

InputParameterInvalid

SizeOfSubModuleGroupsInvalid

105

Die Größe der SubmoduleGroups ist ungültig.

InputParameterInvalid

SizeOfSubModulesItfInvalid

96

Die Größe der Submodulschnittstelle ist ungültig.

InputParameterInvalid

SubModuleItfNotInitialized

103

Eine Schnittstelle eines Submoduls wurde noch nicht initialisiert.

CmdOfListOfCmdTablesDuplicate

Aufzählungsname:

CmdOfListOfCmdTablesDuplicate

Aufzählungswert:

101

Beschreibung:

Ein Befehl der Befehlstabelle ist doppelt.

Problem

Ursache

Lösung

-

Ein Befehlstabelle aus der Liste von i_pstListOfCmdTables ist doppelt eingetragen.

Stellen Sie sicher, dass jede Befehlstabelle eindeutig über einen Befehl angesprochen wird.

Überprüfen Sie die Verwendung der Funktion FC_NextCmdTable bei der Initialisierung der Befehlstabellen.

CmdOfListOfCmdTablesZero

Aufzählungsname:

CmdOfListOfCmdTablesZero

Aufzählungswert:

100

Beschreibung:

Ein Befehl der Befehlstabelle ist leer/null.

Problem

Ursache

Lösung

-

Eine Befehlstabelle aus der Liste von i_pstListOfCmdTables soll über den Befehl 0 angesprochen werden.

Überprüfen Sie die Verwendung der Funktion FC_NextCmdTable bei der Initialisierung der Befehlstabellen.

CmdTableDublicatePointer

Aufzählungsname:

CmdTableDublicatePointer

Aufzählungswert:

102

Beschreibung:

Ein Zeiger auf eine Befehlstabelle ist doppelt.

Problem

Ursache

Lösung

-

In der Liste der Befehlstabellen am Eingang i_pstListofCMDTables verweisen die Zeiger von zwei unterschiedlichen Befehlstabellen auf dieselbe Befehlstabelle.

Überprüfen Sie die Initialisierung der Befehlstabellen. Benutzen Sie die Funktionen FC_FirstCmdTable und FC_NextCmdTable zur Initialisierung der Befehlstabellen.

CmdTableNoLastStep

Aufzählungsname:

CmdTableNoLastStep

Aufzählungswert:

107

Beschreibung:

Die Befehlstabelle hat keinen Abschlussschritt/letzten Schritt.

Problem

Ursache

Lösung

-

Die Befehlstabelle hat keinen Abschlussschritt/letzten Schritt.

Stellen Sie sicher, dass alle Befehlstabellen mit der FC_LastStep abgeschlossen werden.

CmdTimeout

Aufzählungsname:

CmdTimeout

Aufzählungswert:

108

Beschreibung:

Die Verarbeitung eines Befehls erfolgte nicht in der definierten Zeit.

Problem

Ursache

Lösung

-

Die Ausführung eines Befehls hat länger gedauert, als in timTimeOut von ST_Cmd festgelegt wurde.

Erhöhen Sie die maximale Ausführungszeit des Befehls, indem Sie für timTimeOut in der Struktur des Befehls ST_Cmd einen größeren Wert wählen.

Suchen Sie nach den Ursachen für eine lange Laufzeit bei der Ausführung des Befehls.

DeactivatingSubModules

Aufzählungsname:

DeactivatingSubModules

Aufzählungswert:

38

Beschreibung:

Die Submodule werden deaktiviert.

Die Submodule sind deaktiviert.

ExecuteStep

Aufzählungsname:

ExecuteStep

Aufzählungswert:

40

Beschreibung:

Schritt wird ausgeführt.

Der anstehende Prozessschritt wird ausgeführt.

GroupNumberInvalid

Aufzählungsname:

GroupNumberInvalid

Aufzählungswert:

109

Beschreibung:

Die Nummer einer Gruppe ist ungültig.

Problem

Ursache

Lösung

-

An udiModuleName des Befehls ST_Cmd wurde eine Gruppennummer (udiModuleNameGc_udiGroupOffset) kleiner als 1 oder größer als die Anzahl der definierten Gruppen angelegt.

Überprüfen Sie die Definition der Gruppe.

Überprüfen Sie die Definition des Befehls.

-

An udiModuleName des Befehls ST_Cmd wurde eine Gruppennummer (udiModuleNameGc_udiGroupOffset) angelegt. Es wurde jedoch keine Gruppe definiert.

Stellen Sie sicher, dass nicht mehr als Gc_udiGroupOffset Submodule unterhalb des Equipmentmoduls angemeldet sind.

Überprüfen Sie die Definition des Befehls.

ListOfCmdTablesInvalid

Aufzählungsname:

ListOfCmdTablesInvalid

Aufzählungswert:

95

Beschreibung:

Die Liste der Befehlstabellen ist ungültig.

Problem

Ursache

Lösung

-

Es wurde eine Befehlstabelle definiert, die keine Befehle enthält.

Stellen Sie sicher, dass alle Befehlstabellen mindestens einen Befehl enthalten.

Eine leere Befehlstabelle kann mit der Funktion FC_FirstLastStepEmptyTable definiert werden.

MissingModuleCall

Aufzählungsname:

MissingModuleCall

Aufzählungswert:

94

Beschreibung:

Ein Modul kann nicht aufgerufen werden.

Problem

Ursache

Lösung

-

Ein Submodul wird nicht aufgerufen.

Stellen Sie sicher, dass alle Submodule zyklisch aufgerufen werden.

-

Ein Submodul aktualisiert den Wert q_dwModuleType des ST_StandardModuleInterface nicht.

Stellen Sie sicher, dass alle Submodule ihren Typ bekannt geben.

ModuleIdInvalid

Aufzählungsname:

ModuleIdInvalid

Aufzählungswert:

67

Beschreibung:

Die ID des Moduls ist ungültig.

Problem

Ursache

Lösung

-

Der Wert udiModuleName des ST_Cmd entspricht keiner Nummer der Submodule.

Überprüfen Sie die Initialisierung der Befehlstabellen.

-

Die Liste der Module in einer Gruppe enthält eine Nummer, die keinem der Submodule entspricht.

Überprüfen Sie die Definition der Gruppen.

NumberOfCmdStepsRange

Aufzählungsname:

NumberOfCmdStepsRange

Aufzählungswert:

98

Beschreibung:

Die Anzahl der Schritte eines Befehls ist außerhalb des gültigen Bereichs.

Problem

Ursache

Lösung

-

Es wurde eine Befehlstabelle mit 0 oder weniger Schritten übergeben.

Überprüfen Sie die Initialisierung der Befehlstabellen.

Benutzen Sie die Funktionen FC_FirstStep und FC_NextStep zur Definition der Befehlstabellen.

NumberOfCmdTablesRange

Aufzählungsname:

NumberOfCmdTablesRange

Aufzählungswert:

34

Beschreibung:

Die Anzahl der Befehlstabellen ist außerhalb des gültigen Bereichs.

Problem

Ursache

Lösung

-

Die Anzahl der Befehlstabellen am Eingang i_udiNumberofCmdTables ist <= 0.

Stellen Sie sicher, dass in der Liste der Befehlstabellen am Eingang i_pstListOfCmdTables mindestens eine Befehlstabelle enthalten ist, und belegen Sie den Eingang i_udiMumberOfCmdTables mit der Anzahl der Befehlstabellen in der Liste der Befehlstabellen.

NumberOfSubModulesRange

Aufzählungsname:

NumberOfSubModulesRange

Aufzählungswert:

66

Beschreibung:

Die Anzahl der Submodule ist außerhalb des festgelegten Bereichs.

Problem

Ursache

Lösung

-

Die Anzahl der Submodule am Eingang i_udiNumberOfSubModules ist < 0.

Stellen Sie sicher, dass am Eingang i_udiNumberOfSubModules ein Wert größer oder gleich 0 anliegt, der der Anzahl der Submodule unter diesem Equipmentmodul entspricht.

PointerCmdTableInvalid

Aufzählungsname:

PointerCmdTableInvalid

Aufzählungswert:

36

Beschreibung:

Der Zeiger auf CmdTable ist ungültig.

Problem

Ursache

Lösung

-

Die Liste der Befehlstabellen am Eingang i_pstListOfCmdTables wurde nicht vollständig initialisiert.

Überprüfen Sie den Aufruf von FC_UpdateCmdTableListElement für jede Befehlstabelle.

PointerListOfCmdTablesInvalid

Aufzählungsname:

PointerListOfCmdTablesInvalid

Aufzählungswert:

33

Beschreibung:

Der Zeiger auf ListOfCmdTables ist ungültig.

Problem

Ursache

Lösung

-

Der Zeiger des Eingangs i_pstListofCMDTables ist nicht zugewiesen (0).

Stellen Sie sicher, dass am Eingang i_pstListofCMDTables die Adresse des Arrays der Befehlstabellen übergeben wird. Z. B. mit ADR(astListOfCMDTables).

PointerSubModuleGroupsInvalid

Aufzählungsname:

PointerSubModuleGroupsInvalid

Aufzählungswert:

104

Beschreibung:

Der Zeiger auf SubmoduleGroups ist ungültig.

Problem

Ursache

Lösung

-

Der Zeiger des Eingangs i_pudiSubModuleGroups ist nicht zugewiesen (0).

Stellen Sie sicher, dass am Eingang i_pudiSubModuleGroups die Adresse des Arrays angegeben ist, in dem die Gruppen der Submodule verwaltet werden. Z. B. mit ADR(aaudiSubmoduleGroups).

PointerSubModulesItfInvalid

Aufzählungsname:

PointerSubModulesItfInvalid

Aufzählungswert:

97

Beschreibung:

Der Zeiger SubmodulesItf ist ungültig.

Problem

Ursache

Lösung

-

Der Zeiger des Eingangs i_pstSubModulesItf ist nicht zugewiesen (0).

Stellen Sie sicher, dass am Eingang i_pstSubModulesItf die Adresse des Arrays angegeben ist, in dem die Submodule verwaltet werden. Z. B. mit ADR(astSubmoduleInterface).

SizeOfListOfCmdTablesInvalid

Aufzählungsname:

SizeOfListOfCmdTablesInvalid

Aufzählungswert:

99

Beschreibung:

Die Größe der ListOfCmdTables ist ungültig.

Problem

Ursache

Lösung

-

Am Eingang i_udiSizeOfListOfCmdTables wurde ein ungültiger Wert übergeben.

Dem Eingang i_udiSizeOfListOfCmdTables muss die Größe des Arrays der Befehlstabellen übergeben werden. Z. B. SIZEOF(astListOfCMDTables).

-

Am Eingang i_udiNumberOfCMDTables wurde nicht die Anzahl der Befehlstabellen übergeben, die sich in der Liste der Befehlstabellen am Eingang i_pstListofCMDTables befinden.

Stellen Sie sicher, dass am Eingang i_udiNumberOfCMDTables die Anzahl der Befehlstabellen übergeben wird.

SizeOfSubModuleGroupsInvalid

Aufzählungsname:

SizeOfSubModuleGroupsInvalid

Aufzählungswert:

105

Beschreibung:

Die Größe der SubmoduleGroups ist ungültig.

Problem

Ursache

Lösung

-

Am Eingang i_udiSizeOfSubModuleGroups wurde ein ungültiger Wert übergeben.

Dem Eingang i_udiSizeOfSubModuleGroups muss die Größe des Arrays übergeben werden, in dem die Gruppen verwaltet werden. Z. B. SIZEOF(aaudiSubmoduleGroups).

-

Am Eingang i_udiNumberOfGroups wurde nicht die Anzahl der Gruppen übergeben, die in der Liste am Eingang i_pudiSubModuleGroups definiert wurden.

Stellen Sie sicher, dass am Eingang i_udiNumberOfGroups die korrekte Anzahl der Gruppen übergeben wird.

-

Am Eingang i_udiNumberOfGroupMembers wurde nicht die maximale Anzahl der Slaves in einer Gruppen übergeben, die in der Liste am Eingang i_pudiSubModuleGroups definiert wurden.

Stellen Sie sicher, dass am Eingang i_udiNumberOfGroupMembers die korrekte maximale Anzahl der Mitglieder einer Gruppen übergeben wird.

SizeOfSubModulesItfInvalid

Aufzählungsname:

SizeOfSubModulesItfInvalid

Aufzählungswert:

96

Beschreibung:

Die Größe der Submodulschnittstelle ist ungültig.

Problem

Ursache

Lösung

-

Am Eingang i_udiSizeOfSubModulesItf wurde ein ungültiger Wert übergeben.

Dem Eingang i_udiSizeOfSubModulesItf muss die Größe des Arrays übergeben werden, in dem die Submodule verwaltet werden. Z. B. SIZEOF(astSubmoduleInterface).

-

Am Eingang i_udiNumberOfSubModules wurde nicht die Anzahl der Submodule übergeben, die in der Liste der Submodule am Eingang i_pstSubModulesItf verwaltet werden.

Stellen Sie sicher, dass am Eingang i_udiNumberOfSubModules die korrekte maximale Anzahl der Submodule übergeben wird.

SubModuleItfNotInitialized

Aufzählungsname:

SubModuleItfNotInitialized

Aufzählungswert:

103

Beschreibung:

Eine Schnittstelle eines Submoduls wurde noch nicht initialisiert.

Problem

Ursache

Lösung

-

Der Name eines Submoduls ist leer.

Stellen Sie sicher, dass der String aller Submodule, in dem ihr Name angegeben ist, nicht leer ist.

-

Die ID eines Submoduls ist 0.

Stellen Sie sicher, dass jedes Submodul eine ID besitzt, die ihre Position im Maschinenbaum beschreibt.

WaitAtNegativeStep

Aufzählungsname:

WaitAtNegativeStep

Aufzählungswert:

41

Beschreibung:

Warten an einem negativen Schritt.

Die Abarbeitung der Befehlstabelle wurde wie gewünscht unterbrochen.

Die Abarbeitung der Befehlstabelle wird fortgesetzt, wenn der Eingang iq_diStartStep auf den Schritt gesetzt wird, der als nächstes ausgeführt werden soll.

WaitCmdsDone

Aufzählungsname:

WaitCmdsDone

Aufzählungswert:

43

Beschreibung:

Warten, bis Befehle verarbeitet sind.

Der ModuleController arbeitet die Befehlstabelle ab.

WaitForCmd

Aufzählungsname:

WaitForCmd

Aufzählungswert:

39

Beschreibung:

Warten auf einen Befehl.

Der ModuleController wartet auf einen Befehl.