Step 7 Step7 V5.5 - SCL: FB-Übersetzung wird mit Fehler abgebrochen

K

Kallemann

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Ich habe einen FB nach folgendem Schema geschrieben:

Code:
{SetOKFlag := 'y' ; OptimizeObjectCode := 'y'}
FUNCTION_BLOCK SymbolischerName

  VAR_INPUT
    BezeichnerInput1 : DatenTyp;
    ...
    BezeichnerInputN : DatenTyp;
  END_VAR

  VAR_IN_OUT
    BezeichnerInOut1 : DatenTyp;
    ...
    BezeichnerInOutN : DatenTyp;
  END_VAR

  VAR_OUTPUT
    BezeichnerOutput1 : DatenTyp;
    ...
    BezeichnerOutputN : DatenTyp;
  END_VAR
  VAR
    BezeichnerStat1 : DatenTyp;
    ...
    BezeichnerStatN : DatenTyp;
  END_VAR
  VAR_TEMP
    BezeichnerTemp1 : DatenTyp;
    ...
    BezeichnerTempN : DatenTyp;
  END_VAR
  LABEL
    SprungZiel;
  END_LABEL;
  
  BEGIN

  // 1. Anweisung
  BezeichnerTemp1 := BezeichnerInOut1 AND IrgendeineBedingung;
  
  //...weitere Anweisungen

SprungZiel:

  //...weitere Anweisungen

END_FUNCTION_BLOCK


Entferne ich das Schlüsselwort "BEGIN", erfolgt die Übersetzung inklusive der deklarierten Sprungmarke fehlerfrei. Entferne ich die Sprungmarke und deren Deklaration im Vereinbarungsteil, dann erfolgt die Übersetzung inklusive des verwendeten Schlüsselwortes "BEGIN" fehlerfrei. Möchte ich Sprungmarke und Schlüsselwort verwenden, wird mir nach dem Übersetzungsversuch die erste Anweisung nach dem Schlüsselwort "BEGIN" als "unbekannte Anweisung" gemeldet.

Hat jemand von Euch auch schon einmal ein solches Verhalten festgestellt? Gibt es für dieses Verhalten einen speziellen Grund? Wahrscheinlich habe ich den auftretenden Fehler selbst verursacht, aber wie?

Bitte um Hilfe

VG Carsten
 
... ohne den "echten" Code zu kennen fällt mir dazu jetzt gar nichts ein.
In SCL Sprungmarken zu verwenden ist nicht unbedingt schön - funktioniert aber anstandslos.

Manchmal ist der Fehler auch nicht unbedingt in der angemeckerten Zeile sondern dahinter (oder davor) ...

Gruß
Larry
 
Hallo.

Ich möchte doch noch 'mal nachhaken: Warum ist die Verwendung von Sprungmarken in SCL unschön?

VG Carsten
 
Weil man den ganzen Code mit entsprechenden Kontrollstrukturen vernünftig strukturieren kann.

In Wikipedia findet sich dazu das
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Aventinus.

Vielen Dank für den Link; ich habe mir das 'mal durchgelesen. Es handelt sich dabei dann letztendlich wieder um eine persönliche Meinung eines jeden Einzelnen und führt nur zu end- und ergebnislosen Grundsatz-Diskussionen. Die machen keinen Spaß.

VG Carsten
 
... ich habe mir den Link von Aventinus nun nicht angesehen - Auf Goto's und Sprung-Label nach Möglichkeit zu verzichten ist aber nicht nur eine Glaubens-Geschichte. Viele Programmiersprachen kommen ganz ohne so etwas aus. Ich habe in meinen Programmen bislang auch recht erfolgreich auf Goto's verzichten können.
Du mußt das ja auch nicht so machen - es reicht schon, wenn du einfach mal drüber nachdenkst - manchmal fängt es so schon an ...
Meißtens (so meine Erfahrung) wird der Code tatsächlich übersichtlicher wenn man mit "IF ... THEN ... ELS_IF ... ELSE" oder "SELECT CASE" arbeitet ...

Gruß
Larry
 
Wenn du ein Sprung-Label hast weißt du nicht automatisch, von wo aus dieser angesprungen wird. Rückwärtsquerverweise gibt es nicht.

Bei den Kontrollstrukturen sieht man es relativ leicht.

Aber wie du schon schreibst, das kann jeder machen wie er es für richtig hält. Technisch gesehen funktioniert beides...
 
Zurück
Oben