String vergleichen

enter

Level-2
Beiträge
83
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,habe da ein Problem mit den vergleichen von String's.Und zwar habe ich einen DB angelegt in den DB 2 String angelegt mit einer Länger von 30 dieser DB bekommt bzw. die beiden String's bekommen die Daten über OPC von unserer Visu.Jetzt habe ich den FC10 EQ_Strng aufgerufen und die Eingänge mit den String vom DB belegt so weit so gut- wenn ich jetzt aber den Stringwert in der Visu ändere bleibt das Vergleich Ergebnis vom FC 10 auf eins was mache ich Falsch?
 
Vielleicht hilft dir das weiter:

STRING

Wenn Sie diesem Formalparameter einen Aktualparameter zuweisen,den Sie im Lokaldatenbereich des aufrufenden Bausteins definiert haben, so beachten Sie bitte:
Vor dem FC-Aufruf müssen Sie in der temporären Variablen vom Datentyp STRING das Verwaltungsbyte "maximale Länge des Strings" mit der definierten Stringlänge beschreiben.

Das kann auch passieren, wenn eine Visu die Verwaltungsbytes nicht beschreibt.
Byte 0 und Byte 1 enthalten in Step7 die max. Länge und die aktuelle Länge des Strings. Überprüfe mal, was bei dir in diesen Bytes steht. Falls die Visu das nicht richtig liefert, kann man das per "Hand" eintragen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Habe das gerade auch ausprobiert.
Und wie Ralle schon sagt liegt das sicher am Byte n+1 (aktuelle Länge des Strings).
Wenn da 0 drinnen steht dann gibt dein FC 10 bei Ret_Val immer 1 aus.

godi
 
Zitat : STRING

Wenn Sie diesem Formalparameter einen Aktualparameter zuweisen,den Sie im Lokaldatenbereich des aufrufenden Bausteins definiert haben, so beachten Sie bitte:
Vor dem FC-Aufruf müssen Sie in der temporären Variablen vom Datentyp STRING das Verwaltungsbyte "maximale Länge des Strings" mit der definierten Stringlänge beschreiben.

Häh??

Also ich hab gerade das gleiche Problem, wie es enter seinerzeit beschrieben hat. (FC10 EQUAL STRING gibt trotz unterschiedlicher Strings als Vergleichsergebniss 1 aus).

Ich habe ein einem DB zwei Strings mit einer Länge von je 12 Zeichen (Gesamtlänge 14, schon klar) angelegt die ich gegeneinander vergleichen will.
In diese Strings verschiebe ich mit SFC20 BLKMOV jeweils einen Zeitstempel mit 12 Byte Länge.

Beim ersten Durchlauf wenn beide Strings unterschiedlich sind dann funktioniert der Stringvergleich und das Ergebniss ist Null.

Ändere ich dann allerdings einen der beiden Strings und führe den Vergleich erneut durch dann ist das Ergebniss 1 und die FC10 EQUAL STRING gibt aus das beide Strings gleich sind, was aber nicht so ist?

Meine Frage ist also : WIESO ??

Das obige Zitat versteh ich leider nicht? Kann mir da vielleicht jemand weiterhelfen?

Gruß smartie
 
Das Thema hatten wir doch schon einmal:

Code:
// FC200 : Datenmatrix
 
// DATENMATRIX (BYTE) => DATENMATRIX (STRING)
 
  [B]L     14                          // Maximale Länge DATENMATRIX (STRING)[/B]
[B]  T     DB200.DBB    0[/B]
 
[B]  L     14                          // Aktuelle Länge DATENMATRIX (STRING)[/B]
[B]  T     DB200.DBB    1[/B]
 
      CALL  "BLKMOV"
       SRCBLK :=P#E 50.0 BYTE 14        // DATENMATRIX (BYTE)
       RET_VAL:=#BLKMOV_RET_VAR
       DSTBLK :=P#DB200.DBX2.0 BYTE 14  // DATENMATRIX (STRING)
 
 
// DATENMATRIX (STRING) = ABDECKUNG_01 (STRING) 
 
      CALL  "EQ_STRNG"
       S1     :="DB_DATENMATRIX".DATENMATRIX
       S2     :="DB_DATENMATRIX".ABDECKUNG_01
       RET_VAL:="ABDECKUNG_01"
 
 
// DATENMATRIX (STRING) = ABDECKUNG_02 (STRING) 
 
      CALL  "EQ_STRNG"
       S1     :="DB_DATENMATRIX".DATENMATRIX
       S2     :="DB_DATENMATRIX".ABDECKUNG_02
       RET_VAL:="ABDECKUNG_02"

http://www.sps-forum.de/showthread.php?t=15131

http://www.sps-forum.de/showthread.php?t=14808

http://www.sps-forum.de/showpost.php?p=92669&postcount=6

http://www.sps-forum.de/showpost.php?p=92671&postcount=7

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kai,

ich kann ich in der Tat noch gut dran erinnern das wir schon einmal über das Vergleichen zweier Strings gesprochen haben.

Damals war mein Problem allerdings das mein Vergleich nicht TRUE wurde obwohl beide Strings augenscheinlich gleich waren.

Das Problem damals bestand darin das ich, was ich dank deiner Hilfe dann auch erkannte, nicht beachtet habe das ein String mit 14 Zeichen eine Länge von 16 Zeichen hat.

Mein jetziges Problem war aber genau anders herum. Der Vergleich lieferte TRUE obwohl die Datensätze nicht gleich waren.

Ich habe jetzt einfach folgendes gemacht:

L 14 // Maximale Länge DATENMATRIX (STRING)
T DB200.DBB 0

L 14 // Aktuelle Länge DATENMATRIX (STRING)
T DB200.DBB 1
Ich habe die tatsächiche Länge des Strings reingeschrieben.
Ich bin eigentlich davon ausgegangen das dieses Byte automatisch beschrieben wird und ich das nicht selbst machen muss. :???:

Aber vielen Dank nochmal

smartie
 
Zurück
Oben