ISaGRAF. Version 3.4

          

Операторы IL


Следующая таблица  представляет стандартные операторы языка IL:

Оператор

Модификатор

Операнд

Описание

LD

N

переменная, константа

Загружает операнд

ST

N

переменная

Запоминает текущий результат

S

R

BOO переменная

BOO переменная

Устанавливает на TRUE

Сбрасывает на FALSE

AND

&

OR

XOR

N   (

N   (

N   (

N   (

BOO

BOO

BOO

BOO

логическое И

логическое И

логическое ИЛИ

исключающее ИЛИ

ADD

SUB

MUL

DIV

(

(

(

(

переменная, константа

переменная, константа

переменная, константа

переменная, константа

Сложение

Вычитание

Умножение

Деление

GT

GE

EQ

LE

LT

NE

(

(

(

(

(

(

переменная, константа

переменная, константа

переменная, константа

переменная, константа

переменная, константа

переменная, константа

Проверить: >

Проверить: >=

Проверить: =

Проверить: <=

Проверить: <

Проверить: <>

CAL

JMP

RET

C   N

C   N

C   N

Экземпляр функционального блока

имя

метка

Вызов функционального блока

Прыжок на метку

Возврат из подпрограммы

)

Выполнить задержанную операцию

В следующей главе описаны операторы, которые являются специфическими для языка IL, другие стандартные операторы можно найти в главе “Стандартные операторы, функциональные блоки и функции”.

Операторы IL
        Оператор LD

Операция:                  загружает значение в текущий результат

Допустимые модификаторы:         N

Операнд:                    константа, внутренняя, входная или выходная переменная

                                     

Пример:

(* ПРИМЕР LD ОПЕРАЦИЙ *)

LDex:                LD              false           (* результат := FALSE boolean constant *)

                         LD              true             (*результат := TRUE boolean constant *)

                         LD              123             (*результат := integer constant *)

                         LD              123.1          (*результат := real constant *)


                         LD              t#3ms         (*результат := time constant *)

                         LD              boo_var1    (*результат := boolean variable *)

                         LD              ana_var1    (*результат := analog variable *)

                         LD              tmr_var1     (*результат := timer variable *)

                         LDN            boo_var2    (*результат := NOT ( boolean variable ) *)

Операторы IL
       
Оператор ST

Операция:                  запоминает текущий результат в переменной

                                      Текущий результат этим оператором не изменяется

Допустимые модификаторы:         N

Операнд:                    внутренняя или выходная переменная

Пример:

                                            (* ПРИМЕР ST ОПЕРАЦИЙ *)

STboo:              LD              false

                         ST              boo_var1    (* boo_var1 := FALSE *)

                         STN            boo_var2    (* boo_var2 := TRUE *)

STana:              LD              123

                         ST              ana_var1    (* ana_var1 := 123 *)

STtmr:               LD              t#12s

                         ST              tmr_var1     (* tmr_var1 := t#12s *)

Операторы IL
       
Оператор S

Операция:                  запоминает TRUE в булевской переменной, если текущий результат имеет значение TRUE. Никаких операций не выполняется, если текущий результат равен FALSE. Текущий результат не модифицируется.

Допустимые модификаторы:         (нет)

Операнд:                    внутренняя или выходная булевская переменная

Пример:

                                            (* ПРИМЕР S ОПЕРАЦИЙ *)

SETex:              LD              true             (*текущий результат := TRUE *)

                         S                boo_var1    (* boo_var1 := TRUE *)

                                                               (*текущий результат не изменяется *)

                         LD              false           (*текущий результат := FALSE *)



                         S                boo_var1    (* ничего не делать - boo_var1 не изменяется *)

Операторы IL
       
Оператор R

Операция:                  запоминает FALSE в булевской переменной если текущий результат имеет значение TRUE. Никаких операций не выполняется если текущий результат равен FALSE. Текущий результат не модифицируется.

Допустимые модификаторы:         (нет)

Операнд:                    внутренняя или выходная булевская переменная

Пример:

                                                               (* ПРИМЕР R ОПЕРАЦИЙ *)

RESETex:          LD              true             (*текущий результат:= TRUE *)

                         R                boo_var1    (* boo_var1 := FALSE *)

                                                               (*текущий результат не изменяется *)

                         ST              boo_var2    (* boo_var2 := TRUE *)

                         LD              false           (*текущий результат:= FALSE *)

                         R                boo_var1    (*ничего не делать - boo_var1 не изменяется *)

Операторы IL
       
Оператор JMP

Операция:                  прыгает на указанную метку

Допустимые модификаторы:         C N

Операнд:                    метка определенная в той же IL программе

Пример:

(* следующий пример проверяет значение аналогового селектора  (0 или 1 или 2)                                    *)

(* чтобы установить один из 3 булевских выходов. Проверка  "равно 0" делается                                   *)

(* оператором JMPC                                          *)

JMPex:              LD              selector      (* selector is 0 or 1 or 2 *)

                         BOO                              (* превращение в boolean *)

                         JMPC          test1           (* if selector = 0 then *)

                         LD              true

                         ST              bo0             (* bo0 := true *)

                         JMP            JMPend       (* конец программы*)



test1:                LD              selector

                         SUB            1                 (* уменьшить selector: теперь 0 или 1 *)

                         BOO                              (* превращение в boolean *)

                         JMPC          test2           (* if selector = 0 then *)

                         LD              true

                         ST              bo1             (* bo1 := true *)

                         JMP            JMPend       (* конец программы*)

test2:                LD              true             (* последняя возможность *)

                         ST              bo2             (* bo2 := true *)

                         JMP            end:            (* конец  IL программы*)

Операторы IL
       
Оператор RET

Операция:                  заканчивает текущий список инструкций. Если IL последовательность - подпрограмма, то текущий результат возвращается в вызывающую подпрограмму.

Допустимые модификаторы:         C N

Операнд:                    (нет)

Пример:

(* следующий пример проверяет значение аналогового селектора  (0 или 1 или 2)                                    *)

(* чтобы установить один из 3 булевских выходов. Проверка  "равно 0" делается                                   *)

(* the JMPC operator                                                                                                                                              *)

JMPex:              LD              selector      (* selector равен 0 или 1 или 2 *)

                         BOO                              (* превращение в boolean *)

                         JMPC          test1           (* if selector = 0 then *)

                         LD              true

                         ST              bo0             (* bo0 := true *)

                         RET                               (* end - return 0 *)

                                                               (* уменьшить selector *)

test1:                LD              selector



                         SUB            1                 (* selector теперь 0 или 1 *)

                         BOO                              (* превращение в boolean *)

                         JMPC          test2           (* if selector = 0 then *)

                         LD              true

                         ST              bo1             (* bo1 := true *)

                         LD              1                 (* загрузить действительное значение selector *)

                         RET                               (* end - return 1 *)

                                                               (* последняя возможность *)

test2:                RETNC                           (* возвращает если selector содержит *)

                                                               (* неправильное значение *)

                         LD              true

                         ST              bo2             (* bo2 := true *)

                         LD              2                 (* загрузить действительное значение selector *)

                                                               (* конец - возврат 2 *)

Операторы IL
       
Оператор “)”

Операция:                  выполняет задержанную операцию. Задержанная операция обозначается “(“

Допустимые модификаторы:         (нет)

Операнд:                    (нет)

Пример:

(* Следующая программа использует задержанные операции: *)

(* res := a1 + (a2 * (a3 - a4) * a5) + a6; *)

Delayed:           LD              a1               (* result := a1; *)

                         ADD(          a2               (* задержанный ADD - result := a2; *)

                         MUL(          a3               (* задержанный MUL - result := a3; *)

                         SUB            a4               (* result := a3 - a4; *)

                         )                                    (*выполнить задержан. MUL-result:=a2*(a3-a4); *)

                         MUL            a5               (* result := a2 * (a3 - a4) * a5; *)



                         )                                    (* выполнить задержанный ADD *)

                                                               (* result := a1 + (a2 * (a3 - a4) * a5); *)

                         ADD           a6               (* result := a1 + (a2 * (a3 - a4) * a5) + a6; *)

                         ST              res              (*запомнить текущ. результат в переменной res *)

Операторы IL
        Вызов подпрограмм или функций


Подпрограмма или функция ( написанная на любом из языков IL, ST, LD, FBD или “C”) вызывается из языка IL, используя имя в качестве оператора.

Операция:                  выполняет подпрограмму или функцию - значение возвращенное подпрограммой или функцией запоминается в текущем результате IL

Допустимые модификаторы:         (нет)

Операнд:                    Первый параметр должен быть запомнен в текущем результате перед вызов. Остальные параметры записываются в поле операнда через запятую

Пример:

(* Вызывающая программа: превращает аналоговое значение в временное *)

Main:                 LD                     bi0

SUBPRO           bi1,bi2  (*вызвать подпрограмму чтобы получить аналоговое значение *)

ST                     result    (* result := значение возвращенное подпрограммой *)

                         GT                    vmax          (*проверка переполнения *)

                         RETC                                   (*возврат по переполнению *)

                         LD                     result

                         MUL                  1000           (*превратить секунды в миллисекунды *)

                         TMR                                     (* превратить в таймер *)

                         ST                     tmval     (* запоминает превращенное значение в таймере*)

(* Вызванная подпрограмма 'SUBPRO' : вычисляет аналоговое значение *)

(* заданное как двоичное число трех булевских входов: in0, in1, in2 - три параметра подпрограммы*)

                         LD              in2             



                         ANA                              (* result = ana (in2); *)

                         MUL            2                 (* result := 2*ana (in2); *)

                         ST              temporary   (* temporary := result *)

                         LD              in1             

                         ANA

                         ADD           temporary   (* result := 2*ana (in2) + ana (in1); *)

                         MUL            2                 (* result := 4*ana (in2) + 2*ana (in1); *)

                         ST              temporary   (* temporary := result *)

                         LD              in0             

                         ANA

                         ADD           temporary   (* result := 4*ana (in2) + 2*ana (in1)+ana (in0); *)

                ST     SUBPRO     (* возвратить текущий результат в вызывающую программу*)

Операторы IL
        Вызов функциональных блоков: оператор CAL


Операция:                  вызывает функциональный блок

Допустимые модификаторы:         C N

Операнд:                    Имя функционального блока. Входные параметры блока должны быть присвоены с помощью операторов LD/ST до вызова. Выходные параметры могут быть использованы.

                                     

Пример 1:

(* Вызов функционального блока SR : SR1 - экземпляр SR *)

LD                     auto_mode

AND                  start_cmd

ST                     SR1.set1

LD                     stop_cmd

ST                     SR1.reset

CAL                  SR1

LD                     SR1.Q1

ST                     command

(* FBD эквивалент : *)

Операторы IL


Пример 2

(*Мы предполагаем, что R_TRIG1 - это экземпляр блока R_TRIG и CTU1 - это экземпляр блока CTU*)

LD                     command

ST                     R_TRIG1.clk

CAL                  R_TRIG1

LD                     R_TRIG1.Q

ST                     CTU1.cu

LDN                   auto_mode

ST                     CTU1.reset

LD                     100

ST                     CTU1.pv

CAL                  CTU1

LD                     CTU1.Q

ST                     overflow

LD                     CTU1.cv

ST                     result

(* FBD эквивалент : *)

Операторы IL



Содержание раздела