Also erstmal Danke Leute, ich habe wie gesagt noch nicht die Zeit gehabt eure Codeschnipsel zu testen bzw. richtig durch zu gehen - habe Urlaub und da will ich den S7-Kram nicht anpacken ^^
Ich bin nicht so Erfahren, dass ich solche Dinge in AWL selbst code - fertigen Code kann ich aber durchaus verstehen und anpassen. SCL kann ich quasi gar nicht. Daher suche ich wie gesagt einen fertigen Baustein wie den TBL_Find. Bevor ich falsch verstanden werde - ich rede hier von (für mich) kompliziertem AWL-Kram und eben SCL - nicht generell SPS. Immerhin fang ich an, mich an die Pointer- und Adressregistersachen zu gewöhnen ^^
Die Sache mit dem ANY-Pointer (Typ ANY nicht TYP Pointer) ist deswegen nötig, weil die Funktion universell werden soll. Ich weiß nicht, ob dieser univserselle Baustein mit einem festen DB funktionieren "darf" oder dieser eben frei wählbar sein soll. Daher möchte ich der "Suchfunktion" (wie TBL_Find) gerne einen frei wählbaren DB übergeben. Ein fester DB ist kein Problem - in dem Fall reicht die TBL_Find vollkommen aus.
Sofern es keine weiteren Ideen/Codeschnipsel oder Hinweise auf fertige Funktionen von Siemens oÄ gibt, reicht mir das erstmal aus. Ich werde dann nochmal Posten, wenn die Codeschnipsel getestet sind
EDIT:
Nochmal für die Interessierten die Aufgabe
Ausgangssituation: in einem DB befinden sich Materaldaten. hierzu wird wohl ein UDT verwendet, welcher vermutlich wie folgt aufgebaut sein wird
> Ident-Code - String
>> Position_1 - INT
>> Position_2 - INT
>> Position_3 - INT
>> Position_n - INT
Dieser UDT wird in einem DB so oft platziert, wie es Teile geben soll. Der DB wiederum wird von einem Leitsystem beschrieben. Weil es aber zeitkritische Vorgänge zu steuern gibt, müssen hier Aufgaben von der SPS bzw. von dezentralen Steuerungen erledigt werden.
Das Handling erfolgt über das Leitsystem - hier wird also sichergestellt, dass im DB keine Ident-Codes doppelt vorkommen werden. Ebenso wird das Leitsystem alte Einträge löschen bzw. überschreiben und neue rechtzeitig übertragen.
Die INT-Nummern der Positionen lassen sich dann im SPS-Programm verschiedenen Aktionen zuordnen.
Die gesuchte (Grund)Funktion soll nun diesen idealerweise frei wählbaren DB durchsuchen. Der Rückgabewert soll die DB-Adresse des gesuchten Eintrages oder einen anderen Wert liefern, über welchen auf diese Adresse geschlossen werden kann (die Funktion TBL_Find liefert die Listenposition als INT-Wert).
Diese (Grund)Funktion wird dann in einen überlagerten FC/FB eingebaut, welcher zum Einen den idealerweise variabel wählbaren DB sowie den zu suchenden String an die Grundfunktion übergibt und zum Anderen das restliche Handling erleidgt (=was an den einzelnen Positionen passieren soll).
Später soll die Funktion dann nicht mehr verändert werden. Über die vorzusehenden Eingänge der überlagerten Funktion wird diese an verschiedene Szenarien angepasst.
Es wird also Eingänge geben, um den gewünschten DB mit den Daten zu wählen, den zu suchenden String, die Zahl der vorhandenen Positionen usw...