Typ |
Funktionsbaustein |
Verfügbar ab |
V1.1.0.0 |
Verwendet von: |
PacDrive-Pilot-Vorlagen-Architektur |
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.
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 |
Diagnoseklasse |
|
q_etDiagExt |
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 |
Definiert die Standardmodulschnittstelle für die Maschine. |
|
iq_stExceptionList |
Legt die globale Fehlerliste fest. |
|
iq_stLogDataList |
Legt die globale Loggingliste fest. |
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. |
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. |
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. |
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. |
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. |
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. |
Aufzählungsname: |
DeactivatingSubModules |
Aufzählungswert: |
38 |
Beschreibung: |
Die Submodule werden deaktiviert. |
Die Submodule sind deaktiviert.
Aufzählungsname: |
ExecuteStep |
Aufzählungswert: |
40 |
Beschreibung: |
Schritt wird ausgeführt. |
Der anstehende Prozessschritt wird ausgeführt.
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 (udiModuleName–Gc_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 (udiModuleName–Gc_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. |
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. |
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. |
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. |
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. |
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. |
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. |
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. |
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). |
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). |
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). |
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. |
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. |
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. |
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. |
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.