Sting vergleichen mit FC10

smartie

Level-2
Beiträge
302
Reaktionspunkte
22
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich muss in meiner S7-300 zwei Strings miteinander vegleichen.
Die beiden Strings liegen in einem Datenbaustein und haben beide eine Länge von 20 Zeichen.

Den FC10 habe ich bei mir im Programm eingefügt und wenn ich nun bei S1 die
Adresse des ersten String im Datenbaustein angeben will, so wird dieser sofort
rot hinterlegt, mit der Fehlermeldung "Aktualdatentyp CHAR passt nicht zu formalen Typ String [254] des Formalparameters S2"

Was soll das bedeuten?

In meinem Datenbaustein habe ich zwei Strings mit einer Länge von je 20 angelegt.

Was muss ich bei FC10 beachten?

smartie
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich muss in meiner S7-300 zwei Strings miteinander vegleichen.
Die beiden Strings liegen in einem Datenbaustein und haben beide eine Länge von 20 Zeichen.

Den FC10 habe ich bei mir im Programm eingefügt und wenn ich nun bei S1 die
Adresse des ersten String im Datenbaustein angeben will, so wird dieser sofort
rot hinterlegt, mit der Fehlermeldung "Aktualdatentyp CHAR passt nicht zu formalen Typ String [254] des Formalparameters S2"

Was soll das bedeuten?

In meinem Datenbaustein habe ich zwei Strings mit einer Länge von je 20 angelegt.

Was muss ich bei FC10 beachten?

smartie
Warum legst Du im DB nicht den Typ "String" an, dann geht es...
vorausgesetzt Du liest auch Kai's wichtigen Beitrag.
 
Zuletzt bearbeitet:
@Kai
Die Fehlermeldung deutet jedoch nicht darauf hin....
glaube eher er hatte CHAR
habe es probiert, Fehler wie im Anhang, S1 ist als STRING definiert...
 

Anhänge

  • char.jpg
    char.jpg
    192 KB · Aufrufe: 49
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Kai,

deine Beispiele hab ich mir auch schon vorher angesehen. Nur die PDF´s
hatte ich nicht beachtet.

Ich muss meine Adresse als P#DB200... angeben, was bedeutet das P# irgendwo hab ich was mit Pointer gelesen. Was ist das, wenn ich mal so ganz dumm fragen darf.

Also ich hab die Adressen im DB mit dem P# adressiert, jetzt kommt immer die Fehlermeldung "Konstantenformat zu Datentyp POINTER passt nicht zu formalen
Typ String [254] des Formalparameters S1" (bzw. S2).

Kann damit aber nix anfangen.

smartie

P.S.: Im Datenbaustein hab ich , wie bereits erwähnt zwei Strings angelegt.

smartie
 
Hallo Kai,

deine Beispiele hab ich mir auch schon vorher angesehen. Nur die PDF´s
hatte ich nicht beachtet.

Ich muss meine Adresse als P#DB200... angeben, was bedeutet das P# irgendwo hab ich was mit Pointer gelesen. Was ist das, wenn ich mal so ganz dumm fragen darf.

Also ich hab die Adressen im DB mit dem P# adressiert, jetzt kommt immer die Fehlermeldung "Konstantenformat zu Datentyp POINTER passt nicht zu formalen
Typ String [254] des Formalparameters S1" (bzw. S2).

Kann damit aber nix anfangen.

smartie

P.S.: Im Datenbaustein hab ich , wie bereits erwähnt zwei Strings angelegt.

smartie
Funktioniert der Vergleich nun nicht, oder kommt immer die rote Schrift??
 
Also ich hab deinen Anweisungen gefolgt, borromeus, hat aber nix gebracht.

Hab im Anhang mal den FC und den DB abgelichtet.

smartie
 

Anhänge

Also ich hab die Adressen im DB mit dem P# adressiert, jetzt kommt immer die Fehlermeldung "Konstantenformat zu Datentyp POINTER passt nicht zu formalen
Typ String [254] des Formalparameters S1" (bzw. S2).

Du musst den Parameter S1 symbolisch adressieren:

S1 := "DB_DATENMATRIX".DATENMATRIX

Bei absoluter Adressierung bekommst Du Deine Fehlermeldung:

S1 := P#DB200.DBX0.0

"Konstantenformat zu Datentyp POINTER passt nicht zu formalen Typ String [254] des Formalparameters S1"

Gruß Kai
 
Das steht übrigens auch so in der STEP 7-Hilfe zum FC10:

FC 10 EQ_STRNG

Beschreibung

Die Funktion FC 10 vergleicht die Inhalte zweier Variablen im Format STRING auf gleich und gibt das Vergleichsergebnis als Rückgabewert aus. Der Rückgabewert führt Signalzustand ”1", wenn die Zeichenkette am Parameter S1 gleich der Zeichenkette am Parameter S2 ist. Die Funktion meldet keine Fehler.

Parameter Deklaration Datentyp Speicherbereich Beschreibung

S1 INPUT STRING D, L Eingangsvariable im Format STRING

S2 INPUT STRING D, L Eingangsvariable im Format STRING

RET_VAL OUTPUT BOOL E, A, M, D, L Vergleichsergebnis

Die Eingangsparameter können nur mit einer symbolisch definierten Variablen belegt werden.

Gruß Kai
 
Hmm, das hatte ich vielleicht übersehen. :???:
Ist aber auch irgendwie doof das das nur symbolisch geht.

Aber jetzt nimmt er das wenigstens an.

Danke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich nochmal,

der Vergleich m Prinzip funktioniert jetzt schnon mal, das heisst wenn ich jetzt
DB32_VAR mit DB32_VAR vergleiche bekomme ich als Ergebniss logischer Weise eine 1.

Wenn ich aber DB32_VAR mit DB32_VAR2 vergleiche erhalte ich als Ergebniss eine 0, obwohl meine Strings, wenn ich sie mir in der Variablentabelle ansehe, gleich sind.

Hab ich da wieder was übersehen?

smartie
 
Hi Kai,

ich hab die VAT mal abgelichtet.

Allerdings muss ich noch sagen das ich den String probehalber auf 21 Zeichen verlängert habe, da meine Zeichenkette ja eine Länge
von 19 Zeichen hat und ich mir nicht sicher bin ob die ' ' mit zur Stringlänge zählen.

smartie
 

Anhänge

  • vat.JPG
    vat.JPG
    72,1 KB · Aufrufe: 56
Zuviel Werbung?
-> Hier kostenlos registrieren
So, jetzt funktioniert es.

Hab mir noch mal ausführlich das Beispiel von Kai angesehen.
Und wenn man dann weiter oben auch noch den Beitrag von Ralle liest

Zitat : "Ein String[14] ist 16 Byte lang. In Byte 0 und 1 stehen die max. und die tatsächliche Länge des Strings."


und sich daran dann auch noch hält dann funktioniert auch der Vergleich mit FC10.

Danke noch mal allen für Ihre geduldige Hilfe. :D

smartie
 
Zurück
Oben