Step 7 String in einen Datenbaustein finden

Ganz

Level-2
Beiträge
18
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe folgendes Problem und suche eine Lösung:

In einen Datenbaustein bestehend aus 40 Stringvariablen möchte ich einen bestimmten String herausfinden.

CPU 317/2DP,
Step 7, AWL

Habe leider nur wenig Erfahrung mit Siemens, arbeite hauptsächlich mit Allen Bradley, Schneider/ELAU Steuerungen. Hat vielleicht jemand einen Lösungsansatz, wie ich das o.g. Problem am besten löse?

Vielen Dank im Voraus.
 
Mit der IEC Funktion EQ_STRNG (FC10) aus der Standard Library nacheinander die vorhandenen Strings mit dem Suchstring vergleichen.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,

vielen Dank für deine Antwort!

FC10 kenne ich und benutze bereits im aktuellen Projekt. Über die von dir vorgeschlagene Lösung habe ich auch nachgedacht, aber dieser Baustein braucht eine maximale Länge von String in Byte 0 und aktuelle Länge in Byte 1. Diese Informationen möchte ich den vorhandenen Strings nicht einfügen. Gibt es eventuell eine andere Lösung? Wäre sehr dankbar dafür.
 
Ach, ich dachte, wenn Du String schreibst dann meinst Du auch String ... :confused:
Vielleicht schreibst Du nochmal genauer was Du da wirklich hast. Vielleicht Array of Array of CHAR? Wie lang? Alle gleich lang? Immer die volle Größe genutzt/belegt oder muß ein Endezeichen beachtet werden? Am besten zeige uns ein Bild von dem DB wo man die Deklaration Deiner "Strings" sieht.

Allgemein gesagt könntest Du in einer äußeren Schleife von 1..40 eine innere Schleife ausführen, welche die gerade indizierte Zeichenkette Zeichen-für-Zeichen mit dem Suchmuster vergleicht. Dafür bräuchtest Du indirekte Adressierung (registerindirekt mit AR1 und AR2, oder besser lesbar aber rechenintensiver mit speicherindirekter Adressierung).

Sehr wahrscheinlich gibt es Datentyp-missachtende Abkürzungen, welche den Code viel schneller aber auch viel unlesbarer machen.

Wäre auch SCL möglich?

Harald
 
Hallo Harald,

vielen Dank für deine Antwort!

Screenshot von DB habe unten angefügt.

Vom Ablauf her sieht es so aus:

Scanner liefert die Daten, die werden in einem String[15] abgespeichert, diesen String muss man dann im DB suchen.

SCL geht auch.
attachment.php
 

Anhänge

  • DB.JPG
    DB.JPG
    136,3 KB · Aufrufe: 111
Zuviel Werbung?
-> Hier kostenlos registrieren
Du hast also wirklich Strings deklariert. Warum willst oder kannst Du die nicht als Strings benutzen und den FC10 EQ_STRNG nehmen?
Falls es nur daran liegt, daß derjenige, der die Daten in die Strings schreibt, die String-Header-Informationen nicht aktualisiert: wenn der Scanner immer die selbe Anzahl Zeichen in die Strings schreibt, dann lege den Anfangswert der Strings auf diese Anzahl Leerzeichen fest und initialisiere den DB. Dann stehen die richtigen max-Stringlänge und Ist-Stringlänge in den String-Headern und FC10 EQ_STRNG kann benutzt werden. Erst zur Laufzeit die Header-Daten in die 40 Strings zu schreiben wäre allerdings auch nur ein Klacks.

Harald
 
Zurück
Oben