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

10 - ANHANG

MUX 30,40,50,60,70,80

ST Var1 (* Ergebnis ist 30 *)

Beispiel in ST:

Var1:=MUX(0,30,40,50,60,70,80); (* Ergebnis ist 30 *);

Hinweis: Zum Zweck der Laufzeitoptimierung wird nur der Ausdruck, der INK vorgeschaltet ist, berechnet ! In der Simulation dagegen werden alle Zweige berechnet.

10.5 Vergleichsoperatoren...

GT

Größer als.

Ein boolscher Operator mit dem Ergebnis TRUE, wenn der erste Operand größer als der zweite ist. Die Operanden können vom Typ BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME und STRING sein.

Beispiel in AWL:

LD 20

GT 30

ST Var1 (* Ergebnis ist FALSE *)

Beispiel in ST:

VAR1 := 20 > 30 > 40 > 50 > 60 > 70;

Beispiel in FUP:

LT

Kleiner als.

Ein boolscher Operator mit dem Ergebnis TRUE, wenn der erste Operand kleiner als der zweite ist. Die Operanden können vom Typ BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME und STRING sein.

Beispiel in AWL:

LD 20

LT 30

ST Var1 (* Ergebnis ist TRUE *)

Beispiel in ST:

VAR1 := 20 < 30;

Beispiel in FUP:

LE

Kleiner oder gleich.

Ein Boolscher Operator mit Ergebnis TRUE, wenn der erste Operand kleiner als der zweite Operand oder gleich groß wie der zweite Operand ist. Die Operanden können vom Typ BOOL, BYTE, WORD,

CoDeSys V2.3

10-11

Vergleichsoperatoren...

DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME und STRING sein.

Beispiel in AWL:

LD 20

LE 30

ST Var1 (* Ergebnis ist TRUE *)

Beispiel in ST:

VAR1 := 20 <= 30;

Beispiel in FUP:

GE

Größer oder gleich

Ein Boolscher Operator mit Ergebnis TRUE, wenn der erste Operand größer als der zweite Operand oder gleich groß wie der zweite Operand ist. Die Operanden können vom Typ BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME und STRING sein.

Beispiel in AWL:

LD 60

GE 40

ST Var1 (* Ergebnis ist TRUE *)

Beispiel in ST:

VAR1 := 60 >= 40;

Beispiel in FUP:

EQ

Gleichheit

Ein Boolscher Operator mit Ergebnis TRUE, wenn die Operanden gleich sind. Die Operanden können vom Typ BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME und STRING sein.

Beispiel in AWL:

LD 40

EQ 40

ST Var1 (* Ergebnis ist TRUE *)

Beispiel in ST:

VAR1 := 40 = 40;

Beispiel in FUP:

10-12

CoDeSys V2.3

10 - ANHANG

NE

Ungleichheit

Ein Boolscher Operator mit Ergebnis TRUE, wenn die Operanden ungleich sind. Die Operanden können vom Typ BOOL, BYTE, WORD, DWORD, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LREAL, TIME, DATE, TIME_OF_DAY, DATE_AND_TIME und STRING sein.

Beispiel in AWL:

LD 40

NE 40

ST Var1 (* Ergebnis ist FALSE *)

Beispiel in ST:

VAR1 := 40 <> 40;

Beispiel in FUP:

10.6 Adressoperatoren...

Achtung: Wenn Online Change angewendet wird, können sich Inhalte von Adressen verschieben. Beachten Sie dies bei der Verwendung von Pointern auf Adressen.

ADR

Adressfunktion, nicht von der Norm IEC61131-3 vorgeschrieben.

ADR liefert die Adresse seines Arguments in einem DWORD. Diese Adresse kann an Herstellerfunktionen geschickt und dort wie ein Pointer behandelt werden oder innerhalb des Projektes an einen Pointer zugewiesen werden.

Beispiel in ST:

dwVar:=ADR(bVAR);

Beispiel in AWL:

LD bVar

ADR

ST dwVar man_fun1

BITADR

Adressfunktion, nicht von der Norm IEC61131-3 vorgeschrieben.

BITADR liefert den Bitoffset innerhalb des Segments in einem DWORD. Beachten Sie, dass der Offset davon abhängt, ob die Option Byteadressierung in den Zielsystemeinstellungen aktiviert ist oder nicht.

VAR

var1 AT %IX2.3:BOOL; bitoffset: DWORD;

END_VAR

Beispiel in ST:

bitoffset:=BITADR(var1); (* Ergebnis bei Byteadressierung=TRUE: 19, bei Byteadressierung=FALSE: 35 *)

Beispiel in AWL:

LD Var1

CoDeSys V2.3

10-13

Aufrufoperator...

BITADR

ST Var2

Inhaltsoperator

Die Dereferenzierung eines Pointers erfolgt über den Inhaltsoperator "^" nach dem Pointerbezeichner.

Beispiel in ST: pt:POINTER TO INT; var_int1:INT; var_int2:INT;

pt := ADR(var_int1); var_int2:=pt^;

10.7 Aufrufoperator...

CAL

Aufruf eines Funktionsblocks

Mit CAL ruft man in AWL die Instanz eines Funktionsblock auf. Nach dem Namen der Instanz eines Funktionsblocks folgt, in runde Klammern gesetzt, die Belegung der Eingabevariablen des Funktionsblocks.

Beispiel:

Aufruf der Instanz Inst eines Funktionsblocks mit Belegung der Eingabevariablen Par1, Par2 auf 0 bzw. TRUE.

CAL INST(PAR1 := 0, PAR2 := TRUE)

10.8 Typkonvertierungen...

Es ist nicht erlaubt, von einem "größeren" Typ auf einen "kleineren" implizit zu konvertieren (beispielsweise von INT nach BYTE oder von DINT nach WORD). Wenn man das tun will, muss man spezielle Typkonvertierungen anwenden. Grundsätzlich kann von jedem elementaren Typ zu jeden anderen elementaren Typ konvertiert werden.

Syntax:

<elem.Typ1>_TO_<elem.Typ2>

Beachten Sie bei ...TO_STRING Konvertierungen, dass der string "linksbündig" generiert wird. Wenn er zu kurz definiert ist, wird von rechts her abgeschnitten.

BOOL_TO-Konvertierungen

Konvertierung vom Typ BOOL zu einem anderen Typ:

Bei Zahlentypen ist das Ergebnis 1, wenn der Operand TRUE ist, und 0, wenn der Operand FALSE ist.

Beim Typ STRING ist das Ergebnis 'TRUE' bzw. 'FALSE'.

Beispiele in AWL:

LD

TRUE

(* Ergebnis ist 1 *)

BOOL_TO_INT

 

ST

i

 

LD TRUE

(* Ergebnis ist 'TRUE' *)

BOOL_TO_STRING

 

ST str

 

10-14

CoDeSys V2.3

 

10 - ANHANG

LD TRUE

(* Ergebnis ist T#1ms *)

BOOL_TO_TIME

 

ST t

 

LD TRUE

(* Ergebnis ist TOD#00:00:00.001 *)

BOOL_TO_TOD

 

ST

 

LD FALSE

(* Ergebnis ist D#1970-01-01 *)

BOOL_TO_DATE

 

ST dat

 

LD TRUE

(* Ergebnis ist DT#1970-01-01-00:00:01 *)

BOOL_TO_DT

 

ST dandt

 

Beispiele in ST:

 

i:=BOOL_TO_INT(TRUE);

(* Ergebnis ist 1 *)

str:=BOOL_TO_STRING(TRUE);

(* Ergebnis ist 'TRUE' *)

t:=BOOL_TO_TIME(TRUE);

(* Ergebnis ist T#1ms *)

tof:=BOOL_TO_TOD(TRUE);

(* Ergebnis ist TOD#00:00:00.001 *)

dat:=BOOL_TO_DATE(FALSE);

(* Ergebnis ist D#1970-01-01 *)

dandt:=BOOL_TO_DT(TRUE);

(* Ergebnis ist DT#1970-01-01-00:00:01 *)

Beispiele in FUP:

 

 

(* Ergebnis ist 1 *)

 

(* Ergebnis ist 'TRUE' *)

 

(* Ergebnis ist T#1ms *)

 

(* Ergebnis ist TOD#00:00:00.001 *)

 

(* Ergebnis ist D#1970-01-01 *)

 

(* Ergebnis ist DT#1970-01-01-00:00:01 *)

TO_BOOL-Konvertierungen

Konvertierung von einem Typ zum Typ BOOL:

Das Ergebnis ist TRUE, wenn der Operand ungleich 0 ist. Das Ergebnis ist FALSE, wenn der Operand gleich 0 ist.

Beim Typ STRING ist das Ergebnis TRUE, wenn der Operand 'TRUE' ist, ansonsten ist das Ergebnis FALSE.

Beispiele in AWL:

CoDeSys V2.3

10-15

Typkonvertierungen...

LD 213

(* Ergebnis ist TRUE *)

BYTE_TO_BOOL

 

 

ST b

 

 

LD 0

(* Ergebnis ist FALSE *)

INT_TO_BOOL

 

 

ST b

 

 

LD T#5ms

(* Ergebnis ist TRUE *)

TIME_TO_BOOL

 

 

ST b

 

 

LD 'TRUE'

(* Ergebnis ist TRUE *)

STRING_TO_BOOL

 

 

ST b

 

 

Beispiele in ST:

 

 

b := BYTE_TO_BOOL(2#11010101);

(* Ergebnis ist TRUE *)

b := INT_TO_BOOL(0);

(* Ergebnis ist FALSE *)

b := TIME_TO_BOOL(T#5ms);

(* Ergebnis ist TRUE *)

b := STRING_TO_BOOL('TRUE');

(* Ergebnis ist TRUE *)

Beispiele in FUP:

(* Ergebnis ist TRUE *)

(* Ergebnis ist FALSE *)

(* Ergebnis ist TRUE *)

(* Ergebnis ist TRUE *)

Konvertierungen zwischen ganzzahligen Zahlentypen

Konvertierung von einem ganzzahligen Zahlentyp zu einem anderen Zahlentyp:

Bei der Typkonvertierung von größeren auf kleinere Typen können Informationen verloren gehen. Wenn die zu konvertierende Zahl die Bereichsgrenze überschreitet, dann werden die ersten Bytes der Zahl nicht berücksichtigt.

Beispiel in ST:

si := INT_TO_SINT(4223); (* Ergebnis ist 127 *)

Wenn sie die Integerzahl 4223 (16#107f in Hexadezimaldarstellung) in eine SINT-Variable speichern, dann enthält diese die Zahl 127 (16#7f in Hexadezimaldarstellung).

Beispiel in AWL:

LD 2

INT_TO_REAL

MUL

10-16

CoDeSys V2.3

10 - ANHANG

Beispiel in FUP:

REAL_TO-/ LREAL_TO-Konvertierungen

Konvertierung vom Typ REAL bzw. LREAL zu einem anderen Typ:

Es wird nach oben oder unten auf einen ganzzahligen Wert gerundet und in den entsprechenden Typen gewandelt. Ausgenommen davon sind die Typen STRING, BOOL, REAL und LREAL.

Bei der Typkonvertierung von größere auf kleinere Typen können Informationen verloren gehen.

Beachten Sie bei der Konvertierung in den Typ STRING, dass die Gesamtkommastellenzahl auf 16 begrenzt ist. Enthält die (L)REAL-Zahl mehr Stellen, wird die sechzehnte Stelle gerundet und so im string dargestellt. Wenn der STRING für die Zahl zu kurz definiert ist, wird von rechts her entsprechend abgeschnitten.

Beispiel in ST:

i := REAL_TO_INT(1.5); (* Ergebnis ist 2 *) j := REAL_TO_INT(1.4); (* Ergebnis ist 1 *) i := REAL_TO_INT(-1.5); (* Ergebnis ist -2 *) j := REAL_TO_INT(-1.4); (* Ergebnis ist -1 *)

Beispiel in AWL:

LD 2.7

REAL_TO_INT

GE %MW8

Beispiel in FUP:

TIME_TO- / TIME_OF_DAY-Konvertierungen

Konvertierung vom Typ TIME bzw. TIME_OF_DAY zu einem anderen Typ:

Intern wird die Zeit in einem DWORD in Millisekunden abgespeichert (bei TIME_OF_DAY seit 00:00 Uhr). Dieser Wert wird konvertiert.

Bei der Typkonvertierung von größere auf kleinere Typen können Informationen verloren gehen . Beim Typ STRING ist das Ergebnis die Zeitkonstante.

Beispiele in AWL:

 

LD T#12ms

(* Ergebnis ist 'T#12ms' *)

TIME_TO_STRING

 

ST str

 

LD T#300000ms

(* Ergebnis ist 300000 *)

TIME_TO_DWORD

 

ST dw

 

LD TOD#00:00:00.012 (* Ergebnis ist 12 *)

TOD_TO_SINT

ST si

Beispiele in ST:

str :=TIME_TO_STRING(T#12ms);

dw:=TIME_TO_DWORD(T#5m);

CoDeSys V2.3

10-17

Typkonvertierungen...

si:=TOD_TO_SINT(TOD#00:00:00.012);

Beispiele in FUP:

DATE_TO- / DT_TO-Konvertierungen

Konvertierung vom Typ DATE bzw. DATE_AND_TIME zu einem anderen Typ:

Intern wird das Datum in einem DWORD in Sekunden seit dem 1.Januar 1970 abgespeichert. Dieser Wert wird konvertiert.

Bei der Typkonvertierung von größere auf kleinere Typen können Informationen verloren gehen. Beim Typ STRING ist das Ergebnis die Datumskonstante.

Beispiele in AWL:

 

LD D#1970-01-01

(* Ergebnis ist FALSE *)

DATE_TO_BOOL

 

ST b

 

LD D#1970-01-15

(* Ergebnis ist 29952 *)

DATE_TO_INT

 

ST i

 

LD DT#1970-01-15-05:05:05

(* Ergebnis ist 129 *)

DT_TO_BYTE

 

ST byt

 

LD DT#1998-02-13-14:20

(* Ergebnis ist

DT_TO STRING

'DT#1998-02-13-14:20' *)

ST str

 

Beispiele in ST:

b :=DATE_TO_BOOL(D#1970-01-01);

i :=DATE_TO_INT(D#1970-01-15);

byt :=DT_TO_BYTE(DT#1970-01-15-05:05:05);

str:=DT_TO_STRING(DT#1998-02-13-14:20);

Beispiele in FUP:

10-18

CoDeSys V2.3

10 - ANHANG

STRING_TO-Konvertierungen

Konvertierung vom Typ STRING zu einem anderen Typ:

Der Operand vom Typ STRING muss einen gültigen Wert des Zieltyps haben, sonst ist das Ergebnis 0.

Beispiele in AWL:

 

LD 'TRUE'

(* Ergebnis ist TRUE *)

STRING_TO_BOOL

 

ST b

 

LD 'abc34'

(* Ergebnis ist 0 *)

STRING_TO_WORD

 

ST w

 

LD 't#127ms'

(* Ergebnis ist T#127ms *)

STRING_TO_TIME

 

ST t

 

Beispiele in ST:

b :=STRING_TO_BOOL('TRUE'); w :=STRING_TO_WORD('abc34');

t :=STRING_TO_TIME('T#127ms');

Beispiele in FUP:

TRUNC

Konvertierung vom Typ REAL zum Typ INT. Es wird nur der Betrag des ganzzahligen Anteils der Zahl genommen.

Bei der Typkonvertierung von größere auf kleinere Typen können Informationen verloren gehen.

Beispiel in AWL:

LD 2.7

TRUNC

GE %MW8

Beispiele in ST:

i:=TRUNC(1.9); (* Ergebnis ist 1 *)

CoDeSys V2.3

10-19

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