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

Приложение : Операторы и функции МЭК

MOVE

Присвоение значения одной переменной другой соответствующего типа. В графических редакторах CFC и LD существует возможность управлять разрешением работы блока (разрешать или запрещать операцию) с помощью входов EN/EN0. В FBD этого делать нельзя.

Пример применения EN/EN0 в CFC:

Только если значение en_i равно TRUE, значение переменной var1 будет присвоено var2.

Пример IL:

LD ivar1 MOVE ivar2 ST ivar2

(! Аналогичный результат дает: LD ivar1

ST ivar2 )

Пример ST:

ivar2 := MOVE(ivar1);

( ! Аналогичный результат дает: ivar2 := ivar1; )

10.2 Битовые операторы

AND

Побитное И. Операция применима к типам BOOL, BYTE, WORD или DWORD.

Пример IL:

Var1 BYTE

LD

2#1001_0011

AND

2#1000_1010

ST

Var 1 (* Результат 2#1000_0010 *)

Пример ST:

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

Пример FBD:

Внимание: В логических выражениях нельзя гарантировать присваивание промежуточных результатов. Например, если условие SFS перехода выглядит так:

CoDeSys V2.3

10-4

Приложение : Операторы и функции МЭК

то, значение переменной z может быть не присвоено. Это происходит по причине оптимизации вычислений компилятором. Если значения x и y FALSE, то конечный результат очевиден и остаток выражения вычислять не нужно.

OR

Побитное ИЛИ. Операция применима к типам BOOL, BYTE, WORD или DWORD.

Пример IL:

var1 :BYTE;

 

LD

2#1001_0011

OR

2#1000_1010

ST

var1

(* Результат 2#1001_1011 *)

Пример ST:

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

Пример FBD:

Внимание: См. примечание к AND.

XOR

Побитное исключающее ИЛИ. Операция применима к типам BOOL, BYTE, WORD или DWORD.

Пример IL:

Var1 :BYTE;

LD

2#1001_0011

XOR

2#1000_1010

ST

Var1 (* Результат 2#0001_1001 *)

Пример ST:

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

Пример FBD:

Внимание: Допускается расширяемая форма, т.е. XOR имеет более двух входов. В этом случае входы обрабатываются попарно, затем к результатам опять применяется XOR. Такой алгоритм определен стандартом.

NOT

Побитное НЕ. Операция применима к типам BOOL, BYTE, WORD или DWORD.

Пример IL:

Var1 :BYTE;

LD

2#1001_0011

NOT

 

ST

Var1 (* Результат 2#0110_1100 *)

CoDeSys V2.3

10-5

Приложение : Операторы и функции МЭК

Пример ST:

Var1 := NOT 2#1001_0011

Пример FBD:

10.3 Операторы сдвига

Внимание: Количество бит, задействованных в данных операциях, определяется типом входной переменной! Тип переменной результата не влияет на процесс вычисления. (См. ST примеры ниже). Если входная переменная представлена константой, выбирается наиболее компактный из возможных типов данных.

SHL

res:=SHL(in,n) Побитный сдвиг операнда in влево на n бит с дополнением нулями справа.

Входные переменные и результат должны быть типа BYTE, WORD или DWORD.

В следующем примере представлены различные результаты res_byte и res_word в зависимости от типа входной переменной (BYTE и WORD), хотя числовые их значения равны.

Пример ST:

PROGRAM shl_st VAR

in_byte:BYTE:=16#45; in_word:WORD:=16#45; res_byte:BYTE; res_word:WORD; n:BYTE:=2;

END_VAR

 

res_byte:=SHL(in_byte,n);

(* Результат 16#14 *)

res_word:=SHL(in_word,n);

(* Результат 16#0114 *)

Пример FBD:

Пример IL:

LD 16#45 SHL 2

ST res_byte

SHR

res:= SHR(in,n) Побитный сдвиг операнда in вправо на n бит с дополнением нулями слева.

Входные переменные и результат должны быть типа BYTE, WORD или DWORD.

CoDeSys V2.3

10-6

Приложение : Операторы и функции МЭК

Следующий пример подчеркивает зависимость результата от типа входной переменной (см. примечание выше):

Пример ST:

PROGRAM shr_st

 

VAR

 

in_byte:BYTE:=16#45;

 

in_word:WORD:=16#45;

 

res_byte:BYTE;

 

res_word:WORD;

 

n:BYTE:=2;

 

END_VAR

 

res_byte:=SHR(in_byte,n);

(* Результат 16#11 *)

res_word:=SHR(in_word,n);

(* Результат 16#0011 *)

Пример FBD:

Пример IL:

LD 16#45 SHR 2

ST res_byte

ROL

res:=ROL(in,n) Циклический сдвиг операнда in влево на n бит, младшие биты последовательно заполняются старшими. Входные переменные и результат должны быть типа BYTE, WORD или

DWORD.

В следующем примере представлены различные результаты res_byte и res_word в зависимости от типа входной переменной (BYTE и WORD), хотя числовые их значения равны.

Пример ST:

PROGRAM rol_st

 

VAR

 

in_byte:BYTE:=16#45;

 

in_word:WORD:=16#45;

 

res_byte:BYTE;

 

res_word:WORD;

 

n:BYTE:=2;

 

END_VAR

 

res_byte:=ROL(in_byte,n);

(* Результат 16#15 *)

res_word:=ROL(in_word,n);

(* Результат 16#0114 *)

Пример FBD:

CoDeSys V2.3

10-7