FB_HashTableCtrl
![FB_HashTableCtrl 1:](Images/png/9007199290267275__Web.png)
Hashtable kann dazu verwendet werden, um ein einzelnes Datenelement in einer größeren Menge von Datenelementen schnell auffinden zu können. Die Datenobjekte müssen mit einem eindeutigen Schlüssel versehen werden. Über diesen Schlüssel können die Datenobjekte dann in der Tabelle eindeutig identifiziert und schnell gefunden werden.
Mit dem Funktionsbaustein FB_HashTableCtrl kann eine einfache Hash-Tabelle im SPS-Projekt realisiert werden. Es wird dabei das Verfahren: Hashing mit Verkettung (Separate-Chaining) angewandt.
Die maximale Anzahl der Datenelemente kann zur Laufzeit nicht verändert werden und muss vorher festgelegt werden. Das Hinzufügen/Entfernen/Suchen der Datenelemente wird durch Aktionsaufrufe gesteuert. Der Funktionsbaustein besitzt folgende Aktionen:
- A_Add (Fügt ein neues Datenelement der Tabelle hinzu (Schlüssel/Wert). Ein bereits existierendes Element mit demselben Schlüssel wird überschrieben! )
- A_GetFirst (Liest das erste Tabellen-Datenelement. Bei Erfolg liefert getValue den dazugehörigen Wert.)
- A_GetNext (Liest das nächste Tabellen-Datenelement. Die Adresse: putPosPtr muss auf das vorherige Datenelement zeigen!)
- A_Lookup (Sucht ein zum Schlüssel (key) passendes Datenelement. Bei Erfolg liefert getValue den dazugehörigen Wert.)
- A_Remove (Entfernt ein zum Schlüssel passendes Datenelement.)
- A_RemoveAll (Entfernt alle Datenelemente)
- A_RemoveFirst (Entfernt das erste Datenelement)
- A_Reset (Löscht alle Datenelemente und setzt die Tabelle zurück.)
- A_GetIndexAtPosPtr (Liefert den Array-Index des Datenelements an der Adresse: putPosPtr. Bei Erfolg liefert getValue den Null-Basierten Array-Index. Der Wert putValue wird nicht benutzt. Bitte beachten Sie, dass der Wert getValue einen Datenelement-Index und nicht den Datenelement-Wert zurückliefert! )
Eingänge
VAR_INPUT
key : DWORD := 0;
putValue : PVOID := 0;
putPosPtr : POINTER TO T_HashTableEntry := 0;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
key | DWORD | Schlüssel (vorzeichenlose 32 Bit Zahl oder auch Pointer). Über diesen Schlüssel kann ein Datenelement in der Tabelle schnell identifiziert/gefunden werden. |
putValue | PVOID | Wert/Datenelement (Eingangsparameter, 32/64 Bit, vorzeichenlose Zahl oder auch Pointer). |
putPosPtr | Adresse auf das Datenelement (Eingangsparameter) |
Ein-/Ausgänge
VAR_IN_OUT
hTable : T_HHASHTABLE;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
hTable | Hash-Tabellen-Handle. Das Handle muss einmalig vor der Benutzung mit der Funktion: F_CreateHashTableHnd initialisiert werden. Für jede Tabelle muss eine dazugehörende Instanz der Handle-Variablen angelegt und initialisiert werden. |
Ausgänge
VAR_OUTPUT
bOk : BOOL := FALSE;
getValue : PVOID := 0;
getPosPtr : POINTER TO T_HashTableEntry := 0;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
bOk | BOOL | Liefert TRUE, wenn ein neues Datenelement der Tabelle hinzugefügt/entfernt oder in der Tabelle gefunden werden konnte. FALSE wird geliefert, wenn das gesuchte Datenelement nicht gefunden werden konnte, die Tabelle leer ist oder einen Überlauf hat (keine freien Datenelemente mehr). |
getValue | PVOID | Der zum Schlüssel passende Wert/Datenelement (Ausgangsparameter, 32/64 Bit, vorzeichenlose Zahl oder auch Pointer). |
getPosPtr | Die Adresse auf das Datenelement (Ausgangsparameter). |
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken (Kategoriegruppe) |
---|---|---|
TwinCAT v3.1.0 | PC oder CX (x86, x64, ARM) | Tc2_Utilities (System) |