# String vergleichen



## Bensen83 (7 Januar 2010)

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


----------



## Larry Laffer (7 Januar 2010)

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


----------



## marlob (7 Januar 2010)

Es gibt einen FC10 EQ_STRNG. Damit könntest du deinen String mit einem leeren String vergleichen


----------



## Grubba (7 Januar 2010)

Nur mal so zum Rumspielen:


```
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.


----------



## Ralle (7 Januar 2010)

Grubba schrieb:


> Nur mal so zum Rumspielen:
> 
> 
> ```
> ...



Das sollte genau so gehen, wenn man nicht die Funktionen der Library nutzen will/kann.


----------



## Bensen83 (7 Januar 2010)

*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?


----------



## Bensen83 (7 Januar 2010)

*Ok*

Komisch jetzt geht es auf einmal


----------



## Larry Laffer (7 Januar 2010)

Bensen83 schrieb:


> 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


----------



## DasRallum (14 Juli 2015)

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:


```
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


----------



## RONIN (14 Juli 2015)

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... ?


----------



## DasRallum (14 Juli 2015)

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.


----------

