Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
41
Добавлен:
11.10.2020
Размер:
3.04 Mб
Скачать

10 - ANHANG

10 ANHANG

Anhang A IEC Operatoren und zusätzliche normerweiternde Funktionen

Überblick

CoDeSys unterstützt alle IEC-Operatoren. Diese sind, im Gegensatz zu den Standardfunktionen (Standardbibliothek) implizit im ganzen Projekt bekannt. Neben den IEC-Operatoren unterstützt CoDeSys außerdem folgende nicht von der Norm verlangte Operatoren: INDEXOF und SIZEOF (siehe Arithmetische Operatoren), ADR und BITADR (siehe Adressoperatoren).

Achtung: Bei Operationen mit Gleitkomma-Datentypen ist das Rechenergebnis abhängig von der verwendeten Zielsystem-Hardware !

In den Bausteinimplementationen werden Operatoren wie Funktionen benutzt.

>Arithmetische Operatoren

>Bitstring Operatoren

>Bit-Shift Operatoren

>Auswahloperatoren

>Vergleichsoperatoren

>Adressoperatoren

>Aufrufoperator

>Typkonvertierungen

>Numerische Operatoren

10.1Arithmetische Operatoren...

ADD

Addition von Variablen vom Typ BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL und LREAL.

Es können auch zwei TIME-Variablen addiert werden, die Summe ist dann wieder eine Zeit (z.B. gilt t#45s + t#50s = t#1m35s)

Beispiel in AWL:

LD 7

ADD 2,4,7

ST Var1

Beispiel in ST:

var1 := 7+2+4+7;

Beispiel in FUP:

MUL

CoDeSys V2.3

10-1

Arithmetische Operatoren...

Multiplikation von Variablen vom Typ BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL und LREAL.

Beispiel in AWL:

LD 7

MUL 2,4,7

ST Var1

Beispiel in ST:

var1 := 7*2*4*7;

Beispiel in FUP:

SUB

Subtraktion einer Variablen vom Typ BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL und LREAL von einer anderen Variablen von einem dieser Typen.

Eine TIME-Variable kann auch von einer anderen TIME-Variablen subtrahiert werden, das Ergebnis ist dann wieder vom Typ TIME. Beachten Sie, dass negative TIME-Werte nicht definiert sind.

Beispiel in AWL:

LD 7

SUB 2

ST Var1

Beispiel in ST:

var1 := 7-2;

Beispiel in FUP:

DIV

Division einer Variablen vom Typ BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL und LREAL durch eine andere Variable von einem dieser Typen.

Beispiel in AWL:

LD 8

DIV 2

ST Var1 (* Ergebnis ist 4 *)

Beispiel in ST:

var1 := 8/2;

Beispiel in FUP:

Hinweis: Wenn Sie in Ihrem Projekt Funktionen mit Namen CheckDivByte, CheckDivWord, CheckDivDWord und CheckDivReal definieren, können Sie damit bei Verwendung des Operators DIV den Wert des Divisors überprüfen, beispielsweise um eine Division durch 0 zu verhindern. Der Name der Funktion ist festgelegt und darf nur diese Bezeichnung besitzen.

Achtung: Beachten Sie, dass das Verhalten im Falle einer Division durch 0 von dem eingesetztem Betriebsund Zielsystem abhängig ist.

10-2

CoDeSys V2.3

10 - ANHANG

Beispiel für die Implementierung der Funktion CheckDivReal:

FUNCTION CheckDivReal : REAL

VAR_INPUT divisor:REAL;

END_VAR

IF divisor = 0 THEN

CheckDivReal:=1;

ELSE CheckDivReal:=divisor;

END_IF;

Das Ergebnis der Funktion CheckDivReal wird vom Operator DIV als Divisor eingesetzt. Im nachfolgend dargestellten Beispielprogramm wird dadurch verhindert, dass durch 0 geteilt wird, der Divisor (d) wird von 0 auf 1 gesetzt. Das Ergebnis erg der Division ist dementsprechend 799.

PROGRAM PLC_PRG

VAR erg:REAL;

v1:REAL:=799;

d:REAL;

END_VAR erg:= v1/d;

MOD

Modulo Division einer Variablen vom Typ BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT durch eine andere Variable von einem dieser Typen. Als Ergebnis liefert diese Funktion den ganzzahligen Rest der Division.

Beispiel in AWL:

LD 9

MOD 2

ST Var1 (* Ergebnis ist 1 *)

Beispiel in ST:

var1 := 9 MOD 2;

Beispiel in FUP:

MOVE

Zuweisung einer Variablen auf eine andere Variable eines entsprechenden Typs. Dadurch, dass MOVE in den FUP, CFCund KOP-Editoren als Baustein verfügbar ist, kann dort die EN/EN0Funktionalität auch auf eine Variablenzuweisung angewendet werden.

Beispiel in CFC in Verbindung mit der EN/EN0 Funktion:

Nur wenn en_i TRUE ist, wird der Wert der Variablen var1 Variable var2 zugewiesen.

Beispiel in AWL:

LD ivar1

MOVE ivar2

ST ivar2 (* Ergebnis: var2 erhält Wert von var1 *)

( entspricht:

LD ivar1

ST ivar2 )

CoDeSys V2.3

10-3

Bitstring Operatoren...

Beispiel in ST:

ivar2 := MOVE(ivar1);

( entspricht:

ivar2 := ivar1; )

INDEXOF

Diese Funktion ist nicht von der Norm IEC61131-3 vorgeschrieben.

Als Ergebnis liefert INDEXOF den internen Index eines Bausteins.

Beispiel in ST:

var1 := INDEXOF(baustein2);

SIZEOF

Diese Funktion ist nicht von der Norm IEC61131-3 vorgeschrieben.

Als Ergebnis liefert SIZEOF die Anzahl der Bytes, die die angegebene Variable benötigt.

Beispiel in AWL: arr1:ARRAY[0..4] OF INT;

Var1 INT

LD arr1

SIZEOF

ST Var1 (* Ergebnis ist 10 *)

Beispiel in ST:

var1 := SIZEOF(arr1);

10.2 Bitstring Operatoren...

AND

Bitweises AND von Bit-Operanden. Die Operanden sollten vom Typ BOOL, BYTE, WORD oder DWORD sein.

Beispiel in AWL:

Var1 BYTE

LD 2#1001_0011

AND 2#1000_1010

ST Var1 (* Ergebnis ist 2#1000_0010 *)

Beispiel in ST:

var1 := 2#1001_0011 AND 2#1000_1010

Beispiel in FUP:

Hinweis: Wenn Sie bei Verwendung von 68xxxoder C-Code-Generatoren im FUP einen wie hier dargestellten

Programmablauf eingeben, müssen Sie folgendes beachten: Die Zuweisung des Wertes der zweiten Eingangsvariablen am AND-Operator-Baustein zur Variablen z wird aufgrund der optimierten

10-4

CoDeSys V2.3

10 - ANHANG

Abarbeitungsprozedur im FUP nicht mehr durchgeführt, sobald Eingangsvariable a den Wert FALSE hat !

OR

Bitweises OR von Bit-Operanden. Die Operanden sollten vom Typ BOOL, BYTE, WORD oder DWORD sein.

Beispiel in AWL:

 

Var1

BYTE

 

LD

2#1001_0011

OR

2#1000_1010

ST

Var1

(* Ergebnis ist 2#1001_1011 *)

Beispiel in ST:

Var1 := 2#1001_0011 OR 2#1000_1010

Beispiel in FUP:

Hinweis: Wenn Sie bei Verwendung von 68xxxoder C-Code-Generatoren im FUP einen wie hier dargestellten

Programmablauf eingeben, müssen Sie folgendes beachten: Die Zuweisung des Wertes der zweiten Eingangsvariablen am OR-Operator-Baustein zur Variablen z wird aufgrund der optimierten Abarbeitungsprozedur im FUP nicht mehr durchgeführt, sobald Eingangsvariable a den Wert TRUE hat !

XOR

Bitweises XOR von Bit-Operanden. Die Operanden sollten vom Typ BOOL, BYTE, WORD oder DWORD sein.

Beispiel in AWL:

 

Var1

BYTE

 

LD

2#1001_0011

XOR

2#1000_1010

ST

Var1

(* Ergebnis ist 2#0001_1001 *)

Beispiel in ST:

Var1 := 2#1001_0011 XOR 2#1000_1010

Beispiel in FUP:

Hinweis: Beachten Sie das Verhalten des XOR-Bausteins in erweiterter Form, also bei mehr als 2 Eingängen: Die Eingänge werden paarweise geprüft und die jeweiligen Ergebnisse dann wiederum gegeneinander verglichen (entspricht der Norm, jedoch nicht unbedingt der Erwartung).

NOT

Bitweises NOT eines Bit Operanden. Der Operand sollte vom Typ BOOL, BYTE, WORD oder DWORD sein

CoDeSys V2.3

10-5

Соседние файлы в папке 759-333