- •Днепропетровск нМетАу 2012
- •Издается в авторской редакции. Рецензенты: в.Н. Куваев, д-р. Техн. Наук, проф. (нгу)
- •Содержание
- •Часть 1. Описание пользовательского интерфейса
- •Часть 2. Разработка проекта системы регулирования температуры в методической нагревательной печи 68
- •Часть 3. Комплекс индивидуальных заданий 98
- •Введение
- •Часть 1. Описание пользовательского интерфейса среды scada/Softlogic s3
- •1.1. Общая характеристика scada-системы s3-ide
- •1.2. Создание проекта в среде разработки s3
- •1.2.1. Принципы построения
- •1.2.2. S3, qnx и hmi–проекты
- •Минимальные требования к рабочим станциям hmi–проектов:
- •1.3. Конфигурирование qnx–проекта
- •1.3.2. Переменные s3
- •1.3.3. Устройства ввода-вывода. Драйверы
- •1.3.4. Процессы управления
- •1.3.5. База данных
- •1.4. Конфигурирование hmi–проекта
- •1.4.1. Процесс отображения hmi
- •1.4.1.1. Создание мнемосхем
- •1.4.1.2. Редактирование мнемосхемы
- •1.4.1.3. Элементы мнемосхем палитры Photon
- •1.4.1.4. Скрипты процесса отображения
- •1.4.1.5. Процессы отображения в qnx–проекте
- •1.4.2. Графики
- •1.4.3. Протокол
- •1.4.4. Пользователи
- •1.5. Особенности создания узлов сети для разработки и отладки проектов в среде s3-ide
- •1.5.1. Установка Demo системы с использованием виртуальной машины
- •1.5.2. Установка демонстрационной версии среды разработки и среды исполнения s3
- •1.5.2.1. Инсталляция s3-ide в Windows
- •1.5.2.2. Инсталляция среды исполнения s3-qnx-Runtime
- •Часть 2. Разработка проекта системы регулирования температуры в методической нагревательной печи
- •2.1. Постановка задачи автоматизации
- •2.1.1. Схема технологического агрегата и описание автоматизируемой установки
- •2.1.2. Исходные данные и требования к качеству аср температуры
- •2.1.3. Динамическая модель аср температуры
- •2.1.3.1. Математическое описание нагревательной печи как объекта регулирования
- •2.1.3.2. Аппроксимация объекта регулирования
- •2.1.3.3. Выбор закона регулирования и расчет параметров регулятора
- •2.2. Создание и конфигурирование qnx–проекта аср температуры в среде разработки s3-ide
- •2.2.1. Описание переменных
- •2.2.2. Создание процесса управления
- •2.2.2.1. Описание функциональных блоков
- •2.2.2.2. Создание последовательной fbd программы
- •2.2.3. Создание процесса отображения: мнемосхемы
- •2.2.4. Создание базы данных
- •2.3. Компиляция, загрузка и запуск проекта
- •2.4. Режимы работы аср температуры
- •2.4.1. Автоматизированный режим
- •Загрузка Выдача -10 0.011 0.017 0 4 12 -3.7
- •Загрузка Выдача -10 0.011 0.017 0 12 5 -325.6
- •Загрузка Выдача -10 0.011 0.017 0 12 5 319.4
- •2.4.2. Автоматический режим
- •Часть 3. Комплекс индивидуальных заданий
- •3.1. Порядок разработки и защиты проекта
- •3.2. Перечень тем по металлургическим переделам
- •3.2.1. Агломерационные машины. Подготовка шихтовых материалов
- •3.2.2. Доменный процесс
- •3.2.3. Сталеплавильные печи
- •3.2.4. Нагревательные печи
- •3.2.5. Прокатное производство
- •Литература
- •Программирование систем реального времени проектирование автоматизированных систем управления в среде
- •49600, Днепропетровск, пр. Гагарина, 4
2.2.1. Описание переменных
Создаваемые в нашем проекте переменные имеют привязку не к каналу драйвера, а к определенным входам/выходам модели АСР температуры. Поэтому их права доступа на чтение/запись могут назначаться пользователем.
Проект будет содержать 19 аналоговых переменных, которые можно разделить на три группы:
1) параметры объекта регулирования и устройства управления, внешние и внутренние воздействия – K, T1, Т2, Kd, Kp, Ki, x, y, z;
2) переменные процесса отображения и анимации – zagruzka, vydacha, cvet_pechi, cvet_zagot, mesto_zagt, delay, auto;
3) показатели качества процесса регулирования – d_y, t_reg, perereg.
Все переменные в нашем проекте являются локальными (внутренними) и будут находиться в ветке в контроллера QNX_DEMO. В случае добавления других контроллеров они будут не видны. Создание переменной показано на рис. 2.10. Таблица переменных приведена на рис. 2.11.
Рис. 2.10. Создание переменной
Рис. 2.11. Таблица переменных группы QNXControlProject.QNX_DEMO
При создании переменных параметры объекта и регулятора должны быть инициализированы в диалоговом окне Создать, поле Инициализация: К = 4, Т1 = 10 с, Т2 = 15 с, Kp = 0,11, Ki = 0, 017, Kd = 0.
2.2.2. Создание процесса управления
Создадим процесс управления (upravlenie) и выполним необходимые настройки в окне Свойства процесса управления (рис. 2.12).
|
|
Рис. 2.12. Добавление процесса управления
Добавленный элемент дерева проекта upravlenie состоит из ряда секций (см. п.п. 1.3.4). В секции Подпрограммы создадим функциональные блоки (smth, integrator, diferenciator, ltn, animation, parametry) на языке ST, которые будут использованы при создании Последовательной программы (рис. 2.13).
Рис. 2.13. Добавление функциональных блоков
2.2.2.1. Описание функциональных блоков
В подпрограмме SMTH реализовано динамическое звено 2-го порядка (апериодическое), представляющее собой наш объект регулирования.
Переходная функция звена имеет вид
, (2.9)
где Т3 и Т4 – постоянные времени ОР, с; k – коэффициент передачи ОР;
,
. (2.10)
Для моделирования входных и выходных точек связи, а также ячеек памяти (переменных) с локальной областью видимости, создадим таблицу входов/выходов для блока smth:
входами в блок являются параметры x, K, Т1, Т2 (тип переменных – аналоговый ANA);
выход из блока у (тип переменной – ANA);
локальными являются три переменные demph, T3, T4, temp, t (тип переменных – ANA), t0, t1 (тип переменных – TIME).
Далее создадим программу на языке ST с использованием необходимых операторов и библиотечных функций (строки 1-5, рис. 2.14).
Рис. 2.14. Создание функционального блока smth
В подпрограмме INTEGRATOR реализовано интегрирующее звено, представляющее собой интегральную составляющую регулятора.
Переходная функция идеального интегрирующего звена имеет вид
. (2.11)
Создадим таблицу входов/выходов блока integrator:
входами в блок являются параметры x, Ki (тип переменных – ANA);
выход из блока у (тип переменной – ANA).
Создадим программу на языке ST (строки 1-2, рис. 2.15).
Рис. 2.15. Создание функционального блока integrator
В подпрограмме DIFERENCIATOR реализовано дифференцирующее звено, представляющее собой дифференциальную составляющую регулятора.
Переходная функция идеального дифференцирующего звена имеет вид
. (2.12)
Переходная функция реального дифференцирующего звена имеет вид
. (2.13)
Создадим таблицу входов/выходов блока diferenciator:
входами в блок являются параметры x, Kd (тип переменных – ANA);
выход из блока у (тип переменной – ANA);
локальной является переменная xpred (тип переменной – ANA).
Создадим программу на языке ST (строки 1-3, рис. 2.16).
В подпрограмме LTN реализовано звено, имитирующее инерционные свойства объекта регулирования (запаздывание). Реализовано оно в виде обычного массива из 10 ячеек.
Переходная функция звена запаздывания имеет вид
. (2.14)
Рис. 2.16. Создание функционального блока diferenciator
Создадим таблицу входов/выходов блока ltn:
входами в блок являются параметры input (ANA) и discret (время запаздывания, тип INT);
выход из блока output (ANA);
локальными являются 12 переменных, десять из которых q1…q10 (массив) предназначены для временного хранения входных значений (ANA), а также t и t0 – время обновления переменных (TIME).
Создадим программу на языке ST (рис. 2.17).
Рис. 2.17. Создание функционального блока ltn
Программный код на языке ST:
1 |
2 |
3 |
4 |
Q[10] :ANA;
t:=getCurrTime( );
if t-t0 > t#400ms then
|
q10:=q9; q9 :=q8; q8 :=q7; q7 :=q6; q6 :=q5; q5 :=q4; q4 :=q3; q3 :=q2; q2 :=q1; q1 :=input; |
Q[0]:=q1; Q[1]:=q2; Q[2]:=q3; Q[3]:=q4; Q[4]:=q5; Q[5]:=q6; Q[6]:=q7; Q[7]:=q8; Q[8]:=q9; Q[9]:=q10; |
output :=Q[discret-1]; t0:=t; end_if
return true; |
Библиотечная функция getCurrTime( ) возвращает текущее время в милисекундах. Отсчет времени идет от первого обращения к функции.
t#400ms – соответствует значению 100 милисекунд – формат записи переменной типа TIME, предназначенной для хранения значений времени (см. Справку S3).
Подпрограмма ANIMATION предназначена для графического представления процесса нагрева заготовки в методической печи, реализации элементов анимации на мнемосхеме и вывода на дисплей необходимой информации о процессе регулирования температуры.
Создадим таблицу входов/выходов блока animation:
входами в блок являются параметры (ANA):
у – текущее значение температуры в печи,
zagruzka – флаг загрузки заготовки в печь через окно посада,
vydacha – флаг выдачи заготовки из печи,
z_in – входное возмущение,
auto – флаг разрешения автоматической загрузки заготовки в печь,
delay – длительность пребывания заготовки в печи;
выходы из блока (ANA):
cvet_pechi – цвет печи,
cvet_zagot – цвет заготовки,
mesto_zagot – расстояние, на которое перемещается заготовка на мнемосхеме,
z_out – вывод возмущения;
локальными являются 6 аналоговых (ANA) переменных:
t_1, t_2, sdvig_1, sdvig_2, PT, t_auto,
и 2 временных (TIME) переменных:
timer, t0.
Создадим программу на языке ST с использованием необходимых операторов и библиотечных функций (рис. 2.18).
Рис. 2.18. Создание функционального блока animation
Программный код на языке ST:
1 |
2 |
//Установка цвета печи cvet_pechi := 0.01*y;
//Автоматический режим //отключение таймера if auto = 0.0 then t_auto:=0.0; end_if; if auto = 1.0 then zagruzka := 1.0; if t_auto > 10.0*delay then vydacha := 1.0; if t_auto > 200.0 + 10.0*delay then zagruzka := 0.0; vydacha := 0.0; t_auto:=0.0; end_if end_if end_if
//Запуск таймеров timer:=getCurrTime(); if timer-t0 > t#100ms then t_1:=t_1+1.0; t_2:=t_2+1.0; t_auto:=t_auto + 1.0;
t0:=timer; end_if
|
//Реакция на Загрузку, выключение 1-го //таймера if zagruzka = 0.0 then t_1 := 0.0; end_if
//реакция на Выдачу, выключение 2-го //таймера if vydacha = 0.0 then t_2 := 0.0; end_if
//реакция на Сброс if zagruzka = 0.0 then sdvig_1 := 0.0; sdvig_2 := 0.0; cvet_zagot := 0.0; end_if
//Сдвиг для Загрузки if sdvig_1 < 180.0 then sdvig_1:=10.0 * t_1; end_if;
//Сдвиг для Выдачи if sdvig_2 < 180.0 then sdvig_2:=10.0 * t_2; end_if;
mesto_zagot:=sdvig_1+sdvig_2;
//Изменение цвета заготовки PT:=500.0; if zagruzka = 1.0 and vydacha = 0.0 and sdvig_1 = 180.0 then cvet_zagot := cvet_zagot*(1.0-(1.0/PT))+ cvet_pechi/PT; z_out:=z_in; else z_out:=0.0; end_if return true; |
Подпрограмма PARAMETRY предназначена для вычисления показателей качества функционирования АСР температуры: времени регулирования, перерегулирования, статической ошибки.
Создадим таблицу входов/выходов блока parametry:
входные переменные (ANA):
х – задающее воздействие (заданное значение температуры в рабочем пространстве печи),
у – текущее значение температуры в печи,
z – возмущающее воздействие;
выходные переменные (ANA):
d_t – статическая ошибка,
t_reg – время регулирования,
perereg – перерегулирование;
локальными являются 12 аналоговых (ANA) переменных:
t_1, х1, у1, m, t_nachal, t_konech, maxim, minim, up, down, z1, t_2,
и 2 временных (TIME) переменных:
timer, t0.
Создадим программу на языке ST с использованием необходимых операторов и библиотечных функций (рис. 2.19).
Рис. 2.19. Создание функционального блока parametry
Программный код на языке ST:
1 |
2 |
timer := getCurrTime();
if timer - t0 > t#100ms then
//Вкл. таймер t_1 := t_1 + 1.0; t_2 := t_2 + 1.0;
|
//максимум по заданию //по увеличению if x > x1 and m = 0.0 then t_nachal := t_1; m := 1.0; t_2 := 0.0; end_if;
|
3 |
4 |
//определение моментa перегиба if y < y1 and m = 1.0 and t_2 > 10.0 then maxim := y1; m := 0.0; end_if;
//по уменьшению if x < x1 and m = 0.0 then t_nachal := t_1; m := 2.0; t_2 := 0.0; end_if;
//определение моментa перегиба if y > y1 and m = 2.0 and t_2 > 10.0 then maxim := y1; m := 0.0; end_if;
//максимум по возмущению //по увеличению if z > z1 and m = 0.0 then t_nachal := t_1; m := 3.0; t_2 := 0.0; end_if;
//1-й перегиб if y < y1 and m = 3.0 and t_2 > 10.0 then m := 5.0; end_if; //2-й перегиб if y > y1 and m = 5.0 and t_2 > 10.0 then maxim := y1; m := 0.0; end_if; |
//по уменьшению if z < z1 and m = 0.0 then t_nachal := t_1; m := 4.0; t_2 := 0.0; end_if;
//1-й перегиб if y > y1 and m = 4.0 and t_2 > 10.0 then m := 6.0; end_if; //2-й перегиб if y < y1 and m = 6.0 and t_2 > 10.0 then maxim := y1; m := 0.0; end_if;
//Время запаздывания if y < 0.95*x then down := 1.0; else down := 0.0; end_if;
if y > 1.05*x then up := 1.0; else up := 0.0; end_if;
if up = 1.0 or down = 1.0 then t_konech := t_1; end_if; d_y := y - x; t_reg := (t_konech - t_nachal)*0.1;
|
5 |
6 |
if m = 0.0 then perereg := ((maxim – x)/х)*100.0; end_if
|
z1 := z; x1 := x; y1 := y; t0 := timer; end_if return true; |
