DB nach Werten durchsuchen und Adresse des Eintrags herausfinden

Zuviel Werbung?
-> Hier kostenlos registrieren
Wie wärs wenn du dir den Zeiger im Programm einfach anhand der vorgaben am übergeordneten baustein zusammen baust?
Paar sprünge, paar multiplikatoren, fertig! ...

sicher, ist so einfach...

Ihr habt alle zu viel speicher in euren SPS'n ...

War am Wochenende schon kurz davor nen universalbaustein zu basteln, einfach weils mir in den fingern juckte!
Ist bisschen tricky aber auch in awl realisierbar ... hätte ich lust drauf.

Könnte dir anbieten dir da was zu schreiben bis ende nächster woche (bin jetzt erstmal viel unterwegs).

Schreib dann aber bitte noch mal detailiert WAS du suchen willst oder ob du einen baustein haben willst der alles suchen kann (INT/WORD/REAL/CHAR/STRING).
Wobei ich immernoch net raffe wieso man auf die idee kommt nen string oder char's in ner sps zu speichern ...

na, dann raff´ dich mal auf bis ende nächster Woche, aber tricky-mässig !


Nach was willst du alles suchen? Liegen da Strings/Chars zwischen?

Wenn ich weiß wonach du alles suchen können willst (scheiss deutsch ...) kann ich da, wie vorher schon gesagt, bis ende nächster woche was

Nach deinen Äusserungen zu urteilen, kannst du ja richtig was (ohne jede Wertung):cool:


Bist du auf der Suche nach Aufträgen?

Gern kannst du dann deine Fertigkeiten in unserem Thread "Suche und Biete" feilbieten ;)
 
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...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
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...

Genau das sollte der Fc machen den Ich hier gepostet habe...

Du gibts auf den Parameter "
VERGLEICHS_ANY" einen ANY auf den zu suchnden Text, auf "DB_VERGLEICH" die Nummer des DBs, auf "GROESE_STRUCT_VERGLEICH" die größe deines UDTs, auf "ANZAHL_VERGLEICH" die Anzahl wie oft der UDT im DB vorkommt und auf "START_VERGLEICH" den Versatz, den dein feld im UDT hat (bei dir wahrscheinlich 0).

Dann sollte mein Fc bei einer Übereinstimmung eine Nummer >0 ausgeben!
 
sicher, ist so einfach...

na, dann raff´ dich mal auf bis ende nächster Woche, aber tricky-mässig !

Nach deinen Äusserungen zu urteilen, kannst du ja richtig was (ohne jede Wertung):cool:

Bist du auf der Suche nach Aufträgen?

Gern kannst du dann deine Fertigkeiten in unserem Thread "Suche und Biete" feilbieten ;)

Nen Zeiger zusammen bauen aus nen paar Info's ist ja wohl kein Problem, auch ohne ANY!
Werds mir trickymäßig zusammenstricken, hoffe nur das mir die Zeitplanung nicht zerhauen wird!

Und naja was heisst können ... hab halt schon einiges geschrieben und denke ich bin für meine paar Jahre die ich den Job jetzt mache verdammt fit .. abgsehen davon bin ich halt sehr ehrgeizig bei so tricky-aufgaben!

Überlege zZ echt ob ich nen Kleingewerbe anmelde von daher ist noch nix mit groß anbieten, es sei denn es ist anders regelbar ^^"

@saarlaender
Mit nem UDT wirds ja noch einfacher!

Wenn ich nachher zu hause bin fang ich mal an zu basteln.
 
...

Und naja was heisst können ... hab halt schon einiges geschrieben und denke ich bin für meine paar Jahre die ich den Job jetzt mache verdammt fit ..
...
Überlege zZ echt ob ich nen Kleingewerbe anmelde von daher ist noch nix mit groß anbieten, es sei denn es ist anders regelbar ^^"

Naja, geht wohl erstmal auch nebenberuflich ohne Gewerbeanmeldung

aber wie gesagt, hier könnten deine Fertigkeiten auf fruchtbaren Boden fallen: http://www.sps-forum.de/forumdisplay.php/19-Suche-Biete
 
Zurück
Oben