IL (Instruction List)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 02:46, 22 мая 2016.
Instruction List
Парадигма императивный, структурированный
Спроектировано IEC
Первый   появившийся 1993
Портал: Instruction List

Instruction List (IL) - это один из 5 языков поддерживаемых стандартом IEC 61131-3. Он разработан для программируемых логических контроллеров. Это низкоуровневый язык, который по синтаксису напоминает ассемблер. Все пять языков используют общие элементы из стандарта IEC61131. Переменные и вызовы функций определены через общие элементы, таким образом в одной программе могут быть использованы разные языки.

Синтаксис

Программы написанные на языке Instruction list это последовательности высказований. Высказования состоят из операторов и операндов, которые могут быть переменными, константами или метками. Кроме того, программы могут дополняться комментариями.

Некоторые операторы могут быть дополнены модификаторами. Существует два модификатора: N и C. Модификатор N изменяет операцию на такую же с отрицательным аргументом, т.е. отрицательным значением операнда. Операторы, дополненные модификатором C, исполняются только при условии, что значение CR истинно. Использование скобок позволяет заставить подвыражения вычисляться первыми, следовательно, избежать вспомогательные переменные или дополнительные операции загрузки/сохранения.

Базовые команды IL
Инструкция Описание
LD загрузить операнд
ST сохранить операнд
S установить операнд в значение истина
R установить операнд в значение ложь
NOT Логическое отрицание
AND Логическое И
OR Логическое ИЛИ
XOR Логическое XOR
ADD сложение
SUB вычитание
MUL умножение
DIV целочисленное деление
GT больше чем
GE больше либо равно
LT меньше чем
LE меньше либо равно
EQ проверка на равенство
NE проверка на неравенство
JMP перейти к метке
RET вернуться из функции (блока)

Типы данных

Типизирование данных является общим элементом стандарта с целью предотвращения ошибок на ранней стадии разработки. Оно определяет типы параметров, которые будут использоваться и помогает избежать ошибки, такие как деление даты на целое число. Поддерживаются такие типы данных как: Boolean, Integer, Real, Byte, Word, Date, Time-of-Day и String.

  • Bit Strings - группы бит
    • BIT - 1 бит
    • BYTE - 8 бит (1 байт)
    • WORD - 16 бит (2 байт)
    • DWORD - 32 бит (4 байт)
    • LWORD - 64 бит (8 байт)
  • INTEGER - целые числа
    • SINT - короткое целое число со знаком (1 байт)
    • INT - целое число со знаком (2 байт)
    • DINT - двойное целое число со знаком (4 байт)
    • LINT - длинное целое число (8 байт)
    • U - префикс для типов, делающий их беззнаковыми
  • REAL - числа с плавающей точкой
    • REAL - (4 байт)
    • LREAL - (8 байт)
  • TIME - длительность таймеров, процессов.
  • Дата и время дня:
    • DATE - календарная дата
    • TIME_OF_DAY - время
    • DATE_AND_TIME: время и дата
  • STRING - символьные строки окруженные одиночными кавычками. character strings surrounded by single quotes. Для экранирование символов используется знак доллара.
    • WSTRING - многобайтовые строки.
  • Arrays - несколько значений, хранящихся в одной переменной.
  • Sub Ranges - ставит ограничение на значения
  • Derived - тип полученный из одного из указанных выше типов.
    • TYPE - простой тип
    • STRUCT - композит нескольких переменных и типов.
  • Generic - группы указанных типов:
    • ANY
      • ANY_DERIVED
      • ANY_ELEMENTARY
      • ANY_MAGNITUDE
        • ANY_NUM - LREAL, REAL
        • ANY_INT - LINT, DINT, INT, SINT, ULINT, UDINT, UINT, USINT
      • ANY_BIT - LWORD, DWORD, WORD, BYTE, BOOL
      • ANY_STRING - STRING, WSTRING
      • ANY_DATE - DATE, TOD, DT
Экранирование символов в строке
Последовательность Результат
$$ $
$' '
$L перевод строки
$N новая строка
$P страница
$R возврат
$T табуляция
$xx шестнадцатеричное значение

Переменные

Атрибуты переменных: RETAIN, CONSTANT, AT

  • Глобальные
  • Локальные
  • Отображение ввода/вывода
  • Внешние
  • Временные

Конфигурация

На самом высоком уровне, требуемое программное обеспечение для решения конкретной проблемы управления может быть названо конфигурацией. Конфигурация определяется для конкретного типа системы управления, в том числе распределения аппаратных средств, т.е. средств обработки, адресов памяти для каналов ввода / вывода и возможностей системы.

В конфигурации можно определить ресурсы. Ресурс можно рассматривать как объект обработки, которые способны выполнять программы. В пределах ресурса можно определить одну или несколько задач. Задачи контролируют выполнение набора программ и / или функциональных блоков. Они могут или выполняться периодически, или при наступлении определенного триггера.

Блоки, организующие программу

  • Функции
    • Стандартные: ADD, SQRT, SIN, COS, GT, MIN, MAX, AND, OR, etc.
    • Специальные
  • Функциональные блоки
    • Стандартные
    • Специальные - Библиотеки функций могут поставляться поставщиком или третьей стороной.
  • Программы.

Примеры кода

Программа сохраняет значение 4000 в ячейке памяти, и значение 41 в другой ячейке. Делит первое на второе и сохраняет результат в память.

LD SM 0.1              
MOVD #4000 , VD200 (* Сохранить 4000 по адресу VD200 *)
LD SM 0.1 
MOVW #41 , VW10    (* Сохранить 41 по адресу VW10 *)
LD SM 0.1
DIV VW10 , VD200   (* Разделить значение по адресу VD200 на значение VW10 сохранить результат по адресу VW200 *)

Программа увеличивает счетчик на единицу каждый тик генератора SM0.4 и уменьшает другой счетчик каждый тик того же генератора.

LD SM 0.1              
MOVD #0 , VW100  (* Сохранить 0 по адресу VW100 *)
MOVD #10 , VW110 (* Сохранить 10 по адресу VW110 *)
LD SM 0.4        (* Генератор *)
EU 
INCW VW100       (* Инкремент VW100 *)
DECW VW100       (* Декремент VW110 *)
                              
MEND

References

  1. IEC 61131-3:2013 Programmable controllers - Part 3: Programming languages
  2. IEC 61131-3 Protocol Overview
  3. Статья в википедии
  4. Semantics and Analysis of Instruction List Programs

Автор статьи: Фадеев П.В.