Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование промышленных контроллеров. Учебное пособие
.pdf
3.2.1. Контакты
Контакт – элемент, который передает состояние от горизонтальной связи левой стороны горизонтальной связи на правой стороне. Это
состояние – результат булевой AND-операции состояния горизонтальной связи с левой стороны с состоянием ассоциированной переменной или прямого адреса. Контакт не изменяет значение связанной
переменной или прямого адреса [4].
Для нормально разомкнутых контактов состояние левой связи
передается в правую связь, если состояние связанного логического
фактического параметра TRUE. Иначе состояние правой связи –
FALSE. Иными словами, нормально разомкнутый контакт «замыкается», если привязанная к нему переменная истинна. Изображение нормально разомкнутого контакта:
Для нормально замкнутых контактов состояние левой связи передается в правую связь, если состояние связанного логического фактического параметра FALSE. Иначе состояние правой связи TRUE.
Нормально замкнутый контакт «замыкается», если привязанная к
нему переменная ложна. Изображение нормально замкнутого контакта представлено ниже:
Если контакты соединены последовательно, то для того, чтобы
соединение передало TRUE, необходимо, чтобы оба контакта передавали TRUE. Контакты также могут быть соединены параллельно, тогда соединение передает состояние TRUE, когда хотя бы одна из ветвей передает TRUE. Это соответствует электрической параллельной и
последовательной схеме.
31

3.2.2. Катушки
Катушка является LD-элементом, который передает состояние
горизонтальной связи на левой стороне неизменяемым горизонтальной связи на правой стороне. В этом процессе состояние связанной
переменной или прямого адреса будет сохранено.
Катушка – аналог оператора присваивания в обычных языках программирования, она представляет собой выход, итог логической цепочки. В катушках состояние левой связи передается в связанный логический фактический параметр и в правую связь. Изображение катушки:
В инвертирующей катушке состояние левой связи копируется в
правую связь. Инвертированное состояние левой связи копируется в
связанный логический фактический параметр. Если связь находится
в состоянии FALSE, тогда правая связь тоже будет находиться в состоянии FALSE и связанный логический фактический параметр будет находиться в состоянии TRUE. Изображение инвертирующей
катушки:
В катушке установки состояние левой связи копируется в правую связь. Значение выхода cвязанного логического фактического параметра устанавливается в TRUE при подаче на вход любого ненулевого значения. Связанный логический фактический параметр может
сбрасываться только катушкой сброса. Изображение катушки установки:
32

В катушке сброса состояние левой связи копируется в правую
связь. Связанный логический фактический параметр устанавливается
в состояние FALSE, если левая связь имеет состояние TRUE, иначе он
не изменяется. Связанный логический фактический параметр может
устанавливаться только катушкой установки. Изображение катушки
сброса представлено ниже:
3.2.3. FFB в языке LD
При использовании FFB на языке LD функции и функциональные блоки будут редактироваться, только если по крайней мере один
вход типа BOOL соединен с левой шиной питания. Если FFB не имеет
входа типа BOOL, то FFB может быть связан с дополнительными необязательными формальными параметрами – «логическим разрешением» EN (вход).
Использование FFB без булевой связи с левой шиной питания
вызовет сообщение об ошибках при загрузке в ПЛК. На рис. 3.6 приведен пример использования FFB в языке LD.
Рис. 3.6. Использование блоков FFB в редакторе LD
33

3.2.4. Фактические параметры
1
Через фактические параметры при выполнении программы пересылаются значения из процесса или от других фактических параметров до контакта или на вход FFB. После обработки эти значения
передаются в фактические параметры катушек и выходов FFB. В контактах и катушках фактические параметры могут быть прямыми адресами, локализованными (переменные, объявленные внутри блока кода) переменными или нелокализованными (неразмещенными) переменными. На входах/выходах FFB фактические параметры могут быть
прямыми адресами, размещенными переменными, неразмещенными
переменными, константами или литералами1.
Для контактов и катушек типом данных фактического параметра должен быть тип данных BOOL. На входах/выходах FFB типы
данных фактических параметров должны соответствовать типу данных ввода/вывода. Единственным исключением являются обобщенные входы/выходы FFB, где тип данных определяется формальным
параметром.
При размещении контактов и катушек горизонтальные связи автоматически связываются со смежными, несвязанными контактами
или катушками, если контакты или катушки и входы/выходы FFB
находятся на той же самой вертикали. Связь с шиной питания будет
установлена, только если контакт помещен поблизости. При удалении
контактов или катушек любые присоединенные контакты или катушки будут также удалены. По аналогии с FBD здесь связи также не могут использоваться для конфигурации контуров, потому что невозможно однозначно определите порядок обработки в секции. Контуры
должны быть созданы с помощью фактических параметров. Горизонтальные связи автоматически устанавливаются после размещения.
Достоинствами языка LD являются представление программы в
виде электрического потока, наличие простых правил, использование
только булевых выражений. К недостаткам данного языка можно отнести то, что по мере увеличения количества «реле» схема становится
сложнее для интерпретации, анализа и откладки, так как LD не под-
Литерал – запись в исходном коде программы, представляющая собой фиксированное значение; литералами также называют представление
значения некоторого типа данных.
34

держивает подпрограммы, функции, инкапсуляцию2 и другие средства
2
структурирования программ с целью повышения качества программирования.
Еще один недостаток языка заключается в том, что язык, построенный по аналогии с релейными схемами, может быть эффективно использован только для описания процессов, имеющих дискретный
(двоичный) характер; для обработки «непрерывных» процессов
с множеством аналоговых переменных такой подход теряет смысл.
3.3. Язык IL
IL – «список инструкций» – это текстовый язык низкого уровня,
напоминающий Ассемблер, применяется для программирования булевых функций и эффективных, оптимизированных процедур. В рамках
стандарта IEC 61131-3 к архитектуре конкретного процессора не привязан. Используется только совместно с SFC.
3.3.1. Синтаксис IL
Программа на языке IL представляет собой список инструкций
или команд. Каждая команда должна начинаться с новой строки и
содержать оператор, заканчивающийся необязательным модификатором и, если необходимо, операндом.
Оператор – это символ арифметических или логических опера-
ций, вызова функционального блока. Определяет операцию, которая
должна быть выполнена с текущим результатом и операндом. Результат операции снова запоминается в текущем результате. Иными
словами, оператор указывает операцию, которая должна быть выполнена над содержимым аккумулятора (АК), в котором хранится
текущий результат, представляющий собой неявно заданный операнд, и вторым операндом, явно указанным в этом операторе. Полученный результат выполнения оператора помещается снова в АК.
Таким образом, язык IL – это так называемый аккумуляторно-ориентированный язык, т. е. каждая команда использует или изменяет текущее содержимое аккумулятора (тип временной памяти). Стандарт
IEC 61131-3 обозначает этот аккумулятор как результат [6].
Инкапсуляция – свойство языка программирования скрывать реализацию программного блока, предоставляя пользователю языка только его
интерфейсы.
35

Операндом может быть литерал, переменная, структурированная
3
переменная3, элемент структурированной переменной или прямой адрес. Пример объявления структурированной переменной:
TYPE <Имя_структуры>:
STRUCT
<Объявление переменной 1>
…
< Объявление переменной n>
END_STRUCT
END_TYPE
Команда – это один оператор плюс один или несколько операндов, разделенных запятыми; перед командой может стоять метка (необязательно), после которой ставится символ «:».
Комментарий – необязательный элемент, который начинается и
заканчивается символами «(*» и «*)» соответственно. Согласно стандарту, комментарии позволяются только в конце строки. Стандарт не
разрешает также вложение комментариев. Пример элемента программы на языке IL:
метка оператор операнд
START: LD A (* contact actuator *)
ANDN B (* and contact actuator 2 *)
ST C (* fan on *)
модификатор комментарий
Операнд и текущее содержимое аккумулятора должны иметь
одинаковый тип данных. Если необходимо обработать операнды различных типов данных, сначала выполняется преобразование типов.
Список команд должен всегда начинаться с оператора загрузки
аккумулятора LD и заканчиваться оператором сохранения ST. Стандартные операции языка IL приведены в табл. 3.2 [4].
Структурированная переменная – это множество разнотипных пере-
менных с общим именем, доступ к которым осуществляется по имени.
36

Таблица 3.2
Опера-
тор
Модифи-
катор
Описание
Операнды
Описание
1 2 3
4
5
LD (загрузка)
N (только
для операндов типа BOOL,
BYTE,
WORD или
DWORD)
Загрузка
значений
операндов в аккумулятор
Литерал,
переменная,
прямой адрес любого
типа данных
Значение операнда загружается в аккумулятор,
используя LD. Размер
данных аккумулятора автоматически подстраивается для типа данных операции. Это также действует для производных
типов данных.
Пример:
LD A
ADD B
ST E
В примере значение A загружается в аккумулятор с
добавлением значения B, и
результат сохраняется в E
ST
(сохранение)
N (только
для операндов типа данных
BOOL,
BYTE,
WORD или
DWORD)
Сохранение значения
аккумулятора
в операнде
Переменная,
прямой адрес любого
типа данных
Текущее значение аккумулятора сохраняется в операнде, используя ST. Тип
данных операнда должен
соответствовать типу данных аккумулятора.
Пример:
LD A
ADD B
ST E
В примере значение A
загружается в аккумулятор с добавлением значения B, и результат сохраняется в E. «Старый»
результат используется
далее в зависимости от
того, следует ли LD за ST
или нет.
37

1 2 3
4
5
Пример:
LD A
ADD B
ST E
SUB 3
ST C
В этом примере значение A
загружается в аккумулятор
с добавлением значения B,
и результат сохраняется в
E. Значение E (текущее
содержимое аккумулятора)
вычитается из значения B,
и результат сохраняется в C
S
(установка)
–
Установка операнда в 1,
когда
содержимое аккумулятора
равно 1
Переменная,
прямой адрес
данных типа
BOOL
S установка операнда в 1,
когда текущее значение
аккумулятора равно логической 1.
Пример:
LD A
S OUT
В этом примере значение
A загружается в аккумулятор, если содержимое аккумулятора (значение A)
равно 1, тогда OUT устанавливается в 1. Обычно
этот оператор используется вместе с оператором
сброса R в паре.
Пример:
LD A
S OUT
LD C
R OUT
В этом примере показан
RS-триггер (главный
сброс), который управляется через логические переменные A и C
Продолжение табл. 3.2
38

1 2 3
4
5
R
(сброс)
–
Установка
операнда в
0, когда
содержимое аккумулятора
равно 1
Переменная,
прямой адрес данных
типа BOOL
R установка операнда в 0,
когда текущее содержимое аккумулятора равно
логической 1.
Пример:
LD A
R OUT
В этом примере значение
A загружается в аккумулятор, если содержимое
аккумулятора (значение
A) равно 0, тогда OUT
устанавливается в 1.
Обычно этот оператор
используется вместе с
оператором установки S в
паре.
Пример:
LD A
R OUT
LD C
S OUT
В этом примере показан
SR Триггер (главная установка),который управляется через две логические
переменные A и C
AND
N, N(, (
Логическое
И
Литерал,
переменная,
прямой адрес данных
типа BOOL,
BYTE,
WORD или
DWORD
При помощи AND производится логическая операция И между содержимым аккумулятора и операндом.
Для BYTE, WORD и
DWORD типов данных
операция производится
побитно.
Пример:
LD A
AND B
Продолжение табл. 3.2
39

Продолжение табл. 3.2
1 2 3
4
5
AND C
ST D
В примере D = 1, если
A = 1, B = 1 и C = 1
OR
N, N(, (
Логическое ИЛИ
Литерал,
переменная,
прямой адрес
данных типа
BOOL,
BYTE,
WORD или
DWORD
При помощи OR производится логическая операция ИЛИ между содержимым аккумулятора и
операндом.
Для BYTE, WORD и
DWORD типов данных
связь производится побитно.
Пример:
LD A
OR B
OR C
ST D
В примере D = 1, если
A = 1 или B = 1 или C = 1
XOR
N, N(, (
Логическое исключающее
ИЛИ
Литерал,
переменная,
прямой адрес
данных типа
BOOL,
BYTE,
WORD или
DWORD
При помощи XOR производится логическая операция «исключающее ИЛИ»
между содержимым аккумулятора и операндом.
Если связывается более
двух операндов, результат
для нечетного числа единичных состояний равен
1, и равен 0 для четного
числа единичных состояний.
Для BYTE, WORD и
DWORD типов данных
связь производится побитно.
Пример:
LD A
XOR B
ST D
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
