Step 7 String in Function übergeben

wbach

Level-1
Beiträge
84
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich möchte eine Function mit Hilfe einer String VAR_INPUT aufrufen.


Code:
FUNCTION Call_CASE_String : VOID

VAR_INPUT
    String_Call : STRING;
END_VAR

LABEL
    TL, FINISH;
END_LABEL

BEGIN
IF String_Call = 'TL' THEN
    GOTO TL;// Statement Section_IF
END_IF;
    
TL:;
    //Hier Funktion
    GOTO FINISH;

FINISH:;

END_FUNCTION


FUNCTION Call_CASE : VOID

VAR_TEMP
    str_temp0 : STRING ;
END_VAR

BEGIN
    str_temp0 := 'TL';
    Call_CASE_String(String_Call := str_temp0); 
END_FUNCTION

Kann mir jemand dabei helfen?
Ich kriege die Fehlermeldung Unbenannt.PNG.
Kann es sein das Stings bei 300 SPS nicht so übergeben können?

LG wbach
 
Servus,

versuche es mal mit einer Deklaration einer temporären Variable:

FUNCTION Call_CASE_String : VOID

VAR_INPUT

String_Call : STRING;

END_VAR

VAR_TEMP

String_Call_tmp : STRING;

END_VAR

String_Call_tmp := String_Call;

...

benutze für deine Funktion diese Variable.

Gruß
Philipp

Gesendet von meinem SM-G950F mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
FUNCTION Call_CASE_String : VOID


VAR_INPUT
    String_Call : STRING;
END_VAR


VAR_Temp
    String_Temp : STRING;
END_VAR


LABEL
    TL, FINISH;
END_LABEL


BEGIN
String_Temp := String_Call;


IF String_Temp = 'TL' THEN
    GOTO TL;// Statement Section_IF
END_IF;
    
TL:;
    //Hier Funktion
    GOTO FINISH;


FINISH:;


END_FUNCTION

pkampitsch hat Recht, so geht das. Leider Geht bei Siemens niemals der gerade Weg.

PS: Label und GoTo finde ich persönlich nicht ganz so toll, aber das ist Ansichtssache ;-)
 
Zuletzt bearbeitet:
Hallo pkampitsch und Ralle,
danke für Eure Hilfe.

@Ralle: Wir haben davor mit CASE xxx of versucht und das hat auch funktioniert. Aber mann muss dann halt wissen das 2=TL und 4=DL ist und dann habe ich in der Programmierung die Bedingung vertauscht. Deshalb wollen wir das mit einem String machen.

LG wbach
 
Naja ... anstelle von CASE kann man es aber auch so machen :
Code:
IF String_Temp = 'TL' THEN
   // hier das zu TL passende hineinprogrammieren

ELS_IF String_Temp = 'DL' THEN
   // hier das zu DL passende hineinprogrammieren
  
ELSE
   // und vielleicht auch noch falls etwas Unsinniges übergeben worden ist ...

END_IF;
Gruß
Larry
 
Das wird dann unübersichtlich. Wir haben 20 Bedingungen und dort ist viel Logik hinter.
Meinst Du Deine vorsintflutliche Programmierung mit GOTO ist übersichtlicher als CASE oder IF/ELS_IF?

Du machst die Stringübergabe nur, damit der übergebene Wert im Programmcode besser verstehbar wird als Zahlenwerte? Du könntest Konstanten definieren und auf die "sprechenden" Konstantennamen vergleichen bzw. für die CASE verwenden. Und man kann und sollte Programmcode mit Kommentaren versehen.

Harald
 
Hatte ich vorher gehabt. Siehe Anwort weiter oben.

Diese Stingübergabe kommt nicht von irgendwoher. Wir nutzen einen Standard und erstellen uns unsere Quellen über Python-Scripts. Diese Scripts sollen in der Regel nur einen Aufruf starten. Dabei können dann falsche Aufrufe entstehen. Wenn wir das allerdings über einen STRING machen der dann den selben Aufruf hat, ist es einfacher für den Programmierer.
Somit muss man nicht in einer Tabelle nachschauen, welche Aufrufe wo zugeordnet sind.

LG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja ... es gibt immer unterschiedliche Möglichkeiten ...
Allerdings ist die Selektion mit Strings nicht wirklich sinnvoll da du ja z.B. deinem Baustein NICHT 'TL' auf die Schnittstelle übergeben kannst sondern hier nur einen String, den dann 'TL' enthält.
Was du dann ggf. auch noch berücksichtigen solltest ist : was ist, wenn dein Inhalt 'Tl', 'tl' oder 'tL' ist ? Was machst du dann (kommt nicht vor ist m.E. sehr kurzsichtig).
2. Nachteil ist : du bekommst das nicht als Inhalts-Status beim debuggen angezeigt ...

GOTO und LABEL kann man natürlich in einem Programm machen - man muss aber auch nicht immer alles machen, was man machen kann. In der Hochsprachenprogrammierung (also auch SCL) ist das eigentlich seit Jahrzehnten verpönt - viele Programmiersprachen unterstützen das sogar nichtmal mehr ...

Gruß
Larry
 
Zurück
Oben