Step 7 SCL String Parameter Übergabe

martinpr

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen, ich habe eine kleine Frage bezüglich der String Übergabe in SCL

Code:
FUNCTION FC32 : VOID

   VAR_INPUT 
      StringIn : STRING;
   END_VAR


   VAR_TEMP 
      TmpString: STRING;
      Laenge : INT;
   END_VAR


BEGIN
    TmpString := StringIn;    


    Laenge := LEN(StringIn);   //Funktioniert nicht
    Laenge := LEN(TmpString);  //Funktioniert


END_FUNCTION

Weshalb funktioniert der Funktionsaufruf nur wenn ich eine Temporäre Variable als Zwischenspeicher verwende ?

Sonst kommt der Fehler: Parameterübergabe nicht korrekt.

Im TIA Portal funktioniert es ohne temporäre Variable

Problem ist, dass der lokale Speicher zu schnell voll wird wenn ich jeden Input String zusätzlich als Tmp Variable anlegen muss.
 
Du meinst es funktioniert beim TIA-Portal mit einer S7-300/400 ohne eine Variable anlegen zu müssen? Oder bei einer 1200/1500?
Bei einer 300/400 geht es nicht anders, wenn das beim TIA-Portal auch bei diesen Steuerungen funktioniert, dann würde der String für dich nicht sichtbar vorher auf den Lokaldatenstack angelegt werden müssen.

Wenn dir der Lokaldatenbereich zu klein wird, dann kannst du auch kürzere Strings anlegen. Ein "String" ohne Längenangabe hat immer 254 Zeichen, wenn du nur 10 Zeichen benötigst, dann kannst du eine String-Variable mit String[10] angelegen. Oder du legst die Strings im Stat-Bereich eines FBs ab, oder in einem globalen Arbeits-DB (String-Schmier-DB ;-) )
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Springfunktionen in Step7 können aus irgendeinem Grnd nur aud D und L zugreifen, also Daten (Datenbaustein) und Lokaldaten.
Da hilft nur Thomas Vorschlag.
Wenn du mehrere Strings hat, kannst du diese bei Bedarf immer dem gleichen Temp-String zuweisen.
In manchen neueren 300-er SPS kann man auch mehr Lokalspeicher für bestimmte Abarbeitungsebenen zuweisen. Dann bekommt man auch mal 3 oder 4 große Strings unter.

PS Thomas: Mit der Anmerkung zu TIA hats du sicher Recht.
 
Okay danke für die Hilfe, das hat meine Fragen beantwortet.

PS
Bei FBs hatte ich, wenn der Lokaldatenstack voll war, den Static Bereich verwendet dann hats auch funktioniert aber den gibts ja logischerweise bei FCs nicht.
 
Zurück
Oben