Fehler und Warnungen in ST

In diesem Abschnitt finden Sie alle Fehler und Warnungen, die beim Erstellen des ST-Codes oder beim Erstellen der FBS-Logik im FBS-Editor auftreten können.

Es ist allerdings möglich, dass Fehler/Warnungen für den ST-Editor auftreten, wie sie beim Validieren der Anwendung auftreten. In diesem Fall finden Sie diese Meldung und die entsprechende Lösung unter "Fehler und Warnungen beim Validieren der Anwendung".


Fehlendes IEC-Schlüsselwort oder IEC-Bezeichner
Lösung: Vervollständigen Sie die Syntax, sodass ein gültiges Objekt vorhanden ist. Siehe "Unterstützte ST-Syntax"
Beispiele:

Fehlerhafter CodeKorrekter CodeDetail zur Lösung

PROGRAM test

VAR

var1 : BOOL

END_VAR

END_PROGRAM

PROGRAM test

VAR

var1 : BOOL;

END_VAR

END_PROGRAM

Tragen Sie bei der Deklaration der →Variablen das fehlende Zeichen ";" ein.

PROGRAM test

VAR

var1 INT;

END_VAR

END_PROGRAM

PROGRAM test

VAR

var1 : INT;

END_VAR

END_PROGRAM

Tragen Sie bei der Deklaration der Variablen das fehlende Zeichen ":" ein, mit dem der →Datentyp zugeordnet wird.

PROGRAM test

VAR

var1 : BOOL;


END_PROGRAM

PROGRAM test

VAR 

var1 : BOOL;

END_VAR

END_PROGRAM

Tragen Sie bei der Deklaration der Variablen END_VAR ein, mit dem die Deklaration beendet wird.

PROGRAM test VAR var1 : BOOL;

END_VAR

var1 := 1

END_PROGRAM   

PROGRAM test VAR var1 : BOOL;

END_VAR

var1 := 1;

END_PROGRAM   

Tragen Sie bei der →Zuweisung das fehlende Zeichen ";" ein, mit dem das Anweisung beendet wird.

PROGRAM test VAR var1 : BOOL; END_VAR

var1 1;

END_PROGRAM

PROGRAM test VAR var1 : BOOL; END_VAR

var1 := 1;

END_PROGRAM

Tragen Sie bei der Zuweisung den fehlenden Zuweisungsoperator ":=" ein.

Unerwartetes Zeichen 'name'
Lösung: Löschen Sie das fehlerhafte Zeichen oder ersetzen Sie es durch die korrekte SyntaxSiehe Troubleshooting-Artikel "Meldung 'Unerwartetes Zeichen' wird für Initialisierungswert im ST-Editor angezeigt", falls die Meldung für einen Initialisierungswert angezeigt wird.
Beispiele:

Fehlerhafter CodeKorrekter CodeDetail zur Lösung
#test prog__

PROGRAM Test

END_PROGRAM


testprog

END_PROGRAM 

PROGRAM testprog

END_PROGRAM


Test

END_PROGRAM 

PROGRAM Test

END_PROGRAM 


PROGRAM test

END_PROGRAM;

PROGRAM test

END_PROGRAM 

Entfernen Sie am Ende der Deklaration das ungültige Zeichen.

FUNCTION

END_FUNCTION

FUNCTION Simple1

END_FUNCTION

Vergeben Sie bei der Deklaration der Funktion einen Namen. Dieser muss ein IEC-Bezeichner sein.

PROGRAM __Motor

END_PROGRAM

PROGRAM _Motor

END_PROGRAM

Vergeben Sie bei der Deklaration des →Programms einen →IEC-Bezeichner als Namen.

FUNCTION_BLOCK __Control

END_FUNCTION_BLOCK

FUNCTION_BLOCK _Control

END_FUNCTION_BLOCK

Vergeben Sie bei der Deklaration des →Funktionsbausteins einen IEC-Bezeichner als Namen.

FUNCTION __Simple

END_FUNCTION

FUNCTION _Simple

END_FUNCTION

Vergeben Sie bei der Deklaration der →Funktion einen IEC-Bezeichner als Namen.

FUNCTION Fun3

;:

END_FUNCTION

FUNCTION Fun3 


END_FUNCTION


PROGRAM test

VAR

__var1 : INT;

END_VAR

END_PROGRAM  

PROGRAM test

VAR 

_var1 : INT;

END_VAR

END_PROGRAM  

Vergeben Sie bei der Deklaration der →Variablen einen IEC-Bezeichner als Namen. 

PROGRAM test

VAR

var1 var2 : INT;

END_VAR 

END_PROGRAM  

PROGRAM test

VAR

var1, var2 : INT;

END_VAR 

END_PROGRAM  

Tragen Sie bei der Deklaration von mehreren Variablen das fehlende Zeichen "," ein, mit dem die Variablen voneinander getrennt werden.

PROGRAM test

VAR

var1, __var2 : INT;

END_VAR

END_PROGRAM   

PROGRAM test

VAR 

var1, var2 : INT;

END_VAR

END_PROGRAM   

Löschen Sie bei der Deklaration der Variablen das fehlerhafte Zeichen oder ersetzen Sie es durch Zeichen, sodass ein IEC-Bezeichner als Name eingetragen ist.

PROGRAM test

VAR

var1, var2__ : BOOL;

END_VAR

END_PROGRAM    

PROGRAM test

VAR

var1, var2 : BOOL;

END_VAR

END_PROGRAM    

Löschen Sie bei der Deklaration der Variablen das unerwartete Zeichen, dass vor dem Zeichen ":" steht. Möglicherweise müssen Sie mehrere Zeichen löschen, damit eine gültige Syntax entsteht.

PROGRAM test

VAR

: BOOL;

END_VAR

END_PROGRAM   

PROGRAM test

VAR

var1 : BOOL;

END_VAR

END_PROGRAM

Korrigieren Sie die Deklaration der Variablen, sodass eine gültige Deklaration vorhanden ist.

PROGRAM test

VAR

x , y : INT__ ;

END_VAR

END_PROGRAM

PROGRAM test

VAR

x , y : INT;

END_VAR

END_PROGRAM

Korrigieren Sie den vergebenen Datentyp, sodass dessen Schreibweise jener der unterstützten Datentypen entspricht.

PROGRAM test VAR var1 : BOOL; END_VAR

var1 := ;

END_PROGRAM

PROGRAM test VAR var1 : BOOL; END_VAR

var1 := 1;

END_PROGRAM

Tragen Sie bei der →Zuweisung den Ausdruck auf der rechten Seite des Zuweisungsoperators ":=" ein.

PROGRAM test VAR var1 : BOOL; END_VAR

var1 : 1;

END_PROGRAM

PROGRAM test VAR var1 : BOOL; END_VAR

var1 := 1;

END_PROGRAM

Ersetzen Sie bei der Zuweisung das fehlerhafte Zeichen durch den Zuweisungsoperator ":=".

PROGRAM test VAR var1 : BOOL; END_VAR

var1 := 1,

END_PROGRAM

PROGRAM test VAR var1 : BOOL; END_VAR

var1 := 1;

END_PROGRAM

Ersetzen Sie bei der Zuweisung das fehlerhafte Zeichen durch das Zeichen ";", mit dem die Anweisung beendet wird. 

PROGRAM test VAR a, b : BOOL; END_VAR

a := b,;

END_PROGRAM

PROGRAM test VAR a, b : BOOL; END_VAR

a := b;

END_PROGRAM 

Löschen Sie bei der Zuweisung das ungültige Zeichen vor dem Zeichen ";".

PROGRAM prog1

VAR

x , y : BOOL ;

END_VAR

x := TRUE__;

END_PROGRAM

PROGRAM prog1

VAR

x , y : BOOL ;

END_VAR

x := TRUE;

END_PROGRAM

Tragen Sie bei der Zuweisung eines der möglichen Konstrukte ein. Informieren Sie sich über die Möglichkeiten unter "Unterstützte ST-Syntax".

PROGRAM Prog1

Fun1(

END_PROGRAM

FUNCTION Fun1

END_FUNCTION

PROGRAM Prog1 

Fun1();

END_PROGRAM

FUNCTION Fun1

END_FUNCTION

Beenden Sie den →Aufruf der →Funktion mit den Zeichen ");".

PROGRAM Prog1

VAR

x : BOOL;

END_VAR

Fun2() := x;

END_PROGRAM

FUNCTION Fun2 : BOOL

END_FUNCTION

PROGRAM Prog1

VAR

x : BOOL;

END_VAR

Fun2();

END_PROGRAM

FUNCTION Fun2 : BOOL

END_FUNCTION

Tragen Sie für den Aufruf der Funktion einen für Funktionen vorhandenen Bezeichner ein (wie im Beispiel angeführt). Alternative: Ergänzen Sie die fehlende Deklaration für die Funktion.

PROGRAM Prog1

Fun__1();

END_PROGRAM

FUNCTION Fun1

END_FUNCTION

PROGRAM Prog1

Fun1();

END_PROGRAM

FUNCTION Fun1

END_FUNCTION

Tragen Sie für den Aufruf der Funktion einen für Funktionen vorhandenen Bezeichner ein (wie im Beispiel angeführt). Alternative: Ergänzen Sie die fehlende Deklaration für die Funktion.

PROGRAM Prog1

VAR

x : BOOL;

END_VAR

Fun2() := x;

END_PROGRAM

FUNCTION Fun2 : BOOL

END_FUNCTION

PROGRAM Prog1

VAR

x : BOOL;

END_VAR

Fun2();

END_PROGRAM

FUNCTION Fun2 : BOOL

END_FUNCTION


FUNCTION Fun1 : BO__OL

END_FUNCTION

FUNCTION Fun1 : BOOL

END_FUNCTION


PROGRAM Test

VAR

var1 : ANY_INT;

END_VAR

END_PROGRAM

PROGRAM Test

VAR

var1 : INT;

END_VAR

END_PROGRAM

Statt des →allgemeinen Datentyps tragen Sie einen elementaren Datentyp ein (siehe "Unterstützte Datentypen").

PROGRAM

END_PROGRAM

PROGRAM Motor1

END_PROGRAM

Vergeben Sie bei der Deklaration des →Programms einen Namen. Dieser muss ein →IEC-Bezeichner sein.

FUNCTION_BLOCK

END_FUNCTION_BLOCK

FUNCTION_BLOCK Control1

END_FUNCTION_BLOCK

Vergeben Sie bei der Deklaration des →Funktionsbausteins einen Namen. Dieser muss ein IEC-Bezeichner sein.

FUNCTION Fun1

FUNCTION

FUNCTION Fun1

END_FUNCTION

Tragen Sie bei der Deklaration der →Funktion das Schlüsselwort END_FUNCTION ein, mit dem die Deklaration beendet wird. 

PROGRAM test

VAR

var1, : BOOL;

END_VAR 

END_PROGRAM

PROGRAM test

VAR

var1, var2 : BOOL;

END_VAR 

END_PROGRAM

Ergänzen Sie bei der Variablendeklaration eine Variablen oder entfernen Sie das Zeichen "," nach der bereits deklarierten Variable.

Konnte die Referenz auf 'Name' nicht auflösen. Eine Variable mit diesem Namen existiert nicht.
Lösung: Vervollständigen Sie die Syntax, sodass ein gültiges Objekt vorhanden ist. Siehe "Unterstützte ST-Syntax  "
Beispiel:

Fehlerhafter CodeKorrekter CodeDetail zur Lösung

PROGRAM prog1

VAR

x : BOOL;

END_VAR

x := y;

END_PROGRAM

PROGRAM prog1

VAR

x , y : BOOL;

END_VAR

x := y;

END_PROGRAM

Tragen Sie bei der Deklaration der →Variablen den erwähnten Ausdruck ein, damit der Ausdruck als Variable deklariert ist (wie im Beispiel angeführt).
Alternative: Tragen Sie bei der →Zuweisung einen anderen Ausdruck ein, der von  logi.CAD 3  unterstützt wird.

Konnte die Referenz auf 'Name' nicht auflösen. Eine Funktion oder Funktionsbaustein-Instanz mit diesem Namen existiert nicht.
Lösung: Vervollständigen Sie die Syntax, sodass ein gültiges Objekt vorhanden ist. Siehe "Unterstützte ST-Syntax"
Beispiel:

Fehlerhafter CodeKorrekter CodeDetail zur Lösung

PROGRAM prog1

MyFun();

END_PROGRAM

PROGRAM prog1

MyFun();

END_PROGRAM

FUNCTION MyFun

END_FUNCTION 

Deklarieren Sie die benötigte →POE.

Konnte die Referenz auf 'Name' nicht auflösen. Bei der Funktion mit diesem Namen ist kein Ergebniswert eingetragen.
Lösung: Vervollständigen Sie die Syntax, sodass ein gültiges Objekt vorhanden ist. Siehe "Unterstützte ST-Syntax"
Beispiel:

Fehlerhafter CodeKorrekter CodeDetail zur Lösung

FUNCTION Simple

Simple := 1;

END_Function

FUNCTION Simple : INT

Simple := 1;

END_Function

Tragen Sie bei der Deklaration der →Funktion den Datentypen des Ergebniswerts ein, da ein Ergebniswert innerhalb der Funktion zugewiesen wird (wie im Beispiel angeführt).
Alternative: Löschen Sie die →Zuweisung des Ergebniswerts (Zeile Simple := 1; im Beispiel)

Fehlende POE oder Datentyp: 'Name'
Lösung: Deklarieren Sie die fehlende →POE (siehe Beispiel) oder den fehlenden →Datentyp. Alternative, falls die POE oder der Datentyp nicht benötigt werden: Löschen Sie das Element, das als fehlerhaft gekennzeichnet ist.
Beispiel:

Fehlerhafter CodeKorrekter Code

FUNCTION_BLOCK Control

VAR

fb : MyFB;

END_VAR

END_FUNCTION_BLOCK

FUNCTION_BLOCK Control

VAR

fb : MyFB;

END_VAR

END_FUNCTION_BLOCK

FUNCTION_BLOCK MyFB

END_FUNCTION_BLOCK

Unerwartetes Dateiende
Lösung: Vervollständigen Sie die Syntax, sodass ein gültiges Objekt vorhanden ist. Siehe "Unterstützte ST-Syntax"
Beispiele:

Fehlerhafter CodeKorrekter Code

PROGRAM test

VAR

Var1 : BOOL;

END_VAR

PROGRAM test

VAR

Var1 : BOOL;

END_VAR 

END_PROGRAM

FUNCTION_BLOCK Control

FUNCTION_BLOCK Control

END_FUNCTION_BLOCK

Bezeichner 'Name' bereits deklariert
Lösung: Vergeben Sie bei der Deklaration einen eindeutigen →IEC-Bezeichner als Namen, der noch nicht vergeben wurde.
Beispiele:

Fehlerhafter CodeKorrekter Code

PROGRAM test1

VAR

var1, var1 : INT;

END_VAR

END_PROGRAM  

PROGRAM test1

VAR 

var1, var2 : INT;

END_VAR

END_PROGRAM  

PROGRAM test2

END_PROGRAM 

PROGRAM test2

END_PROGRAM 

PROGRAM test2a

END_PROGRAM 

PROGRAM test2b

END_PROGRAM 

Wert außerhalb des gültigen Bereichs
Lösung: Tragen Sie einen kleineren Wert ein, sodass der Wert im gültigen Bereich liegt.
Beispiel:

Fehlerhafter CodeKorrekter CodeDetail zur Lösung

PROGRAM Test

VAR

Var1 : STRING[32768];

END_VAR

END_PROGRAM

PROGRAM Test

VAR

Var1 : STRING[200];

END_VAR

END_PROGRAM

Tragen Sie eine Länge < 32.768 für die STRING-Variable ein – siehe unter "Deklaration von STRING-Variablen (inkl. Zugriff)".

Typkonflikt: Bei der Typisierung des Ausdrucks ist ein Fehler aufgetreten
Lösung: Korrigieren Sie den fehlerhaften →Ausdruck, sodass er mit dem erforderlichen →Datentyp übereinstimmt. Alternative: Passen Sie den Datentyp entsprechend an.
Beispiele:

Fehlerhafter CodeKorrekter CodeDetail zur Lösung

PROGRAM Test

VAR

Var1 : SINT;

END_VAR

Var1 := 200;

END_PROGRAM

PROGRAM Test

VAR

Var1 : SINT;

END_VAR

Var1 := 100;

END_PROGRAM

Tragen Sie bei der →Zuweisung nur →Literale ein, die laut dem Datentyp bei der Deklaration möglich sind und nicht außerhalb der Unter-/Obergrenze liegen. Siehe "Unterstützte Datentypen" für Unter- und Obergrenzen der Datentypen.

PROGRAM Test

VAR

Var1 : SINT;

END_VAR

Var1 := DINT#100;

END_PROGRAM

PROGRAM Test

VAR

Var1 : SINT;

END_VAR

Var1 := SINT#100;

END_PROGRAM


PROGRAM Test

VAR

Var1 : SINT;

END_VAR

Var1 := DINT#100;

END_PROGRAM

PROGRAM Test

VAR

Var1 : DINT;

END_VAR

Var1 := SINT#100;

END_PROGRAM

Alternative: Tragen Sie eine Typangabe laut eines Datentyps ein, für die eine implizite Konvertierung laut →IEC-Norm erlaubt ist.
Die IEC-Norm erlaubt eine implizite Konvertierung von SINT nach DINT, aber nicht von DINT nach SINT.

PROGRAM Test

VAR

Var1 : SINT;

Var2 : DINT;

END_VAR

Var1:= Var2;

END_PROGRAM

PROGRAM Test

VAR

Var1 : SINT;

Var2 : DINT;

END_VAR

Var2:= Var1;

END_PROGRAM


PROGRAM Test

VAR

Var1 : BOOL;

END_VAR

Var1 := 2;

END_PROGRAM

PROGRAM Test

VAR

Var1 : BOOL;

END_VAR

Var1 := 0;

END_PROGRAM


PROGRAM Test

VAR

Var1 : BOOL := 7;

END_VAR

END_PROGRAM

PROGRAM Test

 VAR

 Var1 : BOOL := 1;

 END_VAR

END_PROGRAM


PROGRAM Test

VAR

RVAR1 : REF_TO INT;

RVAR2 : REF_TO DINT;

VAR1 : INT;

VAR2 : DINT;

END_VAR

RVAR1 := 0;

RVAR1 := REF(VAR2);

END_PROGRAM 

PROGRAM Test

VAR

RVAR1 : REF_TO INT;

RVAR2 : REF_TO DINT;

VAR1 : INT;

VAR2 : DINT;

END_VAR

RVAR1 := NULL;

RVAR1 := REF(VAR1);

END_PROGRAM

Details zur Verwendung von Referenz-Variablen finden Sie unter "Deklaration von Referenz-Variablen (inkl. Zuweisungen darauf)".

Parameter wurde bereits zugewiesen
Lösung: Tragen Sie beim formalen →Aufruf jede →Eingangsvariable und →Ausgangsvariable nur einmal ein. Falls Sie Ihre Kenntnisse zum formalen Aufruf auffrischen wollen, lesen Sie den FAQ-Artikel "Wann soll ich einen formalen Aufruf verwenden? Wann einen nicht-formalen Aufruf?".
Beispiel:

Fehlerhafter CodeKorrekter Code

FUNCTION_BLOCK Control

VAR_INPUT

IN1 : INT;

IN2 : INT;

T1 : TIME;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Motor

VAR

Inst1 : Control;

END_VAR

Inst1 (IN1:=10,IN1 := 20,T1 := T#3ms);

END_PROGRAM

FUNCTION_BLOCK Control

VAR_INPUT

IN1 : INT;

IN2 : INT;

T1 : TIME;

END_VAR

END_FUNCTION_BLOCK 

PROGRAM Motor

VAR

Inst1 : Control;

END_VAR

Inst1 (IN1:=10,IN2 := 20,T1 := T#3ms);

END_PROGRAM

Zu viele Parameter
Lösung: Tragen Sie beim nicht-formalen →Aufruf genau dieselbe Anzahl an Eingangsvariablen ein, wie in der Deklaration angegebenFalls Sie Ihre Kenntnisse zum nicht-formalen Aufruf auffrischen wollen, lesen Sie den FAQ-Artikel "Wann soll ich einen formalen Aufruf verwenden? Wann einen nicht-formalen Aufruf?".
Beispiel:

Fehlerhafter CodeKorrekter Code

FUNCTION_BLOCK Control

VAR_INPUT

IN1 : INT;

IN2 : INT;

T1 : TIME;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Motor

VAR

Inst1 : Control;

END_VAR

Inst1 (10,20,30,T#3ms);

END_PROGRAM

FUNCTION_BLOCK Control

VAR_INPUT

IN1 : INT;

IN2 : INT;

T1 : TIME;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Motor

VAR

Inst1 : Control;

END_VAR

Inst1 (10,20,T#3ms);

END_PROGRAM

Zu wenig Parameter
Lösung, falls es sich um einen Anwenderbaustein handelt: Tragen Sie beim nicht-formalen →Aufruf genau dieselbe Anzahl an Eingangsvariablen ein, wie in der Deklaration angegebenFalls Sie Ihre Kenntnisse zum nicht-formalen Aufruf auffrischen wollen, lesen Sie den FAQ-Artikel "Wann soll ich einen formalen Aufruf verwenden? Wann einen nicht-formalen Aufruf?".
Lösung, falls es sich um einen ausziehbaren Systembaustein handelt: Tragen Sie Werte für jene Eingangsvariablen ein, die für die korrekte Funktionalität des Systembausteins erforderlich sind. Üblicherweise werden Werte für die ersten 2 Eingänge benötigt. 
Beispiel:

Fehlerhafter CodeKorrekter CodeDetail zur Lösung

FUNCTION_BLOCK Control

VAR_INPUT

IN1 : INT;

IN2 : INT;

T1 : TIME;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Motor

VAR

Inst1 : Control;

END_VAR

Inst1(10,T#3ms);

END_PROGRAM

FUNCTION_BLOCK Control

VAR_INPUT

IN1 : INT;

IN2 : INT;

T1 : TIME;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Motor

VAR

Inst1 : Control;

END_VAR

Inst1(10,20,T#3ms);

END_PROGRAM

Alternative: Ersetzen Sie den nicht-formalen Aufruf durch einen formalen Aufruf. In einem formalen Aufruf dürfen Sie Eingänge/Ausgänge in der Parameterliste weglassen.
Beispiel für formalen Aufruf: Inst2(IN1:=10,T1:=T#3ms);

Informieren Sie sich z.B. unter "Aufruf der Funktion in ST" über das Verhalten von weggelassenen Eingangsvariablen.

AND(FALSE); 

AND(FALSE,TRUE);

Alternative: Ersetzen Sie den nicht-formalen Aufruf durch einen formalen Aufruf. In einem formalen Aufruf dürfen Sie Eingänge/Ausgänge in der Parameterliste weglassen.
Beispiel für formalen Aufruf: AND(IN2:=TRUE);

Informieren Sie sich z.B. unter "Aufruf der Funktion in ST" über das Verhalten von weggelassenen Eingangsvariablen.

Bibliothek ''Name'' wurde nicht gefunden.
oder
"Name" ist keine erlaubte Einstellung für einen Bibliotheksbaustein.
oder
Einstellung "Name" muss vom Datentyp STRING sein.
oder
Element "Name" der Einstellung "Name" ist nicht zulässig.
Lösung:  Kontaktieren Sie den Hersteller der verwendeten Bibliothek oder des verwendeten Baustein. Übermitteln Sie dabei Ihre Kontaktinformationen, die in  logi.CAD 3  erfolgten Schritte und alle Meldungen, die in der Sicht Fehlerprotokoll und/oder der Sicht Fehler angezeigt werden.
Diese Meldung weist darauf hin, dass die Systemfunktionen oder Systemfunktionsbausteine von  logi.CAD 3 (z.B. die IEC-Bausteine) einen inkorrekten Verweis auf die Systembibliothek oder eine inkorrekte Einstellung enthält. Üblicherweise tritt diese Meldung bei Verwendung der Bausteine gemäß der Benutzerdokumentation nicht auf. 

Bibliothek ''Name'' existiert nicht
Lösung: Löschen Sie die Angabe mit der fehlerhaften Bibliothek im Code oder ersetzen Sie die Angabe durch eine korrekte Syntax.
Beispiel:

Fehlerhafter CodeKorrekter CodeDetail zur Lösung

{Library:=MyLib}

FUNCTION Simple

END_FUNCTION


FUNCTION Simple

END_FUNCTION

Diese Meldung weist darauf hin, dass der Code in Ihren ST-Objekten bzw. SPS-Objekten einen inkorrekten Verweis auf die Systembibliothek enthält. Üblicherweise benötigen Sie keinen Verweis auf die Systembibliothek in Ihrem Code. 

Name der Variable ist mit jener der Funktion identisch
Lösung: Vergeben Sie bei der Deklaration einen eindeutigen →IEC-Bezeichner als Namen, der noch nicht vergeben wurde.
Beispiel:

Fehlerhafter CodeKorrekter Code

FUNCTION MyFun

VAR

MyFun : INT;

END_VAR

END_FUNCTION

FUNCTION MyFun

VAR 

MyVar : INT;

END_VAR

END_FUNCTION

Ausdruck hat keinen Ergebniswert
Lösung: Tragen Sie einen →Datentyp bei der Deklaration des Datentyps ein und/oder weisen Sie der Funktion einen Ergebniswert zu.
Beispiele:

Fehlerhafter CodeKorrekter CodeDetail zur Lösung

PROGRAM Test

VAR RC:INT; END_VAR

RC:=call();

END_PROGRAM

FUNCTION call

END_FUNCTION

PROGRAM Test

VAR RC:INT; END_VAR

RC:=call();

END_PROGRAM

FUNCTION call:INT

END_FUNCTION

Tragen Sie einen Datentyp bei der Deklaration der Funktion ein.
Alternative: Löschen Sie den Ausdruck auf der linken Seite der →Zuweisung: Statt Zuweisung RC:=call(); wäre nur →Aufruf call(); eingetragen.


PROGRAM Test

if FunTest() = 1 then

A := 5;

end_if;

END_PROGRAM

FUNCTION FunTest

END_FUNCTION

PROGRAM Test

if FunTest() = 1 then

A := 5;

end_if;

END_PROGRAM

FUNCTION FunTest : INT 

FunTest := 1;

END_FUNCTION

Tragen Sie einen einen Datentyp bei der Deklaration der Funktion ein und weisen Sie der Funktion einen Ergebniswert zu.

Variable "Name" ist als konstant definiert.
Lösung 1: Löschen Sie in der Deklaration der →Variable das Schlüsselwort CONSTANT (siehe Beispiel). Alternative: Löschen Sie die →Zuweisung. 
Beispiel:

Fehlerhafter CodeKorrekter Code

PROGRAM Timer

VAR CONSTANT

var1 : INT;

END_VAR

var1 := 3;

END_PROGRAM

PROGRAM Timer

VAR

var1 : INT;

END_VAR

var1 := 3;

END_PROGRAM

Lösung 2, falls die Meldung für die Zuweisung auf einen Schrittmerker oder eine Schrittzeit ausgegeben wird: Korrigieren Sie die Zuweisung, sodass auf diese Eigenschaften nicht mehr geschrieben wird. 

Typ des Sprachelements kann nicht aufgelöst werden.

Lösung 1: Prüfen Sie, ob Sie den Fehler aufgrund von anderen Meldungen beseitigen können.
Lösung 2, falls nicht genügend Anhaltspunkte zum Beseitigen des Fehlers vorhanden sind
:  Kontaktieren Sie das Support-Team von  logi.cals . Übermitteln Sie dabei Ihre Kontaktinformationen, die in  logi.CAD 3  erfolgten Schritte und alle Meldungen, die in der Sicht Fehlerprotokollder Sicht Fehler und/oder der Sicht SPS Logging angezeigt werden.   Übermitteln Sie dabei auch den erstellten Code.

Variablen mit allgemeinen Datentypen können nicht initialisiert werden.
Diese Meldung gilt nur für Systembausteine.
Lösung: Statt des →allgemeinen Datentyps tragen Sie einen elementaren Datentyp ein (siehe "Unterstützte Datentypen").

Array-Index "Zahl" befindet sich außerhalb der Grenzen ["Zahl", "Zahl"].

Lösung: Tragen Sie einen →ARRAY-Index in der →Zuweisung ein, der innerhalb des Index-Unterbereichs liegt (siehe Beispiel). Alternative: Korrigieren Sie den Index-Unterbereich in der Deklaration des →ARRAY-Datentyps.
Beispiel:

Fehlerhafter CodeKorrekter Code

TYPE

MyType: ARRAY [1..8] OF INT;

END_TYPE

PROGRAM Test

VAR

a1 : MyType;

END_VAR

a1[-6] := 1;

END_PROGRAM

TYPE

MyType: ARRAY [1..8] OF INT;

END_TYPE

PROGRAM Test

VAR

a1 : MyType;

END_VAR

a1[6] := 1;

END_PROGRAM

Ungültiger Bereich für Arrays
Lösung: Korrigieren Sie den Index-Unterbereich. Siehe "Deklaration eines ARRAY-Datentyps in ST" für die Vorgaben zum Index-Unterbereich.
Beispiel:
 

Fehlerhafter CodeKorrekter Code

TYPE

MyType: ARRAY [3..0] OF INT;

END_TYPE

TYPE

MyType: ARRAY [0..3] OF INT;

END_TYPE  

Index-Zugriff für die Variable "Name" ist in dieser Form nicht zulässig
Lösung: Korrigieren Sie die →Zuweisung, sodass diese zur Deklaration passt (siehe Beispiel). Alternative: Korrigieren Sie die Deklaration, sodass eine entsprechende ARRAY- bzw. STRING-Variable vorhanden ist. Informationen dazu finden Sie unter "Deklaration eines ARRAY-Datentyps in ST" bzw. "Deklaration von STRING-Variablen (inkl. Zugriff)".
Beispiel:

Fehlerhafter CodeKorrekter Code

PROGRAM Text

VAR

a1 : REAL;

END_VAR

a1[0] := 1.5;

END_PROGRAM

PROGRAM Text

VAR

a1 : REAL;

END_VAR

a1 := 1.5;

END_PROGRAM

Funktionen dürfen keine Funktionsbausteine als Ergebnis liefern.
Lösung: Tragen Sie bei der Deklaration der →Funktion einen unterstützten Datentypen ein (statt des Funktionsbausteins), falls ein Ergebniswert innerhalb einer Funktion zugewiesen wird.
Beispiel: 

Fehlerhafter CodeKorrekter Code

FUNCTION test : TON

END_FUNCTION

FUNCTION test : INT

END_FUNCTION

"Name" darf nicht verwendet werden, da es ein reserviertes Schlüsselwort ist.
Lösung: Korrigieren Sie den fehlerhaften Ausdruck im Code, sodass er kein Schlüsselwort mehr ist. Eine Liste der nicht zu verwendenden Schlüsselwörter finden Sie unter "Reservierte Schlüsselwörter in ST".

Zuweisung auf Eingangsvariable "name" ist nicht erlaubt.
Lösung: Korrigieren Sie den Code so, dass es sich um keine →Eingangsvariable mehr handelt (siehe Beispiel) oder die Eingangsvariable nicht mehr beschrieben wird.
Beispiel: 

Fehlerhafter CodeKorrekter Code

FUNCTION Test

VAR_INPUT

R1 : INT;

END_VAR

R1 := 20;

END_FUNCTION

FUNCTION Test

VAR_OUTPUT

R1 : INT;

END_VAR

R1 := 20;

END_FUNCTION

Nur numerische Datentypen im Kontext des mathematischen Operators Symbol zulässig.
Lösung: Korrigieren Sie den Code so, dass die →Variablen/→Literale im fehlerhaften Ausdruck einen →numerischen Datentyp verwenden (siehe Beispiel). Alternative: Verwenden Sie keinen mathematischen Operator oder konvertieren Sie die Variablen/Literale explizit mit Hilfe einer Convert-Funktion in einen numerischen Wert.
Beispiel: 

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR

X, B : BYTE;

END_VAR

X := X ** B;

END_PROGRAM

PROGRAM Test

VAR

X, B : INT;

END_VAR

X := X ** B;

END_PROGRAM

Nur numerische Datentypen oder Zeittypen im Kontext des mathematischen Operators Symbol zulässig.
Lösung: Korrigieren Sie den Code so, dass die Variablen/Literale im fehlerhaften Ausdruck einen numerischen Datentyp oder den Datentyp TIME verwenden (siehe Beispiel). Alternative: Verwenden Sie keinen mathematischen Operator oder konvertieren Sie die Variablen/Literale explizit mit Hilfe einer Convert-Funktion in einen numerischen Wert oder einen Zeitwert.
Beispiel: 

Fehlerhafter CodeKorrekter CodeDetail zur Lösung

PROGRAM Test

VAR

X, B : BYTE;

END_VAR

X := X + B;

END_PROGRAM

PROGRAM Test

VAR

X, B : TIME;

END_VAR

X := X + B;

END_PROGRAM

Beachten Sie die korrekte Kombination der →Literale/→Variablen für Multiplikation, Division, Addition und Subtraktion, sofern die Operation für Literale/Variablen vom Datentyp TIME durchgeführt werden soll. Mehr Informationen finden Sie unter: "Operatoren in ST"

Nur ganzzahlige Datentypen im Kontext des mathematischen Operators Symbol zulässig.
Lösung: Korrigieren Sie den Code so, dass die Variablen/Literale im fehlerhaften Ausdruck einen Datentyp verwenden, der dem →allgemeinen Datentyp ANY_INT zugehörig ist (siehe Beispiel). Alternative: Verwenden Sie keinen mathematischen Operator oder konvertieren Sie die Variablen/Literale explizit mit Hilfe einer Convert-Funktion in einen ganzzahligen Wert.
Beispiel: 

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR

X, B : BYTE;

END_VAR

X := X MOD B;

END_PROGRAM

PROGRAM Test

VAR

X, B : INT;

END_VAR

X := X MOD B;

END_PROGRAM

Nur Bitfolge-Datentypen im Kontext von booleschen Operatoren zulässig.
Lösung: Korrigieren Sie den Code so, dass die →Variablen/→Literale im fehlerhaften Ausdruck einen →Bitfolge-Datentyp verwenden (siehe Beispiel). Alternative: Verwenden Sie keinen booleschen Operator oder konvertieren Sie die Variablen/Literale explizit mit Hilfe einer Convert-Funktion in einen Bitfolge-Wert.
Beispiel: 

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR

X, A, B : INT;

END_VAR

IF A & B THEN

X := 0;

END_IF;

END_PROGRAM

PROGRAM Test

VAR

A, B : BOOL;

X : INT;

END_VAR

IF A & B THEN

X := 0;

END_IF;

END_PROGRAM

Bei Vergleichsoperatoren muss der Datentyp übereinstimmen oder implizit konvertierbar sein.
Lösung: Korrigieren Sie den Code so, dass die →Variablen/→Literale im fehlerhaften Ausdruck den gleichen →Datentyp verwenden (siehe Beispiel) oder Datentypen, die implizit konvertierbar sind. Alternative: Verwenden Sie keinen Operator für Vergleiche/Gleichheit/Ungleichheit oder konvertieren Sie die Variablen/Literale explizit mit Hilfe einer Convert-Funktion in das benötigte Datentyp-Format.
Beispiel: 

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR

X, A : INT;

B : SINT;

END_VAR

IF A > B THEN

X := 0;

END_IF;

END_PROGRAM

PROGRAM Test

VAR

X, A, B : INT;


END_VAR

IF A > B THEN

X := 0;

END_IF;

END_PROGRAM

String-Index "Zahl" befindet sich außerhalb der Grenzen ["Zahl", "Zahl"].
Lösung: Tragen Sie eine Position für die STRING-Variable in der →Zuweisung ein, die innerhalb der maximalen Länge liegt (siehe Beispiel). Alternative: Korrigieren Sie die maximale Länge in der Deklaration der STRING-Variable. Weitere Informationen finden Sie unter "Deklaration von STRING-Variablen (inkl. Zugriff)".
Beispiel:

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR

var1 : STRING[4];

END_VAR

var1[7] := 'A';

END_PROGRAM

PROGRAM Test

VAR

var1 : STRING[4];

END_VAR

var1[4] := 'A';

END_PROGRAM

Strings mit unbestimmter Länge sind nicht erlaubt.
Lösung: Tragen Sie eine maximale Länge für die STRING-Variable ein. Weitere Informationen finden Sie unter "Deklaration von STRING-Variablen (inkl. Zugriff)".
Beispiel:

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR

var1 : STRING;

END_VAR

END_PROGRAM

PROGRAM Test

VAR

var1 : STRING[4];

END_VAR

END_PROGRAM

Initialisierungswert 'Name' von Länge "Zahl" ist zu groß für STRING["Zahl"].
Lösung: Korrigieren Sie den Initialisierungswert, sodass er zur maximalen Länge passt (siehe Beispiel)Alternative: Korrigieren Sie die maximale Länge für die STRING-Variable, sodass der Initialisierungswert nicht mehr fehlerhaft ist. Weitere Informationen finden Sie unter "Deklaration von STRING-Variablen (inkl. Zugriff)".
Beispiel:

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR

var1 : STRING[2] := 'abc';

END_VAR

END_PROGRAM

PROGRAM Test

VAR

var1 : STRING[2] := 'ab';

END_VAR

END_PROGRAM

Referenzen auf Funktionsbaustein-Typen sind nicht zulässig.
Lösung: Verwenden Sie keine Referenzen für →Funktionsbaustein-Typen, sondern deklarieren Sie eine Funktionsbaustein-Instanz. Informationen über die möglichen Referenz-Deklarationen finden Sie unter "Deklaration von Referenz-Variablen (inkl. Zuweisungen darauf)".

Plattform "BuiltInPlc" ist hier nicht zulässig.
Lösung: Verwenden Sie am besten die Inhaltshilfe, um die gewünschten Plattformen für →C-Bausteine einzutragen. Informieren Sie sich im Abschnitt "C-Code und/oder C++-Code in die Anwendung integrieren", welche Punkte Sie beim Erstellen der C-Bausteine beachten müssen.

EN/ENO in REF() ist nicht zulässig.
Lösung: Entfernen Sie die Parameter zur Ausführungssteuerung EN und ENO innerhalb von REF(...). Informationen über mögliche Zuweisungen auf Referenzen finden Sie unter "Deklaration von Referenz-Variablen (inkl. Zuweisungen darauf)".

Die Zuweisung der Variable "Name" auf VAR_IN_OUT "Name" des Bausteins ist nicht zulässig. Grund: Es handelt sich um eine temporäre Variable in einem Funktionsbaustein oder eine Variable in einer Funktion, die keine externe Variable ist.
Lösung: Korrigieren Sie die Zuweisung entsprechend, sodass die Variable einer anderen Art zugewiesen wird. Siehe "→Variable" für eine Liste der möglichen Variablen-Arten (inkl. weiterführende Links).
Beispiel:

Fehlerhafter CodeKorrekter Code

FUNCTION_BLOCK MyFB

VAR_TEMP

Var1 : int;

END_VAR

VAR

myvar : int;

END_VAR

GET_BYTE_REF(IN:=Var1);

END_FUNCTION_BLOCK

FUNCTION_BLOCK MyFB

VAR

Var1 : int;

END_VAR

VAR

myvar : int;

END_VAR

GET_BYTE_REF(IN:=Var1);

END_FUNCTION_BLOCK

FUNCTION test1

VAR

inString : STRING[10];



resultRefToByte : REF_TO BYTE;

END_VAR

resultRefToByte := GET_BYTE_REF(IN := inString);

END_FUNCTION

FUNCTION test1

VAR_EXTERNAL

inString : STRING[10];

END_VAR

VAR

resultRefToByte : REF_TO BYTE;

END_VAR

resultRefToByte := GET_BYTE_REF(IN := inString);

END_FUNCTION

Die Zuweisung auf VAR_IN_OUT "Name" des Bausteins muss eine Variable sein, die nicht temporär ist.
Lösung: Korrigieren Sie die Zuweisung entsprechend, sodass eine entsprechende Variable zugewiesen wird.
Beispiel:

Fehlerhafter CodeKorrekter Code

FUNCTION MyFun : REF_TO BYTE




MyFun := GET_BYTE_REF(IN := 3+4);

END_FUNCTION

FUNCTION MyFun : REF_TO BYTE

VAR_EXTERNAL

Var1 : INT;

END_VAR

MyFun := GET_BYTE_REF(IN := Var1);

END_FUNCTION

FUNCTION_BLOCK Control_A

VAR_TEMP

Var1 : INT;

END_VAR

VAR

iControl : Control;

END_VAR

iControl(InOut1 := Var1);

END_FUNCTION_BLOCK

FUNCTION_BLOCK Control

VAR_IN_OUT

InOut1 : INT;

END_VAR

END_FUNCTION_BLOCK

FUNCTION_BLOCK Control_A

VAR

Var1 : INT;



iControl : Control;

END_VAR

iControl(InOut1 := Var1);

END_FUNCTION_BLOCK

FUNCTION_BLOCK Control

VAR_IN_OUT

InOut1 : INT;

END_VAR

END_FUNCTION_BLOCK

"Name" ist keine konstante Variabe.
Lösung: Korrigieren Sie die Marke in der CASE-Anweisung auf ein ganzzahliges →Literal oder eine →Variable, die als →konstanter Wert zur Laufzeit ausgewertet wird.
Beispiel:

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR

count: INT;

var1 : INT;

END_VAR

CASE count OF

var1 : count := count + 1;

END_CASE;

END_PROGRAM

PROGRAM Test

VAR

count: INT;

var1 : INT;

END_VAR

CASE count OF

1 : count := count + 1;

END_CASE;

END_PROGRAM

Ungültiger Bereich für Marke in CASE-Anweisung
Lösung: Korrigieren Sie die Marke in der CASE-Anweisung, sodass der Bereich korrekt eingetragen ist.
Beispiel:

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR

count: INT;

END_VAR

CASE count OF

4..1 : count := count + 1;

END_CASE;

END_PROGRAM

PROGRAM Test

VAR

count: INT;

END_VAR

CASE count OF

1..4 : count := count + 1;

END_CASE;

END_PROGRAM

RETAIN und NON_RETAIN ist für die gleiche Variablendeklaration nicht zulässig.
Lösung: Korrigieren Sie die Variablendeklaration (z.B. den Abschnitt VAR), sodass nur das Schlüsselwort RETAIN oder NON_RETAIN eingetragen ist. Die Deklaration mehrerer solcher Abschnitte ist zulässig. 
Beispiel:

Fehlerhafter CodeKorrekter Code

VAR RETAIN NON_RETAIN

var1: INT;

var2: INT;

END_VAR

VAR RETAIN

var1: INT;

END_VAR

VAR NON_RETAIN

var2: INT;

END_VAR

RETAIN ist für die Variablendeklaration in einer Funktion nicht zulässig.
Lösung: Löschen Sie das Schlüsselwort RETAIN in der Variablendeklaration (z.B. den Abschnitt VAR) innerhalb der Funktion. 
Beispiel:

Fehlerhafter CodeKorrekter Code

FUNCTION

VAR RETAIN

var1: INT;

END_VAR

END_FUNCTION

FUNCTION

VAR

var1: INT;

END_VAR

END_FUNCTION

NON_RETAIN ist für die Variablendeklaration in einer Funktion nicht zulässig.
Lösung: Löschen Sie das Schlüsselwort NON_RETAIN in der Variablendeklaration (z.B. den Abschnitt VAR) innerhalb der Funktion. 
Beispiel:

Fehlerhafter CodeKorrekter Code

FUNCTION

VAR NON_RETAIN

var1: INT;

END_VAR

END_FUNCTION

FUNCTION

VAR

var1: INT;

END_VAR

END_FUNCTION

Arrays von REF_TO sind nicht zulässig.
Lösung: Passen Sie die ARRAY-Deklaration so an, dass nur zulässige Konstrukte eingetragen sind

Rekursion gefunden: "Konstrukt"
Lösung: Passen Sie den ST-Code so an, dass keine Rekursion mehr vorhanden ist.
Beispiele:

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR

fb1 : MyFB;

END_VAR

END_PROGRAM

FUNCTION_BLOCK MyFB

VAR

fb1 : MyFB;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Test

VAR

fb1 : MyFB;

END_VAR

END_PROGRAM

FUNCTION_BLOCK MyFB

VAR

fb1 : MyFB1;

END_VAR

END_FUNCTION_BLOCK

FUNCTION_BLOCK MyFB1

END_FUNCTION_BLOCK

PROGRAM Test

VAR

fb1 : MyFB;

END_VAR

END_PROGRAM

FUNCTION_BLOCK MyFB

VAR

fb1 : MyFB;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Test

VAR

fb1 : MyFB;

END_VAR

END_PROGRAM

FUNCTION_BLOCK MyFB

VAR

fb1 : MyFB1;

END_VAR

END_FUNCTION_BLOCK

TYPE

Range : STRUCT

min : RangeS;

max : RangeS;

END_STRUCT;

RangeS : STRUCT

scaleMin : Range;

scaleMax : Range;

END_STRUCT;

END_TYPE

TYPE

Range : STRUCT

min : INT;

max : INT;

END_STRUCT;

RangeS : STRUCT

scaleMin : Range;

scaleMax : Range;

END_STRUCT;

END_TYPE

EXIT oder CONTINUE sind nur in den Wiederholungsanweisungen FOR, WHILE und REPEAT zulässig.
Lösung: Verwenden Sie die EXIT- und CONTINUE-Anweisungen nur in den Wiederholungsanweisungen FOR, WHILE oder REPEAT.

Weniger Werte in der Initialisierungsliste als Array-Elemente vorhanden. Die restlichen Elemente werden mit dem Standardwert initialisiert.
Lösung: Passen Sie die Initialisierungsliste oder die ARRAY-Elemente so an, dass die Anzahl übereinstimmt (Details zu ARRAY-Elemente: siehe "Deklaration eines ARRAY-Datentyps in ST"). Alternative: Sie dürfen diese Meldung ignorieren, da es sich um eine Warnung handelt.

Mehr Werte in der Initialisierungsliste als Array-Elemente vorhanden. 
Lösung: Passen Sie die Initialisierungsliste oder die ARRAY-Elemente so an, dass die Anzahl übereinstimmt (Details zu ARRAY-Elemente: siehe "Deklaration eines ARRAY-Datentyps in ST").

Deklaration einer Funktionsbaustein-Instanz ist an dieser Stelle nicht zulässig.
Lösung: Deklarieren Sie eine Funktionsbaustein-Instanz innerhalb von VAR ... END_VAR. Details: siehe "Deklaration von internen Variablen und Funktionsbaustein-Instanzen in ST"
 

Deklaration einer Funktionsbaustein-Instanz ist in einer Variablendeklaration mit CONSTANT nicht zulässig.
Lösung: Deklarieren Sie eine Funktionsbaustein-Instanz innerhalb von VAR ... END_VAR, die das Schlüsselwort CONSTANT nicht enthält. Es sind mehrere Abschnitte VAR ... END_VAR zulässig. Details: siehe "Deklaration von internen Variablen und Funktionsbaustein-Instanzen in ST"

Zuweisung auf Ausgangsvariable "name" ist nicht erlaubt.
Lösung: Löschen Sie die markierte →Zuweisung auf die →Ausgangsvariable der →Funktionsbaustein-Instanz. Alternative: Ändern Sie die Zuweisung so, dass nicht mehr auf eine Ausgangsvariable einer Funktionbaustein-Instanz zugewiesen wird.
Beispiel: 

Fehlerhafter CodeKorrekter Code

PROGRAM test

VAR

MyInst : MyType;

B : REAL;

END_VAR

MyInst.Out := B;

END_PROGRAM

FUNCTION_BLOCK MyType

VAR_OUTPUT

Out : REAL;

END_VAR

END_FUNCTION_BLOCK

PROGRAM test

VAR

MyInst : MyType;

B : REAL;

END_VAR


END_PROGRAM

FUNCTION_BLOCK MyType

VAR_OUTPUT

Out : REAL;

END_VAR

END_FUNCTION_BLOCK

Ungültiges Datentyp-Literal.
Lösung: Ändern Sie das →Literal so, dass es für den →Datentyp zulässig ist.
Beispiel: 

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR

test : WORD;

END_VAR

test := WORD#-1;

END_PROGRAM

PROGRAM Test

VAR

test : WORD;

END_VAR

test := WORD#1;

END_PROGRAM

Aufruf nicht zulässig, da die Funktionsbaustein-Instanz als Eingangsvariable deklariert ist.
Lösung: Löschen Sie den →Aufruf. Alternative: Deklarieren Sie die →Funktionsbaustein-Instanz als lokale Variable (siehe Beispiel).
Beispiel:
 

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR_INPUT

myFB: FB;

END_VAR

myFB();

END_PROGRAM

FUNCTION_BLOCK FB

END_FUNCTION_BLOCK

PROGRAM Test

VAR

myFB: FB;

END_VAR

myFB();

END_PROGRAM

FUNCTION_BLOCK FB

END_FUNCTION_BLOCK

Strings mit Länge "0" sind nicht erlaubt.
Lösung: Tragen Sie eine Länge > 0 für die STRING-Variable ein. Weitere Informationen finden Sie unter "Deklaration von STRING-Variablen (inkl. Zugriff)".
Beispiel: 

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR

var1 : STRING[0];

END_VAR

END_PROGRAM

PROGRAM Test

VAR

var1 : STRING[1];

END_VAR

END_PROGRAM

VAR_IN_OUTs sind in "Name" deklariert. Informeller Aufruf ist nicht erlaubt.
Lösung: Verwenden Sie einen formalen →Aufruf, in dem Zuweisungen auf alle Ein-/Ausgangsvariablen angegeben sind  (siehe FAQ-Artikel "Wann soll ich einen formalen Aufruf verwenden? Wann einen nicht-formalen Aufruf? und Deklaration von Ein-/Ausgangsvariablen in ST" für weitere Informationen).
Beispiel:

Fehlerhafter CodeKorrekter Code

FUNCTION_BLOCK Control

VAR_INPUT

IN1 : INT;

END_VAR

VAR_IN_OUT

InOut1 : INT;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Motor

VAR

Var1 : INT;

Inst1 : Control;

END_VAR

Inst1(5);

END_PROGRAM

FUNCTION_BLOCK Control

VAR_INPUT

IN1 : INT;

END_VAR

VAR_IN_OUT

InOut1 : INT;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Motor

VAR

Var1 : INT;

Inst1 : Control;

END_VAR

Inst1(IN1 := 5, InOut1 := Var1);

END_PROGRAM

VAR_IN_OUTs sind in "Name" deklariert. Der Aufruf muss Zuweisungen mit ':=' auf alle VAR_IN_OUTs enthalten.
Lösung 1: Verwenden Sie einen formalen →Aufruf, in dem Zuweisungen auf alle Ein-/Ausgangsvariablen angegeben sind (siehe "Deklaration von Ein-/Ausgangsvariablen in ST" für weitere Informationen).
Lösung 2: Falls bereits ein formaler Aufruf verwendet wird, verwenden Sie den Zuweisungsoperator := für die Zuweisung auf Ein-/Ausgangsvariablen.

Beispiele:

Fehlerhafter CodeKorrekter Code

FUNCTION_BLOCK Control

VAR_INPUT

IN1 : INT;

END_VAR

VAR_IN_OUT

InOut1 : INT;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Motor

VAR

Var1 : INT;

Inst1 : Control;

END_VAR

Inst1(IN1 := 5);

END_PROGRAM

FUNCTION_BLOCK Control

VAR_INPUT

IN1 : INT;

END_VAR

VAR_IN_OUT

InOut1 : INT;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Motor

VAR

Var1 : INT;

Inst1 : Control;

END_VAR

Inst1(IN1 := 5, InOut1 := Var1);

END_PROGRAM

FUNCTION_BLOCK Control

VAR_IN_OUT

InOut1 : int;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Motor

VAR

Var1 : int;

Inst1 : Control;

END_VAR

Inst1(InOut1=>Var1);

END_PROGRAM

FUNCTION_BLOCK Control

VAR_IN_OUT

InOut1 : int;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Motor

VAR

Var1 : int;

Inst1 : Control;

END_VAR

Inst1(InOut1:=Var1, InOut1=>Var1);

END_PROGRAM

VAR_IN_OUT erfordert Ausdrücke, die auch auf der linken Seite des Zuweisungsoperators ':=' stehen könnten.
Lösung: Korrigieren Sie die Zuweisung für die →Ein-/Ausgangsvariable, und zwar den Ausdruck auf der rechten Seite des Zuweisungsoperators ":=" . Dort muss ein Ausdruck eingetragen sein, der auch auf der linken Seite des Zuweisungsoperators ":=" stehen könnte.
Beispiel:

Fehlerhafter CodeKorrekter Code

FUNCTION_BLOCK Control

VAR_INPUT

IN1 : INT;

END_VAR

VAR_IN_OUT

InOut1 : INT;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Motor

VAR

Var1 : INT;

Inst1 : Control;

END_VAR

Inst1(IN1 := 5, InOut1 := 10);

END_PROGRAM

FUNCTION_BLOCK Control

VAR_INPUT

IN1 : INT;

END_VAR

VAR_IN_OUT

InOut1 : INT;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Motor

VAR

Var1 : INT;

Inst1 : Control;

END_VAR

Inst1(IN1 := 5, InOut1 := Var1);

END_PROGRAM

REF_TO ist für VAR_IN_OUT-Variablen mit dem Datentyp 'ANY' nicht erlaubt.
Lösung: Korrigieren Sie den Aufruf des Bausteins mit der →Ein-/Ausgangsvariable vom →allgemeinen Datentyp ANY, sodass keine →Referenz mehr anliegt.

Eine VAR_IN_OUT-Variable darf nicht initialisiert werden.
Lösung: Löschen Sie den Initialisierungswert.
Beispiel:

Fehlerhafter CodeKorrekter Code

FUNCTION_BLOCK Test

VAR_IN_OUT

InOut1 : int;

END_VAR

VAR

Var1 : int;

END_VAR

END_FUNCTION_BLOCK

FUNCTION_BLOCK Control

VAR

Inst1 : Test := (InOut1 := 25, Var1:= 6);

END_VAR

END_FUNCTION_BLOCK

FUNCTION_BLOCK Test

VAR_IN_OUT

InOut1 : int;

END_VAR

VAR

Var1 : int;

END_VAR

END_FUNCTION_BLOCK

FUNCTION_BLOCK Control

VAR

Inst1 : Test := (Var1:= 6);

END_VAR

END_FUNCTION_BLOCK

"Name" muss auf eine Variable zugewiesen werden.
Lösung: Weisen Sie den Aufruf des Bausteins auf eine Variable zu.

Nur 3 Array-Dimensionen zulässig.
Lösung: Passen Sie der ARRAY-Deklaration an, sodass die vorgegebenen Einschränkungen eingehalten werden. Details: siehe "Deklaration eines ARRAY-Datentyps in ST". 

Parameter "Name" kann nicht mit mehrdimensionalen Arrays beschaltet werden.
Lösung: Beschalten Sie den genannten Parameter des Bausteins mit einem eindimensionalen →ARRAY-Datentypen.

"Name" kann nicht auf mehrdimensionale Arrays zugewiesen werden.
Lösung: Weisen Sie den genannten Baustein auf einen eindimensionalen →ARRAY-Datentypen zu.

Arrays mit variabler Länge werden nur für Systemfunktionen und Systemfunktionsbausteine unterstützt.
Lösung: Ersetzen Sie das Array von variabler Länge durch ein Array mit einem bestimmten Index-Unterbereich [x..y].
Beispiel:

Fehlerhafter CodeKorrekter Code

FUNCTION_BLOCK Control

VAR

Myarray1 : ARRAY [*, *] OF INT;

END_VAR

END_FUNCTION_BLOCK

FUNCTION_BLOCK Control

VAR

Myarray1 : ARRAY [1..10] OF INT;

END_VAR

END_FUNCTION_BLOCK

Arrays mit variabler Länge sind in einem anwenderdefinierten Datentyp nicht zulässig.
Lösung: Ersetzen Sie das Array von variabler Länge durch ein Array mit einem bestimmten Index-Unterbereich [x..y].
Beispiel:

Fehlerhafter CodeKorrekter Code

TYPE

MyStruct : STRUCT

element1 : ARRAY [*, *] OF INT;

END_STRUCT;

END_TYPE

TYPE

MyStruct : STRUCT

element1 : ARRAY [1..10] OF INT;

END_STRUCT;

END_TYPE

Funktionen, die ein Array mit variabler Länge liefern, dürfen nur auf der rechten Seite einer Zuweisungsanweisung vorkommen.
Lösung: Tragen Sie die Funktion ein, die ein Array mit variabler Länge liefert (z.B. ADD_2D_ARRAY-Baustein), nur auf der rechten Seite einer →Zuweisungsanweisung.
Beispiel:

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR

array1 : ARRAY [1..10, -5..5] OF LREAL;

array2 : ARRAY [-5..5, -5..5] OF LREAL;

arrayResult : ARRAY [1..20, 1..20] OF LREAL;

END_VAR

ADD_2D_ARRAY(A1 := array1, A2 := array2);

END_PROGRAM

PROGRAM Test

VAR

array1 : ARRAY [1..10, -5..5] OF LREAL;

array2 : ARRAY [-5..5, -5..5] OF LREAL;

arrayResult : ARRAY [1..20, 1..20] OF LREAL;

END_VAR

arrayResult := ADD_2D_ARRAY(A1 := array1, A2 := array2);

END_PROGRAM

Funktionsbaustein-Instanz wird mit inkompatiblen Typen verwendet (Instanz wurde auf "Typ" festgelegt).
Lösung: Verwenden Sie den in der Fehlermeldung angegebenen Datentyp für alle Aufrufe der →Funktionsbaustein-Instanz.
Beispiel:

Fehlerhafter Code
Korrekter Code

PROGRAM Test

VAR

maxHold : MAX_HOLD;

result1 : INT;

result2 : UINT;

END_VAR

maxHold(OUT => result1);

maxHold(OUT => result2);

END_PROGRAM

PROGRAM Test

VAR

maxHold : MAX_HOLD;

result1 : INT;

result2 : INT;

END_VAR

maxHold(OUT => result1);

maxHold(OUT => result2);

END_PROGRAM

Deklaration einer überladbaren Funktionsbaustein-Instanz ist an dieser Stelle nicht zulässig.
Lösung: Deklarieren Sie überladbare →Funktionsbaustein-Instanzen nur in als lokale Variablen (VAR).
Beispiel:

Fehlerhafter Code
Korrekter Code

PROGRAM Test

VAR_INPUT

maxHold : MAX_HOLD;

END_VAR

END_PROGRAM

PROGRAM Test

VAR

maxHold : MAX_HOLD;

END_VAR

END_PROGRAM

Referenzen auf konstante Variablen sind nicht zulässig.
Lösung: Verwenden Sie für →Referenzen keine als →konstant deklarierte Variablen.
Beispiel:

Fehlerhafter Code
Korrekter Code

PROGRAM Program1

VAR CONSTANT

VarInt : INT;

END_VAR

VAR

VarReference : REF_TO INT;

END_VAR

VarReference := REF(VarInt);

END_PROGRAM

PROGRAM Program1

VAR

VarInt : INT;

END_VAR

VAR

VarReference : REF_TO INT;

END_VAR

VarReference := REF(VarInt);

END_PROGRAM

Eine Struktur muss mindestens ein Element enthalten.
Lösung: Tragen Sie mindestens ein Strukturelement im →strukturierten Datentyp ein.
Beispiel:
 

Fehlerhafter CodeKorrekter Code

TYPE

MyStruct: STRUCT


END_STRUCT;

END_TYPE

TYPE

MyStruct: STRUCT

min : INT;

END_STRUCT;

END_TYPE

Formale und informale Parameterzuweisungen dürfen nicht gemeinsam verwendet werden.
Lösung: Verwenden Sie entweder einen formalen →Aufruf oder einen informalen Aufruf. Siehe FAQ-Artikel "Wann soll ich einen formalen Aufruf verwenden? Wann einen nicht-formalen Aufruf?" für Details über die Aufrufe.
Beispiel: 

Fehlerhafter CodeKorrekter Code

PROGRAM Test

AND(IN1:=1, 2);

END_PROGRAM

PROGRAM Test

AND(IN1:=1, IN2:=2);

END_PROGRAM

"Name" kann nicht auf Arrays von Strukturen zugewiesen werden.
Lösung: Verwenden Sie nur jene Datentypen, die für den genannten Baustein unterstützt werden. Informieren Sie sich im entsprechenden Artikel der Benutzerdokumentation.

Zuweisung vom Ausgangsparameter erfordert Ausdrücke, die auch auf der linken Seite des Zuweisungsoperators ':=' stehen könnten.
Lösung: Korrigieren Sie die Zuweisung vom Ausgangsparameter im Aufruf, und zwar den Ausdruck auf der rechten Seite des Zuweisungsoperators "=>" . Dort muss ein Ausdruck eingetragen sein, der auch auf der linken Seite des Zuweisungsoperators ":=" stehen könnte.
Beispiel:

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR

Var1 : REF_TO BOOL;

Var2: INT;

END_VAR

Var1 := GET_NAMED_MEMORY(NAME:='test', RC => TO_USINT(Var2));

END_PROGRAM

PROGRAM Test

VAR

Var1 : REF_TO BOOL;

Var2: INT;

Var3 : USINT;

END_VAR

Var1 := GET_NAMED_MEMORY(NAME:='test', RC => Var3);

Var2 := TO_USINT(Var3);

END_PROGRAM

"Name" ist keine Eingangsvariable.
Lösung: Korrigieren Sie die Zuweisung im Aufruf (siehe Beispiel). Alternative: Korrigieren Sie die Deklaration der Variable, sodass es sich um eine →Eingangsvariable handelt.
Beispiel:

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR

MyInst : test1;

testVar : INT;

END_VAR

MyInst(Var1 := testVar);

END_PROGRAM

FUNCTION_BLOCK test1

VAR_OUTPUT

Var1 : INT;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Test

VAR

MyInst : test1;

testVar : INT;

END_VAR

MyInst(Var1 => testVar);

END_PROGRAM

FUNCTION_BLOCK test1

VAR_OUTPUT

Var1 : INT;

END_VAR

END_FUNCTION_BLOCK

"Name" ist keine Ausgangsvariable.
Lösung: Korrigieren Sie die Zuweisung im Aufruf (siehe Beispiel). Alternative: Korrigieren Sie die Deklaration der Variable, sodass es sich um eine →Ausgangsvariable handelt.
Beispiel:

Fehlerhafter CodeKorrekter Code

PROGRAM Test

VAR

MyInst : test1;

Var2 : int;

result : int;

END_VAR

MyInst(IO1 := Var2, Var1 => result);

END_PROGRAM

FUNCTION_BLOCK test1

VAR_IN_OUT

IO1 : int;

END_VAR

VAR

Var1 : INT;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Test

VAR

MyInst : test1;

Var2 : int;

result : int;

END_VAR

MyInst(IO1 := Var2);

END_PROGRAM

FUNCTION_BLOCK test1

VAR_IN_OUT

IO1 : int;

END_VAR

VAR

Var1 : INT;

END_VAR

END_FUNCTION_BLOCK


Zugriff auf Variable "Name" ist in diesem Kontext nicht erlaubt.

Lösung: Korrigieren Sie die Deklaration der Variable. Alternative: Löschen Sie den Zugriff auf die Variable. Möglicherweise wird der Zugriff aber auch erlaubt, falls Sie jene Regeln deaktivieren, die die Zuweisungen auf/von Variablen erlauben.
Beispiel: →Ein-/Ausgangsvariablen sind außerhalb der POE, in der sie deklariert sind, nicht sichtbar. Im Aufruf der POE sind diese Ein-/Ausgangsvariablen sichtbar (siehe Alternative für korrekten Code).

Fehlerhafter CodeKorrekter CodeAlternative für korrekten Code

PROGRAM Test

VAR

MyInst : test1;

result : INT;

END_VAR

result := MyInst.Var1;

END_PROGRAM

FUNCTION_BLOCK test1

VAR_IN_OUT

Var1 : int;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Test

VAR

MyInst : test1;

result : INT;

END_VAR

result := MyInst.Var1;

END_PROGRAM

FUNCTION_BLOCK test1

VAR_INPUT

Var1 : int;

END_VAR

END_FUNCTION_BLOCK

PROGRAM Test

VAR

MyInst : test1;

result : INT;

END_VAR

Myinst(Var1:=result);

END_PROGRAM

FUNCTION_BLOCK test1

VAR_IN_OUT

Var1 : int;

END_VAR

END_FUNCTION_BLOCK

REF_TO oder ein Funktionsbaustein ist nicht als Basistyp für einen anwenderdefinierten Datentyp zulässig.
Lösung: Korrigieren Sie die Deklaration des →abgeleiteten Datentyps. Siehe "Deklaration eines direkt abgeleiteten Datentyps in ST" für die Einschränkungen bei abgeleiteten Datentypen.
Beispiel:

Fehlerhafter CodeKorrekter CodeDetail zur Lösung

TYPE

MyType1 : REF_TO INT;

END_TYPE

TYPE

MyType1 : INT;

END_TYPE


TYPE

MyType2 : TOF;

END_TYPE

TYPE

MyType2 : TOD;

END_TYPE

Annahme: Bei TOF handelt es sich um einen Tippfehler. Der benötigte Datentyp ist TOD (Abkürzung für TIME_OF_DAY).

Zu tiefe Verschachtelung bei "Name".
Lösung: Reduzieren Sie die Verschachtelungen der Datentypen. Siehe "Deklaration eines direkt abgeleiteten Datentyps in ST" für die Einschränkungen bei abgeleiteten Datentypen.

Variable "Name" wird nicht verwendet.
Lösung: Bei Bedarf korrigieren Sie den ST-Code – löschen Sie die Deklaration oder verwenden Sie die deklarierte Variable.

Ergebniswert der Funktion "Name" wird nicht zugewiesen.
Lösung: Bei Bedarf korrigieren Sie den ST-Code – löschen Sie den Ergebniswert der Funktion (den Datentyp bei deren Deklaration) oder weisen Sie den Ergebniswert innerhalb der Funktion zu.

AS-Elemente und ST-Anweisungen dürfen in dieser Form nicht kombiniert werden.
Lösung: Löschen Sie die AS-Elemente oder die ST-Anweisungen (z.B. Baustein-Aufrufe oder Zuweisungen), sodass diese nicht mehr auf der obersten Ebene innerhalb der POE kombiniert sind.

Mehrere Initial-Schritte sind im gleichen AS-Netzwerk vorhanden. Ein AS-Netzwerk muss jedoch exakt einen Initial-Schritt enthalten.
Lösung: Löschen Sie die überzähligen Initial-Schritte. Alternative: Korrigieren Sie die AS-Elemente so, dass mehrere AS-Netzwerke in der POE enthalten sind.

Schritt "Name" wird in einem AS-Netzwerk ohne Initial-Schritt verwendet. Ein AS-Netzwerk muss jedoch exakt einen Initial-Schritt enthalten.
Lösung: Erstellen Sie einen Initial-Schritt für das AS-Netzwerk. Alternative: Tragen Sie einen bereits bestehenden Initial-Schritt als Vorgänger- oder Nachschritt für eine Transition im AS-Netzwerk ein, in dem auch der genannte Schritt verwendet wird.

Transition "Name" wird in einem AS-Netzwerk ohne Initial-Schritt verwendet. Ein AS-Netzwerk muss jedoch exakt einen Initial-Schritt enthalten.
Lösung: Erstellen Sie einen Initial-Schritt für das AS-Netzwerk. Alternative: Tragen Sie einen bereits bestehenden Initial-Schritt als Vorgänger- oder Nachschritt für eine Transition im AS-Netzwerk ein, in dem die genannte Transition verwendet wird.

Die Priorität für Transitionen wird nicht ausgewertet.
Lösung: Löschen Sie die Angabe PRIORITY bei der Transition.

Nicht eindeutiger Bezeichner "Name". Gefunden in: POE1, POE2, ...
Lösung: Verwenden Sie nur eine USING-→Namespace-Anweisung (siehe Beispiel). Alternative: Korrigieren Sie die Deklarationen der POE in den Namenspaces, sodass sie eindeutige Bezeichner haben, und verwenden Sie die POE mit dem eindeutigen Namen (nach allen USING-Anweisungen).
Beispiel:

Fehlerhafter CodeKorrekter Code

PROGRAM Motor

using Standard;

using Alternate;

Test();

END_PROGRAM

NAMESPACE Standard

FUNCTION Test

END_FUNCTION

END_NAMESPACE

NAMESPACE Alternate

FUNCTION Test

END_FUNCTION

END_NAMESPACE

PROGRAM Motor

using Standard;


Test();

END_PROGRAM

NAMESPACE Standard

FUNCTION Test

END_FUNCTION

END_NAMESPACE

NAMESPACE Alternate

FUNCTION Test

END_FUNCTION

END_NAMESPACE

"Name" mehrmals inkludiert.
Lösung: Geben Sie unterschiedliche Namen in den INCLUDE_GLOBAL-Anweisungen an (siehe Beispiel). Alternative: Löschen Sie DuplikateInformationen zur Verwendung finden Sie unter "Deklaration von globalen Variablen in Global-Objekt und deren Verwendung in ST".
Beispiel:

Fehlerhafter CodeKorrekter Code

PROGRAM Motor

{INCLUDE_GLOBALS MyGVs1}

{INCLUDE_GLOBALS MyGVs1}

END_PROGRAM

PROGRAM Motor

{INCLUDE_GLOBALS MyGVs1}

{INCLUDE_GLOBALS MyGVs2}

END_PROGRAM

Ungültiger partieller Zugriff für "Name".
Lösung: Korrigieren Sie den partiellen Zugriff oder die Deklaration für die Variable, sodass es sich um einen korrekten partiellen Zugriff für die Variable handelt. Informationen zur Verwendung finden Sie unter "Partieller Zugriff auf ANY_BIT-Variablen".
Beispiel:

Fehlerhafter CodeKorrekter Code

FUNCTION_BLOCK Control_1

VAR

VarBo : BOOL;

VarBy : BYTE;

END_VAR

VarBo := VarBy.%X8;

END_FUNCTION_BLOCK

FUNCTION_BLOCK Control_1

VAR

VarBo : BOOL;

VarBy : BYTE;

END_VAR

VarBo := VarBy.%X7;

END_FUNCTION_BLOCK

FUNCTION_BLOCK Control_2

VAR

Var1 : BOOL;

END_VAR

Var1.%X1 := TRUE;

END_FUNCTION_BLOCK

FUNCTION_BLOCK Control_2

VAR

Var1 : BYTE;

END_VAR

Var1.%X1 := TRUE;

END_FUNCTION_BLOCK

Referenzen auf temporäre Variablen sind nicht zulässig.
Lösung: Korrigieren Sie die Zuweisung auf die Referenz-Variable oder die Deklaration für die Variable, sodass es sich um einen erlaubte Zuweisung handelt. Informationen über die möglichen Referenz-Deklarationen finden Sie unter "Deklaration von Referenz-Variablen (inkl. Zuweisungen darauf)".
Beispiel:

Fehlerhafter CodeKorrekter Code

FUNCTION_BLOCK Control

VAR_TEMP

Int1R : REF_TO INT;

Int1  : INT;

END_VAR

Int1R := REF(Int1);

END_FUNCTION_BLOCK

FUNCTION_BLOCK Control

VAR

Int1R : REF_TO INT;

Int1  : INT;

END_VAR

Int1R := REF(Int1);

END_FUNCTION_BLOCK

Referenzen auf Ein-/Ausgangsvariablen sind nicht als Initialisierungswert für Referenz-Variablen zulässig.
Lösung: Löschen Sie den Initialisierungswert für die deklarierte Referenz-Variable. Erstellen Sie eine Zuweisung, in der Sie die Referenz auf die Ein-/Ausgangsvariable zuweisen.
Beispiel:

Fehlerhafter CodeKorrekter Code

FUNCTION_BLOCK Control

VAR_IN_OUT

IO1 : INT;

END_VAR

VAR

Var1 : REF_TO INT := REF(IO1);

END_VAR

END_FUNCTION_BLOCK

FUNCTION_BLOCK Control

VAR_IN_OUT

IO1 : INT;

END_VAR

VAR

Var1 : REF_TO INT;

END_VAR

Var1 := REF(IO1);

END_FUNCTION_BLOCK

Bezeichner ist um Zahl Zeichen zu lang.
Lösung: Verkürzen Sie den Bezeichner. Ein Bezeichner darf nur bis zu 127 Zeichen lang sein.

Referenzen DMA-Variablen sind nicht zulässig.
Lösung: Verwenden Sie keine globale Variablen mit dem Attribut DMA für Zuweisungen auf Variablen, die mit REF_TO oder im Abschnitt VAR_IN_OUT deklariert sind.

Zuweisung auf benannten Wert "Name" ist nicht erlaubt.
Lösung: Korrigieren Sie die Zuweisung, sodass der benannte Wert nicht mehr auf der linken Seite des Zuweisungsoperator ":=" steht.
Beispiel:

Fehlerhafter CodeKorrekter Code

TYPE

Colors : INT (Red := 1);

END_TYPE

FUNCTION_BLOCK Control

VAR

Var1 : INT;

END_VAR

Red := 1;

END_FUNCTION_BLOCK

TYPE

Colors : INT (Red := 1);

END_TYPE

FUNCTION_BLOCK Control

VAR

Var1 : INT;

END_VAR

Var1 := Red;

END_FUNCTION_BLOCK

Die Verwendung von "EN" ist hier nicht erlaubt. Es sind nur Zuweisungen auf "EN" im Aufruf eines Bausteins möglich.
Lösung: Korrigieren Sie die Verwendung von EN.
Beispiel:

Fehlerhafter CodeKorrekter Code

FUNCTION_BLOCK Control

VAR

Var1 : bool;

END_VAR

Var1 := EN;

END_FUNCTION_BLOCK

PROGRAM Motor1

VAR

iControl : Control;

END_VAR

iControl(EN := true);

END_PROGRAM

FUNCTION_BLOCK Control

END_FUNCTION_BLOCK

Eigenschaft "Name" ist mehrfach definiert
Lösung: Korrigieren Sie den Code, sodass die genannte Eigenschaft nur einmal definiert ist. 

Nicht unterstützter Ausdruck in der Parameterliste dieses Aufrufs.
Lösung: Korrigieren Sie die Parameterliste des →Aufrufs, indem Sie die Zuweisungen mit den fehlerhaft markierten Ausdrucken löschen. Bei Bedarf deklarieren und initialisieren Sie eine oder mehrere Hilfsvariablen und verwenden Sie diese Hilfsvariablen in der Parameterliste des Aufrufs.
Beispiele:

Fehlerhafter CodeKorrekter Code

FUNCTION_BLOCK Control

VAR

inputString1 : STRING[4];

END_VAR

Simple(stringArray[1] := inputString1);

END_FUNCTION_BLOCK

FUNCTION Simple

VAR_IN_OUT

stringArray : ARRAY [1..3] OF STRING[4];

END_VAR

END_FUNCTION

FUNCTION_BLOCK Control

VAR

Var1 : ARRAY [1..3] OF STRING[4];

END_VAR

Simple(stringArray := Var1);

END_FUNCTION_BLOCK

FUNCTION Simple

VAR_IN_OUT

stringArray : ARRAY [1..3] OF STRING[4];

END_VAR

END_FUNCTION

FUNCTION_BLOCK Control

VAR

inputString1 : STRING[4];

iTest : Test01;

END_VAR

iTest(stringArray^[1] := inputString1);

END_FUNCTION_BLOCK

FUNCTION_BLOCK Test01

VAR_INPUT

stringArray : REF_TO ARRAY [1..3] OF STRING[4];

END_VAR

END_FUNCTION_BLOCK

FUNCTION_BLOCK Control

VAR

Var1 : ARRAY [1..3] OF STRING[4];

iTest : Test01;

END_VAR

iTest(stringArray := REF(Var1));

END_FUNCTION_BLOCK

FUNCTION_BLOCK Test01

VAR_INPUT

stringArray : REF_TO ARRAY [1..3] OF STRING[4];

END_VAR

END_FUNCTION_BLOCK

Begründung ist um Zahl Zeichen zu lang.
Lösung: Verkürzen Sie die Begründung. Sie darf nur bis zu 255 Zeichen lang sein.

Der Basis-Datentyp unterstützt keine Angabe der Bitgröße.
Lösung: Löschen Sie das Attribut SIZE, das für den Datentyp angegeben ist. Alternative: Ändern Sie den Basis-Datentyp auf einen der Datentypen, für die das Attribut SIZE erlaubt ist. Details: siehe "Deklaration eines direkt abgeleiteten Datentyps in ST"

Die Angabe der Bitgröße ist außerhalb des erlaubten Bereichs des Basis-Datentyps.
Lösung: Passen Sie die Angabe für das Attribut SIZE an, sodass die Angabe in jenem Bereich liegt, der für den Basis-Datentyp erlaubt ist. Details: siehe "Deklaration eines direkt abgeleiteten Datentyps in ST"

Ungültiger Index-Unterbereich für ein Array: Der Datentyp "Name" ist für die Array-Grenze "Name" nicht zulässig.
Lösung: Korrigieren Sie den Basis-Datentyp beim Datentyp mit den benannten Werten. Details: siehe "Benannte Werte als Array-Grenzen verwenden"
Beispiel:

Fehlerhafter CodeKorrekter Code

TYPE

myType : ARRAY [Red..Green] OF INT;

Colors3 : REAL(Red := 1.0, Green := 100.0);

END_TYPE

TYPE

myType : ARRAY [Red..Green] OF INT;

Colors3 : DINT(Red := 1, Green := 100);

END_TYPE

Ungültiger Index-Unterbereich für ein Array: Der verwendete Wert (entspricht dem Dezimalwert "Wert") ist als Array-Grenze "Name" nicht zulässig.
Lösung: Korrigieren Sie den entsprechenden Wert beim Datentyp mit den benannten Werten. Details: siehe "Benannte Werte als Array-Grenzen verwenden"
Beispiel:

Fehlerhafter CodeKorrekter Code

TYPE

myType : ARRAY [Red..Green] OF INT;

Colors3 : ULINT(Red := 16#000000000, Green := 16#100000010);

END_TYPE

TYPE

myType : ARRAY [Red..Green] OF INT;

Colors3 : ULINT(Red := 16#000000000, Green := 16#000000064);

END_TYPE

Quick-Info-Daten für einige Anmerkungen konnten nicht geladen werden.
Für eine Aufgabe (auch Task genannt) wird ein Symbol im Rand links vom Code angezeigt. Dafür kann keine Quick-Info (auch "Tooltip" oder "Hover-Text" genannt) angezeigt werden.
Lösung: Bewegen Sie den Mauszeiger auf das Symbol für die Aufgabe im Rand rechts vom Code. Dort wird die Quick-Info angezeigt.

Der Zugriffsbereich wird nur für Bibliothekselemente ausgewertet.
Lösung: Suchen Sie nach der Anweisung { AccessLevel := ...}. Falls die Anweisung in einer anwenderdefinierten POE im Projekt (also nicht in einer Bibliothek) enthalten ist, löschen Sie diese Anweisung.
Hinweis:  Die Anweisung { AccessLevel := ...} wird automatisch von logi.CAD 3  für eine POE in einer Bibliothek erzeugt, da die POE in einer Bibliothekskonfiguration angegeben ist.

Die Deklaration einer Funktionsbaustein-Instanz ist aufgrund von "{noCodeGeneration}" nicht zulässig.
Lösung: Löschen Sie die Deklaration der Funktionsbaustein-Instanz aus dem Abschnitt mit der Deklaration der internen Variablen (= den Instanzparametern). Alternative: Löschen Sie das genannte →Pragma aus dem Abschnitt.

Ein Strukturelement des Datentyps "Name" verwendet einen Funktionsbaustein als Typ. Diese Verwendung ist aber aufgrund von "{noCodeGeneration}" nicht zulässig.
Lösung: Löschen Sie den verwendeten Funktionsbaustein aus dem →strukturierten Datentyp. Alternative: Löschen Sie das genannte Pragma aus dem Abschnitt mit der Deklaration der internen Variablen.

Die Variable "Name" darf aufgrund von "{noCodeGeneration}" nicht verwendet werden.
Lösung: Löschen Sie die Variable aus dem ST-Code (z.B. aus einer →Zuweisung). Alternative: Löschen Sie das genannte Pragma aus dem Abschnitt mit der Deklaration der internen Variablen.

In einer Funktion ist die Verwendung von "{noCodeGeneration}" nicht zulässig. oder
In einer Funktion ist die Verwendung von "{instanceParam}" nicht zulässig.
oder
Deklaration einer Funktionsbaustein-Instanz ist an dieser Stelle aufgrund von "{instanceParam}" nicht zulässig.
oder
REF_TO ist an dieser Stelle aufgrund von "{instanceParam}" nicht zulässig.

Lösung: Löschen Sie das genannte Pragma aus dem Abschnitt mit der entsprechenden Deklaration.

Optimalerweise wird "{noCodeGeneration}" zusammen mit "{instanceParam}" verwendet.
Lösung: Tragen Sie beide Pragmas in den Abschnitt mit der Deklaration der internen Variablen ein.

Die Instanzparameter referenzieren die ungültige Variable "Name".
Lösung: Korrigieren Sie die Variable, die nach @RELATES_TO in den Instanzparametern eingetragen ist. sodass es sich nicht mehr um eine ungültige Variable handelt. Ungültige Variablen sind:

"@RELATES_TO" darf nur für Instanzparameter angegeben werden. Das Pragma "{instanceParam}" wird wiederum für solche Instanzparameter benötigt.
Lösung: Löschen Sie das Pragma { @RELATES_TO := name;} für die Variable. Alternative: Fügen Sie das Pragma {instanceParam} im Abschnitt mit der Deklaration der internen Variablen hinzu, sodass die Variablen im Abschnitt zu Instanzparametern werden.

Die Variable "Name" darf nicht in verschiedenen Pragmas "@RELATES_TO" verwendet werden.
Lösung: Korrigieren Sie die Variable, die nach @RELATES_TO in den Instanzparametern eingetragen ist, sodass eine andere Variable verwendet wird.

Nicht zulässiger Datentyp "Name" bei Instanzparameter "Name". Nur elementare oder strukturierte Datentypen sind zulässig.
Lösung: Korrigieren Sie den →Datentyp des genannten Instanzparameters, sodass es sich dabei entweder um einen elementaren oder →strukturierten Datentyp handelt.

Fehlerhaftes Global-Objekt "Name".
Lösung: Beheben Sie die Fehler im Global-Objekt. Informationen zum Inhalt des Global-Objekts finden Sie unter "Deklaration von globalen Variablen in Global-Objekt und deren Verwendung in ST".

VAR_IN_OUT vom Datentyp "STRING" erfordert die gleiche oder größere String-Länge.
Lösung: Tragen Sie die gleiche oder eine größere Länge für die andere STRING-Variable ein.
Beispiel:

Fehlerhafter CodeKorrekter Code

PROGRAM test

VAR

iMyFB : MyFB;

Var1 : STRING[21];

END_VAR

iMyFB(IO1:=Var1);

END_PROGRAM

FUNCTION_BLOCK MyFB

VAR_IN_OUT

IO1 : STRING[30];

END_VAR

END_FUNCTION_BLOCK

PROGRAM test

VAR

iMyFB : MyFB;

Var1 : STRING[30];

END_VAR

iMyFB(IO1:=Var1);

END_PROGRAM

FUNCTION_BLOCK MyFB

VAR_IN_OUT

IO1 : STRING[30];

END_VAR

END_FUNCTION_BLOCK