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

Программирование промышленных контроллеров. Учебное пособие

.pdf
Скачиваний:
2
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]