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 Code

Korrekter Code

Detail 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 Syntax. Siehe Troubleshooting-Artikel "Meldung 'Unerwartetes Zeichen' wird für Initialisierungswert im ST-Editor angezeigt", falls die Meldung für einen Initialisierungswert angezeigt wird.
Beispiele:

Fehlerhafter Code

Korrekter Code

Detail 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. oder
Konnte die Referenz auf 'Name' nicht auflösen. Eine Methode 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 Code

Korrekter Code

Detail 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 Code

Korrekter Code

Detail 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. oder
Konnte die Referenz auf 'Name' nicht auflösen. Bei der Methode 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 Code

Korrekter Code

Detail 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).

Gleiches gilt für eine →Methode.

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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter Code

Detail 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 Code

Korrekter Code

Detail 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 Code

Korrekter 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 angegeben . Falls 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 Code

Korrekter 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 angegeben . Falls 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 Code

Korrekter Code

Detail 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 Code

Korrekter Code

Detail 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 Code

Korrekter 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 Code

Korrekter Code

Detail 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 Code

Korrekter 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 Fehlerprotokoll, der 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 oder Interfaces als Ergebnis liefern .
Lösung: Tragen Sie bei der Deklaration der →Funktion einen unterstützten Datentypen ein (statt des Funktionsbausteins oder des →Interfaces), f alls ein Ergebniswert innerhalb einer Funktion zugewiesen wird .
Beispiel:

Fehlerhafter Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter Code

Detail 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 oder Interfaces sind nicht zulässig .
Lösung: Verwenden Sie keine Referenzen für →Funktionsbaustein-Typen oder →Interfaces, sondern deklarieren Sie z.B. 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 (Deprecated)", 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 Code

Korrekter 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 Code

Korrekter 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 Variable.
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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 oder eines Interfaces ist an dieser Stelle nicht zulässig. oder
Deklaration einer Funktionsbaustein-Instanz oder eines Interfaces ist an dieser Stelle nicht zulässig. Pfad: Pfad

Lösung: Deklarieren Sie z.B. die Funktionsbaustein-Instanz innerhalb von VAR ... END_VAR. Details: siehe "Deklaration von Funktionsbaustein-Instanzen in ST"
bzw. "Deklaration eines Interfaces mit Methoden-Prototypen"

Deklaration einer Funktionsbaustein-Instanz oder eines Interfaces ist in einer Variablendeklaration mit CONSTANT nicht zulässig.
Lösung: Deklarieren Sie z.B. die 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 Funktionsbaustein-Instanzen in ST" bzw. "Deklaration eines Interfaces mit Methoden-Prototypen"

Zuweisung auf Ausgangsvariable "name" des Funktionsbausteins "name" ist hier 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.
Möglicherweise wird die Zuweisung auf Ausgangsvariablen von Funktionsbausteinen außerhalb des Funktionsbausteins aber erlaubt, falls Sie jene Regel deaktivieren, die solche Zuweisungen nicht erlaubt.
Beispiel:

Fehlerhafter Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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

Aufruf des Interfaces nicht zulässig. Nur Aufrufe von Methoden des Interfaces sind zulässig.
Lösung: Korrigieren Sie den →Aufruf, sodass eine →Methode des Interfaces aufgerufen wird.

Ungültiger Ausdruck für die String-Länge.
Lösung: Korrigieren Sie den Ausdruck auf einen gültigen Ausdruck für die Länge der STRING-Variable. Beispiel: STRING[10+2] ist gültig, während STRING[10+2 > 6] ungültig ist.

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

Fehlerhafter Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Zahl 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 nicht 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 Code

Korrekter Code

Alternative 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, ein Funktionsbaustein oder ein Interface 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 Code

Korrekter Code

Detail 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.

Ein Schritt darf nicht innerhalb eines Schritts verwendet werden.
Lösung: Korrigieren Sie den ST-Code, indem Sie eine →Aktion im Schritt angeben.

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 Code

Korrekter 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 Duplikate. Informationen zur Verwendung finden Sie unter "Deklaration von globalen Variablen in Global-Objekt und deren Verwendung in ST" .
Beispiel:

Fehlerhafter Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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 Code

Korrekter 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.
Lösung: Korrigieren Sie den verwendeten Array-Datentyp.

Ungültiger Index-Unterbereich für ein Array: Datentyp ist 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 Code

Korrekter 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 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 Code

Korrekter 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 oder eines Interfaces ist aufgrund von "{noCodeGeneration}" nicht zulässig.
Lösung: Löschen Sie die Deklaration der Funktionsbaustein-Instanz oder des Interfaces 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 oder eines Interfaces 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 Code

Korrekter 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

"Name" darf in der Methode nicht verwendet werden, da es entweder eine temporäre Variable oder eine Ein-/Ausgangsvariable des Funktionsbausteins ist.
Zusätzliche Information: Alle Methoden haben einen schreibenden/lesenden Zugriff auf die →statischen Variablen des Funktionsbausteins, aber keinen Zugriff auf die →temporären Variablen und die →Ein-/Ausgangsvariablen des Funktionsbausteins.

Lösung: Korrigieren Sie die →Methode, sodass eine Variable einer anderen Variablen-Art verwendet wird, auf die die Methode einen Zugriff hat.

Modifizierer "Name" wird ignoriert, da nur öffentliche Methoden unterstützt sind.
Zusätzliche Information: Bei dieser Meldung handelt es sich um eine Warnung. logi.CAD 3 verwendet automatisch das Schlüsselwort PUBLIC für den öffentlichen Aufruf der Methode.
Lösung: Ignorieren Sie diese Meldung. Oder löschen Sie das genannte Schlüsselwort für die Methode.

Die Variablen in Methoden müssen eindeutig sein. Eine Variable mit dem Namen "Name" ist jedoch bereits im Funktionsbaustein "Name" enthalten.
Lösung: Vergeben Sie für die Variable in der Methode einen eindeutigen →IEC-Bezeichner als Namen, der noch nicht im genannten Funktionsbaustein verwendet wird.

Ein Interface ist nicht als Basistyp für einen Array zulässig.
Lösung: Löschen Sie das →Interface und geben Sie einen →Datentyp für die Deklaration an.

Interfaces sind nicht für VAR_IN_OUT-Variablen zulässig.
Lösung: Deklarieren Sie die Variable, die auf einem Interface basiert, in einem zulässigen Variablen-Abschnitt. Siehe "Deklaration von Variablen, die auf einem Interface basieren" für die möglichen Abschnitte.

Der Funktionsbaustein "Name" muss die folgenden Methoden implementieren: Name_1, Name_2, ...
Lösung: Deklarieren Sie die benötigten Methoden im Funktionsbaustein. Verwenden Sie am besten die Schnellkorrektur von logi.CAD 3, um die nicht-implementierten Methoden im Funktionsbaustein hinzuzufügen.
Zusätzliche Informationen: Dabei kann es sich um Methoden-Prototypen aus einem Interface oder um abstrakte Methoden eines Basis-Funktionsbausteins handeln. Siehe "Deklaration eines Interfaces mit Methoden-Prototypen" bzw. "Deklaration einer Methode".

Eine Methode mit dem gleichen Namen existiert bereits in "Name". oder
Eine Variable mit dem gleichen Namen existiert bereits in "Name".

Lösung: Vergeben Sie bei der Deklaration des Sprachelements einen eindeutigen →IEC-Bezeichner als Namen, der noch nicht vergeben wurde. Alternative für eine Methode: Verwenden Sie die Schnellkorrektur OVERRIDE hinzufügen, um die Methode (im Basis-Funktionsbaustein) zu überschreiben. Siehe unter "Deklaration einer Methode" für mehr Informationen zu OVERRIDE.

Die folgenden Methoden existieren bereits mit den gleichen Namen in mehreren übergeordneten Funktionsbausteinen oder Interfaces: Name
Lösung 1: Vergeben Sie bei der Deklaration von Methoden einen eindeutigen →IEC-Bezeichner als Namen, der noch nicht vergeben wurde.
Lösung 2: Löschen Sie bei der Deklaration der Interfaces das Basis-Interface, das einen Methoden-Prototyp mit dem gleichen Namen enthält, aus den Angaben hinter EXTENDS (wodurch das Interface vom Basis-Interface abgeleitet wird).

Zyklus entdeckt: Ein Zyklus besteht in der Typ-Hierarchie zwischen "Name" und "Name".
Lösung: Lösen Sie den Zyklus auf. Löschen Sie bei der Deklaration der Interfaces eines der genannten Basis-Interfaces aus den Angaben hinter EXTENDS (wodurch das Interface vom Basis-Interface abgeleitet wird).

Zyklus bei der Definition von "Name" entdeckt.
Lösung: Lösen Sie den Zyklus auf.

Das Interface oder der Funktionsbaustein "Name" darf sich nicht selbst erweitern.
Lösung: Löschen Sie bei der Deklaration des Sprachelements den Namen des Sprachelements aus den Angaben hinter EXTENDS (wodurch das Sprachelement von sich selbst abgeleitet wird).

Der Basis-Funktionsbaustein "Name" muss entweder die Schlüsselwörter "EXTENDS", "IMPLEMENTS" oder Methoden enthalten.
Lösung: Definieren Sie die benötigten Schlüsselwörter und/oder Methoden beim Basis-Funktionsbaustein. Siehe unter "Deklaration eines Funktionsbausteins in ST" für mehr Informationen zu einem Basis-Funktionsbaustein.

SUPER() ist in den Wiederholungsanweisungen FOR, WHILE und REPEAT nicht zulässig. oder
SUPER() darf im Body des Funktionsbausteins nicht mehrmals verwendet werden. oder
SUPER() ist ohne EXTENDS nicht zulässig.
Lösung: Verwenden Sie die Anweisung SUPER(); im abgeleiteten Funktionsbaustein so, wie unter "Deklaration eines Funktionsbausteins in ST" beschrieben.

Eine Methode mit dem gleichen Name ist in den Basis-Funktionsbausteinen nicht vorhanden.
Lösung: Löschen Sie das Schlüsselwort OVERRIDE bei der Methode im abgeleiteten Funktionsbaustein. Alternative: Deklarieren Sie so eine Methode im Basis-Funktionsbaustein.

Die Methode "Name" kann aufgrund von unterschiedlichen Signaturen nicht überschrieben werden.
Lösung: Korrigieren Sie
die a ktuelle Methode (im abgeleiteten Funktionsbaustein), sodass der →Signatur mit jener der überschriebenen Methode (im Basis-Funktionsbaustein) übereinstimmt. Siehe unter "Deklaration einer Methode" für mehr Informationen zu OVERRIDE.

Es darf entweder OVERRIDE oder ABSTRACT verwendet werden. oder
Nur abstrakte Funktionsbausteine dürfen abstrakte Methoden enthalten.
oder
Ein abstrakter Funktionsbaustein darf nicht instanziiert werden.
oder
Ein abstrakter Funktionsbaustein muss zumindest eine abstrakte Methode enthalten.
oder
Eine abstrakte Methode darf keine Anweisungen enthalten.

Lösung: Korrigieren Sie die Syntax, sodass ein gültiges Objekt vorhanden ist. Siehe "Deklaration eines Funktionsbausteins in ST" und "Deklaration einer Methode" für Informationen über abstrakte Funktionsbausteine und Methoden.

Der Funktionsbaustein "Name" wurde mit dem Schlüsselwort FINAL gekennzeichnet. Es darf deshalb nicht von diesem abgeleitet werden.. oder
Die Methode "Name" wurde mit dem Schlüsselwort FINAL gekennzeichnet und darf deshalb nicht überschrieben werden.

Lösung: Korrigieren Sie die Syntax, sodass ein gültiges Objekt vorhanden ist. Siehe "Deklaration eines Funktionsbausteins in ST" und "Deklaration einer Methode" für Informationen über Funktionsbausteine und Methoden mit FINAL.

FINAL ist für die Methode redundant, da der Funktionsbaustein "Name" bereits mit FINAL deklariert ist.
Lösung: Löschen Sie das Schlüsselwort FINAL entweder bei der Methode oder dem Funktionsbaustein.

Die Methode darf nicht mit "SUPER" aufgerufen werden, da es sich dabei entweder um eine abstrakte Methode oder um eine Methode eines Interfaces handelt.
Lösung: Korrigieren Sie die Syntax, sodass ein gültiges Objekt vorhanden ist. Siehe "Deklaration einer Methode" für Informationen über Methoden.

Eine Methode mit dem gleichen Namen, aber einer unterschiedlichen Signatur ist in "Name" enthalten.
Lösung: Korrigieren Sie eine der Methoden, sodass die →Signaturen übereinstimmen. Alternative: Benennen Sie eine der Methoden um.

Die Methode "Name" kann nicht überschrieben/implementiert werden, da sie im aktuellen Kontext nicht sichtbar ist. oder
Zugriff auf Methode "Name" ist in diesem Kontext nicht erlaubt.
oder
Die Methode "Name" muss die gleiche Sichtbarkeit wie die überschriebene/implementierte Methode mit dem gleichen Namen haben.

Lösung: Korrigieren Sie das Schlüsselwort für die Methode, sodass diese wie gewünscht sichtbar ist bzw. der Zugriff darauf möglich ist. Siehe "Deklaration einer Methode" für die Schlüsselwörter, mit denen Sie definieren, wo eine Methode sichtbar ist.

OVERRIDE ist nicht erforderlich.
Lösung: Verwenden Sie die Schnellkorrektur OVERRIDE entfernen, um das nicht-benötigte Schlüsselwort bei der Methode zu entfernen. Siehe unter "Deklaration einer Methode" für mehr Informationen zu OVERRIDE.

Die Methode "Name" darf nicht abstrakt sein, da der Basis-Funktionsbaustein bereits eine Methode mit dem gleichen Namen, aber eine Implementierung enthält.
Lösung: Entfernen Sie das Schlüsselwörter ABSTRACT bei der Methode. Alternative: Korrigieren Sie die Methode im Basis-Funktionsbaustein.

Der verwendete C-Baustein "Name" ist nicht in einer Bibliothek enthalten.
Lösung: Löschen Sie die Verwendung des angegebenen →C-Bausteins. Erstellen Sie eine Bibliothek mit diesem C-Baustein (falls die Bibliothek diesen C-Baustein-Typ unterstützt) und verwenden Sie den C-Baustein dann aus dieser Bibliothek. Möglicherweise wird die Verwendung des C-Bausteins aber erlaubt, falls Sie jene Regel deaktivieren, aufgrund der C-Bausteine in Bibliotheken enthalten sein müssen.

Name ist als schreibgeschützt gekennzeichnet.
Zusätzliche Information: Das erwähnte Objekt oder die erwähnte Datei enthält eine Anweisung für den Schreibschutz.
Lösung: Kontaktieren Sie den Ersteller des Objekts oder der Datei und klären Sie den Grund für den Schreibschutz und die weitere Vorgehensweise ab.

Nur elementare Datentypen ohne die ANY_CHAR-Datentypen sind im Kontext des Pragmas "{safe}" zulässig.
Zusätzliche Information: Aufgrund der Anweisung {safe} sind nicht alle Datentypen im deklarierten ST-Element zulässig. Üblicherweise wird d iese Anweisung nur verwendet, wenn eine sicherheitsrelevanten Anwendung entwicklelt wird.
Lösung: Ändern Sie den Datentyp auf einen anderen Datentypen. Oder löschen Sie das Pragma.

Ungültiger JSON-Ausdruck
Lösung: Korrigieren Sie die Daten für die benutzerdefinierten Daten (= JSON-Ausdrucks oder JSON-Strings). Details: Siehe "Beschreibung, Kommentar, JSON-String oder Typ für Variablen oder Datentypen angeben" für die Syntax eines JSON-Strings.