Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
S3_Методичка_рус.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
8.89 Mб
Скачать

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;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]