String vergleichen

Bensen83

Level-1
Beiträge
777
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute, ich habe einen String in einem DB angelegt:

String[20]

in der Visu bekomme ich ihn so angezeigt:

db355.dbb0

wie kann ich denn in meiner SPS vergleichen, ob der String '' (leer) ist, oder ob etwas drin steht?

Habe ne S7 317 2DP
 
Hallo,
per direktem Befehl geht das nicht. Dazu gibt es einige FC in der Step7-Bibliothek, die die ganzen String-Operationen erschlagen. Wie die dann funktionieren wird in der Step7-Hilfe erklärt ...

Gib dort doch einfach mal String-Operationen (oder ähnlich) ein ...

Gruß
LL
 
Nur mal so zum Rumspielen:

Code:
LAR1 P#Der String  // Zeiger auf den String
L B [AR1, P#1.0]  // Länge des Strings auslesen

Wenn die Länge 0 ist, sollte der String leer sein. Hab ich aber nicht probiert, könnte so aber funktionieren.
 
Nur mal so zum Rumspielen:

Code:
LAR1 P#Der String  // Zeiger auf den String
L B [AR1, P#1.0]  // Länge des Strings auslesen

Wenn die Länge 0 ist, sollte der String leer sein. Hab ich aber nicht probiert, könnte so aber funktionieren.

Das sollte genau so gehen, wenn man nicht die Funktionen der Library nutzen will/kann.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke

Danke für die Hilfe.

Ich habe den Libary Baustein genommen. habe nun 2 strings drauf gelegt, jedoch ist es egal, ob sie unterschiedlich sind oder nicht, das ergabnis ist immer 0.

gibt es da noch was zu beachten?
 
Ich habe den Libary Baustein genommen. habe nun 2 strings drauf gelegt, jedoch ist es egal, ob sie unterschiedlich sind oder nicht, das ergabnis ist immer 0.

gibt es da noch was zu beachten?

Ich denke mal, dass du den CONCAT-Baustein genommen hast ...
Ganz gernerell gilt auf jeden Fall für die Siemens-Bausteine, dass die Strings initialisiert sein müssen - d.h., dass in den beiden Header-Bytes (je-)des Strings die tasächlich genutzte Länge und die deklarierte Länge eingetragen sein muß. Das macht Step7 NICHT selbstständig ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Leute

Ich schlage mich auch gerade damit herum 2 Strings miteinander zu vergleichen. Aber irgendwie gibt der EQ_STRNG - Baustein immer eine 0 aus.

Um das ganze zu Testen habe mich mir 2 Stringvariablen der Länge 5 in einem DB angelegt und wie folgt beschrieben:

Code:
      L     B#16#5
      T     DB19.DBB    0
      T     DB19.DBB    1

      L     B#16#61
      T     "Test".Test1[1]
      T     "Test".Test1[2]
      T     "Test".Test1[3]
      T     "Test".Test1[4]
      T     "Test".Test1[5]

      L     B#16#5
      T     DB19.DBB    8
      T     DB19.DBB    9

      L     B#16#61
      T     "Test".Test2[1]
      T     "Test".Test2[2]
      T     "Test".Test2[3]
      T     "Test".Test2[4]
      T     "Test".Test2[5]

      CALL  "EQ_STRNG"
       S1     :="Test".Test1
       S2     :="Test".Test2
       RET_VAL:=#HM_Test
      NOP   0

Ich habe wie ihr seht habe ich die Header der Strings extra nochmal initialisiert und beide Strings jeweils 5x mit ASCII "a" gefüllt. Aber der Baustein gibt mir dennoch eine 0 aus. Woran kann das liegen? Braucht der Baustein noch einen anderen Baustein um zu funktionieren? Oder stört es, dass ich aus dem eigentlichen FC10 einen FC9 gemacht habe, da FC10 schon benutzt war?

Danke schonmal für eure Hilfe
 
Zuletzt bearbeitet:
Also wenn ich nen DB19 "Test" mit 2 String[5] Test1 und Test2 anlege, dann deinen Code kopiere und im Simulator ausführe liefert mir EQ_STRNG eine 1.

Da haperts anscheinend anderswo. Alles (EQ_STRNG) in die CPU gespielt? HM_Test irgendwie anderweitig überschrieben... ?
 
Jop... bei mir geht es jetzt auch. Wo ist dieser Smiley der mit den Kopf gegen die Wand schlägt, wenn man ihn Mal braucht.

Also ja, der FC9 war nicht richtig auf die CPU geladen. Das war das ganze Problem. :icon_redface:
Seltsamer Weise wurde mir der Baustein dennoch als "grün" angezeigt, was normalerweise nicht der Fall ist.

Nunja... Danke für die schnelle Antwort.
 
Zurück
Oben