Step 7 SCL Maximale Konstantenlänge

Waldi1954

Level-1
Beiträge
64
Reaktionspunkte
18
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

um über S7 eine Selectanweisung an einer Datenbank im Stringformat zu übergeben,
habe ich in SCL mehrere Konstanten mit unterschiedlichen Selectanweisungen erstellt.

Mein Problem ist, dass beim Zuweisen eines Textstrings zur Konstanten ab einer gewissen Größe
beim übersetzen des SLC Programms der Editor abstürzt.

Meine Frage:
Wie kann ich einen Texstring der Konstanten mit bis zu einer Länge von 254 Byte zuordnen,
oder wie kann ich die Anweisung zeilenübergreifend erstellen? :confused:

Im Moment mache ich es über zwei Konstanten, die ich dann zusammenführe.

MFG Waldi

Mein Anweisung in SCL:

FUNCTION_BLOCK fb201

CONST
//=====================================================================
ST1:= 'SELECT iParam1, fParam2, Left([sText1],20) FROM tTable1 WHERE id<10';
ST1_2:='';
ST2:='SELECT MID([MASCHINENNUMMER],3,3), Left([Funktion],3), Left([STATUS],3), NACHNAME, LEFT([VORNAME],10), PERSONALNUMMER,';
ST2_2:=' Kommtzeit FROM VHW_PERSONAL_ANGEMELDET ORDER BY MASCHINENNUMMER';
ST3:='';
ST4:='';
ST5:='';
//=====================================================================
END_CONST

VAR_INPUT
Auswahl_SText : Int;
END_VAR


VAR_OUTPUT
AnzahlSaetze: INT;
Laenge : INT;
SelectString : STRING;
END_VAR

BEGIN
// Init default return values

CASE (Auswahl_SText) OF
1 : SelectString := ST1;
2 : SelectString := CONCAT (in1 := ST2, in2 :=ST2_2);
3 : SelectString := ST3;
4 : SelectString := ST4;
5 : SelectString := ST5;
ELSE:
SelectString := ' ';
END_CASE;
AnzahlSaetze := 1;
laenge := LEN(S := SelectString);

// Return value
END_FUNCTION_BLOCK
 
Hallo
dein Ausgabe-String des Bausteins kann natürlich nur maximal Zeichen Länge haben.
Wenn du damit gelegentlich nicht hinkommst gibt es nur die Möglichkeit, mehr als einen Ausgabe-String zu generieren ...

Gruß
Larry
 
Mein Problem ist, dass beim Zuweisen eines Textstrings zur Konstanten ab einer gewissen Größe
beim übersetzen des SLC Programms der Editor abstürzt.

... erklär das obige doch bitte noch einmal etwas genauer. Wo weist du der Konstanten einen Textstring hinzu ...?
Ronin hat natürlich Recht. Aus deinem Baustein selbst kommt hinterher u.U. nur ein String heraus in dem nicht alles Benötigte drin steht ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
Ist alles klar. Aber bei der Zuweisung zB. der Konstante "ST2:='SELECT MID([MASCHINENNUMMER],3,3), Left([Funktion],3), Left([STATUS],3), NACHNAME, LEFT([VORNAME],10), PERSONALNUMMER,';"

sind ja noch nicht 255 Byte länge erreicht.
Aber bei der Deklarierung des Textstrings über 130 Zeichen stürzt der Editor ab beim Übersetzen.

Gruß Waldi
 
... bei mir nicht. Ich kann deinen Code, so wie er ist, compilieren.
Wobei stürzt der Compiler ab - Zeile ?
Welche Versionen von was hast du denn so ?
Was hast du bei den Compiler-Optionen (Extras) eingestellt ?

Gruß
Larry
 
@Larry:
Ich kann es auch nachvollziehen, mit einer eigenen Funktion. Einfach eine Konstante im Kopf definieren, die mind. 130 Zeichen hat.
Bei Klick auf Übersetzen, stürzt der Editor ohne Fehlermeldung ab. Es kommt das normale Fenster "Windows Fehlerbericht senden".

SCL V5.3.5.0
Mit den Einstellungen scheint es spontan nicht zusammenzuhängen. Alle Optionen unter "Baustein erzeugen" und "Compiler" deaktiviert oder aktiviert - selbes Ergebnis.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@Ronin:
Stimmt - du hast Recht - das hatte ich nicht probiert. Ist die String-Konstante zu lang (also z.B. ST_2 und ST_2_2 zusammengefasst) dann kommt der Compiler damit nicht mehr klar.
Das Fall dann ein Fall für Herrn Siemens - und ich würde eine Wette darauf eingehen, dass die Antwort lauten wird : "Da machen wir nichts (mehr) dran - wir empfehlen als Work-around eben diese Situation zu umgehen ..."

@TE:
Sorry - so wie Ronin hatte ich deine Anfrage nicht verstanden - hat der also die bessere Fantasie oder Glaskugel ... 8)

Gruß
Larry
 
Ne ... ne ...
Das schon das reine Deklarieren von String-Konstanten mit einer Größe über 130 Zeichen nicht funktioniert hatte ich da nicht rausgelesen - das ist schon dein Verdienst ... ;)
Ich hatte es zunächst so verstanden, dass die Strings größer 254 Zeichen werden sollen und dann, dass das Übersetzen des geposteten Codes nicht funktioniert.
Wie auch immer ...

Gruß
Larry
 
Zurück
Oben