S7 String variablen

zotos

Well-known member
Beiträge
4.462
Punkte Reaktionen
1.153
Zuviel Werbung?
->Hier kostenlos registrieren
Ich habe ein Problem mit Stringvariablen in einer S7 314C2DP.
Der Replace FC funktioniert nicht :cry:
Ich habe die Funktion bereits in einer 315er CPU problemlos verwendet. Habt ihr eine Idee was da noch schief gehen kann?

Die Variable lässt sich in der VariablenTabelle verändern aber nicht durch besagten Replace FC.

Gruß
ZoToS :wink:
 
OP
Z

zotos

Well-known member
Beiträge
4.462
Punkte Reaktionen
1.153
Kann euch nicht sagen warum, aber jetzt gehts.
Strings sind einfach nichts für die Siemens-SPS-Welt.
:twisted:

Bin aber froh das es jetzt geht. :wink:
 

Corus

New member
Beiträge
2
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
wäre ganz gut wenn du schreiben könntest woran es gelegen hat,

habe das gleich Problem das die Replace funktion nicht geht.....

kann die Variable verändern wie ich möchte

Ini1 String [10]
Ini2 String [10]

RetVal String [10]

somit haben alle die gleiche Länge.

egal wie ich Ini1 oder auch Ini2 verändere

RetVal bleibt gleich.............
 
OP
Z

zotos

Well-known member
Beiträge
4.462
Punkte Reaktionen
1.153
Ich bin gerade erschrocken. Der Beitrag ist ja so alt das ich mich gerade fragen musste bei welchem Arbeitgeber ich damit gearbeitet habe ;o)

Ich kann aber nicht sagen woran es gelegen hat das hatte ich damals nicht herausgefunden. Das war so ein Phänomen wo es plötzlich ging. Sowas was durch Reorganisieren oder so manchmal geht und man bekommt nicht raus was es war.

Welchen Teil des Strings möchtest Du denn überschreiben? Kopiere doch mal den Aufruf hier rein.
 

Ralle

Supermoderator
Teammitglied
Beiträge
14.403
Punkte Reaktionen
3.373
Schau mal nach, was in Byte 0 und 1 deines String tatsächlich drinsteht. Dort gehört die Max. Länge und die tatsächliche Länge rein. Viele (oder alle?) Stringfunktionen arbeiten nur, wenn der Stringkopf auch eine Länge eingetragen hat!
 

Larry Laffer

Supermoderator
Teammitglied
Beiträge
13.050
Punkte Reaktionen
2.699
Zuviel Werbung?
->Hier kostenlos registrieren
Schau mal nach, was in Byte 0 und 1 deines String tatsächlich drinsteht. Dort gehört die Max. Länge und die tatsächliche Länge rein. Viele (oder alle?) Stringfunktionen arbeiten nur, wenn der Stringkopf auch eine Länge eingetragen hat!

Der Beitrag von Ralle ist nach meiner Erfahrung der Schlüssel zu dem Ganzen. Siemens nennt das Ganze charmant "String initialisieren". Ist auch unter SCL ein Problem, dort aber noch am einfachsten in den Griff zu bekommen. Man schreibt einfach :
Code:
Temp_String := '' ;
Dann ist es erledigt.
In AWL sind es tatsächlich die ersten beiden Bytes die zugewiesen werden müssen ...

Wie auch immer, es gilt für alle Siemens String-FC's also "LEFT , MID , RIGHT ..." usw. Ich hatte mir irgendwann mal den Spass gemacht und so eine FC im Code angesehen und dort wurde dann als Erstes das Byte "String-Länge tatsächlich" angefasst.

...
Gruß
LL
 

volker

Supermoderator
Teammitglied
Beiträge
5.470
Punkte Reaktionen
935
kann obiges bestätigen. die ersten 2 bytes sind wichtig.

ich hatte hier mal einen string den ich an eine fremdsteuerung als asc schicken musste. das habe ich mit der sfc21 gemacht ohne die ersten 2 bytes.

da bei einer wandlung einer zahl in einen string aber nicht der komplette string überschrieben *1 wird, habe ich den kompletten string vorher auf b#16#0 gesetzt.
dann gehen die string fc's nicht mehr.

*1
z.b. stringlänge 10
123456 (dez) -> 123456 (string) == byte0 = 10; byte1 = 6 der rest halt die zahlen
danach 9876 (dez) -> 9876 (string) == byte0 = 10; byte1 = 4; byte 7 und 8 enthalten aber immer noch 5 und 6 aus dem vorigen transfer.
 
Oben