Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование технологических контроллеров в среде Unity. Учебное пособие.pdf
X
- •ВВЕДЕНИЕ
- •1.1. Принцип действия системы промышленной автоматизации
- •2.1. Структура программируемого логического контроллера
- •2.2. Конструктивное исполнение контроллеров
- •2.3. Модули ввода-вывода
- •2.4. Языки и среды программирования логических контроллеров
- •2.5. Триггеры, таймеры, счетчики
- •Значение
- •Значение
- •2.6. Математические операции и команды работы с массивами
- •3. ТИПЫ ПЕРЕМЕННЫХ
- •3.1. Элементарные типы данных
- •3.2. Представление элементарных типов данных
- •3.4. Система адресации переменных Telemecanique
- •4. ПАКЕТ ПРОГРАММИРОВАНИЯ Unity Pro
- •4.1. Общие сведения
- •4.2. Структура пакета Unity Pro
- •4.3. Интерфейс пользователя Unity Pro и его составные части
- •4.4. Иерархическое построение программы ПЛК
- •4.5. Редакторы языков программирования Unity Pro
- •4.6. Соединение терминала с ПЛК
- •5.1. Настройки проекта
- •5.2. Конфигурирование контроллера Premium
- •5.3. Работа с переменными
- •5.4. Структура приложения
- •5.5. Программирование с использованием блоков FBD
- •6.1. Введение
- •6.3. Библиотека для управления аналоговым вводом/выводом
- •6.3.2. Блоки настройки конфигурации
- •6.3.2.1. Блок конфигурации модуля ACI 030 00 (ACI030)
- •6.3.2.2. Блок конфигурации модуля AC0 020 00
- •6.3.2.3. Блок конфигурации модуля ATI 030 00
- •6.3.2.4. Блок конфигурации модуля ARI 030 00
- •6.3.2.5. Блок конфигурации модуля AVI 030 00
- •6.3.2.6. Блок конфигурации модуля AVO 020 00
- •6.3.2.8. Блок конфигурации главного модуля (QUANTUM)
- •6.3.2.9. Блок конфигурации расширителя объединенной платы (XBP)
- •6.3.3. Блоки масштабирования
- •6.3.3.1. Блок нормализации аналоговых входов (I_NORM)
- •6.3.3.3. Блок преобразования физических аналоговых входов (I_PHYS)
- •6.3.3.4. Блок преобразования физических аналоговых входов со статусом предупреждения (I_PHYS_WARN)
- •6.3.3.5. Блок масштабирования аналоговых входов (I_SCALE)
- •6.3.3.6. Блок масштабирования аналоговых входов со статусом предупреждения (I_SCALE_WARN)
- •6.3.3.7. Блок преобразования необработанных значений аналоговых входов (I_ROW)
- •6.3.3.8. Блок нормализации аналоговых выходов (O_NORM)
- •6.3.3.11. Блок имитации необработанных сигналов аналоговых входов (I_RAW_SIM)
- •6.3.4. Блоки отладки аналогового ввода/вывода
- •6.3.4.1. Блок линеаризации аналоговых входов (I_FILTER)
- •6.4.2. Регуляторы (Controller)
- •6.4.3. Арифметические операции (Mathematics)
- •6.4.4. Измерения (Measurement)
- •6.4.5. Устройства сопряжения с объектом (Output Processing)
- •6.4.6. Формирование сигналов задания (Setpoint Managment)
- •6.6. Управление с обратной связью (CLC)
- •6.6.1. Типовые динамические звенья
- •6.6.1.1. Блок запаздывания (DELAY)
- •6.6.1.2. Интегратор с ограничением выхода (INTEGRATOR1)
- •6.6.1.3. Апериодическое звено (фильтр) первого порядка (LAG1)
- •6.6.1.5. Ограничитель скорости первого порядка (LIMV)
- •6.6.1.6. Дифференциатор с запаздыванием (SMOOTH_RATE)
- •6.6.2. Регуляторы
- •6.6.2.1. Пропорционально-интегральный регулятор (PI1)
- •6.6.2.2. Пропорционально-интегрально-дифференциальный регулятор (PID1)
- •6.6.2.3. ПИД-регулятор с параллельной структурой (PIDP1)
- •6.6.3. Управление с обратной связью для профессионалов (CLC_PRO)
- •6.6.3.1. Генератор функций (FGEN)
- •6.6.3.2. Фильтр второго порядка (LAG2)
- •6.7. Автоматизированная настройка регулятора в пакете Unity
- •6.8. Упражнения для самостоятельной работы
- •ЗАКЛЮЧЕНИЕ
- •ЛИТЕРАТУРА

31
RU
STO
( )
OR
CTU
( )
( )
C3
C2
C1
OUT
L1
NZ1
NZ2
NZ3
( )
( )
S
R
ТON
R
GEN
S
R
Рис. 2.17. Функциональная схема бункера-накопителя
AND
Упражнение. Разработка программы управления работой бункеранакопителя.
1. В соответствии с функциональной схемой на рис. 2.17 создайте
список переменных с распределением по физическим адресам контроллера.
2. Разработайте и отладьте программу управления работой бунке-
ра-накопителя, сохранив ее под именем bunker.
3. Проанализируйте работу программы и определите, каким недос-
татком обладает функциональная схема на рис. 2.17.
2.6. Математические операции и команды работы с массивами
Группа основных арифметических команд. Основной набор
арифметических команд содержит следующие команды: ADD – сложение двух или нескольких чисел, SUB – вычитание, MUL – умножение, DIV – деление (рис. 2.18, а–г соответственно). Для каждого из типов переменных существует своя арифметическая команда.
Команда ADD. Складываются содержимые чисел, указанных на
верхнем и среднем входах функционального блока. Результат передается на выход. Слагаемые должны быть типа, соответствующего команде сложения.
Команда SUB. Из числа, поступающего на верхний вход (Опе-
ранд1), вычитается число, поступающее на второй вход (Операнд2),

32
результат передается на выход. Операнды должны быть соответствующих типов.
Команда MUL. Функция перемножает входные значение и при-
сваивает результат выходу.
Команда DIV. Делит Операнд1 на Операнд2.
При делении типов данных (INT, DINT, UINT, UDINT) десятичные
части в результате опускаются, например: 7 ∕ 3 = 2.
а б в г
Рис. 2.18. Функциональные блоки математических операций
Группа команд Сравнения (отношения). Функции команд сравнения проверяют значения входов на заданное отношение. Выход блока устанавливается в «1», если заданное отношение истинно. При этом
существующие блоки проверяют следующие отношения:
• команда EQ – равно;
• команда GE – больше либо равно;
• команда GT – больше;
• команда LE – меньше либо равно;
• команда LT – меньше;
• команда NE – не равно.
Упражнение. Изучение работы арифметических команд.
Перевод значений температуры по шкале Фаренгейта в значение
температуры по шкале Цельсия осуществляется по формуле
C = (F – 32) 5/9,
где F – температура по Фаренгейту, С – температура в градусах Цельсия.
Составьте программу, осуществляющую перевод значений температуры по шкале Фаренгейта в значение температуры по шкале
Цельсия.

33
Упражнение. Модернизация программы управления работой бун-
( )
( )
AND
( )
( )
( )
С3
С2
С1
RUN
STOP
L1
OUT
NZ1
NZ2
NZ3
GE
#0012
ADD
CTU
#0012
CTU
#0012
CTU
#0012
S
R
Регистр 1
Регистр 2
Регистр 3
...
Регистр N
кера-накопителя.
1. Разработанную вами программу для бункера-накопителя (см.
рис. 2.16) необходимо модернизировать для устранения имеющихся на
функциональной схеме (см. рис. 2.17) недостатков. При работе используйте функциональную схему на рис. 2.19.
2. Функция GE используется для реализации сравнения текущего
количества пришедших импульсов с предельным значением (константа #0012).
S
R
T0.1
R
GEN
Рис. 2.19. Модернизированная функциональная схема бункера-накопителя
Примечания. При реализации широкого спек-
тра задач управления требуется манипулировать
большими массивами данных. В контроллерах
для хранения данных используются группы регистров. В программных оболочках для программирования контроллеров имеются библиотеки, позволяющие работать с массивами данных (библиотеки Array). При этом массив данных носит
название таблицы.
Таблица – непрерывная последовательность ре-
гистров (рис. 2.20), чтение-запись которых осущест-
Рис. 2.20. Таблица
вляется последовательно. Если таблица обрабатывается не полностью, в блоках может присутствовать указатель, в кото-

34
ром содержится значение, указывающее на очередной обрабатываемый
регистр таблицы.
Функциональные блоки библиотеки Array позволяют выполнять
следующие операции с таблицами:
1) операции пересылки;
2) арифметические операции с таблицами;
3) логические операции с таблицами;
4) операции сравнения;
5) операции с поиском заданных значений и сортировки.
Для организации пересылок с таблицами в основном наборе биб-
лиотек имеются следующие блоки, показанные на рис. 2.21.
Рис. 2.21. Блоки для организации пересылок
Блок MOVE копирует содержимое регистров-источников в регист-
ры таблицы приема. При этом возможны следующие функции.
1. Одним из действий функции MOVE_***_*** является присваи-
вание одного значения всем элементам таблицы (рис. 2.22, а).
Доступны следующие функции:
• MOVE_BOOL_AREBOOL (присваивание значения BOOL всем
элементам таблицы EBOOL);
• MOVE_WORD_ARWORD (присваивание значения WORD всем
элементам таблицы WORD);
• MOVE_DWORD_ARDWORD (присваивание значения DWORD
всем элементам таблицы DWORD);
• MOVE_INT_ARINT (присваивание значения INT всем элемен-
там таблицы INT);
• MOVE_REAL_ARREAL (присваивание значения REAL всем
элементам таблицы REAL).
2. Другим действием функции MOVE_***_*** является преобразование таблицы в значение или значения в таблицу.
Доступны следующие функции:
• MOVE_AREBOOL_INT (преобразование таблицы EBOOL в
число INT);

35
• MOVE_AREBOOL_DINT (преобразование таблицы EBOOL в
Регистр 1
Регистр 2
Регистр 3
...
Источник
Регистр N
Таблица
Регистр 1
Регистр 2
Регистр 3
...
Регистр N
Регистр 1
Регистр 2
Регистр 3
...
Регистр N
Таблица-источник
Таблица-приемник
число DINT);
• MOVE_INT_AREBOOL (преобразование числа INT в таблицу
EBOOL);
• MOVE_DINT_AREBOOL (преобразование числа DINT в табли-
цу EBOOL).
Команда COPY_***_*** (рис. 2.22, б) копирует набор последова-
тельных элементов из одной таблицы в другую. Таблицы могут иметь
различные или одинаковые типы, целевая область фиксируется параметрами функции.
а б
Рис. 2.22. Функции работы с таблицами
Упражнение. Работа с массивами.
1. Разработайте самостоятельно программу, реализующую опера-
ции с массивами (рис. 2.22). Проверьте действие программы.
2. Самостоятельно придумайте несколько способов обнуления таблицы.
Значительное число функциональных блоков позволяют рабо-
тать только с данными одного типа. Для расширения возможностей
программирования на языке FBD – диаграмм следует воспользоваться
библиотекой преобразования типов (Type to type).
Кроме того, часто библиотекой преобразования типов пользуются
для преобразования отдельных битов в слова и наоборот.
Упражнение. Программирование индикации младшего секундного
разряда часов с помощью поля отображения состояния выходов контроллера (рис. 2.23).

36
12:45:37
Outputs
ПЛК
Рис. 2.23. Программирование индикации младшего секундного разряда
часов
Постановка задачи. Контроллер на передней панели имеет поле
отображения состояния своих дискретных выходов. Используя это поле как 16-точечный индикатор, организуйте индикацию младшего секундного разряда часов.
1. Разработайте программу, которая должна содержать генератор с
периодом импульсов в 1 секунду и индицировать текущее состояние
младшего секундного разряда в соответствии со значением.
2. При создании программы используйте команды манипулирования данными или команды преобразования типов.
Обычно версии программных пакетов позволяют разделять логи-
ческую программу пользователя на несколько секций. Разбиение на
секции целиком зависит от желания и стиля работы программиста и
зачастую соответствует различным этапам реализации технологического процесса.
Последовательность обработки отдельных секций – естественная, в
последовательности, соответствующей последовательности создания
секций. Однако большинство пакетов программирования позволяет
установить условия выполнения такой секции. Для изменения естественного порядка выполнения секций обычно используется логическая
переменная CONDITION, которая разрешает/запрещает выполнение
секции.

37
Упражнение. Программирование генератора с переключением
G 1
1 Hz
G 2
2 Hz
( ) OUT1
IN1
ON
OFF
частоты прямоугольных импульсов.
Постановка задачи. Функциональная схема двухчастотного гене-
ратора (рис. 2.24) включает генераторы G1 и G2, работающие с постоянными частотами 1 и 2 Гц соответственно. Частота импульсов на выходе OUT1 зависит от контакта IN1. Переключение частоты необходимо организовать с использованием логической переменной
CONDITION, разрешающей выполнение одной секции и запрещающей
выполнение другой.
При разработке программы учитывайте, что обмоткам реле даже
в разных секциях не может ставиться в соответствие одна и та же
ссылка на выходную переменную. Для объединения выходов генераторов следует воспользоваться функцией «исключающее или».
Рис. 2.24. Функциональная схема двухчастотного генератора

38
нием
ние
3. ТИПЫ ПЕРЕМЕННЫХ
3.1. Элементарные типы данных
Стандарт IEC 1131-3 предусматривает элементарные типы данных
[1, 8, 9], список которых приведен в табл. 3.1.
Таб лица 3.1
Тип
данных
BOOL 1 Логический 0 или 1
EBOOL 3 Логический c определе
BYTE 8 8-битовая последовательность –
WORD 16 16-битовая последовательность –
INT 16 Целое со знаком от -32768 до 32767
DINT 32 Длинное целое со знаком от -2147483648
UINT 16 Целое без знака от 0 до 65535
UDINT 32 Длинное целое без знака от 0 до 4294967295
REAL 32 Вещественное число от -8,43Е-37 до 3,36Е38
TIME 32 Время от 0 до 4294967295 мс
STRING 16–256 Последовательность от 16
Количе-
ство бит
Описание Диапазон значений
форсирования и фронтов
до 256 бит
0 или 1, управле
фронтами
до 214783647
–
Типы данных используются во всех видах программного обеспечения, работающего с ПЛК. Одни и те же аппаратные регистры ПЛК могут интерпретироваться как разные типы данных в зависимости от задач пользователя.
Дадим некоторые комментарии к типам переменных.
При работе с аппаратной частью контроллеров могут применяться
специальные типы данных ANL_IN и ANL_OUT, которые используются с аналоговыми входами и выходами.
Применение логического типа переменных BOOL и EBOOL в ПЛК
определяется в соответствии с табл. 3.2.

39
Таблица 3.2
Переменная Тип
Внутренний бит
Системный бит
Бит, извлеченный из слова
% I входы
Бит ошибки модуля
Бит ошибки канала
Входной бит
% Q выходы
Выходной бит EBOOL
EBOOL
EBOOL
BOOL
BOOL
BOOL
EBOOL
Заметим, что типы данных BYTE, WORD и STRING применяются
только как последовательность битов. Арифметические операции с
ними выполнять нельзя. К ним применимы поразрядные логические
операции, операции поразрядного сложения, умножения и сдвига.
Целые типы переменных могут быть представлены по различным
основаниям. По умолчанию целая переменная представляется по основанию 10. Значение по основанию 2 является беззнаковым и имеет
префикс 2#. Восьмеричное и шестнадцатеричное представление переменных имеют соответственно префиксы 8# и 16#. Из всех представлений знаковым может быть только десятичное представление, при
этом тип переменной должен быть знаковым. В этом случае значению
переменной предшествует знак «+» (необязательно) или «–».
Переменная Т# или TIME# (время) представляется двойным
беззнаковым целым типом (UDINT). Он выражает продолжительность в миллисекундах. При этом внутри переменной указываются
представления времени: дни (D), часы (Н), минуты (М), секунды
(S), миллисекунды (MS). Максимальная продолжительность переменной типа TIME составляет примерно 49 дней. Возможные способы ввода максимального значения переменной типа TIME приведены в табл. 3.3.

40
Десятичное значение
2 4 5 0 3 1
Двоичное представление
0010
0100
0101
0000
0011
0001
0110
Таблица 3.3
Представление Комментарий
T#4294967295MS Значение в миллисекундах
T#4294967S_295MS Значение в секундах и миллисекундах
T#71582M_47S_295MS Значение в минутах / секундах / миллисе-
кундах
T#1193H_2M_47S_295MS Значение в часах / минутах / секундах / мил-
лисекундах
T#49D_17H_2M_47S_295MS Значение в днях / часах / минутах / секундах /
миллисекундах
3.2. Представление элементарных типов данных
Элементарные типы данных могут быть кодированы в двоичнодесятичном формате (BCD – Binary Coded Decimal). Двоично-деся-
тичный формат служит для представления десятичных чисел от 0 до 9
с использованием группы из 4 бит. В этом формате 4 бита применяются для кодирования десятичных цифр. При этом комбинации битов,
начиная с 1010, не используются. Пример кодирования в 16-битовом
формате приведен в табл. 3.4, а в 32-битовом – в табл. 3.5.
Десятичное значение
2730
Двоичное представление 0010 0111 0011 0000
2450316
В двоично-десятичном формате хранятся типы данных, включающие календарные и временные метки. Это типы «Дата» (D), «Время
дня» (TOD), «Дата и время» (DT).
Таб лица 3.4
2
7
3
Таб лица 3.5
0
6
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
