FB_LinkedListCtrl
Mit dem Funktionsbaustein FB_LinkedListCtrl kann eine verkettete Liste im SPS-Projekt realisiert werden. Es wird dabei eine doppelt verkettete Liste erstellt. In einer verketteten Liste können Werte (genannt Knoten) abgespeichert werden. Durch die Liste kann von hinten nach vorne oder umgekehrt iteriert werden. Die Knoten können schnell hinzugefügt oder gelöscht werden.
Die maximale Anzahl der Knoten kann zur Laufzeit nicht verändert werden und muss vor dem Compile-Vorgang festgelegt werden. Als "Knoten-Pool" wird ein Array von Typ: T_LinkedListEntry verwendet. Das Hinzufügen/Entfernen/Suchen der Knoten wird durch Aktionsaufrufe gesteuert. Der Funktionsbaustein besitzt folgende Aktionen:
- A_AddHeadValue (Fügt einen neuen Knoten mit dem Wert: putValue am Anfang der Liste hinzu. Derselbe Wert kann auch mehrfach hinzugefügt werden. Bei Erfolg liefert getPosPtr die Adresse und getValue den Wert des neuen Knoten.)
- A_AddTailValue (Fügt einen neuen Knoten mit dem Wert: putValue am Ende der Liste hinzu. Derselbe Wert kann auch mehrfach hinzugefügt werden. Bei Erfolg liefert getPosPtr die Adresse und getValue den Wert des neuen Knoten.)
- A_FindNext (Sucht nach dem nächsten Knoten (relativ zu putPosPtr) mit demselben Wert putValue. Bei Erfolg liefert getPosPtr die Adresse und getValue den Wert des Knoten. )
- A_FindPrev (Sucht nach dem vorherigen Knoten (relativ zu putPosPtr) mit demselben Wert putValue. Bei Erfolg liefert getPosPtr die Adresse und getValue den Wert des Knoten.)
- A_GetNext (Navigiert zum nächsten Knoten (relativ zu putPosPtr). Die Adresse: putPosPtr muss auf den vorherigen Knoten zeigen! Der Wert putValue wird nicht benutzt.)
- A_GetPrev (Navigiert zum vorherigen Knoten (relativ zu putPosPtr) in die entgegengesetzte Richtung wie A_GetNext. Die Adresse: putPosPtr muss auf den vorherigen Knoten zeigen! Der Wert putValue wird nicht benutzt.)
- A_GetHead (Liest den Anfangsknoten. Bei Erfolg liefert getPosPtr die Adresse des Knoten und getValue den dazugehörigen Wert. Der Wert putValue und putPosPtr wird nicht benutzt.)
- A_GetTail (Liest den Endknoten. Bei Erfolg liefert getPosPtr die Adresse des Knoten und getValue den dazugehörigen Wert. Der Wert putValue und putPosPtr wird nicht benutzt.)
- A_RemoveHeadValue (Entfernt einen Knoten am Anfang der Liste. Bei Erfolg liefert getPosPtr die Adresse und getValue den Wert des Knoten. Der Wert putValue und putPosPtr wird nicht benutzt.)
- A_RemoveTailValue (Entfernt einen Knoten am Ende der Liste. Bei Erfolg liefert getPosPtr die Adresse und getValue den Wert des Knoten. Der Wert putValue und putPosPtr wird nicht benutzt.)
- A_RemoveValueAtPosPtr (Sucht und entfernt einen Knoten mit der Adresse: putPosPtr. Bei Erfolg liefert getPosPtr die Adresse und getValue den Wert des Knoten. Der Wert putValue wird nicht benutzt.)
- A_GetIndexAtPosPtr (Liefert den Array-Index (vom "Knoten-Pool") des Knoten an der Adresse: putPosPtr. Bei Erfolg liefert getValue den nullbasierten Array-Index. Der Wert putValue wird nicht benutzt. Bitte beachten Sie, dass der Wert getValue einen Knoten-Index und nicht den Knoten-Wert zurückliefert! )
- A_SetValueAtPosPtr (Aktualisiert/setzt den Wert des Knoten putValue an der Adresse putPosPtr. Bei Erfolg liefert getPosPtr die Adresse und getValue den Wert des Knoten.)
- A_Reset (Löscht alle Listenelemente und setzt die Liste zurück.)
VAR_IN_OUT
VAR_IN_OUT
hList : T_HLINKEDLIST;
END_VAR
hList: Linked-List-Handle. Das Handle muss einmalig vor der Benutzung mit der Funktion: F_CreateLinkedListHnd initialisiert werden. Für jede verkettete Liste muss eine dazugehörende Instanz der Handle-Variablen angelegt und initialisiert werden.
VAR_INPUT
VAR_INPUT
putValue : DWORD := 0;
putPosPtr : POINTER TO T_LinkedListEntry := 0;
END_VAR
putValue: Wert/Datenelement (Ausgangsparameter, 32 bit, auch Pointer sind möglich).
putPosPtr: Die Adresse des Knotenelements (Eingangsparameter).
VAR_OUTPUT
VAR_OUTPUT
bOk : BOOL := FALSE;
getValue : DWORD := 0;
getPosPtr : POINTER TO T_LinkedListEntry := 0;
END_VAR
bOk: Ergebnis des letzten Aktionsaufrufs. Liefert TRUE wenn ein neues Knotenelement hinzugefügt/entfernt oder in der Liste gefunden werden konnte. FALSE wird geliefert wenn das gesuchte Knotenelement nicht gefunden werden konnte, die Liste leer ist oder einen Überlauf (keine freien Knotenelemente mehr) hat.
getValue: Wert/Datenelement (Ausgangsparameter, 32 bit, auch Pointer sind möglich).
getPosPtr: Die Adresse des Knotenelements (Ausgangsparameter).
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken |
---|---|---|
TwinCAT v2.10.0 Build >= 1339 | PC oder CX (x86, ARM) | TcUtilities.Lib |