Upload
others
View
23
Download
1
Embed Size (px)
Citation preview
1
І.М. Голінко, А.І. Кубрак
Моделювання та оптимізація
систем керування
Монографія
Кам’янець-Подільський
2012
2
УДК 519.6
ББК 22.18
Г 60
Рецензенти: Ладанюк А.П., д.т.н., проф. (Національний університет
харчових технологій)
Казак В.М., д.т.н., проф. (Національний авіаційний
університет)
Рекомендовано до видання Вченою Радою теплоенергетичного
факультету Національного технічного університету України
“Київський політехнічний інститут”
(протокол № 1 від 30.08.2012 року)
Голінко, І.М.
Г 60 Моделювання та оптимізація систем керування: монографія /
І.М. Голінко, А.І. Кубрак. – Кам‟янець–Подільський: ПП Буйницький,
2012. – 262 с.
ISBN 978-617-608-034-3
У монографії розглянуто ряд типових математичних моделей для
теплових об‟єктів автоматичного керування та деяких механічних систем з
розподіленими параметрами. Для об‟єктів керування визначаються
передатні функції, перехідні, імпульсні, частотні та статичні
характеристики. Усе це доводиться до рівня комп‟ютерних програм на
Турбо Паскалі з візуалізацією результатів у вигляді графіків та годографів.
Автори вважають, що на сучасному етапі розвитку комп‟ютерної
техніки найбільш раціональним способом представлення динаміки об‟єктів
в системах керування (і об‟єктів з розподіленими параметрами в тому
числі) є масив ординат перехідної або (що еквівалентно) імпульсної
характеристики, який може використовуватися для розрахунку як
частотних характеристик так і перехідних процесів в системах керування.
Алгоритми оптимізації систем керування, що наводяться в роботі,
базуються на використанні інтегральних показників якості, які
обчислюються за масивом ординат перехідної характеристики системи. Усі
алгоритми доводяться до рівня демонстраційно-відлагоджувальних
програм. Останні можуть використовуватися для дослідження конкретних
систем керування з аналоговими та цифровими регуляторами.
Робота розрахована на науковців, інженерно-технічних працівників,
аспірантів та студентів, які спеціалізуються на проблемах автоматизації
виробничих процесів.
ISBN 978-617-608-034-3 УДК 519.6
ББК 22.18
© І.М. Голінко, А.І. Кубрак, 2012
© «Рута», 2012
3
Зміст
ВСТУП 5
1. МАТЕМАТИЧНЕ МОДЕЛЮВАННЯ ОБ‟ЄКТІВ З
РОЗПОДІЛЕНИМИ ПАРАМЕТРАМИ 7
1.1. Динаміка температури в товстих теплоакумулюючих стінках 7
1.2. Динаміка температури у неізольованому стрижні 10
1.3. Динаміка температури в проточній ємкості з
товстими стінками 11
1.4. Динаміка температури в трубопроводі 12
1.5. Змійовиковий теплообмінник 14
1.6. Теплообмінник типу “труба в трубі” 16
1.7. Поперечні коливання струни 18
1.8. Поперечні коливання навантаженої нитки 21
1.9. Динаміка проточного датчика щільності рідини 23
1.10. Динаміка транспортера-витратоміра 24
2. ПЕРЕДАТНІ ФУНКЦІЇ ОБ‟ЄКТІВ З РОЗПОДІЛЕНИМИ
ПАРАМЕТРАМИ 28
2.1. Передатні функції товстих теплоакумулюючих стінок 28
2.2. Неізольований стрижень 33
2.3. Проточна ємність з товстими стінками 36
2.4. Трубопровід з тонкими стінками 37
2.5. Змійовиковий теплообмінник 39
2.6. Труба в трубі 40
2.7. Струна 43
2.8. Навантажена нитка 45
2.9. Проточний датчик щільності рідини 45
2.10. Транспортер-витратомір 46
3. ПЕРЕХІДНІ, ІМПУЛЬСНІ ТА ЧАСТОТНІ ХАРАКТЕРИСТИКИ 48
3.1. Розрахунок частотних характеристик за масивом ординат
імпульсної характеристики 48
3.2. Динамічні характеристики теплоакумулюючої стінки 55
3.3. Динаміка температури в неізольованому стрижні 60
3.4. Динаміка проточної ємкості 63
3.5. Трубопровід з тонкими стінками 66
3.6. Змійовиковий теплообмінник 68
3.7. Теплообмінник типу “труба в трубі” 70
3.8. Динаміка струни 74
3.9. Навантажена нитка 77
3.10. Проточний датчик щільності рідини 79
3.11. Транспортер-витратомір 80
4. СТАТИЧНІ РЕЖИМИ 83
4.1. Товста теплоакумулююча стінка 84
4.2. Неізольований стрижень 105
4.3. Проточна ємкість з товстими стінками 106
4
4.4. Трубопровід з тонкими стінками 107
4.5. Змійовиковий теплообмінник 109
4.6. Прямоточний теплообмінник типу “труба в трубі” 111
4.7. Протиточний теплообмінник 114
4.8. Статика для струни, нитки та датчиків 116
5. КОМП‟ЮТЕРНА ОПТИМІЗАЦІЯ СИСТЕМ
АВТОМАТИЧНОГО КЕРУВАННЯ 118
5.1. Формування масиву ординат перехідної характеристики САК 119
5.2. “Ручний” пошук оптимального налагодження регулятора 127
5.3. Формування зображення поверхні показника якості в
просторі параметрів налаштування регулятора 130
5.4. Пошук оптимальної настройки ПІД регулятора методом
сканування зі змінним кроком 133
5.5. Пошук оптимуму із стартової точки 136
5.6. Оптимізація класичного ПІД-регулятора за інтегральними
показниками якості 139
5.7. Оптимізація налаштувань модифікованих ПІД-законів
керування із мінімізацією керуючого впливу 143
5.8. Часткова компенсація збурення шляхом введення інформації
про нього на регулятор 160
5.9. Оптимізація систем керування із проміжними імпульсними
сигналами 164
5.10. Оптимізація каскадної системи автоматичного керування 168
ЛІТЕРАТУРА 174
ДОДАТКИ 179
Додаток 1. Програмний модуль GodoGt 179
Додаток 2. Програма DemSt 182
Додаток 3. Програма DemStr 190
Додаток 4. Програма DemPrе 192
Додаток 5. Програма DemTr 197
Додаток 6. Програма DemZt 202
Додаток 7. Програма DemTrTr 208
Додаток 8. Програма DemStrn 216
Додаток 9. Програма DemNit 218
Додаток 10. Програма DemPdTr 221
Додаток 11. Програмний модуль OptHtd 223
Додаток 12. Програма DemOptHd 234
Додаток 13. Програма DemOptVs 236
Додаток 14. Програмний модуль OptCompV 238
Додаток 15. Програмний модуль OptImpVs 246
Додаток 16. Програма СascOpt 254
5
ВСТУП
На сучасному етапі розвитку інформаційних технологій аналіз та
синтез систем автоматичного керування не мислиться без використання
комп‟ютерної техніки. Перший етап – моделювання об‟єкта керування.
Класична теорія автоматичного керування починалась з представлення
об‟єкта диференціальним рівнянням (чи системою диференціальних
рівнянь). До цієї системи добавлялися рівняння елементів регулятора
(датчик, обчислювальний пристрій, виконавчий механізм), і отримана
таким чином система рівнянь досліджувалась аналітично. На жаль, знайти
розв‟язок задач у загальному випадку вдавалось лише для систем 2-го чи 3-
го порядку.
Черговим кроком була лінеаризація системи (якщо в ній були
присутні нелінійності) з наступним використанням перетворення Лапласа
та апарату передатних функцій (для детектуючих елементів) та (чи)
частотних характеристик. Для дослідження нелінійних систем
розроблялись і пропонувались спеціальні методи (метод малого параметра,
фазовий простір, гармонічна лінеаризація, тощо). Обмеження на обсяг
обчислень (трудомісткість) значно звужували можливості інженерних
розрахунків систем.
Доступність сучасних комп‟ютерів радикально змінила ситуацію з
розрахунком систем керування. Практично знято обмеження на
трудомісткість розрахунків. Розрахунки, які вимагали тижнів ручної праці
кваліфікованих фахівців, зараз можна виконувати за лічені секунди. При
наявності відповідного програмного забезпечення.
В якості моделі об‟єкта можна використовувати практично будь-яку
її форму, як-то: систему диференціальних рівнянь (в тому числі і в
частинних похідних), передатні функції задіяних у системі керування
каналів, перехідні та частотні характеристики. Зараз частіше всього
використовуються моделі у вигляді дробово-раціональних передатних
функцій (з можливим множником pe , що відображає ефект запізнювання
сигналу). У тому випадку, коли мова йде про ідентифікацію динамічних
характеристик каналу, то за умовчанням, як правило, мається на увазі одна
з типових структур.
Щоб привести наявну інформацію про динаміку каналу до виду
дробово-раціональної передатної функції бажано мати алгоритми та їх
програмну реалізацію. Як правило, інформація про об‟єкт існує або у
вигляді системи диференціальних рівнянь (аналітичний метод) або у
вигляді перехідної характеристики (отримується або експериментально,
або, знову ж таки, шляхом інтегрування системи диференціальних рівнянь).
Визначення дробово-раціональної передатної функції з системи звичайних
диференціальних рівнянь виконується за стандартним алгоритмом.
Складніше із об‟єктами, в моделях яких враховується ефект просторової
розподіленості параметрів. Якщо прийняти до уваги нескінченне розмаїття
6
таких об‟єктів, то розраховувати на розробку універсального алгоритму
визначення їх передатних функцій (трансцендентних) та зведення їх до
дробово-раціонального виду не варто.
У даній роботі розглянуто ряд прикладів математичних моделей
розподілених об‟єктів (розділ 1) та продемонстровано способи визначення
їх “точних” передатних функцій (розділ 2). Читач може пересвідчитись у
надзвичайній незручності такого підходу – складність, громіздкість,
наявність “екзотичних” функцій (експонент з аргументом під коренем
квадратним, функцій Бесселя і т.д. і т.п.). За нечисленними виключеннями
такий підхід створює більше проблем, ніж дозволяє (якщо дозволяє !) їх
вирішити. Тому в інженерному плані такий підхід не є конструктивним.
Більш перспективним виглядає числове інтегрування системи
диференціальних рівнянь з метою отримати перехідну характеристику
(розділ 3). Це супроводжується дискретизацією базової системи.
Комп‟ютер дозволяє використовувати достатньо малі періоди дискретизації
(як за просторовими координатами, так і за часом), щоб мінімізувати
похибку від ефекту дискретизації. Сам же алгоритм числового
інтегрування є відносно нескладним і легко програмується.
Проблеми стійкості розрахункової схеми та необхідного порядку
точності на практиці частіше усього не є неподоланними і вирішуються, як
правило, підбором відповідної величини кроків та їх співвідношення.
Користувач програми має змогу активно втручатись в процес розв‟язку
(варіювати кроки, їх співвідношення та співставляти між собою отримувані
розв‟язки). Враховуючи високу швидкодію сучасних комп‟ютерів (окремий
варіант розв‟язку займає частки або одиниці секунд) – це необтяжливо.
Перехідна характеристика, отримана у вигляді достатньо детального (з
малим кроком) масиву її ординат, легко перераховується у імпульсну
характеристику, яку потім зовсім нескладно перерахувати в частотні
характеристики у будь-якій зручній для користувача формі.
Якщо модель досліджуваного об‟єкта є нелінійною, то для її
лінеаризації треба мати статичний режим, який приймається за базовий (в
околі якого виконується лінеаризація). Розрахунку статичних
характеристик об‟єктів з розподіленими параметрами присвячено розділ 4.
Алгоритми оптимізації систем автоматичного керування, що
наводяться в роботі, базуються на використанні інтегральних показників
якості. Останні визначаються за масивом ординат перехідної
характеристики системи. В розділі 5 наводяться програмні засоби для
параметричної оптимізації одноконтурних і каскадних систем, систем з
проміжними імпульсами, систем з компенсацією збурень. Усі алгоритми
доведено до рівня демонстраційно-відлагоджувальних програм на Турбо
Паскалі. Ці програми можуть використовуватися як у навчальному процесі
для оцінки працездатності та ефективності відповідних алгоритмів так і для
практичних розрахунків у процесі дослідження, проектування та
налагоджування реальних систем автоматичного керування.
7
1. МАТЕМАТИЧНЕ МОДЕЛЮВАННЯ ОБ’ЄКТІВ З
РОЗПОДІЛЕНИМИ ПАРАМЕТРАМИ
Об‟єктів з чітко вираженою просторовою розподіленістю параметрів
існує стільки і різних, що розглянути їх в одній книзі немає жодної
можливості. Така задача і не ставиться. Єдине, що автори взяли за мету, –
це розглянути ряд прикладів, характерних для технологічних об‟єктів – з
одного боку, і відносно нескладних – з іншого. Це матеріал для
початкового ознайомлення з відповідними типами моделей та способами їх
формування. При дослідженні конкретних об‟єктів треба відображати в
моделі технічні, фізичні, хімічні, гідродинамічні, теплотехнічні та інші
особливості даного об‟єкта. Це, зрозуміло, ускладнить модель, але і
зробить (має зробити !) її точнішою. Щодо рівня адекватності моделі
об‟єкту – це окрема дуже непроста проблема. І вона стає ще більш
заплутаною, якщо говорити не стільки про адекватність моделі об‟єкту, як
про адекватність моделі розв‟язуваній задачі (де, як, у яких умовах і для
розв‟язання яких задач, якими методами, з яким рівнем точності планується
використовувати модель, що розробляється). Але з чогось треба починати.
1.1. Динаміка температури в товстих теплоакумулюючих стінках
Обмежимось розглядом одновимірної задачі теплопровідності в
однорідному твердому тілі. Диференціальне рівняння теплопровідності в
даному випадку як відомо [49] має вигляд
xx
k
xa
t
2
2
. (1.1)
Тут – температура; t – час; x – просторова координата; c
a
–
коефіцієнт температуропровідності, де, в свою чергу, – коефіцієнт
теплопровідності, – щільність матеріалу, с – коефіцієнт теплоємності; k –
коефіцієнт кривизни, що характеризує систему координат моделі:
.стінкисферичноїдля2
,оїциліндричндля1
,плоскоїдля0
k
Просторова координата х – це відстань (вглиб стінки) від “лівої”
0x поверхні плоскої стінки. При товщині стінки “права” поверхня
характеризується x .
Для криволінійної (циліндричної чи сферичної) стінки х – це
поточний радіус.
Для наочності в даному випадку будемо користуватись позначенням
радіуса як r. Змінна r може приймати значення від 0rr (внутрішній
8
радіус) до 1rr (зовнішній радіус). Коли 0r маємо відповідно суцільний
циліндр чи кулю.
Щоб говорити про розв‟язок (однозначний) диференціального
рівняння (1.1) треба зафіксувати початковий стан (початкову умову) у
вигляді
100 чи0),(| rxrxxft . (1.2)
Це, власне, температурне поле стінки в момент часу, прийнятий за
початок відліку t .
В залежності від умов теплообміну на границях тіла (на поверхнях,
що його обмежують) задаються так звані граничні умови. Будемо
розглядати три можливі варіанти граничних умов на кожній з поверхонь.
Для конкретності плоску та криволінійну стінку розглядатимемо окремо.
Диференціальне рівняння для плоскої стінки (k = 0) виглядатиме так
0,0,2
2
tx
xa
t
. (1.3)
Граничні умови I-го роду на “лівій” поверхні
)(| 0 tTlx . (1.4)
Відповідно, на “правій” поверхні
)(| tTrx . (1.5)
Тут )(tTl і )(tTr – температури на “лівій” та “правій” поверхнях як
задані функції часу.
Граничні умови II роду для “лівої” поверхні
)(0
tQx
l
x
, (1.6)
для “правої” поверхні
)(tQx
r
x
. (1.7)
Тут )(tQl
і )(tQr – щільності теплових потоків (через одиницю
поверхні за одиницю часу) на відповідних поверхнях. За додатній напрямок
теплового потоку приймається напрямок в сторону зростання х.
Граничні умови III роду (конвективний теплообмін)
00
0
|)(
xsl
x
tTx
, (1.8)
)(|1 tTx
srx
x
. (1.9)
Тут 0 і 1 – відповідно коефіцієнти теплообміну на “лівій” та
“правій” поверхнях стінки, )(tTsl і )(tTsr – температури теплоносіїв, що
омивають стінку при 0x та x .
9
Існують ще граничні умови IV роду – умови ідеального теплового
контакту між двома твердими тілами (стінками), але ж ми маємо справу
лише з однією стінкою, отже, даний варіант розглядати не будемо.
Для криволінійних стінок диференціальне рівняння (1.1) будемо
записувати у вигляді
0,, 102
2
trrr
rr
k
ra
t
, (1.10)
де, як уже згадувалося, k дорівнює 1 або 2.
Граничні умови I роду
)(|0
tTrr , (1.11)
)(|1
tTzrr , (1.12)
де )(tTv і )(tTz – температура на внутрішній та зовнішній поверхнях
циліндра чи кулі.
Граничні умови II роду
)(
0
tQr rr
, (1.13)
)(
1
tQr
z
rr
. (1.14)
Граничні умови III роду
0
0
|)(0 rrs
rr
tTr
, (1.15)
)(|1
1
1 tTr
szrr
rr
. (1.16)
Тут 0 і 1 – відповідно коефіцієнти конвективного теплообміну на
внутрішній та зовнішній поверхнях стінки, )(tTs і )(tTsz – температури
середовищ, що омивають стінку всередині та зовні.
Зрозуміло, що на кожній з поверхонь може мати місце будь-який
варіант граничної умови, отже, для кожного тіла (стінки) можна розглядати
до 9 комбінацій граничних умов.
Окремо варто розглянути випадок, коли для криволінійної стінки
0r (суцільний циліндр чи куля).
Оскільки ми розглядаємо одновимірну задачу, то для осі циліндра
(центра кулі) матиме місце умова симетрії
00
rr
. (1.17)
10
1.2. Динаміка температури у неізольованому стрижні
Розглянемо стрижень (для конкретності з перерізом у вигляді
кругового циліндра), у якого співвідношення між радіусом r та довжиною l
є відносно малим lr .
За таких умов у першому наближенні приймемо, що температура в
межах поперечного перерізу може вважатись практично незмінною (в
напрямку радіуса), тоді як залежність її від координати вздовж осі є
суттєвою (враховується). Розрахункову схему даного об‟єкту показано на
рис. 1.1.
Рис. 1.1. Розрахункова схема “тонкого” стрижня
Будемо вважати, що бокова поверхня та лівий торець омиваються
теплоносієм з температурою θos
, теплообмін на цих поверхнях
характеризується коефіцієнтом теплообміну . “Правий” торець
вважатимемо теплоізольованим.
Запишемо рівняння теплового балансу для елементарного об‟єму
стрижня між поперечними перерізами х та (х+dx).
0000000000 cdxSt
dxpdxx
Sxx
Sx
S os
.
(1.18)
Тут 42
00 dS – площа поперечного перерізу стрижня ( 0d – діаметр),
00 dp
– периметр поперечного перерізу, 0 – коефіцієнт
теплопровідності, 0 – щільність матеріалу, 0c – коефіцієнт теплоємкості,
– температура стрижня, os – температура оточуючого середовища, –
коефіцієнт теплообміну між стрижнем та оточуючим середовищем (не
враховуючи “правого” торця).
Після спрощення диференціальне рівняння (1.18) може бути
представлене у вигляді
osbx
at
2
2
, (1.19)
де .;000
0
00
0
cS
pb
ca
Гранична умова на лівому (оголеному) торці стрижня
d0
x
l
dx
11
0
0
x
os
xx
. (1.20)
На правому торці (умова ідеальної теплоізоляції) маємо
00
lxx
, або після скорочення на – 0
0
lxx
. (1.21)
1.3. Динаміка температури в проточній ємкості з товстими стінками
Нехай розрахункова схема розгляданого об‟єкта має вигляд,
показаний на рис 1.2.
Рис. 1.2. Розрахункова схема проточної ємкості
Тепловий баланс для теплоносія в ємкості
000
000000 cGdt
dFcQcQ
x
stinp
. (1.22)
Тут Q0 – витрата теплоносія через ємкість (вважаємо її однаковою на вході і
на виході з ємкості), с0 – теплоємність теплоносія, θinp
– температура на
вході у ємкість, 00 , F
– коефіцієнт теплообміну між теплоносієм та
внутрішньою поверхнею стінки та площа внутрішньої поверхні стінки. G0 –
кількість (маса) теплоносія в ємності, 0x
st – температура стінки на її
внутрішній поверхні.
Після спрощення рівняння (1.22) набуває вигляду
010
x
stinp bbdt
dT
, (1.23)
де 01
0000
000
0000
00 1;; bbFcQ
cQb
FcQ
cGT
.
Для простоти стінку будемо розглядати як плоску (нехтуючи її
кривизною за умови, що геометричні розміри ємкості значно перевищують
товщину стінки δ. Тоді диференціальне рівняння теплопровідності буде
x
12
x
xa
t
st
st 0,2
2
, (1.24)
де stst
stst
сa
;
ststst с,,
– відповідно коефіцієнт теплопровідності,
щільність та теплоємність матеріалу стінки.
Граничні умови для (1.24) будуть (з урахуванням сказаного вище)
0
0
0
x
st
xx
(1.25)
та
os
x
st
xx
1 . (1.26)
1.4. Динаміка температури в трубопроводі
Розрахункова схема об‟єкта представлена на рис. 1.3
Рис 1.3. Розрахункова схема для температурного режиму
трубопроводу з тонкими теплоакумулюючими стінками
Якщо прийняти поршневий режим руху теплоносія в трубі (коли усі
частинки теплоносія мають однакові швидкості w0, що відповідає
розвиненому турбулентному режиму руху) і вважати, що температура
теплоносія в межах поперечного перерізу дорівнює θ (усереднена в межах
перерізу), то елементарний тепловий баланс для елемента теплоносія між
перерізами при х та (x+dx) можна представити так
00000000000000000 cdxSt
dxpdxcSwx
cSwcSw st
. (1.27)
Після спрощення отримуємо
st
xwT
tT
000 , (1.28)
де 00
0000
p
cST
.
D1
dx x
D0
13
Для елемента стінки труби між перерізами при х та (х+dx) відповідно
маємо stosstst cdxSt
dxpdxp 1111100
,
або osst
st
bbt
T
101
, (1.29)
де 01
1100
000
1100
1111 1;; bb
pp
pb
pp
cST
.
У формулах для Т0, Т1, b0 та b1 використовуються такі позначення:
11021100
200 ,4/,,4/ DpSDSDpDS , де, в свою чергу:
10 , DD – внутрішній та зовнішній діаметр труби; 10 , – щільність
теплоносія та матеріалу труби; 10 ,cc – відповідно коефіцієнти
теплоємкості;
10 , – коефіцієнти теплообміну на внутрішній та зовнішній поверхнях
труби; st , та os – температура теплоносія, стінки (функції від х) та
оточуючого середовища (від х не залежить); inp – температура теплоносія
на вході в трубу (при х=0); 0w – лінійна швидкість теплоносія.
Гранична умова для теплоносія
)(| 0 tinpx . (1.30)
При виведенні рівнянь (1.28) та (1.29) не враховувались перетоки
тепла в осьовому напрямку за рахунок теплопровідності (чи поздовжнього
перемішування) як для теплоносія, так і для стінки, не враховувалось також
тепло за рахунок турбулізації (перетворення кінетичної енергії в теплову).
14
1.5. Змійовиковий теплообмінник
Його ще називають кожухотрубним. Це проточна ємкість, через яку
проходять труби з теплоносієм. Розрахункова схема показана на рис 1.4.
Рис. 1.4. Розрахункова схема змійовикового теплообмінника
Приймемо, що теплоносії у трубах та у міжтрубному просторі не
змінюють свого фазового стану. Для конкретності вважатимемо, що
обидва теплоносії є рідинами (їх щільність практично не залежить від
температури та тиску в межах очікуваних діапазонів температур).
Режим руху теплоносія в трубах приймається за поршневий (режим
ідеального витиснення), теплоносій у міжтрубному просторі ідеально
перемішується.
Виділимо елементарний об‟єм на відстані х від входу теплоносія в
трубу (змійовик) шириною dx. Запишемо рівняння теплового балансу для
теплоносія в трубі в межах даного об‟єму.
0000
1000
00000
00000
00000 cdxS
tdxpdxcSw
xcSwcSw
.
Тут 10 , – температури теплоносія в трубі та стінки труби (функції від
координати х та часу t);
Після спрощення останнє рівняння може бути зведене до вигляду
x dx
15
,100
00
0
0
xwT
tT (1.31)
де 00
0000
p
cST
. Тут 00 , c – теплофізичні параметри теплоносія в трубі,
00200 ,4 DpDS – площа поперечного перерізу труби по теплоносію
та внутрішній периметр труби, 0D – внутрішній діаметр труби, 0w – лінійна
швидкість теплоносія, 0 – коефіцієнт теплообміну між теплоносієм та
стінкою труби.
Звертаємо увагу читача на аналогію між моделлю для змієвика та
трубопроводу, розглянутому в п. 1.4.
Відповідно і математична модель для стінки труби змієвика буде
аналогічною такій в п. 1.4.
21
00
11
1
bbt
T
, (1.32)
де .,4,1,, 11020101
1100
000
1100
1111 DpSDSbb
pp
pb
pp
cST
Тут 1D - зовнішній діаметр труби (змійовика); 1 – коефіцієнт теплообміну
між зовнішньою поверхнею труби та теплоносієм у міжтрубному
середовищі; 11,c – теплофізичні характеристики матеріалу труби;
1 –
температура стінки; 2 – температура теплоносія у міжтрубному
середовищі (в ємкості).
Елементарний тепловий баланс для теплоносія в ємкості
222
3222
0
2111
222
,222 cG
dt
dFdxpncQcQ
linp ,
де Q2, G2 – витрата теплоносія (масова) через ємкість та його кількість
(маса) в ємкості; с2 – масова теплоємність теплоносія в ємкості; n –
кількість паралельно включених трубок (змійовиків); l – довжина окремої
трубки; 22 , F – коефіцієнт та площа поверхні теплообміну між
теплоносієм в ємкості та внутрішньою стінкою корпусу; 3 – температура
корпуса.
Останнє рівняння після спрощення приводиться до вигляду
l
inpbbdxl
b
dt
dT
0
,24
33
1222
2
, (1.33)
І, нарешті, тепловий баланс для стінки корпуса
333
333
3222 cG
dt
dFF os
.,1
,,,де
11324
221122
223
221122
112
221122
222
lnpFbbb
FFcQ
Fb
FFcQ
Fb
FFcQ
cGT
16
або після спрощення
osbbdt
T
62
53
3
3
, (1.34)
де .1,, 56
3322
225
3322
333 bb
FF
Fb
FF
cGT
Тут 33, cG – маса та коефіцієнт теплоємності матеріалу корпуса;
33,F – коефіцієнт та площа поверхні теплообміну між корпусом та
оточуючим середовищем; os ,3 – температура корпуса та оточуючого
середовища.
Отриману систему рівнянь треба ще доповнити граничною умовою
для рівняння (1.31), а саме
)(,0
0
0 tinp
x
. (1.35)
1.6. Теплообмінник типу “труба в трубі”
Розглядаємо теплообмінник, в якому два теплоносії (для
конкретності – рідини) рухаються вздовж спільної осі в одному (прямотік)
або в протилежному напрямках (протитік).
Розрахункова схема прямоточного теплообмінника показана на рис.
1.5.
Рис 1.5. Розрахункова схема прямоточного теплообмінника типу
труба в трубі
Приймаємо ті ж самі припущення, що і для окремо взятої труби
(п.1.4). Маємо
100
00
0
0
xwT
tT , (1.36)
D1
dx x
D0
D3
D2
l
17
21
00
11
1
bbt
T
, (1.37)
33
12
22
22
2
2
bbx
wTt
T
, (1.38)
osbbt
T
52
43
3
3
, (1.39)
з граничними умовами inp
x
,0
0
0
, (1.40)
inp
x
,2
0
2
. (1.41)
Тут позначено:
.1
,,1,,1,
;,,,
45
3322
22423
2211
11201
1100
000
3322
3333
2211
2222
1100
1111
00
0000
bb
pp
pbbb
pp
pbbb
pp
pb
pp
cST
pp
cST
pp
cST
p
cST
Тут, в свою чергу:
.,4
,,4;,4;,4
332233
221222110
21100
200
DpSDS
DpSDSDpSDSDpDS
D0, D1, D2, D3 – діаметри труб як показано на рис 1.5. При іншій геометрії
формули для площ поперечних перерізів та периметрів треба
модифіковувати.
3210 ,,, – коефіцієнті теплообміну; 33221100 ,,,,,,, cccc –
теплофізичні характеристики послідовно теплоносія у внутрішній трубі
(індекс 0), стінки внутрішньої труби (індекс 1), теплоносія між трубами
(індекс 2), зовнішньої труби (індекс 3).
У випадку протитоку замість рівняння (1.38) матимемо
33
12
22
22
2
2
bbx
wTt
T
(1.42)
та замість (1.41) гранична умова буде inp
lx
,22 , (1.43)
де l – довжина теплообмінника (труб).
18
1.7. Поперечні коливання струни
Струною будемо називати натягнену нитку, яка не чинить опору на
згин (гнучку). Струна закріплена на кінцях тим чи іншим чином. Натяг
(сила натягу) Ts вважається незмінною під час поперечних
(перпендикулярних до осі струни) коливань. Амплітуда коливань
очікується малою (амплітуда відхилення точки струни від її положення
рівноваги в процесі коливань мала порівняно з довжиною струни).
Вважатимемо також, що у положенні рівноваги струна має форму прямої.
Це відповідає припущенню, що вага струни є малою порівняно з силою
натягу. Маса струни розподілена рівномірно вздовж її осі. Розрахункова
схема наведена на рис 1.6.
Рис 1.6. Розрахункова схема малих поперечних коливань струни.
Розглянемо баланс сил, що діють на елемент струни, що знаходиться
між точками (перерізами струни) з координатами х та (х+dx) тобто
довжиною dx.
На лівий кінець виділеного елемента струни діє сила натягу Ts,
направлена вліво. Отже, відповідна складова (у проекції на вісь у) у балансі
сил, прикладених до даного елемента, виглядає так
sinsT ,
де – кут нахилу дотичної до струни у точці х (сила натягу Ts діє вздовж
дотичної до струни).
Ми зазначали вище, що коливання (відхилення від положення
рівноваги – осі х) очікуються малими, отже, кут – малий, а для малих
tgsin . А tg , в свою чергу, x
y
tg . А коли так, то складову
sinsT можна представити як x
yTs
.
Складову від проекції сили натягу, прикладеної до “правого” кінця
елемента представимо, як ми це робили неодноразово раніше, у вигляді
x
y
dx x
ky’
fs
Ts Ts
l
19
перших двох доданків у представленні компоненти x
yTs
рядом Тейлора.
Враховуючи щойно сказане, а також силу опору рухові струни
(вважатимемо її прямо пропорційною швидкості елементів струни), а також
зовнішню силу s
f , розраховану на одиницю довжини струни, і сил інерції
(за принципом Даламбера) отримуємо
dxfdxt
ykdx
x
yT
xt
yT
t
yT
t
ydxm sssss
2
2
.
Після скорочень та перегрупування маємо
sss f
x
yT
t
yk
t
ym
2
2
2
2
.
Ділимо на sm
s
s
fmx
yc
t
ye
t
y 12
22
2
2
, lx 0 , ,0t (1.44)
де sm
ke ,
s
s
m
Tc .
Якщо не враховувати опір рухові струни ( 0k , отже, і 0e ) і
вважати рівними нулю (відсутніми або відносно слабкими) зовнішні сили
0sf , то рівняння (1.44) перетворюється на класичне хвильове рівняння
2
22
2
2
x
yc
t
y
, lx 0 , 0t . (1.45)
В якості початкових умов для (1.44), (1.45) прийнято задавати форму
струни при 0t xfy
t 00
(1.46)
та швидкості точок струни
).(1
0
xft
y
t
(1.47)
Граничні умови частіше всього задають так.
Гранична умова I роду
)(0
tyy lx
(1.48)
або, відповідно,
).(tyy rlx
(1.49)
Цю граничну умову ще називають умовою Діріхле.
Гранична умова ІІ роду
)(0
tFx
yT l
x
s
(1.50)
та
)(tFx
yT r
lx
s
. (1.51)
20
Тут )(та)( tFtF rl – сили, що прикладені до “лівого” та “правого”
кінця струни у напрямку осі y (перпендикулярно до осі струни). Фізично це
можна собі уявляти так: відповідний кінець струни ковзає по направляючій,
вісь якої співпадає (при х=0) або паралельна до осі y (при х=l), і до цієї
направляючої прикладена зовнішня сила )(та)( tFtF rl .
Рівняння (1.50) та (1.51) є умови врівноважування прикладеної сили
проекцією сили натягу Ts (за додатній напрямок сил )(та)( tFtF rl прийнято
напрямок зростання y). Умови типу (1.50) та (1.51) називають умовами
Неймана.
Граничні умови ІІІ роду – умови Робена записуються так
00
0
)(
xkl
x
s ytycx
yT , (1.52)
lxkr
lx
s ytycx
yT
)(1 . (1.53)
Схематично умови (1.52) та (1.53) можна собі уявити так як показано
на рис. 1.7.
Рис 1.7. Граничні умови ІІІ роду на кінцях струни
Фізично граничні умови ІІІ роду можна собі уявляти так.
Відповідний кінець струни кріпиться до “кільця”, що рухається без тертя
вздовж направляючої, вісь якої співпадає (при х=0) або паралельна до осі y
(при х=l). До цього ж кільця кріпиться один кінець пружини жорсткості С0
чи С1 відповідно, тоді як інший кінець пружини зміщується вздовж тієї ж
таки направляючої на величину )(tykl чи )(tykr .
Можна показати, що диференціальним рівнянням типу (1.44) можна
описувати поздовжні коливання в‟язко-пружного стержня [64], крутильні
коливання валу [64, 65], коливання тиску у трубопроводі [4], зміну напруги
в електричних лініях [3] та ряд інших фізичних об‟єктів.
y
x
ykr(t)
C1
Ts
0 x=l
y
x
ykl(t)
C0
Ts
0
a) б)
21
1.8. Поперечні коливання навантаженої нитки
При виведенні диференціального рівняння струни її натяг Ts
визначався зовнішнім чинником, а саме ступенем її попередньої деформації
(розтягнення) перед фіксацією її кінців у точках х = 0 та х = l.
А тепер розглянемо однорідну гнучку нитку, маса одного метра якої
є mn, закріплену на її верхньому кінці, яка вільно звисає під дією своєї ваги
та тягаря масою m1 на її нижньому кінці. На нитку діє поперечна сила
txf , (в розрахунку на 1 м її довжини). Довжина нитки l вважається
незмінною. Помістимо початок системи координат в точку підвісу
(точніше, в точку, що відповідає положенню точки підвісу в усталеному
режимі, прийнятому за базовий). Вісь х тоді буде співпадати з віссю нитки
в положенні рівноваги, вісь y – перпендикулярна до осі х. Будемо вважати,
що очікувані коливання будуть відбуватись в межах площини xоy
(поперечна сила f діє саме в цій площині). Розрахункова схема показана на
рис. 1.8.
Рис 1.8. Розрахункова схема навантаженої нитки
Виділимо на відстані х від точки підвісу ділянку довжиною dx та
розглянемо суму проекцій на вісь у сил, що діють на виділений елемент.
Сила натягу тут, очевидно, буде функцією від х. Її можна записати
так gmxlmT nn 1 .
Саме ж рівняння балансу сил буде виглядати так
2
2
),(t
ydxmdxtxfdx
t
ykdx
x
yT
xdx
dyT
dx
dyT nnnn
.
Після підстановки значення Tn та спрощення останнє рівняння набуває
вигляду
x m1g
f1(t)
y
x
dx
Tn
Tn
f (x,t)
mndx
22
),(1
2
21
2
2
txfmx
y
x
yxl
m
mg
t
y
m
k
t
y
nnn
. (1.54)
Тут g – прискорення сили тяжіння, k – коефіцієнт опору рухові нитки (у
розрахунку на одиницю її довжини).
В якості початкових умов можуть служити
)(0
xyy nt
тобто форма нитки при t=0, а також
)('0
xyt
yn
t
.
Це швидкості точок нитки в початковий момент руху.
Граничні умови стосовно верхнього кінця нитки показано на рис. 1.9
Рис 1.9. Граничні умови для верхнього кінця нитки
а) І роду, б) ІІ роду, в) ІІІ роду
Отже, для І роду
)(0
tyy vx
, (1.55)
для ІІ роду
)(0
1 tfx
yglmm v
x
n
, (1.56)
для ІІІ роду
0
0
1 )(
xkvv
x
n ytycx
yglmm . (1.57)
Для тягаря на нижньому кінці нитки баланс сил виглядає так
lxlxlx t
ym
t
yktf
x
ygm
2
2
1111 )( . (1.58)
Тут )(1 tf – сила, прикладена до тягаря m1 (в проекції на вісь у).
x
y yv(t)
0
x
y fv(t) 0
(m1+mnl)g
x
y 0
(m1+mnl)g
yvk(t)
a) б) в)
cv
23
1.9. Динаміка проточного датчика щільності рідини
Не усі динамічні об‟єкти вдається описати диференціальними
рівняннями. Для прикладу розглянемо поведінку датчика, схема якого
зображена на рис 1.10.
Рис 1.10. Схема проточного датчика щільності рідини
Щільність (для конкретності розглядаємо вагову щільність)
визначається за перепадом тиску (p1–p2) у зазначених точках відбору. Отже,
вихід датчика
h
ppy 21 , (1.59)
де h – відстань по вертикалі між точками відбору тиску.
А тепер розглянемо, що відбудеться, якщо починаючи з деякого
усталеного режиму стрибком змінимо щільність на вході в датчик (в
момент t=0 через переріз труби з координатою х=0 піде рідина, щільність
якої, наприклад, збільшиться на ). На протязі часу t0 , де 0/ wh ,
тиск Р1 буде зростати за законом
xp 1
або враховуючи, що швидкість руху рідини дорівнює w0, то
twp 01 ,
тоді як тиск р2 прирощення не матиме. Починаючи з моменту 0/ wh
зростання р1 почне компенсуватись відповідним зростанням р2, отже
різниця між ними (а разом з цим і зміна вихідного сигналу датчика)
стабілізується.
Отже, можна записати, що прирощення виходу датчика матиме
характер
.при,
,0при,
0
0
0
w
ht
w
ht
h
tw
y
24
Це, власне, формула для кривої розгону датчика (реакція на стрибок
величиною ). Коли вважати, що =1 (одиничний стрибок), то
матимемо перехідну характеристику
.при,1
,0при,
)(
0
0
0
w
ht
w
htt
h
w
th (1.60)
Отже, диференціальне рівняння датчика ми не отримали. Він не
описується звичним нам диференціальним рівнянням. Зате ми отримали
формулу (1.60) для перехідної характеристики, яка має вигляд, показаний
на рис 1.11.
Рис 1.11. Перехідна характеристика датчика
1.10. Динаміка транспортера-витратоміра
Для вимірювання витрати сипучих матеріалів, що переносяться
транспортером, можна скористатись схемою, показаною на рис.1.12.
Рис 1.12. Схема транспортера-витратоміра
Будемо розглядати транспортер як шарнірну балку, що опирається на
нерухомі опори в точках х=0 та х=l (це l/2+l/2). Середня точка (шарнір)
урівноважується силою F, величина якої є пропорційною витраті матеріалу
через транспортер. Цілком очевидно, що сила F відраховується від її
значення, обумовленого вагою порожнього транспортера. Припустимо
тепер, що транспортер рівномірно заповнений матеріалом висотою h,
h(t)
t
1
t=h/w0 0
25
шириною b, щільністю . Враховуючи симетричність конструкції силу F
можна розкласти на дві одинакові складові: F1, яка врівноважує ліву
половину балки, та відповідно F2, що врівноважує праву половину де,
F1+F2=F.
Тоді для лівої секції балки можна записати рівняння моментів
відносно точки А (х = 0). Це буде
xbhdxl
Fl
2/
0
12
або упорядковуючи вираз під інтегралом
.
2 2/
0
1 l
xdxbhl
F
Після інтегрування матимемо
442
2 2
1
lbhlbh
lF
.
Враховуючи симетричність конструкції можна записати
22 1
lbhFF
. (1.61)
Якщо швидкість руху транспортера w0, то в усталеному режимі при
рівномірному навантаженні висотою h (при ширині b) та щільності
матеріалу витрата через транспортер буде
bhwQ 0 .
Співставляючи останній вираз з (1.61) отримуємо
l
FwQ 02 . (1.62)
Це рівняння , що виражає витрату Q через силу, яку транспортер
розвиває на опорі В (в усталеному режимі).
А тепер давайте розглянемо, що відбувається, якщо, наприклад, на
порожній до цього транспортер стрибкоподібно (від 0 до h) збільшиться
висота матеріалу, що поступає на нього. На відрізку 20 t ( 2 - час
необхідний матеріалу, щоб дійти від точки А до точки В – пройти першу
секцію), 0wl матимемо xhdxbl
Fx
0
12
або l
xbhxbh
lF
22
12
2 .
Враховуючи, що х =w0 t можна переписати
20,
2
2
1
t
ltbhF . (1.63)
При 2t (або , що еквівалентно 2lx ) остання формула дає
421
lbhF
t
. (1.64)
26
На відрізку часу t2 (тобто при lxl 2 ) компонента F1
залишається сталою на рівні формули (1.64), тоді як друга компонента F2
(за рахунок навантаження другої секції транспортера), яке до цього було
нульовим, стане такою, яка має задовольняти рівняння суми моментів
відносно С (для другої секції) xlbhdxl
Fx
l
2
22
,
звідки
4222
2 22
2
lxlxlbh
lF .
Спрощуємо
822
2 222
2
lxllxbh
lF ,
або
l
xlxbhF
28
32
2
2 .
Сумарно разом з F1 з (1.64) маємо
l
xlxbh
lbhF
28
32
4
2
,
або
2
2
28
34
2
1
2 l
x
l
xlbhF
.
Зводимо подібні
142
2 2
2
l
x
l
xlbhF
. (1.65)
При х=l 2
1422
lbhlbhF
,
що співпадає з (1.61) як і має бути.
Враховуємо що x=w0t, тоді (1.65) можна представити так
142
2
2
ttlbhF , (1.66)
де, як уже згадувалось 0wl . Отже, крива розгону транспортера має
вигляд
.,2
,2
,1422
,2
0,22
2
2
tlbh
tttlbh
ttlbh
F
Якщо прийняти за F0 значення F у формулі (1.61), тобто взяти
27
20
lbhF
,
(1.67)
то
.,1
,2
,142
,2
0,2
2
2
0
t
ttt
tt
F
F (1.68)
Формулу (1.68) можна розглядати як нормовану (до одиничного
коефіцієнта передачі) перехідну характеристику транспортера.
При 2
t
2
12
22
2
t
th .
Те ж саме 2
112
2
1142
2 2
2
t
tth .
Це підтверджує неперервність кривої h(t) в точці 22 tlx .
Графік нормованої перехідної характеристики показано на рис. 1.13
Рис. 1.13. Нормована перехідна характеристика транспортера-
витратоміра
Розглянутий нами набір об‟єктів (елементів) з розподіленими
параметрами обумовлений бажанням показати характерні особливості
таких об‟єктів, підходи до їх моделювання. Це, можна сказати, перше
наближення до математичного моделювання динаміки подібних об‟єктів.
hн(t)
t
1
1/2
0
28
2. ПЕРЕДАТНІ ФУНКЦІЇ ОБ’ЄКТІВ З РОЗПОДІЛЕНИМИ
ПАРАМЕТРАМИ
Якщо математична модель динамічного об‟єкта є лінійною
(лінеаризованою), то дуже зручною формою представлення його
динамічних властивостей є передатна функція, тобто відношення
зображення за Лапласом від його вихідного сигналу до зображення
відповідного йому вхідного за нульових початкових умов. Для об‟єктів з
зосередженими параметрами передатні функції є дробово-раціональними
тобто представляють собою відношення двох поліномів від р (комплексної
змінної у формулі перетворення Лапласа). Для об‟єктів з розподіленими
параметрами передатні функції є трансцендентними, у чому читач може
переконатися в даному розділі.
2.1. Передатні функції товстих теплоакумулюючих стінок
Розглянемо для початку алгоритм визначення передатних функцій
плоскої стінки, що описується диференціальним рівнянням (1.3), а саме
.0,0,2
2
tx
xa
t
(2.1)
Для конкретності приймемо граничну умову ІІІ роду (1.6) на лівій
поверхні
00
0
)(
xsl
x
tTx
(2.2)
та граничну умову ІІ роду (1.7) (а конкретно, умову ідеальної теплоізоляції)
на правій поверхні
.0
xx
(2.3)
У визначення передатної функції входять нульові початкові умови.
Фізично це означає, що відлік змінних ведеться від усталеного режиму,
прийнятого за базовий (в околі якого визначаються динамічні
характеристики і передатні функції, зокрема). Отже, в процесі визначення
передатних функцій будемо за умовчанням вважати початкові умови
нульовими.
Виконаємо перетворення Лапласа над (2.1), (2.2) та (2.3)
02
2
a
p
dx
d , (2.4)
00
0
xsl
x
Tdx
d
, (2.5)
29
.0
xdx
d (2.6)
Тут dte pt
0
, dtetTT ptslsl
0
.
Диференціальне рівняння у частинних похідних (2.1) в результаті
перетворення Лапласа перетворилось на звичайне диференціальне рівняння
(2.4) зі сталими коефіцієнтами, однорідне, йому відповідає
характеристичне рівняння
,02 a
pr (2.7)
яке має два прості корені
.2,1 a
pr (2.8)
Отже, розв‟язок (2.4) можна представити в формі
a
px
a
px
eCeC
21
, (2.9)
де C1 і C2 – коефіцієнти (сталі інтегрування), які мають бути підібрані так,
щоб задовольняти граничні умови (2.5) та (2.6)
.0
,)(
21
21021
a
p
a
p
sl
eCeC
CCTCCa
p
Отриману систему рівнянь відносно C1 та C2 перепишемо у вигляді
.0
,11
21
0
2
0
1
a
p
a
p
sl
eCeC
Ta
pC
a
pC
За правилом Крамера маємо
a
p
a
p
a
p
sl
ee
a
p
a
p
e
a
pT
C
;
1;1
;0
1;
00
0
1 ;
a
p
a
p
a
p
sl
ee
a
p
a
p
e
Ta
p
C
;
1;1
0;
;1
00
0
2 .
Підставляємо отримані значення C1 та C2 в (2.9)
30
a
p
a
p
a
px
sla
px
sl
ea
pe
a
p
eTeT
00
11
.
Останній вираз можна представити так
a
p
a
p
a
p
a
p
a
px
a
px
sl
eea
pee
eeT
0
.
Ділячи ліву і праву частини отриманого виразу на slT отримаємо
передатну функцію каналу slT
a
p
a
p
a
p
a
px
xpWslT
shch
ch
,
0
, . (2.10)
Задаючи інші варіанти граничних умов можна отримати передатні
функції стінки для інших каналів [25].
Як уже відзначалось раніше, передатна функція (2.10) є
трансцендентною. Трансцендентними, очевидно, будуть і передатні
функції інших каналів даного об‟єкта.
Для одновимірної циліндричної стінки маємо диференціальне
рівняння (1.10) при k=1.
0,,1
102
2
trrr
rrra
t
(2.11)
з граничними умовами, наприклад, такими
0
0
0 rrsv
rr
tTr
, (2.12)
0
1
rrr
. (2.13)
Після перетворення за Лапласом отримуємо
01
2
2
a
p
dr
d
rdr
d, (2.14)
0
00
rrsv
rr
Tdr
d
, (2.15)
0
1
rrdr
d. (2.16)
31
Виконаємо заміну змінних r на apxr та на y в
диференціальному рівнянні (2.14). Тоді після спрощення матимемо
01
2
2
ydx
dy
xdx
yd. (2.17)
Це окремий випадок (при m=0) так званого модифікованого рівняння
Бесселя [49]
011
2
2
2
2
y
x
m
dx
dy
xdx
yd. (2.18)
Розв‟язок (2.18) прийнято представляти у вигляді
xKCxICy 0201 , (2.19)
де I0(x) та K0(x) – модифіковані функції Бесселя І та ІІ роду нульового
порядку. Повертаємось до змінних r та в (2.19).
a
prKC
a
prIC 0201 . (2.20)
Підставляємо (2.20) в (2.15) та (2.16)
.0
,
112111
002001012011
0
a
prKC
a
prIC
Ta
prKC
a
prIC
a
prK
a
pC
a
prI
a
pC sv
(2.21)
Тут I1(x) та K1(x) - модифіковані функції Бесселя першого порядку. Вони
пов‟язані з функціями I0(x) та K0(x) співвідношеннями:
xIdx
xdI1
0 ,
xKdx
xdK1
0 .
Перегруповуємо доданки в (2.21)
.0
,
112111
01
0
00201
0
001
a
prKC
a
prIC
Ta
prK
a
p
a
prKC
a
prI
a
p
a
prIC sv
Останню систему розв‟язуємо за правилом Крамера
32
a
prK
a
prI
a
prK
a
p
a
prK
a
prI
a
p
a
prI
a
prK
a
prK
a
p
a
prKT
C
sv
1111
01
0
0001
0
00
11
01
0
00
1
;
;
;0
;
,
a
prK
a
prI
a
prK
a
p
a
prK
a
prI
a
p
a
prI
a
prI
Ta
prI
a
p
a
prI
C
sv
1111
01
0
0001
0
00
11
01
0
00
2
;
;
0;
;
.
Підставляємо отримані значення 1C та
2C в (2.20)
a
prI
a
prK
a
p
a
prK
a
prK
a
prI
a
p
a
prI
a
prK
a
prI
a
prI
a
prKT sv
1101
0
001101
0
00
011011
.
Отже, передатна функція rpWsvT ,
має вигляд
)(),(
011011
pZ
a
prK
a
prI
a
prI
a
prK
rpWsvT
,
де
.
)(
1101
0
00
1101
0
00
a
prI
a
prK
a
p
a
prK
a
prK
a
prI
a
p
a
prIpZ
(2.22)
За цією ж схемою можна отримати передатні функції інших каналів
циліндричної стінки при будь-яких комбінаціях граничних умов. Чесно
кажучи, вид передатної функції (2.22) відлякує своєю громіздкістю. А вона
не сама громіздка з можливих для даного об‟єкта. Рекомендувати для
практичного використання в інженерних розрахунках подібну передатну
33
функцію якось язик не повертається. Втім, можливо, це суб‟єктивна точка
зору авторів.
Диференціальне рівняння теплопровідності (1.10) для кулі (при k=2)
має вигляд
0,,2
102
2
trrr
rrra
t
. (2.23)
Його можна представити у вигляді
2
2
r
ra
t
r
. (2.24)
В еквівалентності форми (2.24) формі (2.23) можна переконатись
безпосередньою перевіркою, “розкриваючи дужки” в (2.24) за правилом
диференціювання добутку. Введенням змінної
ry (2.25)
диференціальне рівняння (2.24) зводиться до форми (1.3) як для плоскої
стінки. Далі, як кажуть, - “справа техніки”. Виведення формул відповідних
передатних функцій для кулі залишаємо читачеві.
2.2. Неізольований стрижень
Маємо диференціальне рівняння (1.19)
osbx
at
2
2
(2.26)
та граничні умови (1.20) та (1.21)
0
0
x
os
xdx
d
, (2.27)
0lxdx
d. (2.28)
Виконуємо перетворення Лапласа над (2.26)
osbbdx
dap
2
2
або, що те саме
os
a
b
a
bp
dx
d
2
2
, (2.29)
де, як зазвичай, риска над змінною вказує на зображення за Лапласом
(відносно t). Характеристичне рівняння для (2.29)
,02
a
bpr
корені якого a
bpr
2,1 . (2.30)
Розв‟язок (2.29) складається з вимушеної та вільної складових.
Вимушену складову шукаємо у формі правої частини (2.29).
34
Тут вона не залежить від x, тобто може розглядатись як константа,
отже,
constC 0 .
Для визначення 0C підставляємо вимушену складову в (2.29). Отримуємо
os
a
bC
a
bp
0 ,
звідки os
bp
bC
0 . (2.31)
Вільна складова при двох різних коренях (2.30) характеристичного
рівняння буде
a
bpx
a
bpx
в ільна eCeС
21 ,
а розв‟язок в цілому
a
bpx
a
bpx
os eCeCbp
b
21 . (2.32)
Для знаходження сталих інтегрування С1 та С2 використовуємо
граничні умови (2.27) та (2.28) попередньо перетворивши їх за Лапласом
0|
,|| 00
lx
xos
x
dr
d
dx
d
або після підстановки сюди (2.32)
.0
,
21
2121
a
bpla
bpl
osos
CeC
bp
bCCCC
a
bp
Групуємо доданки з С1 та С2
.0
,111
21
21
a
bpl
a
bpl
os
eCeC
bp
b
a
bpC
a
bpC
Розв‟язуємо цю систему
35
a
bpl
a
bpl
a
bpl
os
ee
a
bp
a
bp
e
a
bp
bp
b
C
;
1;1
;0
1;1
1
,
a
bpl
a
bpl
a
bpl
os
ee
a
bp
a
bp
e
bp
b
a
bp
C
;
1;1
0;
1;1
2
.
Розкриваємо визначники та множимо чисельник і знаменник на -1.
a
bpl
a
bpl
a
bpl
os
ea
bpe
a
bp
ebp
b
C
11
1
1 ,
a
bpl
a
bpl
a
bpl
os
ea
bpe
a
bp
ebp
b
C
11
1
2 .
Підставляємо отримані С1 та С2 в (2.32)
a
bpl
a
bpl
a
bpl
a
bpl
a
bpxl
a
bpxl
osos
eea
bpee
ebp
be
bp
b
bp
b
)()(
11
.
Ділячи ліву і праву частини на os отримуємо формулу для
передатної функції
a
bpl
a
bp
a
bpl
a
bpxl
bp
b
bp
bxpW os
shch
ch
1),(
.
Працювати з такою передатною функцією (2.33) можна, але
особливого ентузіазму це не викликає.
36
2.3. Проточна ємність з товстими стінками
Маємо диференціальні рівняння (1.23) та (1.24), які після
перетворення за Лапласом набувають вигляду
)35.2(0
)34.2(,1
2
2
10
st
st
st
stіпр
a
p
dx
d
bbTp
та граничні умови (1.25), (1.26), що у зображеннях виглядають так
000
x
st
xdx
d
, (2.36)
os
x
st
x
st
dx
d
1
. (2.37)
У системі (2.34), (2.35) перше з рівнянь є алгебраїчним. Розв‟язок же
другого з граничними умовами типу (2.36), (2.37) було розглянуто в п. 2.1.
Стосовно до нашої задачі його можна представити так
),,(,
xpW st
st
(2.38)
де
ststst
st
a
p
a
p
a
p
a
px
xpW ст
shch
)(ch
),(
0
,. (2.39)
Підставляємо тепер (2.38) в (2.34)
ststst
stinp
a
p
a
p
a
p
a
p
bbTp
shch
ch
1 10 .
Зводимо подібні
.
1
1 0
0
1 inp
stst
b
a
pth
a
p
bTp
(2.40)
Звідси ,,
inppW inp
де
stst a
pth
a
p
bTp
bpW inp
0
1,
1
1
. (2.41)
37
Підставляючи (2.40) в (2.38) маємо
inpst xpWpW stinp
),()(
,, ,
звідки ),,()(),(,,,
xpWpWxpW stinpstinp (2.42)
Отже, маємо передатні функції зі спільним входом inp та виходами
(2.41) та st (2.42).
2.4. Трубопровід з тонкими стінками
Математична модель даного об‟єкта була сформована в 1.4. Це
диференціальне рівняння (1.20) та (1.29) та гранична умова (1.30).
Виконуючи над ними перетворення Лапласа (відносно змінної t та за
нульових початкових умов) отримуємо
(2.45).
(2.44),1
(2.43),)1(
0
101
000
inp
x
osst
st
bbpT
pTdx
dwT
Визначимо st
з (2.44) та підставимо його в (2.43)
os
pT
b
pT
bpT
dx
dwT
111
1
1
1
0000
,
або os
pT
b
pT
bpT
dx
dwT
111
1
1
1
0000
. (2.46)
Даному рівнянню відповідає характеристичне рівняння
01
11
0000
pT
bpTrwT . (2.47)
Воно має єдиний корінь 00
1
00
1
11
wT
pT
bpT
r
,
який можна представити так
1
1
1
00
0
000
1
pT
wT
b
wTw
pr . (2.48)
Розв‟язок неоднорідного диференціального рівняння (2.46) матиме
вигляд xr
eCC 1
10 . (2.49)
тут 0C – вимушена складова, яка після підстановки в (2.46) отримує
значення
38
os
pT
bpT
bC
11
1
00
10
. (2.50)
Підставляємо (2.49) в (2.45) ,
11
1
1
00
1 inpos C
pT
bpT
b
звідки osinp
pT
bpT
bС
11
1
00
11
.
Підставляємо отримані 0C і 1C в (2.49)
xrosinpos e
pT
bpT
b
pT
bT
b1
11
11
1
00
1
1
00
1
.
Згрупуємо змінні
inpxrosxree
pT
bpT
b 111
11
1
00
1
, (2.51)
звідки маємо передатні функції
11
1)(
1
00
11,
1
pT
bpT
ebxpW
xr
os , (2.52)
xrexpW inp
1),(,
. (2.53)
Якщо (2.51) переписати з урахуванням введених позначень (2.52) і
(2.53) та після цього підставити в (2.44), то отримаємо
inposstxpWxpWbpT inpos
,,1
,,01 ,
звідки маємо передатні функції
),(1
),(,
1
0
,xpW
pT
bxpW osstos , (2.54)
),(1
),(,
1
0
,xpW
pT
bxpW inpstinp . (2.55)
Трансцендентним комплексом в передатних функціях (2.52) – (2.55) є xre 1 , де 1r визначається формулою (2.48).
39
2.5. Змійовиковий теплообмінник
В п 1.5 були виведені диференціальні рівняння (1.27), (1.28), (1.29),
(1.30) та гранична умова (1.31). Після перетворення Лапласа відносно t
маємо
)59.2(.1
)58.2(,1
)57.2(,1
)56.2(,)1(
62
53
3
,24
33
0
1222
21
00
11
100
0
00
os
inpl
bbpT
bbdxl
bpT
bbpT
pTdx
dwT
inp
x
,0
0
0
. (2.60)
Єдине диференційне рівняння серед виписаних співвідношень – це
(2.56). Підставимо в нього 1 з (2.57). Отримаємо
2
1
10
1
000
0
0011
)1(
pT
b
pT
bpT
dx
dwT ,
що після зведення подібних дає
2
1
10
1
00
0
0011
1
pT
b
pT
bpT
dx
dwT . (2.61)
Права частина (2.61) від x не залежить, отже, формально рівняння
(2.61) можна розв‟язати за класичною схемою. Характеристичне рівняння
01
11
0000
pT
bpTrwT . (2.62)
Корінь характеристичного рівняння
00
1
00
1
11
wT
pT
bpT
r
або
1
1
1
000
000
1
pT
wTb
wTw
pr . (2.63)
Розв‟язок (2.61)
xreC
pT
bpTpT
b1
12
1
001
10
111
. (2.64)
Підставляємо (2.64) в (2.60)
inpCbpTpT
b ,01
2
001
1
11
,
40
звідки
2
001
1,01
11
bpTpT
bC inp
,
і (2.64) приводиться до вигляду
2
001
1,02
001
10 11
1111 xrxrinp e
bpTpT
be
bpTpT
b
.
Зводимо подібні
xrinpxr
eebpTpT
b11 ,02
001
10 111
. (2.65)
Підставляємо (2.65) в (2.57)
21
,00
2
001
1011
11111
1 bebebpTpT
bbpT
xrinpxr
.
Зводимо подібні
xrinpxrebe
bpTpT
bbpT 11 ,0
02
001
01
11 1
1111
, (2.66)
звідки визначаємо 1 та підставляємо його в (2.58) – (під інтеграл).
Отримане рівняння разом з (2.59) розв‟язуємо відносно 2 та
3 –
передатні функції з виходами 2 та
3 . Підставляємо 2 в (2.66) –
отримуємо 1 .
Рекомендувати для практичного використання отримані передатні
функції, очевидно, не варто – надто вони громіздкі.
2.6. Труба в трубі
Система диференціальних рівнянь сформована нами в п.1.6. Після
перетворення за Лапласом її можна представити так (для прямотоку).
)70.2(.1
)69.2(,1
)68.2(,1
)67.2(,)1(
52
43
3
33
12
22
2
22
21
00
11
100
0
00
osbbpT
bbpTdx
dwT
bbpT
pTdx
dwT
Граничні умови
inp
x
,0
0
0
, (2.71)
inp
x
,2
0
2
. (2.72)
Підставимо 1 з (2.68) в (2.67), а 3 з (2.70) в (2.69)
41
)74.2(.1111
1
)73.2(,11
1
3
530
1
202
1
21
3
432
2
22
2
1
10
1
00
0
00
os
pT
bb
pT
bb
pT
bb
pT
bbpT
dx
dwT
pT
b
pT
bpT
dx
dwT
Позначаємо для компактності
1
1)(
1
1
pT
pf , (2.75)
1
1)(
3
3
pT
pf , (2.76)
)(1)( 1000 pfbpTpf , (2.77)
)()(1)( 12134322 pfbbpfbbpTpf . (2.78)
Тоді (2.79), (2.80) можна представити так
211
00
0
00 )()(
pfbpfdx
dwT , (2.79)
ospfbbpfbbpfdx
dwT
353
0120
22
2
22 )()( . (2.80)
Визначаємо 2 з (2.79) та підставимо його в (2.80)
ospfbbpfbbpfpfb
pf
dx
dWT
pfb
pf
dx
dpf
pfb
wT
dx
d
pfb
wTwT
)()()()(
)(
)(
)(
)()()(
3530
1200
0
11
20
00
11
2
0
0
11
22
2
02
11
0022
Множимо ліву та праву частини на )(11 pfb
.)()()()()(
)()(
3153102
121020
0
0222002
02
0022
ospfpfbbbpfbbbpfpf
dx
dpfwTpfwT
dx
dwTwT
(2.81)
Вводимо позначення
).()()(
),()()()(
),()()(
,
31531
2
110200
0222001
22002
pfpfbbbpb
pfbbpfpfpa
pfwTpfwTpa
wTwTa
Тоді (2.77) набуває вигляду
ospbpadx
dpa
dx
da
)()()( 0
0
0
12
02
2 . (2.82)
Диференціальному рівнянню (2.82) відповідає характеристичне
рівняння
42
0)( 012
2 parpara , (2.83)
корені якого визначаються так
2
02
2
112,1
2
)(4)()()(
a
paapapapr
. (2.84)
Тоді розв‟язок (2.83) можна представити так
xprxpros epCepCpa
pb )(2
)(1
0
0 21 )()()(
)( . (2.85)
Для визначення )(1 pC та )(2 pC існують граничні умови (2.71) та (2.72)
Щодо (2.71) особливих проблем не виникає
inpos pCpCpa
pb ,021
0
)()()(
)( . (2.86)
А от щоб скористатись (2.72), то треба спочатку виразити 2 через
)(1 pC та )(2 pC . Підставимо спочатку (2.85) в (2.67)
.)()()(
)()1(
)()()(
)(2
)(1
0
0
)(22
)(1100
1
21
21
xprxpros
xprxpr
epCepCpa
pbpT
eprpCeprpCwT
А тепер це 1 підставляємо в (2.68)
,)()()(
)(
)()()(
)()1()()()(1
21
)(2
)(1
0
0
)(2
)(1
0
0)(
22)(
11001
21
2121
bepCepCpa
pbb
epCepCpa
pbpTeprpCeprpCwTpT
xprxpros
xprxprosxprxpr
звідки визначається 2 , яке і підставляється в (2.72)
.1
)()()(
)(
)()()(
)()1()()()(1
,2
1
21
0
0
21
0
02211001
inpos
os
bpCpC
pa
pbb
pCpCpa
pbpTprpCprpCwTpT
Групуємо подібні
.1
11)(
)(
)(
)(11)(
)(
)(11)(
,2
1
010
0
0
0020012
0
0010011
inpos
bpTpTb
pa
pb
pa
pbbpTprwTpTpC
pa
pbbpTprwTpTpC
(2.87)
43
Система (2.86), (2.87) розв‟язується відносно )(1 pC та )(2 pC , які
потім підставляємо в (2.85). З останнього визначаються передатні функції з
входами osinpinp ,, ,2,0 та виходом 0 . Аналогічно можуть бути визначені
і решта передатних функцій. Ми їх не приводимо тут через їх надзвичайну
громіздкість.
2.7. Струна
Математична модель струни була розглянута в п. 1.7.
Диференціальне рівняння (1.40) після перетворення Лапласа відносно
змінної t виглядає так
s
s
fm
yeppdx
ydc
1)( 2
2
22 . (2.88)
Зупинимось на варіанті таких граничних умов (в зображеннях за
Лапласом)
lx yy 0 , (2.89)
0lxy . (2.90)
Характеристичне рівняння, що відповідає (2.88)
0)( 222 epprc . (2.91)
Воно має корені
eppc
r 22,1
1. (2.92)
Розв‟язок (2.88)
eppc
xepp
c
x
s
s
eCeCfeppm
y
22
212 )(
1. (2.93)
Підставляємо (2.93) в (2.89) та (2.90)
.0)(
1
)(
1
22
21
2
,212
eppc
lepp
c
l
s
s
ls
s
eCeCfeppm
yCCfeppm
Запишемо цю систему перегрупувавши доданки
.)(
1
,)(
1
221
221
22
s
s
eppc
lepp
c
l
s
s
l
feppm
eCeC
feppm
yCC
Розв‟язок системи
44
eppc
lepp
c
l
eppc
l
s
s
s
s
l
ee
efeppm
feppm
y
C
22
2
;
1;1
;)(
1
1;)(
1
2
2
1 , .
;
1;1
)(
1;
)(
1;1
22
2
2
2
2
eppc
lepp
c
l
s
s
eppc
l
s
s
l
ee
feppm
e
feppm
y
C
Підставляємо отримані значення 1C та 2C в (2.93)
,)()(
)()(
)(
1
22
2
2
2
22
22
2
22
22
2
eppc
lepp
c
l
s
s
eppc
xl
eppc
xl
ls
s
eppc
x
eppc
lepp
c
l
s
s
eppc
x
s
s
eppc
xl
eppc
xl
l
s
s
ee
feppm
eeyf
eppm
e
ee
feppm
ef
eppm
eey
feppm
y
звідки отримуємо передатні функції
eppc
lepp
c
l
eppc
xlepp
c
xl
yy
ee
eexpW
l
22
22
),( . (2.90)
epp
c
lepp
c
l
eppc
xepp
c
xepp
c
xlepp
c
xl
s
yf
ee
eeee
eppmxpW
s 22
2222
1)(
1),(
2. (2.91)
Їх можна представити через гіперболічні функції
eppc
l
eppc
xl
xpW yyc2
2
sh
sh
, , (2.92)
.
shch
1)(
1),(
2
22
2
eppc
lsh
eppc
xepp
c
xl
eppmxpW
s
yf s (2.93)
45
2.8. Навантажена нитка
Перетворимо за Лапласом відносно t диференціальне рівняння (1.50)
fm
ypdx
yd
dx
ydxl
m
mg
nn
122
1
. (2.94)
Це диференціальне рівняння, у якому коефіцієнт при другій похідній
залежить від незалежної змінної x. Цим воно відрізняється від звичайних
диференціальних рівнянь зі сталими коефіцієнтами, алгоритми
інтегрування яких добре відпрацьовані.
Розраховувати на можливість отримання передатних функцій, що
описують об‟єкт з диференціальним рівнянням (2.54), які були б
придатними для використання в інженерних розрахунках, не доводиться.
Доведеться шукати інші підходи до аналізу динамічних характеристик
подібних об‟єктів.
2.9. Проточний датчик щільності рідини
Як уже відзначалось у п.1.9, даний об‟єкт не має диференціального
рівняння у звичному нам смислі, зате там була визначена формула, яка
описує його перехідну характеристику h(t). Це формула (1.58).
Відомо, що передатну функцію можна визначити як зображення
відповідної імпульсної характеристики g(t).
)()( pgpW . (2.95)
Імпульсна ж характеристика, в свою чергу, є похідною від перехідної,
а саме
)()( thdt
dtg . (2.96)
Продиференціюємо (1.58), матимемо
,при0
,0при)(
0
t
th
w
tg (2.97)
де 0wh . Графік (2.97) показано на рис. 2.1
46
Рис.2.1. Імпульсна характеристика датчика густини
Зображення за Лапласом від (2.97), а, отже, згідно (2.95) і передатна
функція буде
p
e
p
e
h
wpW
pp
11)( 0 . (2.98)
2.10. Транспортер-витратомір
З перехідної характеристики (1.66) шляхом диференціювання
отримуємо імпульсну характеристику.
.2при0
,2при2
,0при
)(2
2
t
tt
tt
tg (2.99)
Графік (2.99) показано на рис. 2.2.
Рис. 2.2. Імпульсна характеристика транспортера-витратоміра
Графік 2.2 можна представити у вигляді суми трьох прямих як
показано на рис. 2.3.
g(t)
t
w0/h
0
g(t)
t 2
1/
0
47
Рис. 2.3. Розкладення g(t) на компоненти.
Тоді зображення за Лапласом першої компоненти
221
1)(
ppg
,
другої рe
ppg
222
2)( ,
третьої рe
ppg
223
1)( ,
що в сумі дає рр eep
pW
2
2221
1)( . Або, що те саме
2
1)(
р
epW
р
. (2.100)
Структури (2.98) та (2.100) можуть знайти застосування для апроксимації
(ідентифікації) і інших динамічних об‟єктів.
g(t)
t 2
1/
-2/
3
1
2
3
0
48
3. ПЕРЕХІДНІ, ІМПУЛЬСНІ ТА ЧАСТОТНІ ХАРАКТЕРИСТИКИ
Маючи передатну функцію W(p) нескладно (теоретично!) отримати
перехідну
p
pWLth
)()( 1 , (3.1)
імпульсну
)()( 1 pWLtg (3.2)
чи частотні, наприклад, амплітудно-фазову
jppWjW |)()( (3.3)
характеристики.
Повторюємо – теоретично! А от практично… Підставте передатні
функції, отримані в розділі 2, в (3.1) та (3.2) і спробуйте виконати зворотне
перетворення Лапласа, або реалізуйте підстановку jp в (3.3). Справа
це не безнадійна, з використанням комп‟ютера, зокрема, для формули (3.3)
цілком реальна, але надто трудомістка, тим більше, що, не виключено, вам
самому доведеться формувати програмне забезпечення для дослідження
кожного конкретного каналу для кожного конкретного об‟єкта. Нічого
дивного –– адже чим складніше об‟єкт, тим складніше передбачити усі
особливості його “характеру” і імовірної поведінки. Але ж на передатній
функції як джерелі інформації про канал, як кажуть, “світ клином не
зійшовся”.
Ті ж самі перехідні характеристики можна отримати шляхом
числового інтегрування відповідної системи диференціальних рівнянь
(приклади яких наведені, зокрема, в розділі 1). Перерахувати перехідну
характеристику в імпульсну теж не проблема. А маючи імпульсну
характеристику і комп‟ютер можна скористатись стандартним алгоритмом
і розрахувати частотні характеристики. Розглянемо детальніше, як це
можна зробити.
3.1. Розрахунок частотних характеристик за масивом ординат
імпульсної характеристики
Формулу (3.2) можна представити і так
)()( tgLpW
або dtetgpW pt
)()(0
.
Замінимо в останній формулі p на j
dttjttgj )sin()cos()()Im()Re(0
.
49
Тут )Re( та )Im( відповідно – дійсна та уявна частотні
характеристики (дійсна та уявна частина амплітудно-фазової
характеристики). Комплексна рівність розпадається на дві дійсних рівності,
а саме
dtttg )cos()()Re(0
, (3.4)
dtttg )sin()()Im(0
. (3.5)
Якщо Dttg )( , (3.6)
де – мала величина, то верхню межу інтегрування в формулах (3.4), (3.5)
можна змінити на D
dtttgD
)cos()()Re(0
, (3.7)
dtttgD
)sin()()Im(0
. (3.8)
Будемо вважати , що g(t) задано масивом ординат
-1 0 1 2 3 … L L+1
Gt L g0 g1 g2 g3 … gL Dt
Тут 600L (наприклад L=500), причому DtLD . Вважаючи, що
виконується умова (3.6), будемо обчислювати інтеграли (3.7) та (3.8) за
формулою трапецій. Тоді
)cos(20)Re(
1
1DtssGtGtDt
L
s , (3.9)
)sin()Im(1
1DtssGtDt
L
s
. (3.10)
Доданок 2LGt не враховується з огляду на виконання умови (3.6).
Формули (3.9), (3.10) будуть забезпечувати достатню точність за умови,
якщо в межах періоду коливань T, що відповідає частоті 2T ,
розміщується принаймні 20 ординат імпульсної характеристики (з кроком
Dt між сусідніми ординатами), тобто
Dt 202
(3.11)
або, що те саме
Dt
10
. (3.12)
Умова (3.11) не є строгою, ми просто збираємося представити
синусоїду (косинусоїду) в межах періоду ламаною при кількості точок
зламу не меншій 20, інакше, така апроксимація буде надто грубою. Читач
50
може замінити число 20 на те, яке йому буде більше імпонувати … Але в
інженерних розрахунках доводиться часто приймати “силові” рішення.
Треба зафіксувати число . Треба вибрати мінімальне число кроків в межах
періоду… Ми прийняли його рівним 20. Ми розбили інтервал інтегрування
[0..D] на L=500 кроків. Бо інженер – “крайній”: йому нема на кого
перекладати прийняття конкретних рішень. Математикам легше – сказати з
“точністю до ”, де – деяке (?!) мале число …
Масив Gt, як ми уже відзначали, заданий з кроком Dt (див. комірку з
номером L+1). Отже Dt – фіксоване, а частота в умові (3.12) може
змінюватись теоретично в діапазоні від 0 до . Ну, не до самої
нескінченності, але до якого саме числа – наперед сказати не можна. Адже
об‟єкти, частотні характеристики яких ми збираємось досліджувати,
можуть бути самими різними і параметри їх можуть змінюватись в межах,
про які ми наперед також нічого конкретного сказати не можемо. Тому
обмежуватись діапазоном частот, для яких виконується умова (3.12), може
виявитись недостатнім.
Приймемо, що використовувана в формулах (3.9), (3.10) імпульсна
характеристика )(tg така, що при кроці Dt допускає лінійну інтерполяцію в
межах цього кроку. Якщо D вибрано грамотно, тобто так, що D в (3.6) не
надто завищено (D вибрано близько до Dg – не мало, але і не занадто
багато!), крім того 500L , то для більшості технічних об‟єктів гіпотеза
про допустимість лінійної інтерполяції в межах кроку Dt=D/L уявляється
достатньо обґрунтованою (треба приймати конкретне рішення…). Якщо
зберегти підхід, використаний в (3.11) , то для частот, більших ніж ті, що
дозволяються (3.12), можна записати
10Dtw , (3.13)
де Dtw – крок між сусідніми ординатами в формулах (3.9), (3.10). Для
кожної частоти цей крок має бути своїм! Щоб пройти відрізок Dt 0
з кроком Dtw безпосередньо використати масив Gt не вдасться (він
заданий з кроком DtwDt ).
То ми, як уже згадували вище, скористаємося лінійною
інтерполяцією. Це означає, що для поточного t значення g(t) можна
реалізувати у вигляді підпрограми-функції IntGt: function IntGt(t: real): real;
var s: integer; r: real;
begin
r:=t/Gt[L+1];{dt;}
s:=trunc(r);
t:=frac(r);
IntGt:=Gt[s]+t*(Gt[s+1]-Gt[s]);
end;
Описаний алгоритм обчислення значень )Re( та )Im( для
поточного значення одержимо у вигляді підпрограми-процедури UrGod,
51
яка працює з глобальним масивом Gt:CoefL описаної вище структури і
яка повертає в основну програму )Re(x та )Im(y , де x,y:real. Тут
також глобальні L:integer та w,Dw:real (останні представляють
Dта )
procedure UrGod;
var wt, dtw, g: real;
s, Lw: integer;
begin
x:=Gt[0]/2; y:=0; dt:=Gt[L+1];
if w<Pi/(10*dt)
then
begin
for s:=1 to L-1 do
begin
wt:=w*s*dt;
g:=Gt[s];
x:=x+g*cos(wt);
y:=y-g*sin(wt);
end;
x:=x*dt;
y:=y*dt;
end
else
begin
dtw:=Pi/(10*w);
Lw:=round(d/dtw);
dtw:=d/Lw;
for s:=1 to Lw-1 do
begin
wt:=w*s*dtw;
g:=IntGt(s*dtw);
x:=x+g*cos(wt);
y:=y-g*sin(wt);
end;
x:=x*dtw;
y:=y*dtw;
end;
end;
Алгоритм формування годографа, зокрема, годографа амплітудно-
фазової характеристики було детально розглянуто в [32, 40]. Наведемо
отримані там підпрограми.
Перше, з чого починається побудова годографа, це формування
відповідної системи координат (якщо вона не була до цього сформована).
Для цього треба спочатку задати діапазон варіації . Теоретично 0
. Практично ж треба врахувати конкретні особливості розглядуваного
каналу, а також специфіку розв‟язуваної проблеми (для чого нам цей
годограф потрібен). Ну, наприклад, якщо об‟єкт (канал) не має
52
самовирівнювання, то при 0 амплітудно-фазова характеристика
дорівнює нескінченності. Реальні об‟єкти, як правило, інерційні, в них має
місце розсіювання енергії, а це приводить до того, що вони практично не
реагують на збурення з високими частотами, в результаті чого амплітудно-
фазова характеристика уже при скінченних значеннях частоти практично
стає рівною нулю, отже, подальше збільшення частоти при побудові
)( jW втрачає сенс. Отже, на практиці треба задати діапазон кп ,
де п – початкове та к – кінцеве значення частоти. Для визначення
максимальних значень як дійсно-частотної так і уявно-частотної
характеристики треба, принаймні, просканувати заданий діапазон частот з
деяким кроком. З яким? Чим менше, тим краще. Задамось, наприклад,
кількістю кроків сканування Nsc, скажімо, Nsc = 50. Отже, крок сканування
буде ./)( NscD nk
Тут, знову ж таки, треба враховувати характерні особливості об‟єкта
та каналу. Як правило, індекси частот на годографі )( jW розподіляються
дуже нерівномірно. Частіше всього на малих частотах відстань між
сусідніми точками (на кроці D ) може бути відносно великою, тоді як із
зростанням частоти при тому ж кроці D відстань прогресуюче
зменшується. Якщо крок D вибрано невдало, то може виявитись, що уже
на першому кроці сканування ви “перескочите” саму суттєву ділянку
годографа (не оцінивши її параметрів) і далі будете “товктись” в зоні
частот, для яких точки згрупуються в околі початку координат, що
неінформативно. Проблема вибору Nscкп та, ускладнюється тим, що
ступінь вдалості вибору можна буде оцінити лише після процесу
формування годографа. У разі невдачі весь процес доведеться
повторювати, і, не виключено, що не один раз.
На комп‟ютері однократне формування годографа у вас займе від
часток секунди до кількох секунд. Так що повторні ітерації не створюють
серйозних проблем.
Процес сканування з наступним формуванням системи координат
оформимо у вигляді процедури Scan. procedure Scan;
var s:integer;
begin
Dw:=(Wk-Wn)/Nsc;
Xmin:=0; Xmax:=0; Ymin:=0; Ymax:=0;
for s:=0 to Nsc do
begin
W:=Wn+S*Dw; UrGod;
if X<Xmin then Xmin:=X;
if X>Xmax then Xmax:=X;
if Y<Ymin then Ymin:=Y;
if Y>Ymax then Ymax:=Y
end;
X0Y0(true); ClearDevice; SystCoor
53
end;
Процедури X0Y0 та SystCoor, задіяні в Scan, знаходяться в модулі
Serv, що має бути підключений до програми (через конструкцію uses).
Детальний опис модуля Serv як і модуля Groms, який використовується
для оформлення графіків і годографів, наводиться в [32, 40]. У Додатку до
даної роботи наводяться лістинг цих модулів.
При наявності системи координат координати x,y точки годографа
можна перерахувати в екранні координати s,z тобто визначити піксель, у
який відображується розглянута точка годографа. Це робить процедура SZ. procedure SZ;
begin
UrGod;
if Dx<>0 then s:=x0+round(x/Dx)
else s:=x0;
if Dy<>0 then z:=y0-round(y/Dy)
else z:=y0
end;
Тут x0,y0:integer – екранні координати пікселя, в який
проектується початок системи координат X0Y (у нашому випадку
комплексної площини, в якій формується годограф jW ). Змінні x0,y0
описані в модулі Serv.
Годограф можна формувати або піксель за пікселем, послідовно
“пристиковуючи” черговий піксель до поточного або ж формувати
годограф у вигляді ламаної, нарощуючи годограф відрізок за відрізком.
Найвища точність (з точністю до пікселя) досягається за першим
алгоритмом, але швидкодією він поступається перед другим, в якому
задається “довжина” відрізка в діапазоні від Min до Max пікселів (це
типізовані константи типу integer, які можуть бути уточнені
користувачем).
“Попіксельний” алгоритм реалізується підпрограмою PointGod
(точка годографа). procedure PointGod;
const Kw=1.2;
var Mdx,Mdy,Md,Sp,Zp:integer;
Wp:real;
begin
Sp:=s; Zp:=z; Wp:=w;
repeat
W:=Wp+Dw; SZ;
Mdx:=abs(S-Sp);Mdy:=abs(Z-Zp);
if Mdx>Mdy then Md:=Mdx
else Md:=Mdy;
if Md<>1 then
if Md<1 then Dw:=Dw*Kw
else Dw:=Dw/Md;
54
until (Md=1) or (W>Wk);
if Md=1 then PutPixel(S,Z,c)
end;
Ця процедура, як уже відзначалось, домальовує черговий піксель
(один!) годографа. Черговий же відрізок формує процедура LineGod. procedure LineGod;
var Mdx, Mdy, Md, Sp, Zp:integer;
Wp, r: real;
begin
Sp:=s; Zp:=z; Wp:=w; r:=(Min+Max)/2;
repeat
W:=Wp+Dw; SZ;
Mdx:=abs(S-Sp); Mdy:=abs(Z-Zp);
if Mdx>Mdy then Md:=Mdx
else Md:=Mdy;
if (Md>Max) or (Md<Min) then
if Md<Min then Dw:=Dw*Kw
else Dw:=Dw*r/Md;
until ((Md<=Max) and (Md>=Min)) or (W>Wk);
if (Md<=Max) and (Md>=Min) then Line(Sp,Zp,S,Z);
end;
Вибір того чи іншого алгоритму (PointGod чи LineGod)
визначається Tg:char, який може приймати значення 'P' (PointGod)
або 'L' (LineGod). Формування ж годографа в цілому реалізує
підпрограма-диспетчер Godo. procedure Godo;
var J3:char;
T20: string[20];
begin
PutA;Ou('0-Exit'); J3:='1';
dt:=d/L;
Dw:=(Wk-Wn)/Nsc; W:=Wn; Sz;
PutPixel(S,Z,C); SetColor(C);
repeat
case Tg of
'P': PointGod;
'L': LineGod;
end;
Str(W,T20);
Clear(450,0,GetMaxX-1,10);
OutTextXY(450,0,'W='+T20);
if KeyPressed then J3:=ReadKey
until (W>Wk) or (J3='0');
SetColor(15)
end;
Після того як сама крива годографа сформована, треба нанести на цю
криву мітки частот – свого роду шкалу. Враховуючи імовірну та важко
55
передбачувану ступінь нерівномірності цієї шкали, будемо наносити мітки
у вигляді кружечків радіусом, скажімо, в 3 пікселі кольором С, після чого
десь поряд з даним кружечком наносимо відповідний напис (щось на
зразок 0.5W чи просто значення частоти). Формування такої розмітки
будемо реалізовувати за допомогою процедури IndW: procedure IndW;
var j2: char;
begin
repeat
PutA;
Ou('0-Ex, 1-W, 2-C, 3-Point, 4-Inscr');
Str(w:1:3,T10); Ts:='w='+T10;
Str(C,T10); Ts:=Ts+', C='+T10;
Info; j2:=ReadKey;
case j2 of
'1': Our('w',w);
'2': Oui('C',C);
'3': begin
SetColor(C); SZ; Circle(s,z,3);
SetColor(15);
end;
'4': Inscr;
end;
until j2='0';
end;
Тут Inscr – процедура з модуля Groms [27]. Процедури Scan, SZ,
PointGod, LineGod та IndW об‟єднуються в модуль GodoGt, лістинг якого
наводиться в Додатку 1.
3.2. Динамічні характеристики теплоакумулюючої стінки
Читача, якого цікавлять аналітичні формули для розв‟язання
диференціального рівняння теплопровідності, відсилаємо до класичних
робіт [10, 49].
Ми ж тут розглянемо, як і обіцяли раніше, числовий метод
розрахунку перехідних процесів і, зокрема, розрахунку перехідної
характеристики будь-якого можливого каналу в даному об‟єкті. Отже, мова
йтиме про диференціальне рівняння (1.10), де k може приймати значення 0,
1 чи 2.
Досить детальний розгляд явної, неявної та комбінованої схем
числового інтегрування цього рівняння наведено в роботі [32]. Ми тут
зупинимося на використанні явної схеми і лише для розрахунку перехідної
характеристики, коли вхідний сигнал вважається рівним 1(t), а початкові
умови є нульовими.
56
Дискретні змінні:
,
,
,
,vsvttshx
v
s
tvt
xshx
(3.13)
де Ks
LD
mh
/,
кроки за x та t відповідно,
m – ціле додатне число, D – час спостереження, 500L – ціле додатне
число, Ks – коефіцієнт подрібнення кроку за часом.
Тут для криволінійних стінок (k=1 або 2) x відраховується від r0 (коли
r0= 0, то, зрозуміло, від осі).
Перейдемо в (3.10) до дискретних змінних
,11,2
2 ,1,1
02
,1,,1,1,
ms
hshr
k
ha
vsvsvsvsvsvsvs
Розв‟язуємо його відносно 1, vs . Отримуємо
,11,
2,1,1
0,1,1,11,
ms
h
rs
kqq vsvsvsvsvsvs (3.14)
де 2h
aq
, qq 211 .
Варіанти граничних умов будемо задавати параметрами
Ngl,Ngr:integer, які можуть приймати значення 1, 2 або 3 в залежності
від того граничні умови якого роду мають місце на “лівій” (Ngl) та
“правій” (Ngr) поверхні. Для криволінійних стінок – це відповідно
внутрішня та зовнішня поверхні.
Розглянемо послідовно всі можливі варіанти. Кожна із змінних
srrrslll TQTTQT ,,,,, вважається рівною 1, коли вона розглядається як
вхідний сигнал, інакше вона приймається рівною 0.
,1Ngl lv T1,0 ; (3.15)
,2Ngl l
vvQ
h
1,01,1 ,
звідки lvv Qh
1,11,0 , (3.16)
,3Ngl )( 1,00
1,01,1
vsl
vvT
h
,
slvv Tbb 11,101,0 , (3.17)
де 01
0
00 1, bb
h
hb
.
Відповідно для правої поверхні
57
,1Ngr rvm T1, ; (3.18)
,2Ngr r
vmvmQ
h
1,11, ,
або rvmvm Qh
1,11, ; (3.19)
,3Ngr )( 1,1
1,11,
srvm
vmvmT
h
,
srvmvm Tbb 31,121, , (3.20)
де 23
1
12 1, bb
h
hb
.
Розглянемо ще варіант суцільних циліндра та кулі, коли 00 r . Тоді
Ngl не зможе прийняти значення з множини [1, 2, 3]. Умовно позначимо
його як Ngl=0.
Розглянемо .limlim00 r
rkrr
k
rr
Розкриваємо невизначеність за правилом Лопіталя
.limlim2
2
00 rk
rr
k
rr
Одержане співвідношення підставляємо в диференціальне рівняння (3.10)
0
2
2
0
1
rr rka
t
.
У дискретній формі це буде
2
,1,0,1,01,0 21
hka
vvvvv
. (3.21)
А за умови температурної симетрії відносно осі (температурне поле
одновимірне!) vv ,1,1 .
А коли так , то з (3.21) маємо
vvv kqkq ,1,01,0 12121 . (3.22)
Тоді крок за часом при розрахунку перехідної характеристики
виглядатиме так: procedure Step;
var s: integer; Tet: Coefr; Rs: real;
begin
for s:=1 to m-1 do
begin
Rs:=K/(R0/Hx+S)/2;
Tet[s]:=q1*Teta[s]+q*((1-Rs)*
Teta[s-1]+(1+Rs)*Teta[s+1]);
end;
case Ngl of
58
0: Tet[0]:=Teta[0]+2*(1+K)*Q*(Teta[1]-Teta[0]);
1: Tet[0]:=TL;
2: Tet[0]:=Tet[1]+Hx/Lam*QL;
3: Tet[0]:=B0*Tet[1]+B1*TsL;
end;
case Ngr of
1: Tet[m]:=Tr;
2: Tet[m]:=Tet[m-1]-Hx/Lam*Qr;
3: Tet[m]:=B2*Tet[m-1]+B3*Tsr;
end;
Tet[-1]:=m; Teta:=Tet;
end;
Якщо вхідний сигнал діє на ліву поверхню, то приймаємо, що
Ninp=0, інакше Ninp=1. Тут Ninp – типізована константа типу integer.
В якості вихідного сигналу будемо розглядати температуру в точці
х=Xout, де Xout – типізована константа типу real, що може приймати
значення в діапазоні 0XoutDelta, де Delta – ідентифікатор, що
відповідає – товщині стінки. При кроці h (ідентифікатор Hx:real) це
буде комірка з номером Nx:=round(Xout/Hx). Тип CoefR, використаний
у процедурі Step, має такий вигляд: type CoefR=array[-1..201] of
real.
Структурно він виглядає так, наприклад, стосовно змінної Teta
-1 0 1 2 … m m+1 … 201
Teta:CoefR m v,0
v,1 v,2 … vm, Hx …
Отже, змінну m треба задавати в діапазоні 0m200. А от масиви
Ht:CoefL для ординат перехідної та Gt:CoefL для ординат імпульсної
характеристики мають такий формат: type CoefL=array[-1..601] of
real.
Структура масиву Ht на прикладі:
-1 0 1 2 … L L+1 … 601
Ht:CoefL L 0,Nx
1,Nx 2,Nx … LNx , Dt …
Формувати ж масиви Ht,Gt:CoefL будемо в процедурі FormHtGt,
текст якої рекомендуємо дивитись в лістингу програми DemGt, що
наводиться в Додатку.
Формування годографа )( jW , що відповідає попередньо
сформованому масиву Gt:CoefL імпульсної характеристики, реалізується
підпрограмою FormGodo (див. програму DemGt).
Приклади сформованих за допомогою програми DemSt графіків h(t),
g(t) та годографів )( jW наводяться на рис. 3.1, а повний лістинг
програми представлений у Додатку 2.
59
а)
б)
в)
Рис. 3.1. Динамічні характеристики плоскої стінки, канал outsl xT :
а – перехідна; б – імпульсна; в – амплітудно-фазова
характеристики
60
3.3. Динаміка температури в неізольованому стрижні
Дискретизуємо диференціальне рівняння (1.19) та граничні умови
(1.20) та (1.21).
)(2
,2
,1,,1,1, osvvs
vsvsvsvsvsb
ha
, (3.23)
)( 1,010
1,01,1
v
s
v
vv
h
, (3.24)
1,11, vmvm . (3.25)
Розв‟язуємо (3.23) відносно 1, vs (явна схема)
)()2( ,,1,,1,1,osvvsvsvsvsvsvs bq , (3.26)
де KsL
D
m
lh
h
aq
,,
2.
З (3.24) маємо s
vvv bb 111,101,0 , (3.27)
де 01
0
00 1, bb
h
hb
.
Формулу (3.25) немає потреби спрощувати. Отже, крок за часом –
процедура Step procedure Step;
var s: integer;
Tet: Coefr;
begin
m:=round(Teta[-1]);
for s:=1 to m-1 do
Tet[s]:=Teta[s]+q*(Teta[s-1]-
2*Teta[s]+Teta[s+1])-
B*Tau*(Teta[s]-Tos);
Tet[0]:=B0*Tet[1]+B1*Tos;
Tet[m]:=Tet[m-1]; Tet[-1]:=m;
Tet[-1]:=m; Teta:=Tet;
end;
61
Масиви Ht,Gt:CoefL ординат перехідної та імпульсної
характеристик формуємо за допомогою процедури FormHtGt: procedure FormHtGt;
var s:integer;
begin
Gt[-1]:=L; Ht[-1]:=L; Dt:=D/L;
Gt[0]:=0; Gt[L]:=0; Gt[L+1]:=Dt;
Ht[-1]:=L; Ht[0]:=0; Ht[L+1]:=Dt;
Hx:=Lng/m;
A:=Lam/(Ro*Cst); Tau:=sqr(Hx)/(6*A);
B:=4*A0/(Ro*Cst*D0);
Ks:=round(Dt/Tau);
if Ks=0 then Ks:=1;
Tau:= Dt/Ks; q:=A*Tau/sqr(Hx);
q1:=1-2*q;
B0:=Lam/(Lam+Hx*A0); B1:=1-B0;
Teta[-1]:=m;
for s:=0 to m do Teta[s]:=0;
Nout:=round(Xout/Hx); Tos:=1;
for s:=1 to L do
begin
for z:=1 to Ks do Step;
Ht[s]:=Teta[Nout];
end;
for s:=0 to L-1 do Gt[s]:=(Ht[s+1]-Ht[s])/Dt;
end;
Підпрограми Step та FormHtGt призначені для роботи в програмі
DemStr, лістинг якої наводиться в Додатку 3. Перехідна, імпульсна та
амплітудно-фазова характеристики, сформовані програмою DemStr,
наводяться на рис 3.2
62
а)
б)
в)
Рис. 3.2. Динамічні характеристики неізольованого стрижня, канал
outos x : а – перехідна; б – імпульсна; в – амплітудно-фазова
характеристики
63
3.4. Динаміка проточної ємкості
Переходимо до дискретних змінних в диференціальних рівняннях
(1.23) та (1.24)
stv
inpvv
vv bbT ,0101
, (3.28)
2
,1,,1,1, 2
ha
stvs
stvs
stvs
stvs
stvs
. (3.29)
Розв‟язуємо (3.28), (3.29) відносно 1v
та st
vs 1, відповідно
)( ,0101 vst
vinpvvv bb
T
, (3.30)
11,2 ,1,,1,1, msq stvs
stvs
stvs
stvs
stvs . (3.31)
Граничні умови (1.25) та (1.26) стосовно до моменту часу )1( vt у
дискретній формі отримують вигляд
)( 1,01
1,01,1 stvv
stv
stv
h
,
0,11,
h
stvm
stvm
,
або після розв‟язання відносно граничних точок
131,121,0 vstv
stv bb , (3.32)
де 23
0
2 1, bbh
b
.
stvm
stvm 1,11, . (3.33)
Крок за часом згідно (3.30) – (3.33) оформляємо у вигляді підпрограми
Step : procedure Step;
var s:integer;
Tet1:Coefr;
Tet0:real;
begin
Tet0:=F2*Teta0+F3*T0inp+F4*Teta1[0];
for s:=1 to m-1 do
Tet1[s]:=Q1*Teta1[s]+Q*(Teta1[s-1]+Teta1[S+1]);
Tet1[0]:=F5*Tet1[1]+F6*Teta0;
Tet1[M]:=F7*Tet1[M-1]+F8*Tos;
Tet1[-1]:=m; Teta1:=Tet1; Teta0:=Tet0
end;
64
Формування масивів Ht,Gt:CoefL перехідної та імпульсної
характеристик проточної ємкості при спільному вхідному сигналі T0inp
(температура теплоносія на вході в ємкість) та при виходах: температура
теплоносія в ємкості (Nout=0) або температура стінки в Xout-ому перерізі
(Nout=1) реалізуємо в підпрограмі FormMas. procedure FormMas;
var Yp:real;
begin
Init; Gt[-1]:=L; Ht[-1]:=L; dt:=D/L;
Gt[0]:=0; Gt[L+1]:=dt; Ht[0]:=0; Ht[L+1]:=dt;
Xu:=(GetMaxX-L) div 2; Y:=0;
PutA; Rectangle(Xu,0,Xu+L,5);
for z:=1 to L do
begin
Line(Xu+z,1,Xu+z,4); Yp:=Y;
for s:=1 to Ks do Step;
case Nout of
0: y:=Teta0;
1: y:=Teta1[Nx]
end;
Ht[z]:=Y; Gt[z]:=(y-yp)/dt;
end;
end;
Повний текст програми DemPrе наведено в Додатку 4. Результати
роботи цієї програми показано рис. 3.3
65
а)
б)
в)
Рис. 3.3. Динамічні характеристики проточної ємності, канал inp:
а – перехідна; б – імпульсна; в – амплітудно-фазова
характеристики
66
3.5. Трубопровід з тонкими стінками
Дискретизуємо рівняння (1.28) та (1.29)
msh
wTT stvsvs
vsvsvsvs
1,,,
,1,
00
,1,
0
. (3.34)
msbbT osvvs
stvs
stvs
stvs
1,1,0,
,1,
1
. (3.35)
Гранична умова (1.30) для )1( vt набуває вигляду
inpvv 11,0 . (3.36)
Розв‟язуємо (3.34), (3.35) відносно 1, vs
та st
vs 1,
msbb vsvsvsstvsvsvs 1,( ),1,3,,2,1, , (3.37)
msbbb stvs
svvs
stvs
stvs 0),( ,1,04,1,
, (3.38)
де .,,1
400
3
0
2T
bh
wTb
Tb
Крок за часом оформляємо у вигляді підпрограми Step. У Додатку 5
наводиться повний текст програми DemTr, яка демонструє динамічні
характеристики розгляданого об‟єкта. Там типізована константа Ninp може
приймати значення 0, коли входом є температура Tinp на вході в трубу або
Ninp=1, коли за вхід приймається Tos – температура оточуючого
середовища. Вихід задається параметром Nout, який дорівнює 0, коли за
вихід приймається температура теплоносія в трубі в Xout-ому перерізі або
ж Nout=1, коли цікавляться температурою стінки, в тому Xout-ому
перерізі. Результати роботи програми DemTr показано на рис. 3.4.
67
а)
б)
в)
Рис. 3.4. Динамічні характеристики трубопроводу, канал outinp x :
а – перехідна; б – імпульсна; в – амплітудно-фазова
характеристики
68
3.6. Змійовиковий теплообмінник
Дискретизуємо диференціальні рівняння (1.27) – (1.30)
msh
wTT vsvs
vsvsvsvs
1,1
,0,
0,1
0,
00
0,
01,
0
, (3.39)
msbbT vvsvs
vsvs
0,2
10,0
1,
1,
11,
1
, (3.40)
,
2/)(
,24
33
1,
1
1
1,
1,02
222
12
inpvv
vs
m
svmvv
vv
bb
hbT
(3.41)
osvvv
vv bbT
6
25
333
13
. (3.42)
Гранична умова (1.31) для )1( vt
inpvv
,01
01,0 . (3.43)
Розв‟язуємо (3.39) – (3.42) відносно температур в кінці кроку за
часом тобто при ( 1)t v .
msee vsvsvsvsvsvs 1,)( 0,
0,1
0,4
1,0
0,
01, , (3.44)
msbbe vsvvsvsvs 0,1,
21
0,01
1,
11, , (3.45)
,
2/)(
2,24
33
1,
1
1
1,
1,022
221
vinp
vv
vs
m
svmvvv
bb
nLbe
(3.46)
36
253
331 v
svvvv bbe , (3.47)
де h
wTe
Te
Te
Te
Te 00
4
3
3
2
2
1
1
0
0 ;;;;
.
Лістинг програми DemZt, що розраховує динамічні характеристики
змійовикового теплообмінника, наведено в Додатку 6. Результат роботи
програми DemZt демонструється на рис. 3.5.
69
а)
б)
в)
Рис. 3.5. Динамічні характеристики змійовикового теплообмінника, канал
outinp x0,0 : а – перехідна; б – імпульсна; в – амплітудно-
фазова характеристики
70
3.7. Теплообмінник типу “труба в трубі”
Переходимо до дискретних змінних в диференціальних рівняннях
(1.32) – (1.35)
msh
wTT vsvs
vsvsvsvs
1,1
,0,
0,1
0,
00
0,
01,
0
, (3.48)
msbbT vvsvs
vsvs
0,2
10,0
1,
1,
11,
1
. (3.49)
,1,3,3
1,2
2,
2,1
2,
22
2,
21,
2
msbb
hwTT
vsvs
vsvsvsvsvs
(3.50)
msbbT osvvsvs
vsvs
0,5
2,4
3,
3,
31,
3
. (3.51)
Рівняння (3.50) записано для випадку прямотоку – теплоносій у
міжтубному просторі рухається у тому ж напрямку, що і теплоносій у
внутрішній трубі.
Для протитоку це рівняння набуває вигляду:
.11,3,3
1,2
2,
2,1
2,
22
2,
21,
2
msbb
hwTT
vsvs
vsvsvsvsvs
(3.52)
Гранична умова для теплоносія у внутрішній трубі згідно (1.36) inp
vv,01
01,0 . (3.53)
Для теплоносія у міжтрубному просторі для прямотоку маємо inp
vv,21
21,0 . (3.54)
Те ж для протитоку inp
vvm,21
21, . (3.55)
Розв‟язуємо рівняння (3.48) – (3.51) відносно температур при )1( vt :
msee vsvsvsvsvsvs 1,0,
0,1
0,4
1,0
0,
01, , (3.56)
msbbe vsvsvsvsvs 0,1,
2,1
0,01
1,
11, , (3.57)
,1,2
,2
,12,5
3,3
1,22
2,
21,
mseNr
bbe
vsvsvs
vsvsvsvs
(3.58)
.0,3,5
2,43
3,
31, msbbe vs
osvvsvsvs (3.59)
Тут
протитоку.для1
прямотоку;для1;;;;;; 22
500
4
3
3
2
2
1
10 Nrh
wTe
h
wTe
Te
Te
Te
Te
71
Лістинг програми DemTrTr, яка демонструє динамічні
характеристики теплообмінників типу “труба в трубі”, наводиться в
Додатку 7.
Взаємний напрямок руху теплоносіїв в цій програмі задається
параметром Nr:integer, який може приймати значення Nr=1 для
прямотоку та Nr=-1 для протитоку. Щоб абстрагуватись від конкретних
особливостей конструкції теплообмінника витрати теплоносіїв задаються
швидкостями їх руху W0 та W2 (за абсолютною величиною). В якості
можливих вхідних сигналів можуть розглядатись inp,0 (Ninp=0), inp,2
(Ninp=2), та os (Ninp=4). В якості вихідного сигналу маємо 0
,vNx
(Nout=0), 1
,vNx (Nout=1),
2
,vNx (Nout=2) або
3
,vNx (Nout=3) в точці x=Xout.
Тут Nx:=round(Xout/Hx), де Hx:=Lng/m,
Lng – довжина теплообмінника. На рис 3.6 показано динамічні
характеристики прямоточного, а на рис 3.7 – протиточного
теплообмінників.
72
а)
б)
в)
Рис. 3.6. Динамічні характеристики прямоточного теплообмінника, канал
outinp x2,2 : а – перехідна; б – імпульсна; в – амплітудно-
фазова характеристики
73
а)
б)
в)
Рис. 3.7. Динамічні характеристики протиточного теплообмінника, канал
outinp x2,0 : а – перехідна; б – імпульсна; в – амплітудно-
фазова характеристики
74
3.8. Динаміка струни
В диференціальному рівнянні (1.40) переходимо до дискретних
змінних
.1,11,12
2
,2
,1,,12
1,,
2
1,,1,
vmsfmh
yyyc
yye
yyy
vs
s
vsvsvs
vsvsvsvsvs
Розв‟язуємо отримане співвідношення відносно 1, vsy
,1,11,)2(
)(2
,1,1,,12
1,,01,,1,
vmsfeyyye
yyeyyy
vsvsvsvs
vsvsvsvsvs
де 22
2
10 ;,; qem
eeeh
cq
S
.
Початковий стан струни задається її формою при t=0 – це форма
струни в початковий момент часу, функція від х lx 0 . Крім того мають
бути задані швидкості точок струни при t=0 в функції від х. У загальному
випадку ці функції можуть бути оформлені у вигляді підпрограм, за
нульових початкових умов форма струни співпадає з віссю х, те ж саме
стосується швидкостей.
В якості вхідних сигналів для моделі (1.40) розглянемо переміщення
“лівого” (х=0) чи “правого” (х=l) кінців струни або зовнішню силу f. Більш
повний огляд можливих випадків, а отже, і можливих вхідних сигналів
можна знайти у посібниках з математичної фізики (хвильове рівняння) та,
наприклад, в [40]. Крок за часом оформимо у вигляді підпрограми Step: procedure Step;
var s: integer;
Myn: Coefr;
begin
Myn[-1]:=m; Myn[0]:=YL; Myn[m]:=Yr; Myn[m+1]:=Hx;
for s:=1 to m-1 do
Myn[s]:=2*My[s]-Myp[s]-e0*(My[s]-Myp[s])+
e2*(My[s-1]-2*My[s]+My[s+1]);
Myp:=My; My:=Myn;
end;
Тут типізовані константи YL,Yr типу integer можуть приймати
значення 1, коли відповідний сигнал розглядається як вхідний, тоді як
решта вважається рівними нулю.
Характерною особливістю процедури Step для хвильового рівняння
є те, що тут доводиться орудувати з двома масивами (конкретно –
My,Myp:CoefL), які представляють відповідно форму струни при vt
(це My) та при )1( vt (це Мyр). Це обумовлюється другим порядком
похідної за часом у диференціальному рівнянні (1.40). На початку
75
розрахунку масив Мур для t=0 (v=0) формується у відповідності із заданою
формою струни. Для розрахунку перехідної характеристики у відповідності
з нульовими початковими умовами масив Мур треба заповнити нулями. Що
стосується масиву Му для t (v=1), то для його заповнення можна
скористатись розкладенням в ряд Маклорена
2
0
2
2
00 !2
1
tttt t
y
t
yyy , (3.62)
обмежившись в останньому трьома першими членами. Тут перший член –
початкова форма струни, 0
tt
y у другому доданку – початкові швидкості, а
от
0
2
2
tt
y – в третьому доданку визначатимемо з (1.40), розв‟язуючи
останнє рівняння відносно
0
2
2
tt
y.
2
0
0
2
22
00
2
2 1
ts
sttt
fmt
yc
t
ye
t
y. (3.63)
За нульових початкових умов 00
tt
y, отже
2
0
0
2
2 1
ts
st
fmt
y і згідно
(3.62)
2
0
1
2
1|
ts
s
t fm
y . (3.64)
Якщо зовнішня сила не розглядається як вхідний сигнал, то 0sf і
для визначення (розрахунку) перехідної характеристики формула (3.63)
даватиме нульове значення. Якраз цей варіант ми й розглянемо нижче. До
речі, при достатньо малому невелика неточність у заданні масиву Му для
t не викличе суттєвих похибок у розрахунку перехідної характеристики
при формуванні якої мають бути реалізовані багато сотень, а то і тисяч
кроків за часом.
Текст програми DemStrn, що реалізує описаний алгоритм розрахунку
перехідних та імпульсних характеристик струни, наводиться в Додатку 8.
Динамічні характеристики струни, сформовані у програмі DemStrn,
показано на рис 3.8.
76
а)
б)
в)
Рис. 3.8. Динамічні характеристики струни: а – перехідна;
б – імпульсна; в – амплітудно-фазова
77
3.9. Навантажена нитка
Дискретизуємо диференціальне рівняння (1.50)
.2
2
,1,
2
,1,,11
1,,
2
1,,1,
h
yy
h
yyyshl
m
mg
yy
m
kyyy
vsvsvsvsvs
n
vsvs
n
vsvsvs
Розв‟язуємо отримане співвідношення відносно 1, vsy
,)(2
2
,1,,1,,121
1,,01,,1,
vsvsvsvsvs
vsvsvsvsvs
yyhyyyshee
yyeyyy
(3.65)
де lm
me
h
ge
m
ke
nn
122
2
10 ;;
.
Щодо граничних умов, то обмежимось розглядом варіанту, коли на
верхньому кінці нитки маємо граничну умову І роду
vv yy 1,0,
де vy стосовно до визначення перехідних характеристик може приймати
значення 0 або 1. Для нижнього кінця (x=l), де кріпиться тягар, баланс сил,
прикладених до тягаря, в проекції на вісь у можна представити так
v
vmvmvmvmvmvmvmf
h
yygm
yyk
yyym ,1
,1,
1
1,,
12
1,,1,
1
2
,
де k1 – коефіцієнт опору рухові тягаря.
Розв‟яжемо це співвідношення відносно 1, vm
y
15,1,41,,31,,1, )()(2 feyyeyyeyyy vmvmvmvmvmvmvm , (3.67)
де 1
2
5
2
4
1
13 ;;
me
h
ge
m
ke
.
Тут в якості імовірного вхідного сигналу можна розглядати силу f1,
прикладену до тягаря. Але не варто забувати, що диференціальне рівняння
(1.50) і відповідне йому різницеве рівняння (3.65) можуть вважатись
адекватними об‟єкту лише за умови малості відхилень y від усталеного
режиму (від вертикалі). А одинична сила f1 може виявитись здатною
викликати далеко не маленькі відхилення нитки від вертикалі.
Орієнтуючись на нульові початкові умови будемо масиви Мур (для
t=0) та Му t заповнювати нулями. Програма DemNit наведена у
Додатку 9. Динамічні характеристики розгляданого об‟єкта – рис. 3.9.
Варто відзначити, що при слабкому затуханні коливань (при малих
значеннях k та k1) перехідні процеси можуть затягуватись аж до
нескінченності (при відсутності опору) – і тоді виконати умову
0
)(t
tg
при скінченному D стає неможливим.
78
а)
б)
в)
Рис. 3.9. Динамічні характеристики навантаженої нитки:
а – перехідна; б – імпульсна; в – амплітудно-фазова
79
Це накладає обмеження на можливість формування годографів
амплітудно-фазових характеристик як навантаженої нитки так і струни.
Тоді мова може йти про розкладення коливань на гармоніки, визначення
частот і амплітуд цих гармонік (для відповідного каналу, початкових
граничних умов і характеру збурення). Програмна реалізація подібних
задач розглядалась авторами в [40, 41].
3.10. Проточний датчик щільності рідини
Як уже відзначалось раніше, розгляданий тип об‟єкта
диференціальним рівнянням чи відповідною системою диференціальних
рівнянь у звичайному смислі не описується, зате нами було отримано
формули перехідної (1.58), імпульсної (2.97) характеристик та передатної
функції (2.98). Виконаємо в (2.98) підстановку jp
1)sin()cos(11)(
jj
ej
j
ejW
jj
,
або jIRjW )( ,
де
1)cos(,
)sin( IR .
Отже, частотні характеристики проточного датчика щільності можна
розраховувати безпосередньо за формулою (3.68), замість того щоб
використовувати для цього імпульсну характеристику як ми це робили для
інших об‟єктів з розподіленими параметрами.
Сформуємо підпрограму UrGod, що реалізує формулу (3.68). procedure UrGod;
var WTau: real;
begin
WTau:= W*Tau;
if WTau=0
then
begin
x=1; y=0;
end
else
begin
x:= sin (WTau)/WTau;
y:= (cos (Wtau)-1)/Wtau;
end;
end;
Щоб скористатись модулем GodoGt наявну там процедуру UrGod
треба замінити на щойно приведену. Можливий і інший варіант. Замість
модуля GodoGt формується файл з іменем, наприклад, Godogr, в якому
відсутня процедура UrGod, а відповідні змінні, описані в модулі Godogr,
переносяться в основну програму. В основній же програмі файл Godogr
80
підключається до програми після опису підпрограми UrGod типу щойно
сформованої.
Отже файл Godogr.pas складається із підпрограм SZ, Scan,
PointGod, LineGod, Godo, Indw, DemGodo. В програмі DemPdTr,
лістинг якої наводиться в Додатку И, передбачено формування годографа
)( jW як за формулою (3.68), так і за масивом Gt:CoefL ординат
імпульсної характеристики – для порівняння. Результати роботи програми
DemPdTr показано на рис 3.10.
3.11. Транспортер-витратомір
Нормована (до одиничного коефіцієнта передачі) перехідна
характеристика цього об‟єкта розглянута в п. 1.10 – формула (1.66) .
Відповідна імпульсна характеристика наведена в п. 2.10 – формула
(2.99).
Передатна функція (2.100) є квадратом від (2.98). Амплітудно-фазова
характеристика, що відповідає (2.100), очевидно, буде
ImRe1
)(2
jjIRj
ejW
j
, (3.69)
де
1)cos(,
)sin( IR , і відповідно IRIR 2Im,Re 22
.
Динамічні характеристики (перехідна, імпульсна та амплітудно-
фазова) транспортера-витратоміра демонструє програма DemPdTr, лістинг
якої наводиться у Додатку И. Графіки та годографи, сформованої за
допомогою цієї програми, приведені на рис. 3.11.
81
а)
б)
в)
Рис. 3.10. Динамічні характеристики проточного датчика:
а – перехідна; б – імпульсна; в – амплітудно-фазова
82
а)
б)
в)
Рис. 3.11. Динамічні характеристики транспортера-витратоміра:
а – перехідна; б – імпульсна; в – амплітудно-фазова
83
4. СТАТИЧНІ РЕЖИМИ
Диференціальні рівняння, що моделюють динамічну поведінку
систем автоматичного керування, можуть бути записані в “абсолютних”
величинах або їх прирощеннях відносно усталеного режиму, прийнятого за
базовий. При цьому якщо система лінійна (лінеаризована), то відповідні
рівняння в обох випадках виглядають абсолютно однаково (з точністю до
позначень). Як правило (за умовчанням), змінні системи (параметри стану)
розглядаються як такі, що записані у прирощеннях. Тоді базовий усталений
режим в математичному плані відповідає нульовим початковим умовам, а
коефіцієнти диференціальних рівнянь вважаються константами. Та
обставина, що вони часто суттєво залежать від вибраного базового режиму,
не акцентується і тим самим динамічні характеристики, розраховані для
якогось одного режиму, автоматично розповсюджуються на решту
можливих режимів. Для значної кількості апаратів характерний широкий
діапазон можливих режимів, і може виявитись, що динамічні властивості
при переході з одного режиму на інший істотно змінюються і, не
виключено, що якраз у гіршу сторону. А це може приводити до значного
погіршення якості функціонування системи. Настройки регулятора,
оптимізовані під розрахунковий режим, можуть виявитись неприйнятними
для іншого режиму. Напрошується ідея узгоджувати закон (алгоритм)
регулювання з поточним режимом. Але для цього треба, по-перше,
ідентифікувати сам режим, а по-друге, мати в розпорядженні алгоритм
підстройки регулятора. Найпростішим варіантом ідентифікації режиму є
контроль навантаження об‟єкта. А для корекції параметрів регулятора
треба мати можливість фіксувати поточний режим (шляхом його
розрахунку), визначити кількісно його характеристики, відповідно
скоригувати динамічну модель і уже тоді уточнити настройку регулятора.
Отже, перший етап - розв‟язання систем рівнянь статики. Це рівняння
динаміки, в яких онулені похідні за часом. Статичний режим – це розв‟язок
систем рівнянь статики або ж межа, до якої прямує з часом розв‟язок
системи рівнянь динаміки (об‟єкт вважається стійким). Останній підхід
називають принципом Лібмана. З фізичної точки зору стійкий лінійний
об‟єкт має прийти в одне й те ж положення рівноваги (статичний режим)
починаючи з будь-якого початкового стану, отже, початковий стан можна
задати довільно. При числовому ж інтегруванні рівнянь динаміки можливі
такі комбінації початкових умов, при яких розрахунок виявляється
нестійким або, принаймні, дуже затягується. Спроба аналітичного
розв‟язку рівнянь статики наштовхується на неможливість надійного
визначення коефіцієнтів рівнянь до їх розв‟язання (коефіцієнти залежать
від режиму, а режим визначається лише після розв‟язання системи
рівнянь). Отже, доводиться використовувати ітераційні алгоритми, коли
коефіцієнти послідовно уточнюються від ітерації до ітерації, одночасно
уточнюється шуканий усталений режим. На ці та інші особливості
84
розрахунку усталених режимів ми і збираємось звернути увагу читача у
даному розділі.
4.1. Товста теплоакумулююча стінка
Розглянемо окремо варіанти плоскої, циліндричної та сферичної
стінок. Для плоскої стінки у статичному режимі згідно (1.1) маємо (при
k=0):
.02
2
dx
d (4.1)
Звертаємо увагу читача на те, що диференційне рівняння в частинних
похідних (1.1) для статичного режиму 0при тобто t
перетворюється на звичайне диференційне рівняння (4.1), оскільки із двох
незалежних змінних (t та x в (1.1) ) залишається лише одна змінна x.
Розв‟язок (4.1) є очевидним
xFE , (4.2)
де E та F - сталі інтегрування.
Перша похідна від (4.2)
Fdx
d
. (4.3)
Розглянемо можливі варіанти граничних умов. Домовимось
позначати номер граничної умови на “лівій” поверхні (х=0) як Ngl, тоді для
“правої” поверхні (х= ) це буде Ngr. Тут - товщина стінки.
Отже, варіант 1 – Ngl = 1, Ngr = 1 (k = 0).
Розв‟язок
xFE 1,11,11,1 . (4.4)
Граничні умови
rx
lx
T
T
1,1
01,1 ,
або після підстановки сюди розв‟язку
,
,
1,11,1
1,1
r
l
TFE
TE
звідки
)6.4(.
)5.4(,
1,11,1
1,1
ETF
TE
r
l
Варіант 2 – Ngl = 1, Ngr = 2 (k = 0).
Розв‟язок
xFE 2,12,12,1 . (4.7)
85
Граничні умови
r
x
lx
Qdx
d
T
2,1
02,1 ,
або
,
,
2,1
2,1
r
l
QF
TE
звідки
)9.4(.
)8.4(,
2,1
2,1
r
l
QF
TE
Варіант 3 – Ngl = 1, Ngr = 3 (k = 0).
Розв‟язок
xFE 3,13,13,1 . (4.10)
Граничні умови
srxx
lx
Tdx
d
T
3,1
3,1
1
03,1 ,
або
,
,
3,13,13,1
1
3,1
sr
l
TFEF
TE
звідки
)12.4(.
)11.4(,
1
3,13,1
3,1
ETF
TE
sr
l
Варіант 4 – Ngl = 2, Ngr = 1 (k = 0).
Розв‟язок
xFE 1,21,21,2 . (4.13)
Граничні умови
rx
l
x
T
Qdx
d
1,2
0
1,2,
або
86
,
,
1,21,2
1,2
r
l
TFE
QF
звідки
)15.4(.
)14.4(,
1,21,2
1,2
FTE
QF
r
l
Варіант 5 – Ngl = 2, Ngr = 2 (k = 0).
Розв‟язок
xFE 2,22,22,2 . (4.16)
Граничні умови
r
x
l
x
Qdx
d
Qdx
d
2,2
0
2,2,
або
,
,
2,2
2,2
r
l
QF
QF
Дана система несумісна (2,2F визначається неоднозначно тоді як
2,2E
не визначається взагалі). Це свідчить про те, що усталений режим при такій
комбінації граничних умов неможливий. Це очевидно і з фізичних
міркувань. При rl QQ порушується закон збереження енергії (теплової, в
даному випадку).
Варіант 6 – Ngl = 2, Ngr = 3 (k = 0).
Розв‟язок
xFE 3,23,23,2 . (4.17)
Граничні умови
srxx
l
x
Tdx
d
Qdx
d
3,23,2
1
0
3,2,
або
,
,
3,23,23,2
1
3,2
sr
l
TFEF
QF
звідки
87
)19.4(.
)18.4(,
3,2
1
3,2
3,2
FTE
QF
sr
l
Варіант 7 – Ngl = 3, Ngr = 1 (k = 0).
Розв‟язок
xFE 1,31,31,3 . (4.20)
Граничні умови
rx
xsl
x
T
Tdx
d
1,3
01,3
0
1,3
0
,
або
.
,
1,31,3
1,31,3
0
r
sl
TFE
ETF
Після перегрупування
.
,
1,31,3
1,3
0
1,3
r
sl
TFE
TFE
Звідки за правилом Крамера
)22.4(.
)21.4(,
;1
;1
;1
;1
1,31,3
00
1,3
FTE
TTT
T
F
r
slrr
sl
Варіант 8 – Ngl = 3, Ngr = 2 (k = 0).
Розв‟язок
xFE 2,32,32,3 . (4.23)
Граничні умови
r
x
xsl
x
Qdx
d
Tdx
d
2,3
02,3
0
2,3
0
,
або
88
.
,
2,3
2,32,3
0
r
sl
QF
ETF
Звідки
)25.4(.
)24.4(,
2,3
0
2,3
2,3
FTE
QF
sl
r
Варіант 9 – Ngl = 3, Ngr = 3 (k = 0).
Розв‟язок
xFE 3,33,33,3 . (4.26)
Граничні умови
srxx
xsl
x
Tdx
d
Tdx
d
3,33,3
1
03,3
0
3,3
0
,
або
.
,
3,33,33,3
1
3,33,3
0
sr
sl
TFEF
ETF
Після перегрупування
,
,
3,3
1
3,3
3,3
0
3,3
sr
sl
TFE
TFE
Звідки за правилом Крамера
)28.4(.
)27.4(,
;1
;1
;1
;1
3,3
0
3,3
01
1
0
3,3
FTE
TTT
T
F
sl
slsrsr
sl
89
Переходимо до розгляду циліндричної стінки (k=1). Диференціальне
рівняння (1.1) при k=1 в статиці
01
2
2
dr
d
rdr
d . (4.29)
Розв‟язок (4.29) шукаємо у вигляді
rFE ln . (4.30)
Похідна (по r) від (4.30)
rF
dr
d 1
. (4.31)
Друга похідна
22
2 1
rF
dr
d
.
Підставляємо значення похідних в (4.29)
0111
2
rF
rrF .
Отримана тотожність свідчить про правильність розв‟язку (4.30). Значення
E та F визначаємо із граничних умов.
Проблеми виникають при спробі розповсюдити диференціальне
рівняння (4.29) та його розв‟язок (4.30) на випадок коли r=0.
Розглянемо межу, до якої наближається dr
d
r
1 при 0r ,
застосовуючи правило Лопіталя
2
2
000limlim
1lim
dr
d
r
dr
d
dr
d
r rrr
.
Отже, при 0r рівняння (4.29) зводиться до виду
0
0
2
2
0
2
2
rrdr
d
dr
d
або що еквівалентно
0
0
2
2
rdr
d , (4.32)
розв‟язок якого
rFEr
0
. (4.33)
Оскільки ми розглядаємо одновимірну задачу, то на осі суцільного
циліндра тепловий потік має бути відсутнім (умова симетрії)
00
rdr
d,
звідки після підстановки сюди (4.33) отримуємо
0F ,
і розв‟язок (4.33) набуває остаточного вигляду, а саме
90
Er
0
.
А тепер розглянемо можливі варіанти граничних умов на зовнішній
поверхні суцільного циліндра.
Варіант 10 – Ngl = 0, Ngr = 1 (k = 1).
Тут і в подальшому граничну умову на осі суцільного циліндра (так
як і у центрі суцільної кулі) будемо позначати Ngl = 0.
Розв‟язок
1,01,0 E . (4.35)
Гранична умова при 1rr
rrrT
11,0 ,
отже,
rTE 1,0. (4.36)
Варіант 11 – Ngl = 0, Ngr = 2 (k = 1).
Розв‟язок
2,02,0 E . (4.37)
Гранична умова при 1rr
r
rr
Qdr
d
1
2,0
або після підстановки (4.37)
rQ 0 .
Бачимо, що значення 2,0E не визначається, звідси робимо висновок,
що при даній комбінації граничних умов усталений режим неможливий. Це
очевидно і з фізичних міркувань. При ненульовому тепловому потоці rQ
через зовнішню поверхню суцільного циліндра його температура буде
необмежено зростати або зменшуватися в залежності від знаку rQ .
Варіант 12 – Ngl = 0, Ngr = 3 (k = 1).
Розв‟язок
3,03,0 E . (4.38)
Гранична умова
srrrrr
Tdr
d
1
1
3,0
3,0
1
або після підстановки (4.38)
srTE 3,0
1
0
,
звідки
91
srTE 3,0. (4.39)
Варіант 13 – Ngl = 1, Ngr = 1 (k = 1).
Розв‟язок – див. (4.30)
rFE ln1,11,11,1 . (4.40)
Граничні умови
rrr
lrr
T
T
1
0
1,1
1,1 ,
або
,ln
,ln
11,11,1
01,11,1
r
l
TrFE
TrFE
звідки
)42.4(.ln
)41.4(,ln
ln;1
ln;1
;1
;1
01,11,1
01
1
01,1
rFTE
rr
TT
r
r
T
T
F
l
lrr
l
Варіант 14 – Ngl = 1, Ngr = 2 (k = 1).
Розв‟язок
rFE ln2,12,12,1 . (4.43)
Граничні умови
r
rr
lrr
Qdr
d
T
1
0
2,1
2,1 ,
або
,
,ln
1
2,1
02,12,1
r
l
Qr
F
TrFE
звідки
)45.4(.ln
)44.4(,
02,12,1
12,1
rFTE
Qr
F
l
r
92
Варіант 15 – Ngl = 1, Ngr = 3 (k = 1).
Розв‟язок
rFE ln3,13,13,1 . (4.46)
Граничні умови
srrrrr
lrr
Tdr
d
T
1
1
0
3,13,1
1
3,1 ,
або
.ln
,ln
13,13,1
1
3,1
1
03,13,1
sr
l
TrFEr
F
TrFE
Перегруповуємо
,ln
,ln
11
13,13,1
03,13,1
sr
l
Tr
rFE
TrFE
звідки
)42.4(.ln
)47.4(,
ln
ln;1
ln;1
;1
;1
03,13,1
01
11
11
1
03,1
rFTE
rrr
TT
rr
r
T
T
F
l
lsrsr
l
Варіант 16 – Ngl = 2, Ngr = 1 (k = 1).
Розв‟язок
rFE ln1,21,21,2 . (4.49)
Граничні умови
rrr
l
rr
T
Qdr
d
1
0
1,2
1,2,
або
,ln
,
11,21,2
0
1,2
r
l
TrFE
Qr
F
звідки
93
)51.4(.ln
)50.4(,
11,21,2
01,2
rFTE
Qr
F
r
l
Варіант 17 – Ngl = 2, Ngr = 2 (k = 1).
Розв‟язок
rFE ln2,22,22,2 . (4.52)
Граничні умови
r
rr
l
rr
Qdr
d
Qdr
d
1
0
2,2
2,2,
або
.
,
1
2,2
0
2,2
r
l
Qr
F
Qr
F
З отриманої системи рівнянь 2,2F визначається неоднозначно, тоді як
2,2E не визначається зовсім. При даній комбінації граничних умов
усталений режим неможливий (хіба що при 10 rQrQ rl коли значення
усталеної температури може бути будь-яким).
Варіант 18 – Ngl = 2, Ngr = 3 (k = 1).
Розв‟язок
rFE ln3,23,23,2 . (4.53)
Граничні умови
srrrrr
l
rr
Tdr
d
Qdr
d
1
1
0
3,23,2
1
3,2,
або
,ln
,
13,23,2
1
3,2
1
0
3,2
sr
l
TrFEr
F
Qr
F
звідки
94
)19.4(.ln
)54.4(,
3,21
11
3,2
03,2
Frr
TE
Qr
F
sr
l
Варіант 19 – Ngl = 3, Ngr = 1 (k = 1).
Розв‟язок
rFE ln1,31,31,3 . (4.56)
Граничні умови
rrr
rrsl
rr
T
Tdr
d
1
0
0
1,3
1,31,3
0
,
або
.ln
,ln
11,31,3
01,31,3
0
1,3
0
r
sl
TrFE
rFETr
F
Перегруповуємо
,ln
,ln
11,31,3
00
01,31,3
r
sl
TrFE
Tr
rFE
звідки
)58.4(.ln
)57.4(,
ln
ln;1
ln;1
;1
;1
11,31,3
00
01
1
00
0
1,3
rFTE
rrr
TT
r
rr
T
T
F
r
slrr
sl
Варіант 20 – Ngl = 3, Ngr = 2 (k = 1).
Розв‟язок
rFE ln2,32,32,3 . (4.59)
Граничні умови
95
r
rr
rrsl
rr
Qdr
d
Tdr
d
1
0
0
2,3
2,32,3
0
,
або
,
,ln
1
2,3
02,32,3
0
2,3
0
r
sl
Qr
F
rFETr
F
звідки
)61.4(.ln
)60.4(,
0
00
2,32,3
12,3
rr
FTE
Qr
F
sl
r
Варіант 21 – Ngl = 3, Ngr = 3 (k = 1).
Розв‟язок
rFE ln3,33,33,3 . (4.62)
Граничні умови
srrrrr
rrsl
rr
Tdr
d
Tdr
d
1
1
0
0
3,33,3
1
3,33,3
0
,
або
.ln
,ln
13,33,3
1
3,3
1
03,33,3
0
3,3
0
sr
sl
TrFEr
F
rFETr
F
Після перегрупування
,ln
,ln
11
13,33,3
00
03,33,3
sr
sl
Tr
rFE
Tr
rFE
звідки
96
)64.4(.ln
)63.4(,
ln
ln;1
ln;1
;1
;1
11
13,33,3
0011
01
11
1
00
0
3,3
rrFTE
rrrr
TT
rr
rr
T
T
F
sr
slsrsr
sl
А тепер переходимо до розгляду усталеного режиму для кулі (k=2).
Відповідне диференціальне рівняння
02
2
2
dr
d
rdr
d . (4.65)
Розв‟язок даного рівняння будемо шукати у вигляді
r
FE . (4.66)
При цьому перша та друга похідні відповідно дорівнюють
2r
F
dr
d
, (4.67)
32
2 2
r
F
dr
d
. (4.68)
Підставляємо (4.67) та (4.68) в (4.65)
022
23
r
F
rr
F.
Отримали тотожність, що свідчить про те, що (4.66) дійсно є
розв‟язком (4.65).
При 0r рівняння (4.65) та його розв‟язок (4.66) стають
некоректними. Розглянемо поведінку доданка dr
d
r
2 в (4.65) при 0r .
Використовуючи правило Лопіталя отримуємо
2
2
0002lim2lim
2lim
dr
d
r
dr
d
dr
d
r rrr
.
Підставляємо отриманий результат в (4.65). Маємо
02
0
2
2
0
2
2
rrdr
d
dr
d ,
що еквівалентно
0
0
2
2
rdr
d . (4.69)
97
Розв‟язок останнього рівняння
rFE .
Умова температурної симетрії для центра кулі
00
rdr
d
або з урахуванням попереднього виразу
0F ,
і розв‟язок (4.70) набуває вигляду
E . (4.70)
Як і для циліндра, варіант коли 00 r розглядатимемо як такий, що
відповідає Ngl = 0.
Варіант 22 – Ngl = 0, Ngr = 1 (k = 2).
Розв‟язок
1,01,0 E . (4.71)
Гранична умова
rrrT
11,0
або
rTE 1,0. (4.72)
Варіант 23 – Ngl = 0, Ngr = 2 (k = 2).
Розв‟язок
2,02,0 E . (4.73)
Гранична умова
r
rr
Qdr
d
1
2,0
або
rQ 0 .
Як бачимо, з граничної умови 2,0E не визначається. Усталений режим
при 0rQ та даних граничних умовах неможливий.
Варіант 24 – Ngl = 0, Ngr = 3 (k = 2).
Розв‟язок
3,03,0 E . (4.74)
Гранична умова
srrrrr
Tdr
d
1
1
3,0
3,0
1
або
98
srTE 3,0
1
0
,
звідки
srTE 3,0. (4.75)
Варіант 25 – Ngl = 1, Ngr = 1 (k = 2).
Розв‟язок (4.66)
r
FE
1,1
1,11,1 . (4.76)
Граничні умови
rrr
lrr
T
T
1
0
1,1
1,1 ,
або
,
,
1
1,1
1,1
0
1,1
1,1
r
l
Tr
FE
Tr
FE
звідки
)78.4(.
)77.4(,11
1;1
1;1
;1
;1
0
1,1
1,1
011
01,1
r
FTE
rr
TT
r
r
T
T
F
l
lrr
l
Варіант 26 – Ngl = 1, Ngr = 2 (k = 2).
Розв‟язок
r
FE
2,1
2,12,1 . (4.79)
Граничні умови
r
rr
lrr
Qdr
d
T
1
0
2,1
2,1 ,
або
99
,
,
21
2,1
0
2,1
2,1
r
l
Qr
F
Tr
FE
звідки
)81.4(.
)80.4(,
0
2,12,1
21
2,1
r
FTE
Qr
F
l
r
Варіант 27 – Ngl = 1, Ngr = 3 (k = 2).
Розв‟язок
r
FE
3,1
3,13,1 . (4.82)
Граничні умови
srrrrr
lrr
Tdr
d
T
1
1
0
3,1
3,1
1
3,1 ,
або
.
,
1
3,13,12
1
3,1
1
0
3,13,1
sr
l
Tr
FE
r
F
Tr
FE
Перегруповуємо
,1
,1
2111
3,13,1
0
3,13,1
sr
l
Trr
FE
Tr
FE
звідки
)84.4(.
)83.4(,11
1;1
1;1
;1
;1
03,13,1
02
111
2111
03,1
rFTE
rrr
TT
rr
r
T
T
F
l
lsrsr
l
100
Варіант 28 – Ngl = 2, Ngr = 1 (k = 2).
Розв‟язок
r
FE
1,2
1,21,2 . (4.85)
Граничні умови
rrr
l
rr
T
Qdr
d
1
0
1,2
1,2,
або
,
,
1
1,2
1,2
20
1,2
r
l
Tr
FE
Qr
F
звідки
)87.4(.
)86.4(,
11,21,2
20
1,2
rFTE
Qr
F
r
l
Варіант 29 – Ngl = 2, Ngr = 2 (k = 2).
Розв‟язок
r
FE
2,2
2,22,2 . (4.88)
Граничні умови
r
rr
l
rr
Qdr
d
Qdr
d
1
0
2,2
2,2,
або
.
,
21
2,2
20
2,2
r
l
Qr
F
Qr
F
Отримана система однозначного розв‟язку не має.
101
Варіант 30 – Ngl = 2, Ngr = 3 (k = 2).
Розв‟язок
r
FE
3,2
3,23,2 . (4.89)
Граничні умови
srrrrr
l
rr
Tdr
d
Qdr
d
1
1
0
3,23,2
1
3,2,
або
,
,
1
3,2
3,221
3,2
1
20
3,2
sr
l
Tr
FE
r
F
Qr
F
звідки
)91.4(.1
)90.4(,
12
11
3,23,2
20
3,2
rrFTE
Qr
F
sr
l
Варіант 31 – Ngl = 3, Ngr = 1 (k = 2).
Розв‟язок
r
FE
1,3
1,31,3 . (4.92)
Граничні умови
rrr
rrsl
rr
T
Tdr
d
1
0
0
1,3
1,31,3
0
,
або
.
,
1
1,31,3
0
1,31,32
0
1,3
0
r
sl
Tr
FE
r
FET
r
F
Перегруповуємо
102
,
,1
1
1,3
1,3
2000
1,31,3
r
sl
Tr
FE
Trr
FE
звідки
)58.4(.
)93.4(,11
1;1
1;1
;1
;1
1
1,31,3
12
000
1
2000
1,3
r
FTE
rrr
TT
r
rr
T
T
F
r
rslr
sl
Варіант 32 – Ngl = 3, Ngr = 2 (k = 2).
Розв‟язок
r
FE
2,3
2,32,3 . (4.95)
Граничні умови
r
rr
rrsl
rr
Qdr
d
Tdr
d
1
0
0
2,3
2,32,3
0
,
або
,
,
21
2,3
0
2,32,32
0
2,3
0
r
sl
Qr
F
r
FET
r
F
звідки
)97.4(.1
)96.4(,
2000
2,32,3
21
2,3
rrFTE
Qr
F
sl
r
103
Варіант 33 – Ngl = 3, Ngr = 3 (k = 2).
Розв‟язок
r
FE
3,3
3,33,3 . (4.98)
Граничні умови
srrrrr
rrsl
rr
Tdr
d
Tdr
d
1
1
0
0
3,33,3
1
3,33,3
0
,
або
.
,
1
3,33,32
1
3,3
1
0
3,33,32
0
3,3
0
sr
sl
Tr
FE
r
F
r
FET
r
F
Перегруповуємо
,1
,1
2111
3,33,3
2000
3,33,3
sr
sl
Trr
FE
Trr
FE
звідки
)100.4(.1
)99.4(,11
1;1
1;1
;1
;1
2111
3,33,3
2000
2111
2111
2000
3,3
rrFTE
rrrr
TT
rr
rr
T
T
F
sr
slsrsr
sl
Графіки температурних полів для вищерозглянутих варіантів
формуються в підпрограмі DemStat (програма DemSt, лістинг якої
представлений у Додатку 2). Для прикладу на рис. 4.1 представлені
температурні поля для плоскої, циліндричної та сферичної стінок.
104
а)
б)
в)
Рис. 4.1. Температурне поле в усталеному режимі для тепло-
акумулюючої стінки: а – Ngl = 3, Ngr = 1, k = 0; б – Ngl = 1,
Ngr = 1, k = 1; в – Ngl = 3, Ngr = 2, k = 2
105
4.2. Неізольований стрижень
В усталеному режимі диференціальне рівняння (1.19) набуває
вигляду
0)(2
2
osbdx
da
або
os
dx
df
2
2
, (4.101)
де 0
00
p
s
b
af
.
Розв‟язок (4.33) матиме вигляд
.вільнвим (4.102)
Характеристичне рівняння, що відповідає (4.101) .012 rf
Його корені .1
2,1f
r Вільна складова розв‟язку:
f
x
f
x
в ільн eCeC
21 . (4.103)
Вимушену складову шукаємо у вигляді правої частини (4.101), тобто
у вигляді константи (оскільки os не є функцією координати х).
Cвим .
Підстановка у (4.101) дає .osвим Отже, розв‟язок (4.102) набуває
вигляду
f
x
f
x
os eCeC
21 .
Скористаємось граничними умовами (1.20) та (1.21)
.011
,11
21
2121
f
l
f
l
osos
ef
Cef
C
CCf
Cf
C
Спрощуємо
.011
,0
21
21
f
l
f
l
ef
Cef
C
Cf
Cf
Розв‟язуємо відносно 1C та 2C : ,01 C .02 C
106
Отже, розв‟язок (4.102)
,os (4.104)
Що, до речі, і варто було очікувати з чисто фізичних міркувань – в
усталеному режимі стрижень має прийняти температуру оточуючого
середовища, бо інших притоків та витоків тепла, крім теплообміну з
середовищем температури ,os в моделі не передбачено.
4.3. Проточна ємкість з товстими стінками
Математичну модель статики отримуємо з (1.23), (1.24), покладаючи
похідні за часом рівними нулю
010
x
stinp bb , (4.105)
xdx
d st
0,02
2
. (4.106)
А щодо граничних умов, залишимо як є , а саме
0
0
0
x
st
xdx
d
, (4.107)
os
x
st
xdx
d
1 . (4.108)
Розв‟язок для (4.106)
.10 xEEst (4.109)
Підставляємо (4.109) в (4.107) та (4.108)
)112.4(.
)111.4(,
)110.4(,
1011
001
010
os
inp
EEE
EE
Ebb
Систему (4.110) – (4.112) розв‟язуємо відносно 10 ,, EE . Підставимо
з (4.110) в (4.111).
Тоді система зведеться до двох рівнянь
,
,
1
1
0
1
00
0
os
inp
EE
Eb
E
Звідки, за правилом Крамера
,001
0 fb
E osinp
(4.113)
,)(1 fE inpos (4.114)
107
де
100
11
bf .
Підстановку отриманих значень 0E та 1E в (4.109) та (4.110)
залишаємо читачеві.
Графіки температурних полів для статичного режиму проточної
ємкості формуються в підпрограмі Stat (програма DemPrе, лістинг якої
представлений у Додатку 4). На рис. 4.2 показано розподіл температур в
ємкості в усталеному режимі.
Рис. 4.2. Розподіл температур в стінці ємкості в усталеному режимі:
0 – inp ; 1 – xst ; 2 –
os
4.4. Трубопровід з тонкими стінками
З (1.28) та (1.29) для усталеного режиму маємо
)116.4(.
)115.4(,
10
00
osst
st
bb
dx
dwT
При граничній умові (див. (1.30))
.0
constinp
x
(4.117)
Підставляємо st з (4.116) в (4.115)
osbbdx
dwT
1000 ,
або .)1( 1000osbb
dx
dwT
Але ж 101 bb , отже,
108
os
dx
df
0 , (4.118)
де 1000 bwTf .
Розв‟язуємо (4.118). Характеристичне рівняння:
,010 rf
його корінь 0
1
fr .
Вимушена складова розв‟язку osвим . Повний розв‟язок:
0
1f
x
os eE
.
З урахуванням (4.117) маємо остаточно
0)(f
x
osinpos e
. (4.119)
А тепер підставляємо (4.119) в (4.116) osf
x
osinposst beb 100)(
,
або після спрощення
.)( 0
0f
x
osinposst eb
(4.120)
Запропонований підхід для визначення розподілу температури
теплоносія x та стінки тонкостінного трубопроводу xst по
координаті x реалізований у програмі DemTr із використанням підпрограми
StCar. Лістинг програмного коду DemTr знаходиться у Додатку 5. На рис.
4.3 представлені температурні поля у статичному режимі для тонкостінного
трубопроводу.
Рис. 4.3. Розподіл температур у тонкостінному трубопроводі:
0 – x ; 1 – xst ; 2 – os
109
4.5. Змійовиковий теплообмінник
З (1.31) – (1.35) для усталеного режиму маємо
)125.4(,
)124.4(,
)123.4(,
)122.4(,
)121.4(,
,0
0
0
62
53
,233
0
122
21
00
1
100
00
inp
x
os
inpn
l
bb
bbdxl
b
bb
dx
dwT
де 1100
000
pp
pb
, 01 1 bb ,
00
0000
p
csT
,
221122
112
FFcQ
Fb
,
221122
223
FFcQ
Fb
, 32
221122
224 1 bb
FFcQ
cQb
,
3322
225
FF
Fb
, 56 1 bb .
Увага! Цифри 0, 1, 2, 3 справа зверху – це індекси, а не степені!
Як і в попередніх задачах вважатимемо, що усі коефіцієнти відомі і
розглядаються як константи, зокрема, не залежать від координати х та
вибраного статичного режиму.
Підставляємо 1 з (4.122) в (4.121)
21
00
00
00
bbdx
dwT ,
або 21
00
0
00 )1(
bbdx
dwT .
Але ж 101 bb , отже,
200
1
00
dx
d
b
wT. (4.126)
Температура 2 (у міжтрубному просторі) не є функцією від х , отже,
(4.126) можна розв‟язати відносно 0 (байдуже, що ми не знаємо
конкретного значення 2 ):
200
1
00
dx
d
b
wT,
де 001 wTbg .
Сталу інтегрування С визначаємо з граничної умови (4.125), в
результаті отримуємо
110
.)( 2,020 gxinp e (4.127)
Підставляємо отриманий вираз 0 з (4.127) в (4.122)
21
2,020
1 )( beb gxinp .
Зводимо подібні
gxinp ebbb )()( 2,0
02
101 .
Але ж 110 bb , так що
gxinp eb )( 2,00
21 . (4.128)
А тепер підставляємо 1 з (4.128) в (4.123), в якому замість
3 також
підставляємо його значення з (4.118)
inposl
bbbbdxl
b ,246
253
0
122 )( . (4.129)
Візьмемо інтеграл в (4.129)
l
gxinpl
gxinpl
eg
bldxebdx
0
2,00
2
0
2,00
2
0
1 1)(
Маємо: glinpl
eg
bldx 12,002
0
1 . (4.130)
З урахуванням (4.130) рівняння (4.129) набуває вигляду
inposglinp bbbbeg
bl
l
b ,246
253
2,00222 1
.
Зводимо подібні
inposinpglgl bbbegl
bbbbe
gl
bbb ,2
463,020
5320
22 111
.
Розв‟язуємо відносно 2
osinpinp RRR 3,2
2,0
12 , (4.131)
де 5320
20 11 bbegl
bbbR gl
, gleRgl
bbR
1
0
201 ,
0
42
R
bR , .
0
633
R
bbR
Далі, як кажуть, справа техніки. 2 з (4.131) можна підставити в
(4.127) – отримаємо 0 . Маючи
0 підставимо його в (4.122) – матимемо 1 . Підставляючи
2 з (4.131) в (4.118) – отримаємо формулу для 3 .
Із програмною реалізацію наведеного алгоритму можна
ознайомитись у програмі DemZmt, що наведена у Додатку 6. За розрахунок
статичного режиму відповідає підпрограма Stat. На рис. 4.4 представлено
температурний режим змійовикового теплообмінника.
111
Рис. 4.4. Розподіл температур у змійовиковому теплообміннику:
0 – x0 ; 1 – x1 ; 2 – 2 ; 3 –
3 ; 4 – os .
4.6. Прямоточний теплообмінник типу “труба в трубі”
З (1.32) – (1.37) для усталеного режиму матимемо
)137.4(,
)136.4(,
)135.4(,
)134.4(,
)133.4(,
)132.4(,
,2
0
2
,0
0
0
52
43
33
12
22
22
21
00
1
100
00
inp
x
inp
x
osbb
bbdx
dwT
bb
dx
dwT
де 00
0000
p
csT
,
1100
000
pp
pb
, 01 1 bb ,
2211
2222
pp
csT
,
2211
112
pp
pb
, 23 1 bb ,
3322
224
pp
pb
, 45 1 bb .
Підставляємо 1 з (4.133) в (4.132)
21
00
00
00
bbdx
dwT
або 21
00
0
00 )1(
bbdx
dwT .
Враховуючи, що 101 bb записуємо отримане рівняння у вигляді
112
200
0
dx
df , (4.138)
де 1000 bwTf .
Підставляємо тепер 1 з (4.133) та 3 з (2.135) в (2.134)
osbbbbbbdx
dwT
5
243
21
002
22
22 .
Зводимо подібні osbbbbbbbbdx
dwT
53
020
24321
2
22 1 або
osbbdx
df
7
06
22
2 , (4.139)
де 4321
222
1 bbbb
wTf
,
4321
206
1 bbbb
bbb
,
4321
537
1 bbbb
bbb
.
Підставляємо 2 з (4.138) в (4.139)
osbb
dx
df
dx
d
dx
dff
7
06
00
0
0
2
02
02
або
osbbdx
dff
dx
dff
7
06
0
202
02
20 1 . (4.140)
Характеристичне рівняння для (4.140)
01 6202
20 brffrff
Його корені:
20
620
2
20202,1
2
14
ff
bffffffr
.
Оскільки 110 6 b , то 2,1r явно дійсні різні, отже, розв‟язок (4.140)
можна представити в такому вигляді: xrxros eEeE
b
b21
21
6
70
1
або
xrxros eEeEb 21
2180 , (4.141)
де 6
78
1 b
bb
.
Граничні умови. Почнемо з (4.136). Підставляємо сюди (4.141)
.,0218
inpos EEb (4.142)
Диференціюємо (4.141) по х:
xrxr
eEreErdx
d21
2211
0
.
При х=0
0
0
2211
xdx
dErEr
.
113
Значення
0
0
xdx
d беремо з (4.138), розглядаючи його при х=0 і
враховуючи, що згідно (4.137) inp
x
,2
0
2
:
0,0,2
2211 fErEr inpinp . (4.143)
Співвідношення (4.142) та (4.143) представимо у вигляді
)145.4(,
)144.4(,
42211
321
fErEr
fEE
де osinp bf 8
,03 , 0
,0,24 ff inpinp .
Розв‟язок системи (4.144), (4.145) 12
4231
rr
frfE
,
12
1342
rr
rffE
.
Маючи значення 1E та 2E за формулою (4.143) визначаємо 0 . З (4.132),
маючи 0 , можна визначити
1
xrxrrErEWT 21
22110001 . (4.146)
При наявності 1 та
0 з (4.133) визначається 2
10
012 bb . (4.147)
Далі, з (4.137) визначається 3 .
Програмна реалізація розглянутого алгоритму наведена в програмі DemTrTr (див. підпрограми Stat та DemStat). Лістинг програми DemTrTr – в Додатку Є. На рис. 4.5 показано температурні поля для статичного
режиму прямоточного теплообмінника типу “труба в трубі”.
Рис. 4.5. Статичний режим прямоточного теплообмінника:
0 – x0 ; 1 – x1 ; 2 – x2 ; 3 – x3 ; 4 – os
114
4.7. Протиточний теплообмінник
Замість системи (4.132) – (4.137) для статичного режиму матимемо
)153.4(.
)152.4(,
)151.4(,
)150.4(,
)149.4(,
)148.4(,
.22
.0
0
0
52
43
33
12
22
22
21
00
1
100
00
inp
lx
inp
x
osbb
bbdx
dwT
bb
dx
dwT
Коефіцієнти, що входять в рівняння (4.148) – (4.153), ті ж, що маємо
для системи (4.132) – (4.137). Хід розв‟язку системи (4.148) – (4.153) також
практично повторює аналогічний розв‟язок для випадку прямотоку, тому
обмежимось мінімальними коментарями та покажемо лише відмінності в
проміжних та остаточних результатах.
Рівняння (4.138) залишається тим же, тобто
200
0
dx
df , (4.154)
де 1000 bwTf .
А от замість (4.139) матимемо
osbbdx
df
7
06
22
2 . (4.155)
Тут як і в (4.139) 4321
222
1 bbbb
wTf
,
4321
206
1 bbbb
bbb
,
4321
537
1 bbbb
bbb
.
Підставляємо 2 з (4.154) в (4.155)
osbbdx
df
dx
d
dx
dff
7
06
00
0
0
2
02
02
або osbbdx
dff
dx
dff
7
06
0
202
02
20 1 . (4.156)
Характеристичне рівняння для (4.156) 0)1()( 6202
20 bsffsff .
Його корені:
20
620
2
20202,1
2
14
ff
bffffffs
,
або:
20
620
2
20202,1
2
14
ff
bffffffs
.
115
Розглядаючи 2,1s як дійсні різні, розв‟язок (4.156) представляємо у
вигляді xsxsos eEeEb 21
2180 , (4.157)
де 6
78
1 b
bb
.
Гранична умова (4.152)
321 fEE , (4.158)
де osinp bf 8
,0 .
Диференціюємо (4.157) по х
xsxsesEesE
dx
d21
2211
0
. (4.159)
Підставляємо 0 тепер з (4.159) та
dx
d 0 з (4.119) в (4.154),
розглядаючи їх при х=l та враховуючи (4.153)
inplslsoslslseEeEbesEesEf ,2
218221102121 ,
що після зведення подібних дає
42615 fEfEf , (4.160)
де osinp bf 8
,24 , ls
esff 1
105 1 , lsesff 2
206 1 .
Розглядаємо (4.158) та (4.160) як систему, яку й розв‟язуємо відносно
1E та 2E .
;;
1;1
;
1;
56
463
6564
3
1ff
fff
ffff
fE
(4.161)
.;
1;1
;
;1
56
534
6545
3
2ff
fff
ffff
fE
(4.162)
При наявності 1E та 2E температура 0 визначається за (4.117),
1 –
з (4.148) з використанням (4.119), 2 – з (4.149) та
3 – з (4.151).
Формування масивів Teta0,Teta1,Teta2,Teta3:Coefl значень
відповідних температур в функції від координати х lx 0 реалізуємо в
підпрограмі Stat, текст якої можна подивитись в програмі DemTrTr, що
наводиться у Додатку 7. Для компактності варіанти прямотоку і протитоку
об‟єднанні в одній програмі. Напрямок руху теплоносія у міжтрубному
середовищі задається типізованою константою Nr )1( . На рис. 4.6
представлений приклад моделювання статичного режиму для протиточного
теплообмінника типу “труба в трубі”.
116
Рис. 4.6. Усталений режим прямоточного теплообмінника:
0 – x0 ; 1 – x1 ; 2 – x2 ; 3 – x3 ; 4 – os
4.8. Статика для струни, нитки та датчиків
З диференціального рівняння (1.40) для статичного режиму
отримуємо
s
s
fmdx
ydC
12
22 , lx 0 . (4.163)
Якщо розглядати sf як константу (тобто таку, що не залежить від х),
то розв‟язок (4.163) можна подати у вигляді 2
210 xDxDDy . (4.164)
Спочатку підставимо (4.164) в (4.163) – матимемо s
s
fm
DC1
2 22 ,
Звідки: s
s
fmC
D
22
2
1. (4.165)
В граничних умовах (1.44) та (1.45) будемо також розглядати )(tyl та
)(tyr як константи (це ж статика!). Тоді граничні умови для (4.163)
набувають вигляду
lxyy
0, (4.166)
rlxyy
. (4.167)
Підставляємо сюди (4.166)
.
,
2210
0
r
l
ylDlDD
yD
117
Розв‟язуємо отриману систему рівнянь відносно 0D та 1D ( 2D уже
визначено в (4.165)).
lyD 0 , (4.168)
l
fmC
lyy
D
s
s
lr
2
2
1
2. (4.169)
Читач при потребі може розглянути і будь-які інші комбінації
граничних умов для струни, тобто для диференціального рівняння (2.96).
Навантажена нитка
З диференціального рівняння (1.50) в статиці маємо
xfgmdx
dy
dx
ydxl
v
m
n
12
2
2
1
. (4.170)
З аналітичним розв‟язком диференціального рівняння (4.170)
виникають проблеми, отже, будемо задачу статики розглядати як межу, до
якої прямуватиме перехідний процес за умови, що вхідні сигнали sy
(зміщення верхньої точки підвісу), sF (сила на одиницю довжини ланцюга)
та sF1 (сила, прикладена до тягаря) застабілізовані у часі (це глобальні
типізовані константи типу real). Організацію спостереження за перехідним процесом та фіксацію
досягнутого усталеного режиму (форму нитки) реалізує підпрограма StatNit у програмі DemNit.
118
5. КОМП’ЮТЕРНА ОПТИМІЗАЦІЯ СИСТЕМ АВТОМАТИЧНОГО
КЕРУВАННЯ
Теорія оптимізації динамічних систем базується на векторно-
матричному представленні моделей систем автоматичного керування
(САК) [22, 57]. На жаль, запропоновані методи синтезу не знайшли
практичного застосування в автоматиці. Для програмування контролерів
сучасні SOFTLOGIC-системи у своєму арсеналі використовують
модифікації ПІД законів керування та не містять векторно-матричного
апарату математичних моделей об‟єкта керування (ОК) та цифрового
регулятора (ЦР) [56, 63]. Це пояснюється багатьма причинами, ось деякі з
них.
Автоматизація як наука “виділилася” із механіки і методи оптимізації
механічних систем стали “клонуватися” у автоматику. Проте властивості
об‟єктів автоматизації сильно відрізняються від механічних систем. Крім
інерційності (як і в механічних системах) більшість технологічних апаратів
містять значне транспортне запізнення, або розподіленість параметрів.
Математичне відтворення цих властивостей різко збільшує розмірність
матриць динамічної моделі ОК в просторі станів. Оптимальний регулятор у
розрахунках керуючої величини враховує змінні простору стану, які
необхідно розраховувати контролером за допомогою спостерігача за
вхідним та вихідним сигналами ОК. По суті спостерігач простору стану
представляє собою математичну модель ОК у просторі станів, яка вкрай
неефективно використовує незначні ресурси контролера, якщо ОК має
транспортне запізнення або розподіленість параметрів ОК. Крім того,
потрібно фільтрувати параметри стану для чого використовується фільтр
Калмана, на який теж необхідно витрачати обмежені обчислювальні
ресурси контролера.
Аналітичні методи синтезу оптимальної САК зводяться до пошуку
пропорційної матриці зворотного зв‟язку, яка по суті представляє ПД
регулятор високого порядку [22, 57]. Як відомо з теорії автоматичного
керування, ПД регулятор не може усунути статичну похибку регулювання,
що неприйнятно для більшості технологічних процесів. Існують підходи,
що дозволяють отримати інтегральну складову оптимального регулятора,
шляхом розширення простору стану ОК [14, 22, 57, 77], але це знову
призводить до зростання розмірності спостерігача простору стану.
Методи класичної оптимізації динамічних систем за критерій
оптимальності приймають середньоквадратичні показники якості, оскільки
інтеграл від квадрату функції має загальний аналітичний розв‟язок. На
практиці такий критерій для САК не завжди задовольняє вимоги
технологічного процесу, оскільки квадратичні показники якості мають
підвищену схильність до наявності коливної складової у динамічних
режимах системи керування. Модульні критерії забезпечують кращу
119
динаміку САК [15, 16], але синтез САК за модульними показниками якості
не завжди має аналітичний розв‟язок.
Специфічна особливість систем автоматизації об‟єктів з
розподіленими параметрами полягає в тому, що їх передатні функції, як
було показано вище, не є дробово-раціональними, для яких розроблена
переважна більшість методів оптимізації систем автоматичного керування
(САК). Джерелом інформації про динамічні властивості таких ОК, можуть
бути або математична модель у формі системи диференціальних рівнянь у
частинних похідних, яка в процесі дослідження інтегрується числовими
методами (наприклад, даючи в якості проміжного результату масив
ординат перехідної характеристики, це свого роду математичний
експеримент), або ж фізичний експеримент над окремо взятим ОК чи над
змонтованою системою з даним ОК у процесі налагодження або ж у
процесі нормальної експлуатації системи.
Також не слід забувати, що мова йде про динамічні системи, які
описуються диференційними рівняннями n-го порядку. На практиці,
аналітичним способом розв‟язуються звичайні диференційні рівняння до 2-
го порядку, решта – шукається чисельними методами. Технічні
характеристики комп‟ютерної техніки відкривають можливість принципово
нового підходу до аналізу динамічної поведінки САК. Зокрема, в якості
базової моделі можна використати перехідну або імпульсну
характеристику ОК у вигляді масиву її ординат [17, 42]. Єдина умова – цей
масив повинен бути достатньо детальним, щоб відобразити усі особливості
ОК. З наведених вище причин оптимальні налаштування регулятора
будемо шукати чисельно. Такий підхід є універсальним та не пред‟являє
аналітичних вимог до вигляду та поведінки цільової функції.
5.1. Формування масиву ординат перехідної характеристики САК
Будемо виходити з того, що динамічні властивості каналу
регулюючого впливу ОК задано у вигляді масиву ординат перехідної
характеристики Ht:Coefl, де Coefl визначається як type
Coefl=array[-1..601] of real, його структуру представлено у
таблиці
-1 0 1 2 3 … L L+1 … 601
L h[0] h[1] h[2] h[3] … h[L] dt
При цьому ОК вважається таким, що має самовирівнювання, а час
спостереження dtLD (dt – крок за часом між сусідніми ординатами)
достатній для того, щоб
constth Dt h[L] . (5.1)
Тобто, перехідний процес в ОК за час D встигає вийти на усталений рівень.
В загальному випадку розглядатимемо класичний ПІД-регулятор з
передатною функцією:
120
pT
pTKpW d
i
r
11 , (5.2)
де, Kr, Ti, Td – параметри налагодження ПІД–регулятора (відповідно
коефіцієнт передачі, час інтегрування та час випередження). Залежність
(5.2) не представляє складностей для чисельної реалізації та може бути
представлена як:
dt
eeTe
T
dteKu ss
d
s
ii
i
srs1
1
0
, (5.3)
тут, us – сигнал керування, еs – сигнал розузгодження. Для узагальнення
будемо враховувати можливість цифрової реалізації ПІД-закону з періодом
квантування dtNkTkv . При 1Nk можна вважати, що система вестиме
себе як аналогова.
Таким чином, розглядається одноконтурна САК, структурна схема
якої представлена рис. 5.1. САК складається із ОК, суматорів та цифрового
регулятора (ЦР). В загальному випадку сигнал зовнішнього збурення може
прикладатися в різних точках ОК. Коли конкретне місце збурення не
визначено, вважають, що збурення діє на вхід ОК як максимально можливе
(канал регулювання має найбільший вплив на динаміку ОК). Прикладом
такого збурення може бути зміна витрати матеріального потоку, що
регулюється у трубопроводі, при сталому положенні штока регулюючого
клапана. Такі випадки не рідкість на виробництві із-за змін перепадів тиску
на регулюючому клапані, що є наслідком порушення технології. Іншим
прикладом може служити неконтрольована зміна температури теплоносія
при регулюванні його витрати і таке інше.
Рис. 5.1. Структура схема САК, зs – сигнал завдання, еs – сигнал
розузгодження, us – сигнал керування, s – сигнал
зовнішнього збурення, хs – вхідний та уs – вихідний сигнали
ОК
Дискретну математичну модель ОК можна представити у вигляді
системи послідовного з‟єднання динамічних ланок: фіксатора нульового
ОК
ЦР
ys
es зs
_
us
xs
121
порядку (ФНП) із передатною функцією p
epW
pT
ФНП
1; неперервного
ОК, для якого існує передатна функція WOK(p); квантувачів S1, S2, які
працюють синхронно із періодом квантування Тkv. Передатна функція
квантувачів Тkv
pWКВ
1 . Для такої системи структурна схема зображена
на рис. 5.2.
Припустимо, що динамічні властивості ОК визначаються перехідною
характеристикою h(t). Реакцію ФНП на імпульс одиничний висоти
тривалістю Тkv у часовій області можна представити як різницю одиничних
сигналів, які зсунені на період квантування (рис. 5.3, а):
TkvttLpWФНП 11 . (5.4)
Рис. 5.2. Послідовне з‟єднання елементів дискретної моделі ОК
Також (див. рис. 5.3, б), у часовій області можна представити реакцію
приведеної неперервної частини (ПНЧ) системи із ФНП та неперервним
ОК на одиничний імпульс
0якщо,1
0якщо,0*
t
ttx як:
trLTkvththLpWpWpW ОКФНППНЧ , (5.5)
тут r(t) – реакція ПНЧ на імпульс одиничної висоти тривалістю Тkv. Якщо
на вхід ПНЧ надходить послідовність імпульсів х*(t), тоді вихідний сигнал
можна записати як:
...220 TkvtrTkvxTkvtrTkvxtrxty . (5.6)
Для Tst (s = 0, 1, 2, … Nt) залежність (5.6) прийме вигляд:
js
s
jjssss rxrxrxrxy
00110 ... . (5.7)
Візьмемо z–перетворення для обох частин (5.7), застосуємо теорему
згортки в часовій області
02121
n
nTkTfnTfZzFzF [43] та
отримаємо: zWzxzy . (5.8)
Тут W(z) – дискретна передатна функція ОК, що визначається за
залежністю: s
ss zrzW
0
(5.9)
WПНЧ(р)
WФНП(р)
WОК(р)
x(t) x*(t)
S1
y(t)
y*(t)
S2
122
Рис. 5.3. Формування реакції неперервного ОК на імпульс
одиничної величини тривалістю Тkv
Отже, якщо динаміка ОК в часовій області описується імпульсною
характеристикою ПНЧ r(t), яка є реакцією неперервного ОК на імпульс
одиничної величини тривалістю Тkv, а також для імпульсної
характеристики r(t) існує ґратчаста функція rs (s = 0, 1, 2, 3, …), то
дискретну передатну функцію ПНЧ можна визначити за залежністю (5.9), а
залежність (5.7) може використовуватися для чисельного визначення
реакції дискретного вихідного сигналу ys ОК на послідовність вхідних
імпульсів xs. Графічну інтерпретацію визначення вихідного сигналу ys ОК
за залежністю (5.7) представлено на рис. 5.4. Для наочності ґратчасті
функції rs, xs та ys між вузлами лінійно інтерпольовані, хоча вони визначені
тільки у вузлах квантування.
Вхідний сигнал ОК xs (див. рис. 5.1) представляє суму сигналів
керування та збурення sss ux . Наявність чи відсутність збурення
будемо враховувати параметром Tvs:char, який може приймати значення
'Z' коли входом є зs або 'L' коли в якості входу приймається s .
a) Тkv t
gФНП(t)
1
0
t
h(t) r(t)
б)
-h(t-Tkv)
r(t)
Тkv
0
123
Рис. 5.4. Схема формування масиву ординат реакції уs ОК
В процесі формування масиву перехідної характеристики САК
(масив Hts:Coefl) будемо обчислювати значення інтегрального
показника якості:
,4,
,3,
,2,
,1,
0
2
0
0
2
0
Nvrdtft
Nvrdtft
Nvrdtf
Nvrdtf
I (5.10)
тут, Nvr – номер критерію якості, за яким оптимізується САК. Чисельна
реалізація критерію прийме вид:
r4
Tkv
r2
r1 rNt t, s
r3
r0 0 1 2 3 4 5 … s Nt
r5 r(t), rs
x1 x5
x4
x3 xs
x0
s 0 1 2 3 4 5 … s Nt
ys
y0 y1 y2
y3
y4
s 0 1 2 3 4 5 … s Nt
у5 у6
x0 r(t)
x1 r(t-Tkv)
x2 r(t-2Tkv)
124
Nt
s
Nt
s
Nt
s
Nt
s
NvrfsNt
Tkv
NvrfsNt
Tkv
NvrfTkv
NvrfTkv
I
1
2
1
1
2
1
,4,
,3,
,2,
,1,
де NkLNt div ,
.каналу для 0якщо,
,каналу для 0якщо,
,каналу для 0якщо,
,каналу для 0якщо,
ssss
ssss
ssss
ssss
yeeR
yee
yзeeR
yзee
f
(5.11)
При формуванні f коефіцієнт R у (5.11) призначений впливати на величину
перерегулювання. Підсилювати (при 0<R<1) або приглушувати (R 1)
вплив перерегулювання у формуванні показника якості І. Нагадуємо, що
sss узe та за різними каналами впливу перерегулювання
характеризується різним знаком розузгодження, як це показано на рис. 5.5.
Рис. 5.5. Знак перерегулювання у перехідних процесах САК: а – за
каналом ss yз ; б – за каналом ss y
Вибір показника якості (5.10) для функціонування САК обумовлений
наступними міркуваннями. Традиційно при налагодженні САК перевагу
віддавали опосередкованим показникам якості (кореневим, частотним і,
зокрема, інтегральним). Це пояснювалося неможливістю (надто великою
трудомісткістю) розрахунку перехідної характеристики САК, за якою
можна було визначити прямі показники якості (тривалість перехідного
процесу, його характер, перерегулювання тощо). Графік перехідної
характеристики САК несе в собі максимум необхідної інформації для
зs=1
0 s
ys
a)
es < 0
es > 0 зs=0 s
ys
б)
125
безпосередньої оцінки процесу керування. Можливості сучасних
комп‟ютерів дозволяють сумістити переваги прямих показників якості із
узагальненням оцінки критерію якості (5.10). А навіщо чотири варіанти
критерію Nvr та параметр R у (5.11)? Справа в тому, що для різних OK
значно варіюються додаткові умови в формуванні критерію (5.10), як-то
допустимість та величина перерегулювання, темп зростання сигналу на
початковому відрізку перехідного процесу САК (отже, і час існування
значних відхилень від заданого рівня) і таке інше. З цих причин,
користувачеві надається можливість порівняти між собою (візуально,
шляхом співставлення) графіки оптимальних перехідних характеристик
САК, які отримані при різних варіантах Nvr показника якості (5.10) і
вибрати “кращий серед кращих”. Додаткові можливості варіювати
показник (5.10) надає параметр R у (5.11). Так, наприклад, завищуючи R,
можна отримати в якості оптимальних процеси близькі до аперіодичних, чи
навпаки, інтенсифікувати швидкодію системи за рахунок деякого
завищення перерегулювання.
Масив перехідної характеристики САК Hts:Coefl можна
формувати з кроком dt (як для аналогової САК), або з кроком Tkv (що
характерно для цифрової). Почнемо з першого варіанту та розглянемо
процедуру FormHtsA для формування масиву перехідної характеристики
аналогової САК. procedure FormHtsA;
var z,s,Zd,La,L: integer;
x,Eps,Epsp,Epsf,Integr,f: real;
Rs: CoefL;
begin
L:=round(Ht[-1]); dt:=Ht[L+1]; Tkv:=Nk*Dt;
Rs:=Ht; Hts[-1]:=L;
for z:=Nk to L do Rs[z]:=Rs[z]-Ht[z-Nk];
if Tvs='Z' then begin Zd:=1; La:=0 end
else begin Zd:=0; La:=1 end;
Eps:=Zd; x:=Kr*eps; Integr:=0;
for s:=0 to L do
Hts[s]:=Rs[s]*(x+La);
if Nvr in [1,2] then I:=Zd
else I:=0;
z:=1;
repeat
Epsf:=Zd-Hts[z];
if z mod Nk = 0 then
begin
Epsp:=Eps; Eps:=Zd-Hts[z];
Integr:=Integr+Eps*Tkv;
x:=Kr*(Eps+Integr/Ti+Td*(Eps-Epsp)/Tkv);
for s:=0 to L-z do
Hts[z+s]:=Hts[z+s]+Rs[s]*(x+La);
126
end;
if abs(Hts[z])>2
then I:=500
else
begin
if Tvs='Z'
then if Epsf>0 then f:=Epsf else
f:=R*Epsf
else if Epsf>0 then f:=R*Epsf else
f:=Epsf;
case Nvr of
1: I:=I+abs(f);
2: I:=I+sqr(f);
3: I:=I+z/L*abs(f);
4: I:=I+z/L*sqr(f);
end;
end;
inc(z);
until (z>L) or (I>=500);
Hts[601]:=I*dt;
if I>=500 then
for s:=z to L do Hts[s]:=0.5;
end;
Другий варіант формування масиву перехідної характеристики Hts
реалізовано процедурою FormHtsD для цифрової САК (крок з часом
Tkv:=Nk*Dt). procedure FormHtsD;
var z,s,Zd,La,L: integer;
x,Eps,Epsp,Epsf,Integr,f: real;
Rs: CoefL;
begin
L:=round(Ht[-1]); dt:=Ht[L+1]; Tkv:=Nk*Dt;
Nt:=L div Nk; Rs[-1]:=Nt; Rs[Nt+1]:=Tkv;
Rs[0]:=Ht[0];
for z:=1 to Nt do
Rs[z]:=Ht[z*Nk]-Ht[(z-1)*Nk];
if Tvs='Z' then begin Zd:=1; La:=0 end
else begin Zd:=0; La:=1 end;
Eps:=Zd; x:=Kr*eps; Integr:=0;
for z:=0 to Nt do Hts[z]:=Rs[z]*(x+La);
if Nvr in [1,2] then I:=Zd
else I:=0;
z:=1;
repeat
Epsp:=Eps; Eps:=Zd-Hts[z];
Integr:=Integr+Eps*Tkv;
x:=Kr*(Eps+Integr/Ti+Td*(Eps-Epsp)/Tkv);
for s:=0 to Nt-z do
127
Hts[z+s]:=Hts[z+s]+Rs[s]*(x+La);
if abs(Hts[z])>2
then I:=500
else
begin
if Tvs='Z'
then if Eps>0 then f:=Eps else f:=R*Eps
else if Eps>0 then f:=R*Eps else f:=Eps;
case Nvr of
1: I:=I+abs(f);
2: I:=I+sqr(f);
3: I:=I+z/Nt*abs(f);
4: I:=I+z/Nt*sqr(f);
end;
end;
inc(z);
until (z>Nt) or (I>=500);
Hts[601]:=I*Tkv;
if I>=500 then
for s:=z to Nt do Hts[s]:=0.5;
end;
Вибір того чи іншого варіанта формування масиву Hts реалізується
підпрограмою FormHts. procedure FormHts;
begin
case Tmo of
'A': FormHtsA;
'D': FormHtsD;
end;
end;
Тут Tmo:char – глобальна типізована константа, яка може приймати
значення 'A' або 'D' в залежності від обраного варіанту моделі ОК ('A'
– аналогова, 'D' – цифрова).
5.2. “Ручний” пошук оптимального налагодження регулятора
Якщо масив Hts:Coefl сформовано з кроком dt, то графік
відповідної перехідної характеристики САК можна сформувати
процедурою Graphiс, що входить до модуля Serv [27]. У випадку, якщо
масив Hts:Coefl сформовано з кроком Tkv, то відповідний графік
будемо формувати процедурою Grad у вигляді ламаної, горизонтальна
проекція якої дорівнює не 1 піксель, як у Graphic, а Nk пікселів. procedure Grad(Hts:CoefL; c:integer);
var z,L: integer;
begin
L:=round(Ht[-1]);
Nt:=L div Nk; Setcolor(c);
128
MoveTo(X0,Y0-round(Hts[0]/dy));
for z:=1 to Nt do
LineTo(x0+z*Nk,y0-round(Hts[z]/dy));
SetColor(15);
end;
Введення (уточнення) вище згаданих параметрів реалізується
підпрограмою Param. procedure Param;
var J2:char;
begin
repeat
PutA;
Ou('0-Ex,1-Nk,2-Nvr,3-R,4-k,5-Ek,6-Tvs,7-Tmo');
str(Nk,T10); Ts:='Nk='+T10;
L:=round(Ht[-1]); Dt:=Ht[L+1]; Tkv:=Nk*dt;
str(Tkv:1:3,T10); Ts:=Ts+' (Tkv='+T10+')';
str(Nvr,T10); Ts:=Ts+', Nvr='+T10;
str(R:1:3,T10); Ts:=Ts+', R='+T10;
str(k,T10); Ts:=Ts+', k='+T10;
str(Ek:1:3,T10); Ts:=Ts+', Ek='+T10;
Ts:=Ts+', Tvs='+Tvs;
Ts:=Ts+', Tmo='+Tmo;
Info; J2:=ReadKey;
case J2 of
'1': Oui('Nk',Nk);
'2': Oui('Nvr',Nvr);
'3': Our('R',R);
'4': Oui('k',k);
'5': Our('Ek',Ek);
'6': if Tvs='Z' then Tvs:='L' else Tvs:='Z';
'7': if Tmo='A' then Tmo:='D' else Tmo:='A';
end
until J2='0'
end;
Система координат для графіків перехідних характеристик САК
формується у процедурі Sc. procedure Sc;
begin
Xmin:=0; Xmax:=D; Ymin:=0; Ymax:=1.5;
X0Y0(false); ClearDevice; SystCoor;
Line(x0,y0-round(1/dy),x0+L,y0-round(1/dy));
end;
Процедура Nastr організує підбір параметрів налагодження
регулятора (Kr, Ti, Td) та демонструє відповідні перехідні процеси у
САК. procedure Nastr;
var J1:char;
begin
129
repeat
PutA; Ou('0-Ex,1-Param,2-Kr,3-Ti,4-Td,5-Sc,6-C,
7-h(t),8-Service');
Str(Kr:1:3,T10); Ts:='Kr='+T10;
Str(Ti:1:3,T10); Ts:=Ts+', Ti='+T10;
Str(Td:1:3,T10); Ts:=Ts+', Td='+T10;
Str(C,T10); Ts:=Ts+', C='+T10;
Str(I:1:3,T10); Ts:=Ts+' (I='+T10+')';
Info; J1:=ReadKey;
case J1 of
'1': Param;
'2': Our('Kr',Kr);
'3': Our('Ti',Ti);
'4': Our('Td',Td);
'5': begin
Xmin:=0; Xmax:=Ht[-1]*Ht[L+1];
Ymax:=1.5;
if Tvs='Z' then Ymin:=0
else Ymin:=-1.5;
X0Y0(false); ClearDevice; SystCoor;
if Tvs='Z' then
Line(x0,y0-round(1/dy),
x0+L,y0-round(1/dy));
FormHts;
if Tmo='A' then Graphic(Hts,C)
else Grad(Hts,c);
I:=Hts[601];
end;
'6': Oui('C',C);
'7': begin
FormHts;
if Tmo='A' then Graphic(Hts,C)
else Grad(Hts,C);
I:=Hts[601];
end;
'8': Service;
end;
until J1='0';
end;
130
5.3. Формування зображення поверхні показника якості в
просторі параметрів налаштування регулятора
При пошуку оптимального налагодження системи, скажімо, на
мінімум одного з інтегральних показників якості (5.10), бажано мати
уявлення про характер залежності цього показника від параметрів
налагодження регулятора. У першу чергу, це Kr – коефіцієнт передачі та Tі
– час ізодрому регулятора. Якщо обмежитись цими двома параметрами, то
простір параметрів налагодження зведеться до площини (Tі, Kr), на якій
функціонал (показник якості I) можна зобразити у формі системи ізоліній.
Система координат та досліджувана ділянка матимуть вигляд рис. 5.6.
Рис. 5.6. Область дослідження показника якості
Домовимось задавати значення Krk та Tik, а Krn та Tin визначатимемо за
залежностями: rkrn KK 1,0 , ikin TT 1,0 . Отже, область дослідження
прийме вигляд рис. 5.7.
Рис. 5.7. Визначення розмірів області дослідження на екрані
Коефіцієнт Td при диференціальній складовій вважатимемо
фіксованим, як окремий випадок можна приймати Td=0 (ПІ – регулятор).
Робоча (заштрихована) область сканується попіксельно, тому, щоб процес
0 Ti
Kr
Tin Tik
Krk
Krn
0
Ti
Kr
Н2
L2
131
тривав не надто довго, розміри L2 та H2 (в пікселях) підбираються з
урахуванням цієї обставини. Алгоритм формування ізоліній описано в [27].
Нижче наводиться лістинг процедури Izo, що відповідає за формування
зображення ізоліній в координатах параметрів регулятора. procedure Izo;
var Nr,Z,S,Zn,Sn,So,Zo,C1:integer;
Krn,Tin,Nrr:real; F:boolean; J2:char;
Mnr:array[-1..600] of integer;
begin
L:=L2; H:=H2;
Krn:=0.1*Krk; Tin:=0.1*Tik;
Xmin:=0; Xmax:=Tik; Ymin:=0; Ymax:=Krk;
X0Y0(false); ClearDevice; SystCoor;
Sn:=round(Tin/dx); Zn:=round(Krn/dy);
Ti:=Tin-dx; Io:=500; J2:='1';
PutA; Ou('0-exit');
for z:=Zn-1 to H do
begin
Kr:=z*Dy; FormHts; Nrr:=Hts[601]/Hiz;
if Nrr>Mi then Mnr[z]:=Mi
else Mnr[z]:=trunc(Nrr);
end;
s:=Sn;
repeat
Ti:=S*dx; F:=true;
for z:=Zn-1 to H2 do
if F
then
begin
Kr:=Z*dy; FormHts; I:=Hts[601];
if I<Io then
begin
Io:=I; So:=S; Zo:=Z;
end;
if I>=500
then
begin
PutPixel(x0+s,y0-z,5);
F:=false;
end
else
begin
Nrr:=I/Hiz;
if Nrr>Mi then Nr:=Mi
else Nr:=trunc(Nrr);
if (z>=Zn) and ((Nr<>Mnr[z-1])
or (Nr<>Mnr[z]))
then
132
begin
if Nr<Mnr[z-1] then C1:=10
else C1:=12;
PutPixel(x0+s,y0-z,C1);
end;
end;
Mnr[z]:=Nr;
end
else PutPixel(x0+s,y0-z,5);
if KeyPressed then J2:=ReadKey;
inc(s);
until (s>L) or (J2='0');
Kr:=Zo*dy; Ti:=So*dx; SetColor(10);
Circle(x0+So,y0-Zo,3); SetColor(15);
I:=Io;
L:=GetMaxX-139; H:=GetMaxY-100;
end;
Тут Hiz – крок ізоліній, Мі – константа типу integer –
максимальний номер ізоліній, що відображаються на екрані (коли номери
ізоліній стають надто великими – ізолінії зливаються, отже, втрачають
сенс). Зеленим кольором (С:=10) зображуються ділянки ізоліній, які при
скануванні знизу вверх ведуть до мінімуму. Також зеленим кольором
малюється коло радіусом 3 пікселі навколо пікселя, де було зафіксовано
найменше виявлене за час сканування значення показника якості.
Кольором С:=5 зафарбовуються пікселі, в яких (при відповідних
значеннях Kr, Ti, Td) система виявляється нестійкою. Сканування робочої
зони реалізується знизу вверх (в напрямку зростання Kr). Так от, коли
виявляється, що на черговому кроці сканування е>=500 (система
нестійка), усі пікселі над даним Ti (при більших Kr) будуть
характеризувати нестійку САК, а тому їх не варто обслуговувати по повній
програмі, тобто формувати для них Hts і тому подібне, і вони просто
зафарбовуються червоним (С:=5) кольором. Це прискорює формування
зображення. Якщо система має цифровий регулятор, то для пришвидшення
процесу варто задавати Tmo='D' (чим більше Nk – тим швидше проходить
побудова зображення).
“Технічне обслуговування” процедури Izo відбувається за
допомогою підпрограми DemIzo. procedure DemIzo;
var J1:char;
begin
repeat
PutA; Ou('0-Ex,1-Param,2-L2,3-H2,4-Krk,5-Tik,6-
Td,
7-Hiz,8-Mi,9-Izo,S-Service');
Str(L2,T10); Ts:='L2='+T10;
Str(H2,T10); Ts:=Ts+', H2='+T10;
133
Str(Krk:1:3,T10); Ts:=Ts+', Krk='+T10;
Str(Tik:1:3,T10); Ts:=Ts+', Tik='+T10;
Str(Td:1:3,T10); Ts:=Ts+', Td='+T10;
Str(Hiz:1:2,T10); Ts:=Ts+', Hiz='+T10;
Str(Mi,T10); Ts:=Ts+', Mi='+T10;
Info; J1:=ReadKey;
case J1 of
'1': Param;
'2': Oui('L2',L2);
'3': Oui('H2',H2);
'4': Our('Krk',Krk);
'5': Our('Tik',Tik);
'6': Our('Td',Td);
'7': Our('Hiz',Hiz);
'8': Oui('Mi',Mi);
'9': Izo;
'S','s': Service;
end;
until J1='0';
end;
Система ізоліній формується опцією '9-Izo' підпрограми DemIzo.
Як приклад, на рис. 5.10 зображено поверхню показника якості (5.10) для
конкретної САК, яка сформована підпрограмами даного пункту. Знайдені
оптимальні значення Kr та Ti та відповідне їм значення показника якості
можна побачити в інформаційному рядку підпрограми Nastr. За
допомогою процедури Nastr можна сформувати графік перехідної
характеристики САК при знайдених оптимальних значеннях Kr та Ti.
5.4. Пошук оптимальної настройки ПІД регулятора
методом сканування зі змінним кроком
Щойно розглянутий в п. 5.3. алгоритм визначення оптимальних
параметрів налаштування регулятора надто трудомісткий, отже, може
забирати багато часу. Крім того, пошук ведеться при фіксованому Td. Тому
бажано мати алгоритм, який би розв‟язував цю задачу швидше та дозволяв
варіювати усі три параметри налаштування ПІД-регулятора.
Пошук оптимуму (мінімум показника якості (5.10)) будемо вести в
межах прямокутного паралелепіпеда, проекція якого на площину Ti, Kr
виглядає як зображено на рис. 5.8. В робочій області (аналогічній такій як
для системи ізоліній) визначається її центр (Tic, Krc) та початкові
значення кроків сканування (Di, Dk). Центр області для початку
приймається за початок положення оптимуму. Після цього крок пошуку
зменшується в k разів (k – константа типу integer, яку задає користувач,
на рис. 5.8 k=3). Отримана таким чином сітка сканується вузол за вузлом
на предмет визначення вузла з мінімальним значенням показника якості
(5.10).
134
Після того, як такий вузол знайдено, він приймається як черговий
претендент на положення оптимуму. Кроки сканування в черговий раз
зменшуються в k разів і процес повторюється доти, поки при кроці
Dk<=Epsk не буде знайдено вузол з мінімальним показником якості, який і
приймається за положення шуканого оптимуму. Мала величина Epsk
визначається як Epsk:=Ek*Krk, де Ek – константа типу real (задається
користувачем, наприклад, Ek:=0.001).
Рис. 5.8. Схема пошуку оптимуму методом сканування
Варіювання параметра Тd реалізується аналогічно варіюванню Kr та
Ti. Знайдені оптимальні значення Kro, Tio, Tdo та I записуються в
однойменні ідентифікатори (глобальні змінні типу real) і виводяться в
інформаційному рядку підпрограми DemSc3, яка обслуговує підпрограму
OptSC3, яка, власне, реалізує пошук. procedure OptSc3;
var z,s,v,w:integer; J2: char;
dk,di,dd,Krn,Tin,Tdn,Krc,
Tic,Tdc,Kro,Tio,Tdo,Epsk: real;
begin
Krn:=0.1*Krk; Tin:=0.1*Tik; Tdn:=0.1*Tdk;
Krc:=0.55*Krk; Tic:=0.55*Tik; Tdc:=0.55*Tdk;
dk:=0.45*Krk; di:=0.45*Tik; dd:=0.45*Tdk;
Epsk:=Ek*Krk; Io:=500; w:=0; J2:='1';
PutA; Ou('0-exit');
repeat
dk:=dk/k; di:=di/k; dd:=dd/k;
for s:=-k to k do
begin
Ti:=Tic+s*di;
if Ti<Tin then Ti:=Tin;
if Ti>Tik then Ti:=Tik;
for z:=-k to k do
begin
Tic Tik Tin
Ti
Krc
Krk
Krn
Kr
Dk
Di
0
135
Kr:=Krc+z*dk;
if Kr<Krn then Kr:=Krn;
if Kr>Krk then Kr:=Krk;
for v:=-k to k do
begin
Td:=Tdc+v*dd;
if Td<Tdn then Td:=Tdn;
if td>Tdk then Td:=Tdk;
FormHts; I:=Hts[601];
inc(w); str(w,T10);
clear(450,60,550,70);
OutTextXY(450,60,'W='+T10);
if I<Io then
begin
Kro:=Kr; Tio:=Ti;
Tdo:=Td; Io:=I;
end;
end;
end;
end;
Krc:=Kro; Tic:=Tio; Tdc:=Tdo;
if KeyPressed then J2:=ReadKey;
until (Dk<=Epsk) or (J2='0');
Kr:=Kro; Ti:=Tio; Td:=Tdo; I:=Io;
Clear(450,60,550,70);
OutTextXY(450,60,'Ok');
end;
“Технічне обслуговування” процедури OptSc3 бере на себе
процедура DemSc3. procedure DemSc3;
var J1: char;
begin
repeat
PutA;
Ou('0-Ex,1-Param,2-Krk,3-Tik,4-Tdk,5-OptSc3');
Str(Krk:1:3,T10); Ts:='Krk='+T10;
Str(Tik:1:3,T10); Ts:=Ts+',Tik='+T10;
Str(Tdk:1:3,T10); Ts:=Ts+',Tdk='+T10;
Info; J1:=ReadKey;
case J1 of
'1': Param;
'2': Our('Krk',Krk);
'3': Our('Tik',Tik);
'4': Our('Tdk',Tdk);
'5': OptSc3;
end;
until J1='0'
end;
136
В процедурі Nastr передбачено виведення в інформаційному рядку
(процедура Infо) поточних значень Kr, Ti та Td. Отже, після
спрацювання процедури OptSс3 і виклику Nastr в інформаційному рядку
висвітлюються знайдені оптимальні значення параметрів налаштування
регулятора.
Щоб побачити і візуально оцінити отриману оптимальну перехідну
характеристику системи, треба викликати процедуру Nastr і там
сформувати відповідний графік. Оскільки процедура OptSс3 не формує
додаткового зображення на екрані, то при вході в DemSс3 можна не
стирати зображення, сформоване процедурою Nastr (графік чи графіки
попередньо отриманих перехідних характеристик системи). Тим самим
створюється можливість накладати черговий графік поверх раніше
сформованих для їх порівняння між собою. Таким чином можна
досліджувати вплив Nvr, R, Nk та інших чинників на характер і
особливості отримуваних перехідних характеристик системи.
5.5. Пошук оптимуму із стартової точки
Алгоритм пошуку оптимуму, розглянутий в п. 5.4, має лише те
обмеження, щоб діапазон пошуку (для області обмеженої Krn .. Krk, Tin
.. Tik, Tdn .. Tdk) включав би, принаймні, один вузол, де б система була
стійкою, інакше процес пошуку закінчиться, не почавшись, у центрі
заданого початкового паралелепіпеда. Початкове “орієнтування” – пошук
комбінації Kr, Ti, Td, при яких система була б стійкою – може бути
реалізовано в процедурі Nastr шляхом простого підбору. Якщо ж
знайдена точка оптимуму виявиться на одній з граней початкового
паралелепіпеда, то, очевидно, варто відповідним чином скоригувати Krk,
Tik та Tdk, надаючи програмі можливість виконати пошук у
перспективному напрямку.
Алгоритм пошуку, позбавлений від даного обмеження, розглянуто
нижче. Даний алгоритм є різновидом методу Хука-Дживса [48]. Для
початку пошуку оптимуму необхідно задати початкову (стартову) точку
пошуку. Вимога щоб ця точка була “стійкою” залишається в силі.
Пошук починається з “орієнтації” – вибору перспективного
(найбільш перспективного) напряму руху. Для цього кожний з параметрів,
що варіюються (Kr, Ti та Td), отримує прирощення Dk , Di , Dd (у
вкладених циклах). Для кожної з розгляданих комбінацій Kr, Ti, Td
визначається показник якості І (через формування масиву Hts:Coefl) і
вибирається комбінація з найменшим значенням. Положення цієї
комбінації відносно центра визначає найбільш перспективний напрямок
руху до оптимуму.
Рух у даному напрямку виконується покроково доти, поки дає
покращення показника І. Після цього знайдена поточна “найкраща” точка
137
приймається за центр чергового “орієнтування” і так далі, поки при
черговому орієнтуванні перспективний напрямок не знаходиться (усі
потенційні точки “гірші” центральної). Останній центр орієнтації
приймається за шукану точку оптимуму.
Знайдену точку можна взяти за стартову для повторення пошуку при
менших значеннях Dk, Di, Dd (усіх чи будь-якої комбінації з них). Циклів з
послідовним зменшенням кроків Dk, Di, Dd можна організувати скільки
завгодно на розсуд користувача. procedure OptSt;
var z,s,q,zv,sv,w:integer;
j3:char;
f,out:boolean;
dkro,dtio,dtdo,dkvo,dtvo,Io,
krc,tic,tdc,kvc,tvc,
kro,tio,tdo,kvo,tvo:real;
begin
Kr:=krs; Ti:=tis; Td:=tds;
FormHts; w:=1; Io:=Hts[601];
kro:=Kr; tio:=Ti; tdo:=Td;
out:=false; j3:='1';
puta; Ou('0-ex'); Clear(500,45,630,55);
repeat
krc:=kro; tic:=tio; tdc:=tdo;
f:=false; z:=-Ddk;
repeat
Kr:=krc+z*Dk; s:=-Ddi;
repeat
Ti:=tic+s*Di; q:=-Ddd;
repeat
Td:=tdc+q*Dd;
FormHts; I:=Hts[601];
inc(w); str(w,T10); Clear(550,30,630,40);
OutTextXY(550,30,'w='+T10);
if I<Io then
begin
Io:=I; f:=true;
kro:=Kr; tio:=Ti; tdo:=Td;
dkro:=z*Dk; dtio:=s*Di; dtdo:=q*Dd;
end;
if KeyPressed then j3:=Readkey;
if j3='0' then out:=true;
inc(q);
until (q>Ddd) or out;
inc(s);
until (s>Ddi) or out;
inc(z);
until (z>Ddk) or out;
Kr:=kro; Ti:=tio; Td:=tdo;
138
if f then
repeat
Kr:=Kr+dkro; Ti:=Ti+dtio; Td:=Td+dtdo;
FormHts; I:=Hts[601]; inc(w); str(w,T10);
Clear(550,30,630,40);
OutTextXY(550,30,'w='+T10);
if I<Io then
begin
kro:=Kr; tio:=Ti; tdo:=Td; Io:=I;
end;
until I>Io;
until (f=false) or out;
Kr:=kro; Ti:=tio; Td:=tdo;
Krs:=Kr; Tis:=Ti; Tds:=Td;
Clear(500,45,630,55);
OutTextXY(500,45,'Ok! Press Enter');
J3:=ReadKey;
end;
“Обслуговуванням” процедури OptSt займаються процедури DemSt
та Diffs. procedure DemSt;
var j1:char;
begin
repeat
PutA;
Ou('0-ex,1-Param,2-Diffs,3-Krs,4-Tis,5-Tds,
6-OptSt');
str(Krs:1:2,T10); Ts:='Krs='+T10;
str(Tis:1:2,T10); Ts:=Ts+', Tis='+T10;
str(Tds:1:2,T10); Ts:=Ts+', Tds='+T10;
Info; j1:=ReadKey;
case j1 of
'1': Param;
'2': Diffs;
'3': Our('Krs',Krs);
'4': Our('Tis',Tis);
'5': Our('Tds',Tds);
'6': OptSt;
end;
until j1='0';
end;
Тут після спрацювання опції „6–OptSt‟ стартові Krs, Tis та Tds
набувають значень Kro, Tio та Tdo, так що отримані значення параметрів
налагодження регулятора відразу стають доступними в інформаційному
рядку. Якщо користувач хоче повторити (або уточнити) пошук оптимуму з
новими значеннями Dk, Di, Dd – для зміни кроку застосовується
підпрограма Diffs.
139
procedure Diffs;
var j2:char;
begin
repeat
PutA;
Ou('0-ex,1-Dk,2-Di,3-Dd,4-Ddk,5-Ddi,6-Ddd');
str(Dk:1:3,T10); Ts:='Dk='+T10;
str(Di:1:3,T10); Ts:=Ts+', Di='+T10;
str(Dd:1:3,T10); Ts:=Ts+', Dd='+T10;
str(Ddk,T10); Ts:=Ts+', Ddk='+T10;
str(Ddi,T10); Ts:=Ts+', Ddi='+T10;
str(Ddd,T10); Ts:=Ts+', Ddd='+T10;
Info; j2:=ReadKey;
case j2 of
'1': Our('Dk',Dk);
'2': Our('Di',Di);
'3': Our('Dd',Dd);
'4': if Ddk=1 then Ddk:=0 else Ddk:=1;
'5': if Ddi=1 then Ddi:=0 else Ddi:=1;
'6': if Ddd=1 then Ddd:=0 else Ddd:=1;
end;
until j2='0';
end;
Знайдені оптимальні Kro, Tio та Tdo також записуються в глобальні
Kr, Ti, Td. Це дає змогу сформувати відповідний їм графік перехідної
характеристики системи в підпрограмі Nastr, викликаючи останню в
меню основної програми.
5.6. Оптимізація класичного ПІД-регулятора за
інтегральними показниками якості
У попередніх розділах (п.5.1 – п.5.5) розглянуто програмну
реалізацію алгоритму оптимізації класичного ПІД-регулятора за
інтегральним показником якості (5.10). Розглянуті вище процедури
оформлені в програмний модуль OptHtd, лістинг якого знаходиться у
Додатку 11. Програмний модуль OptHtd використано у програмі
DemOptHd для оптимізації САК. Приклад дослідження цифрової САК із
використанням розробленої авторами програми продемонстровано нижче.
Лістинг програми наводиться у Додатку 12.
Математична модель ОК у вигляді перехідної характеристики ОК
формувалася інтегруванням диференційного рівняння у частинних
похідних із розділу 3 для теплоакумулюючої стінки (п.3.2). Перехідна
характеристика моделі ОК представлена на рис. 5.9. Значення параметрів
математичної моделі теплоакамулюючої стінки вибрано довільно.
Враховуючи, що розраховується САК із абстрактним ОК у подальшому усі
налаштування регулятора представлені у безрозмірній формі.
140
Рис. 5.9. Перехідна характеристика ОК
Для організації пошуку оптимальної настройки регулятора (при
фіксованих значеннях Nvr та R) бажано спочатку отримати уявлення про
характер поверхні показника І, скажімо, в просторі параметрів настройки
ПІ-регулятора (або ПІД-регулятора при фіксованому значенні Td).
Відповідний алгоритм реалізований у програмі (п.5.3). На рис. 5.10
представлені результати моделювання рельєфу поверхні для критерію
(5.10) (R=1, Nvr=2) в координатах min, ir TKfI із цифровим ПІ-
регулятором (Td=0, Tkv=1).
Рельєфи поверхні при Nk=1, 3, 4 мають схожі зображення. Отже,
маємо справу із одноекстремальною функцією (екстремум – мінімум).
Особливістю даної функції є те, що вона приймає скінченні значення лише
в області, де САК є стійкою. Для нестійкої САК показники (5.10) стають
рівними нескінченності, отже, втрачають сенс. В подібній ситуації процес
розрахунку припиняється. Це зайвий раз нагадує про необхідність пошуку
оптимуму з початкової точки, де САК, принаймні, стійка (уявлення про
допустиму область дає система ізоліній). У подальших дослідженнях
використано математичну модель ОК у вигляді перехідної характеристики
рис. 5.9.
Рис. 5.10. Рельєф поверхні в координатах Ir TKfI , за каналом
ss yз
141
Розглянемо вплив періоду квантування Тkv в цифровому ПІД
регуляторі на значення оптимальних настройок та на результат оптимізації.
Наприклад, при Nvr=2 (R=1) на рис. 5.11 представлені перехідні процеси у
цифровій САК за каналом ss yз . Крива 1 оптимальна перехідна
характеристика САК знайдена при таких настройках ЦР: Кr=4,36; ТІ=18,33;
ТD=2,78; Tkv=0,2. Повторимо пошук оптимальної настройки ПІД-
регулятора із збільшенням Tkv. Отримаємо оптимальний ЦР: Кr=3,06;
ТІ=14; ТD=2,89; Tkv=1 та криву 2 в якості оптимальної перехідної
характеристики САК. Якщо продовжити збільшення Tkv – отримаємо
перехідну характеристику (крива 3) та настройки ЦР: Кr=1,44; ТІ=9,11;
ТD=2,94; Tkv=5.
Рис. 5.11. Перехідні процеси у цифровій САК за каналом ss yз
Із графіків видно, що збільшення Tkv негативно впливає на якість
перехідних процесів САК, а сам вплив може бути суттєвим і це не підлягає
сумніву. Програма дозволяє варіювати Tkv шляхом зміни Nk та оцінювати
вплив на результат оптимізації. Також не слід забувати, що значення
вихідного сигналу ys для цифрової САК існує у вузлах дискретизації, а між
вузлами програма проводить лінійну інтерполяцію.
Також представляє інтерес дослідження впливу інтегрального
критерію (Nvr) на якість розв‟язків. На рис. 5.12 показані оптимальні
перехідні характеристики САК, знайдені при Nvr=1..4, (R=1, Тkv=1)
(відповідні криві позначені тими ж цифрами). Як видно, при Nvr=2,4
(середньоквадратичний показник якості) САК має чітко виражену
схильність до коливань. Решта (Nvr=1,3) дають близькі результати.
Зрозуміло, що робити глобальні висновки із одиничного дослідження не
варто, але програма дає можливість оцінити вплив Nvr та R на результат
оптимізації у кожному конкретному випадку (для різних об‟єктів та при
різних значеннях дискретизації Тkv ЦР).
142
Рис. 5.12 Оптимальні перехідні процеси у САК за каналом ss yз
Наступна серія кривих демонструє дослідження впливу параметра R
на якість розв‟язків. На рис. 5.13 показані оптимальні перехідні
характеристики САК за середньоквадратичним показником якості (Nvr=2).
Крива 1 отримана при R=1 із настройками ЦР: Кr=3,06; ТІ=14; ТD=2,89;
Tkv=1. Крива 2 забезпечується оптимальним ЦР: Кr=3; ТІ=9,22; ТD=3,17;
Tkv=1 при R=0,5. Крива 3 отримана із настройками ЦР: Кr=2,87; ТІ=17,22;
ТD=2,94; Tkv=1 при R=2. Як видно, множник R підсилює (при 0<R<1) або
приглушує (R 1) перерегулювання у перехідних процесах САК.
Рис. 5.13. Оптимальні перехідні процеси у САК за
середньоквадратичним показником якості при варіюванні R
(1 – R=1; 2 – R=0,5; 3 – R=2)
І, нарешті, для критерію якості (5.10) (Nvr=1, R=1) на рис. 5.14
показано перехідну характеристику САК (крива 1) за каналом ss y ЦР:
Кr=2,28; ТІ=13,11; ТD=2,72; Tkv=1. Звернемо увагу, що даний ЦР
оптимізований за каналом ss yз . Якщо САК оптимізувати за каналом
ss y , то в якості оптимальної отримаємо характеристику (крива 2), яка
явно краща від кривої 1. Для САК із кривою 2 має місце ЦР: Кr=2,89; ТІ=5;
ТD=3,5; Tkv=1.
143
Отже, коли мова йде про оптимізацію САК, то потрібно чітко
усвідомлювати оптимізація для якого каналу розглядається і за яким
критерієм. Інакше результати можуть значно відрізнятися.
Рис. 5.14. Оптимальні перехідні процеси у САК за каналом ss y
Запропонований алгоритм оптимізації цифрових САК відкриває
можливість синтезу ЦР без етапу апроксимації динамічних властивостей
ОК. Це не тільки дозволяє зменшити похибку моделювання САК за
рахунок виключення етапу апроксимації, а також дозволяє уникнути
суб‟єктивності при виборі структури апроксимуючої залежності.
Представлений алгоритм оптимізації САК можна використовувати на
верхньому рівні супервізорних систем керування в якості порадника
налаштувань регуляторів із ПІД-законом керування. При цьому, важливу
роль відіграє коректний вибір каналу впливу, що визначається вимогами до
технологічного процесу.
Слід зазначити, що САК, де застосовується квадратичний критерій
якості (Nvr=2), має підвищену схильність до коливань. З цих причин, на
думку авторів, використання модульних критеріїв (Nvr=1, 3) є більш
перспективним при синтезі цифрової САК.
5.7. Оптимізація налаштувань модифікованих ПІД-законів
керування із мінімізацією керуючого впливу
З появою дешевих мікропроцесорних засобів автоматизації зріс
інтерес до програмних реалізацій ПІД регулятора [78]. Серед регуляторів,
що застосовуються на виробництві, близько 90-95% використовують ПІД
закон регулювання та його часткові реалізації [73, 74]. За довгі роки
використання класичного ПІД регулятора виявлено ряд недоліків
функціонування. В ПІД регуляторі три параметри налаштування, що в
деяких випадках не дозволяє забезпечити необхідну якість керування,
особливо для систем із великим транспортним запізненням, або
розподіленістю параметрів та для систем, де одночасно необхідно висока
якість ослаблення збурюючих факторів та слідкування за завданням. Як
144
наслідок, почали з‟являтися модифікації ПІД закону регулювання [72, 74].
Серед таких модифікацій слід виділити ПІ-Д та І-ПД регулятори, які
широко використовують фірми ABB, Honeywell, Fisher-Rosemount,
Foxboro, SATT Instruments, Toshiba та інші [76]. ПІ-Д та І-ПД регулятори
розглядають як окремий тип реалізації закону керування [72, 75].
Використання мікропроцесорних засобів підвищило вимоги до якості
функціонування САК. На сьогоднішній день САК повинна забезпечувати
необхідну якість керування, а також мінімізувати витрати матеріальних та
енергетичних ресурсів для досягнення поставлених цілей. Огляд сучасних
SOFTLOGIC-систем [56, 63] показав, що програмне забезпечення
контролерів використовує у своєму арсеналі тільки модифікації ПІД
законів керування. З іншого боку, теорія оптимізації динамічних систем
базується на векторно-матричному представленні моделей САК [14, 22, 57].
На жаль, для розробки алгоритмів керування, що застосовуються у
промислових контролерах, математичний апарат векторно-матричного
аналізу не знайшов практичного застосування. Більшість SOFTLOGIC-
систем не може оперувати із змінними у вигляді масивів, що виключає
використання математичних методів векторно-матричного аналізу. З цих
причин синтез оптимальних систем із модифікаціями ПІД закону керування
є актуальним завданням.
У даному пункті розглядається одноконтурна САК, структурна схема
якої представлена рис. 5.15. Структурна схема САК подібна до схеми, що
розглядалася на рис. 5.1. На схемі прийнято аналогічні позначення
сигналів. Відмінність схеми полягає в наявності додаткового сигналу уs, що
надходить на ЦР. Така особливість викликана реалізацією модифікованих
ПІД законів керування, що буде показано нижче.
Рис. 5.15. Структура схема САК, зs – сигнал завдання, еs – сигнал
розузгодження, us – сигнал керування, s – сигнал
зовнішнього збурення, хs – вхідний та уs – вихідний
сигнали ОК
ОК
ЦР
ys
es зs
_
us
xs
ys
145
Теорія оптимізації динамічних систем [9, 22, 57] для синтезу САК
пропонує використання інтегрально-квадратичної форми критерію якості,
оскільки така постановка задачі має загальний аналітичний розв‟язок:
f
f
t
TT
tf
T dtURUXQXXSXI02
1
2
1, (5.12)
тут, Sf, Q – вагові додатні напіввизначені матриці, R – вагова симетрична
додатна матриця, X – вектор стану ОК, U – вектор керування ОК, tf –
кінцевий момент часу. Термінальна складова критерію є квадратичною
нормою відхилення фактичного кінцевого стану ft
X від нульового
(заданого) із вагою Sf. Інтегральна складова критерію дозволяє оцінити
динамічну поведінку вектора стану X із вагою Q та вектора керування U із
вагою R.
Для одноконтурної цифрової САК, що зображена на рис. 5.15
дискретний аналог критерію якості (5.12) прийме вигляд:
1
0
22
2
1 Nt-
sss ureqTkvI , якщо 0
Ntsse , (5.13)
тут, q та r – вагові коефіцієнти, Nt – загальна кількість точок спостереження
перехідного процесу із кроком дискретизації dtNkTkv TkvNtt f ,
s – поточний індекс дискретного часу.
Проведемо аналіз критерію (5.13). Будемо розглядати ОК із
позитивним самовирівнюванням, оскільки більшість технологічних
апаратів мають такі властивості. Припустимо, що САК стійка та настройки
ЦР при зміні завдання САК (або відпрацювання збурення) забезпечують
виконання умови 0Ntsse sss узe . Таким, чином сума із першим
доданком критерію (5.13) з плином часу набуде сталого значення, оскільки
0Ntsse за умовою. Для компенсації розузгодження у кінцевий момент
часу 0Ntsse ЦР повинен перевести сигнал керування із початкового
стану 00
ssu (нульові початкові умови) у кінцеве 0Ntssu . Якщо
Nt та 0r , тоді
1
0
2Nt-
ssru , а критерій якості (5.13) втрачає сенс.
Іншим недоліком критерію (5.13) є інтегрування величин еs та us у одне
числове значення, які різні по своїй фізичні суті. Навіть, якщо нормувати
сигнали еs та us до одиничного значення, враховуючи вагові коефіцієнти q
та r, вага одиниці сигналу еs та us буде різною.
Щоб усунути перелічені недоліки критерію (5.13) пропонується
розглянути наступну інтегрально-квадратичну форму:
Nt
ssss KxзreqTkvI
0
22. (5.14)
146
Тут, K – коефіцієнт передачі ОК,
Ntss
s
x
yK
. У сумі із другим доданком
функціоналу (5.14) присутній сигнал керування хs, але цей сигнал
“масштабується до розмірності” сигналу еs. Для критерію (5.14), якщо
Nt та 0r сума із другим доданком
1
0
2Nt-
sss-Kxзr набуває сталого
значення, оскільки NtssNtss xKу
, а 0
NtsssNtss узe за умовою.
При цьому змінюється фізична суть доданку. Доданок 2sur критерію (5.13)
мінімізує значення сигналу керування із вагою r. Доданок
1
0
2Nt-
sss-Kxзr
критерію (5.14) мінімізує відхилення сигналу керування хs від технологічно
заданого значення із вагою доданку r.
Таким чином, для синтезу та дослідження динамічних характеристик
САК пропонується розглянути критерій якості:
Nt
ssss
Nt
ssss
.Nvr,KxзreqTkv
;Nvr,KxзreqTkv
I
0
22
0
2
1
(5.15)
Математичну модель ОК будемо визначати за методом, що
розглянутий в п.5.1.
Математична реалізація ПІ-Д та І-ПД закону керування дещо
відрізняється від ПІД. Відповідні рівняння для ПІ-Д, І-ПД та ПІД
регуляторів, що використовуються для промислових аналогових
регуляторів, в операторній формі мають вигляд [72, 75]:
py
pK
T
pTKpe
pTKpu
f
d
dr
i
r
1
11
, (5.16)
py
pK
T
pTKpe
pTKpu
f
d
dr
i
r
1
11
, (5.17)
pe
pK
T
pT
pTKpu
f
d
d
i
r
1
11 , (5.18)
де Kr, Ti, Td – параметри налагодження регулятора, (відповідно коефіцієнт
передачі, час інтегрування та час диференціювання); fK – коефіцієнт, що
147
визначає граничну частоту фільтра Д–складової регулятора 202...K f
[74], f
d
K
T – стала часу фільтра; p – оператор Лапласа.
Отримаємо кінцево–різницеві рівняння ЦР для розглянутих законів
керування. Спочатку розглянемо інтегральний член для (5.16) – (5.18):
pepT
pIi
1 . (5.19)
Перейдемо від зображення (5.19) до оригіналу:
t
i
dtteT
tI0
1. (5.20)
Використаємо метод лівих прямокутників для чисельного інтегрування
(5.20):
1
0
s
jj
i
s eT
TI (5.21)
Розглянемо диференційний член для ПІД регулятора (5.18) із
аперіодичним фільтром першого порядку:
pe
pK
T
pTpu
f
d
dd
1
. (5.22)
Перейдемо від зображення (5.22) до оригіналу:
dt
tedTtu
dt
tu
K
Tdd
d
f
d . (5.23)
Замінюючи диференціали у (5.23) скінченними різницями, перейдемо до
ґратчастого рівняння. Після спрощення отримаємо рекурентне рівняння для
визначення впливу Д–складової ПІД регулятора:
11 ssdsd,ds,d eebuau , (5.24)
тут TkvKT
Ta
fd
dd
,
fdd Kab . Із урахуванням сигналу sy залежність
(5.24) справедлива для (5.16) та (5.17).
Враховуючи (5.21), (5.24) дискретні аналоги рівнянь (5.16) – (5.18)
для ЦР приймуть вигляд:
11
1
0
ssdsd,dr
s
jj
i
srs yybuaKeT
TeKu , (5.25)
11
1
0
ssds,ddsr
s
jj
i
rs yybuayKeT
TKu , (5.26)
148
11
1
0ssdsd,d
s
jj
i
srs eebuaeT
TeKu . (5.27)
Як видно, на відміну від цифрового ПІД (5.27) закону керування, ПІ-
Д (5.25) та І-ПД (5.26) закони керування для формування керуючої дії крім
сигналу розузгодження еs використовують вихідний сигнал ОК уs, рис. 1.15.
Програмна реалізація розглянутих у даному пункті залежностей
аналогічна підходу, що описаний в п. 5.1. Масив перехідної характеристики
САК Hts:Coefl формується із кроком dt (як для аналогової САК), або з
кроком Tkv (для цифрової САК). Формування масиву перехідної
характеристики для аналогової САК реалізовано підпрограмою FormHtsA. procedure FormHtsA;
var z,s,Zd,La,L: integer;
x,y,yp,u,ud,udp,e,ep,sum,Ad,Bd: real;
Rs: CoefL;
begin
L:=round(Ht[-1]); dt:=Ht[L+1]; Tkv:=Nk*Dt; Rs:=Ht;
Ad:=Td/(Td+Kf*Tkv); Bd:=Ad*Kf;
Hts[-1]:=L; Hts[L+1]:=dt;
HtsX[-1]:=L; HtsX[L+1]:=dt;
for z:=Nk to L do Rs[z]:=Rs[z]-Ht[z-Nk];
if Tvs='Z' then begin Zd:=1; La:=0 end
else begin Zd:=0; La:=1 end;
for s:=0 to L do Hts[s]:=0; HtsX[0]:=0;
z:=1; I:=0; e:=0; sum:=0; ud:=0;
repeat
if z mod Nk = 0 then
begin
y:=Hts[z]; yp:=Hts[z-Nk];
ep:=e; e:=Zd-y;
sum:=sum+e*Tkv; udp:=ud;
case Nzr of
1: begin {PID}
ud:=Ad*udp+Bd*(e-ep);
u:=Kr*(e+sum/Ti+ud);
end;
2: begin {PI-D}
ud:=Ad*udp+Bd*(y-yp);
u:=Kr*(e+sum/Ti)-Kr*ud;
end;
3: begin {I-PD}
ud:=Ad*udp+Bd*(y-yp);
u:=Kr*sum/Ti-Kr*(y+ud);
end;
end;
x:=u+La;
for s:=0 to L-z do
149
Hts[z+s]:=Hts[z+s]+Rs[s]*x;
end;
HtsX[z]:=x;
if abs(e)>Ovr
then e:=Ovr
else
case Nvr of
1: I:=I+q*abs(e)+r*abs(Zd-K*x);
2: I:=I+q*sqr(e)+r*sqr(Zd-K*x);
3: I:=I+q*abs(e)+r*abs(x);
4: I:=I+q*sqr(e)+r*sqr(x);
end;
inc(z);
until (z>L) or (e=Ovr);
if e=Ovr
then
begin
for s:=z to L do
begin
Hts[s]:=0.5;
HtsX[s]:=0.5;
end;
Hts[601]:=Ovr;
end
else Hts[601]:=I*Dt;
end;
Варіант формування масиву перехідної характеристики для цифрової
САК (крок з часом dt*Nk:Tkv ) реалізовано процедурою FormHtsD. procedure FormHtsD;
var z,s,Zd,La,L: integer;
x,y,yp,u,ud,udp,e,ep,sum,Ad,Bd: real;
Rs: CoefL;
begin
L:=round(Ht[-1]); dt:=Ht[L+1]; Tkv:=Nk*Dt;
Nt:=L div Nk; Ad:=Td/(Td+Kf*Tkv); Bd:=Ad*Kf;
Hts[-1]:=Nt; Hts[Nt+1]:=Tkv;
HtsX[-1]:=Nt; HtsX[Nt+1]:=Tkv; Rs[0]:=Ht[0];
for z:=1 to Nt do Rs[z]:=Ht[z*Nk]-Ht[(z-1)*Nk];
for z:=0 to Nt do Hts[z]:=0;
if Tvs='Z' then begin Zd:=1; La:=0 end
else begin Zd:=0; La:=1 end;
z:=1; I:=0; e:=0; sum:=0; ud:=0;
repeat
y:=Hts[z]; yp:=Hts[z-1];
ep:=e; e:=Zd-y;
sum:=sum+e*Tkv; udp:=ud;
case Nzr of
1: begin {PID}
150
ud:=Ad*udp+Bd*(e-ep);
u:=Kr*(e+sum/Ti+ud);
end;
2: begin {PI-D}
ud:=Ad*udp+Bd*(y-yp);
u:=Kr*(e+sum/Ti)-Kr*ud;
end;
3: begin {I-PD}
ud:=Ad*udp+Bd*(y-yp);
u:=Kr*sum/Ti-Kr*(y+ud);
end;
end;
x:=u+La; HtsX[z]:=x;
for s:=0 to Nt-z do Hts[z+s]:=Hts[z+s]+Rs[s]*x;
if abs(e)>Ovr
then e:=Ovr
else
case Nvr of
1: I:=I+q*abs(e)+r*abs(Zd-K*x);
2: I:=I+q*sqr(e)+r*sqr(Zd-K*x);
3: I:=I+q*abs(e)+r*abs(x);
4: I:=I+q*sqr(e)+r*sqr(x);
end;
inc(z);
until (z>Nt) or (e=Ovr);
if e=Ovr
then
begin
for s:=z to L do
begin
Hts[s]:=0.5;
HtsX[s]:=0.5;
end;
Hts[601]:=Ovr;
end
else Hts[601]:=I*Tkv;
end;
Вибір того чи іншого варіанта формування масиву Hts реалізується
підпрограмою FormHts (див. п.5.1). Програмна реалізація підпрограм для
оптимізації САК залишилася незмінною та описана в п.5.2 – п.5.5. Лістинг
основної програми аналогічний п.5.6 (див. Додаток 12).
Приклад дослідження цифрової САК із використанням розробленої
програми продемонстровано нижче. Щоб підкреслити універсальність
методу оптимізації в якості математичної моделі ОК було взято перехідну
характеристику представлену на рис. 5.16, якій відповідає передатна
функція:
τpOK e
pTpT
KpW
11 21
. (5.28)
151
Рис. 5.16. Перехідна характеристика ОК
Динамічні властивості ОК вибрано довільно без прив‟язки до конкретного
технологічного апарату: К=1,2; Т1=1; Т2=5; 3τ . З цих причин динамічні
властивості ОК та налаштування ЦР представляються без розмірностей.
На рис. 5.17. представлені результати моделювання рельєфу поверхні
для критерію (5.15) в координатах ir ,TKfI із цифровим ПІ
регулятором (Td=0, Tkv=1) за каналом ss yз . Рельєфи поверхні показника
якості І для САК із І-П регулятором мають схожі зображення.
Рис. 5.17. Рельєфи поверхні показника якості ir ,TKfI для ПІ
регулятора за каналом ss yз (Nvr=1, q=1, r=1)
Криві 1 - 4, що зображені на рис. 5.18, представляють залежності
оптимальних налагоджувань Kr та Ti від диференційної складової Td (Kf=5)
для модифікацій ПІД регулятора. Крива 1 характеризує САК із І-ПД
152
регулятором за каналом ss yз , 2 – із ПІ-Д регулятором за каналом
ss yз , 3 – із ПІД регулятором за каналом ss yз , крива 4 характеризує
САК за каналом ss yλ для усіх розглянутих модифікацій ПІД регулятора.
Аналізуючи криву 4 (рис. 5.18), можна зробити висновок, що оптимальні
настройки ЦР для законів керування (5.25) – (5.27) за каналом ss yλ
мають однакове значення. Справді, якщо sss yзe , то при зs=0
залежності (5.25) – (5.27) стають тотожними.
a)
б)
Рис. 5.18. Показник якості І для модифікацій ПІД регулятора за
каналами ss yз та ss yλ : а – модульний критерій
якості (Nvr=1, q=1, r=1); б – квадратичний критерій
якості (Nvr=2, q=1, r=1)
153
Оптимізація САК проводилося для різних співвідношень 21 TT та
max21,TTτ ОК. За результатами можна стверджувати, що маємо справу із
одноекстремальним функціоналом при оптимізації САК.
Основний алгоритм комп‟ютерної оптимізації САК реалізовано
відповідно до методу Хука-Дживса (див. п.5.5). Такий підхід потребує
значно менші ресурси на обчислення та скорочується час пошуку. Основою
для алгоритму оптимізації цифрової САК за методом Хука-Дживса є
залежності (5.15), (5.7), (5.25) – (5.27). Коротко прокоментуємо
запропонований алгоритм оптимізації САК.
1. Задається перехідна характеристика ОК h(t). Задаються: параметри
критерію (5.15); крок дискретизації Nk для вибору періоду дискретизації
Tkv цифрової САК; тип закону керування; початкові значення
параметрів ЦР Kr, Ti, Td та величина кроку їх зміни Dk, Di, Dd; Kf –
коефіцієнт диференційного фільтра; Ovr – максимальне значення
вихідного сигналу, що обмежує область пошуку параметрів ЦР в межах
стійкої САК.
2. Підпрограмою FormHtsD (або FormHtsА для аналогової САК)
використовуючи (5.7) та (5.25) – (5.27) (в залежності від вибраного
закону керування) чисельно розраховується перехідний процес у САК.
Для отриманої перехідної характеристика САК визначається значення
критерію якості І за залежністю (5.15). Не виключено, що під час
комп‟ютерної оптимізації САК може виявитись нестійкою. Умова
abs(Hts[z])>Ovr під час розрахунків дозволяє перевірити стійкість
системи керування із заданими параметрами регулятора. У випадку
нестійкої САК показник якості не обчислюється.
3. Змінюючи приріст параметрів налагодження ЦР Kr±Dk, Ti±Di, Td±Dd
визначається напрям уздовж якого функціонал цілі І найбільше
зменшується. Для знайденого напрямку продовжуємо виконувати кроки
пошуку, доки не буде отримано мінімальне значення І для даного
напрямку (процедура OptSt, див. п.5.5). Якщо за знайденим напрямком
критерій (5.15) мінімізований, переходять до пошуку нового напряму
уздовж якого функціонал цілі І зменшується найбільше.
4. У випадку, якщо пошук нового напрямку не дав позитивного результату
– робота завершується.
Представлений алгоритм є спрощеною модифікацією методу Хука-
Дживса. Тут кроки приросту параметрів налагодження ЦР Dk, Di, Dd
постійні. Вони визначають точність із якою оптимізуються параметри ЦР.
Програмна реалізація алгоритму підтвердила ефективність такого підходу.
154
Розглянемо вплив параметрів критерію (5.15) на результат
оптимізації цифрової САК. Для спрощення, в усіх подальших дослідженнях
використано математичну модель ОК, якій відповідає передатна функція
(5.28). Щоб інформаційно не перевантажувати дослідження, оптимальні
значення налаштувань ЦР представляти не будемо (зрозуміло, що вони
існують та вони – єдині) – для нас головне чисельні значення критерію та
вид перехідних характеристик, що забезпечує ЦР. Для усіх досліджень
період дискретизації САК Tkv=1, коефіцієнт диференційного фільтра ЦР
Kf=5.
На рис. 5.19 представлено результати моделювання оптимальної САК
за каналом ss yз для ПІД регулятора. Для запропонованого критерію (4)
вагові коефіцієнти r та q ефективно впливають на результат оптимізації.
Для граничних випадків мінімізується: 1) модуль (Nvr=1) або квадрат
(Nvr=2) сигналу розузгодження, якщо r=0; 2) модуль (Nvr=1) або квадрат
(Nvr=2) сигналу керування, якщо q=0. Оптимізація САК за
середньоквадратичним сигналом розузгодження (Nvr=2, r=0) забезпечує
підвищену схильність до коливань перехідного процесу у порівняні із
модульним критерієм (Nvr=1, r=0). Також не слід забувати, що критерій
(5.15) в залежності від вибраних вагових коефіцієнтів q та r мінімізує
співвідношення площ для кривих xs та ys перехідного про процесу САК. З
цих причин, скажімо, числові значення критерію якості (5.15) для кривих 2
та 3 (рис. 4, а) порівнювати між собою некоректно.
155
a)
б)
Рис. 5.19. Оптимізація САК із ПІД регулятором за каналом ss yз :
а – модульний критерій (Nvr=1); б – квадратичний критерій (Nvr=2)
156
Як було показано на рис. 5.19, крива 4 характеризує настройки ЦР
для розглянутих модифікацій ПІД закону керування за каналом ss yλ ,
оскільки залежності (5.25) – (5.27) стають тотожними, якщо зs=0
sss yзe . На рис. 5.20 представлено результати оптимізації САК за
каналом ss yλ (Nvr=1, q=1, r=1). Крива 1 забезпечила оптимальний
показник якості Іо=14,24 (настройки ЦР: Kr=0,92; Ti=4,77; Td=1,71; Kf=5;
Tkv=1). За каналом ss yз отримані настройки ЦР забезпечують перехідні
процеси у САК: крива 2 для ПІ-Д закону керування, крива 3 для І-ПД
закону керування, крива 4 для ПІД закону керування. Незважаючи на те,
що за каналом ss yз числові значення критерію якості для модифікацій
ПІД закону керування близькі, І-ПД закон керування забезпечує мінімальне
перерегулювання перехідного процесу. Отже, у випадку оптимізації САК за
каналом ss yλ І-ПД закон керування забезпечує найкращу динаміку
САК.
Рис. 5.20. Оптимізація САК за каналом ss yλ
Наступна серія перехідних процесів у системі керування
представлена на рис. 5.21. Тут САК оптимізується за каналом ss yз
(Nvr=1, q=1, r=1). Крива 1 відповідає за оптимальний перехідний процес із
ПІД регулятором (настройки: Kr=0,58; Ti=5,61; Td=0,94; Kf=5; Tkv=1). Крива
2 представляє перехідний процес за каналом ss yλ із даними
настройками ПІД регулятора. Крива 3 характеризує оптимальний
перехідний процес із ПІ-Д регулятором (настройки ЦР: Kr=0,62; Ti=6,01;
Td=1,04; Kf=5; Tkv=1). Крива 4 представляє перехідний процес за каналом
ss yλ із ПІ-Д регулятором. І відповідно, крива 5 представляє
оптимальний перехідний процес із І-ДП регулятором (настройки ЦР: Kr=1;
Ti=5,15; Td=1,53; Kf=5; Tkv=1), а крива 6 характеризує перехідний процес у
157
системі керування за каналом ss yλ із І-ДП регулятором. Із
представлених графіків, видно, що ПІД та ПІ-Д регулятори забезпечують
найкращу динаміку САК за каналом ss yз , проте збурення компенсують
не так ефективно як І-ПД регулятор. Динаміка САК із ПІ-Д регулятором
близька до динаміки САК із ПІД регулятором. Найгірша динаміка за
каналом ss yз у САК із І-ПД регулятор, проте компенсація збурення
відпрацьовується найкраще.
Рис. 5.21. Оптимізація САК за каналом ss yз
Важливим параметром для практичного проектування цифрових САК
є неідеальність диференційної складової ЦР Kf. Якщо в аналогових
регуляторах цей параметр був присутній як прояв конструктивної
обмеженості, то для ЦР даний параметр навмисно програмується для
фільтрації високочастотних збурень. Розглянемо вплив неідеальності
реалізації Д–складової в ПІД регуляторі на значення оптимальних
настройок та результат оптимізації. На рис. 5.22 представлені перехідні
процеси у САК за каналом ss yз для критерію якості (5.15). Крива 1
(рис. 5.22, а) – оптимальна перехідна характеристика САК, знайдена при
використанні ідеального ПІД регулятора (настройки ЦР: Kr=0,84; Ti=5,47;
Td=1,87; Kf=10000; Тkv=1). Якщо врахувати неідеальність ПІД регулятора, а
саме прийняти, що Kf=2, то при даних настройках регулятора матимемо
перехідну характеристику, показану кривою 2 (рис. 5.22, а). Криві 1 та 2
відрізняються своєю динамікою. В даному випадку неідеальність
регулятора погіршує функціонування системи керування. Повторимо
пошук оптимальної настройки із урахуванням неідеальності регулятора.
Отримаємо оптимальний ЦР: Kr=0,76; Ti=5,61; Td=1,51; Kf=2; Тkv=1; та
криву 3 в як оптимальну перехідну характеристику САК. Крива 3
158
відрізняється від кривої 1 але значно менше ніж крива 2. На рис. 5.22, б
представлені перехідні процеси для досліду, який аналогічний
попередньому із мінімізацією функціоналу (5.15) (Nvr=1, q=1, r=1). Криві 1
– 3 (рис. 5.22, б) суттєво не відрізняються. Очевидно, що при пошуку
оптимальної настройки ЦР необхідно звернути увагу на параметр Kf ЦР,
значення якого визначається зашумленістю корисного сигналу датчика.
a)
б)
Рис. 5.22. Вплив Kf на оптимальні перехідні процеси у САК за каналом
ss yз : а – модульний критерій якості (Nvr=1, q=1, r=0);
б – модульний критерій якості (Nvr=1, q=1, r=1)
Наступна серія досліджень демонструє вплив критеріїв (5.13) та
(5.14) якість оптимізації САК із цифровим ПІ регулятором. Динамічні
властивості ОК (5.28) залишилися без зміни. На рис. 5.23 представлені
рельєфи поверхні показників якості (5.13) та (5.14) для ПІ регулятора та
відповідні перехідні процеси у САК за каналом ss yз . Як видно із
159
графіків (рис. 5.23, в) оптимізація САК за критерієм (5.13) призводить до
синтезу ПІ регулятора, який наближається до П регулятора та намагається
знайти “золоту середину” між мінімізацією сигналу розузгодження еs та
сигналом керування us. При цьому, числове значення критерію Io=27,4
досить умовне враховуючи, що чисельне інтегрування критерію
проводилося до Nt=50. Із збільшенням часу спостереження перехідного
процесу САК – числове значення (5.13) зростатиме, що свідчить про його
некоректність. Система ізоліній (рис. 5.23, а) для
а)
б)
в)
г)
Рис. 5.23. Оптимізація САК із цифровим ПІ регулятором за каналом ss yз :
а – рельєф поверхні показника якості (5.13);
б – рельєф поверхні показника якості (5.14);
в – перехідний процес у САК для показника якості (5.13) q=1, r=1;
г – перехідний процес у САК для показника якості (5.14) q=1, r=1
критерію (5.13) показує, що оптимум знаходиться на межі заданої області
параметрів ПІ регулятора, тобто ПІ регулятор прямує до П закону
керування, якщо збільшити область дослідження. Для більшості САК
160
синтез П регулятора неприйнятний. На відміну від критерію (5.13) у
показників якості (5.14) та (5.15) перелічені недоліки відсутні (див. рис.
5.23, б, г).
Запропонований показник якості (5.15) та алгоритм оптимізації
цифрових САК є ефективним для синтезу ПІ-Д, І-ДП та ПІД регуляторів із
урахуванням неідеальності диференційної складової закону керування.
Алгоритм оптимізації відкриває можливість синтезу ЦР без етапу
апроксимації динамічних властивостей ОК, що дозволяє зменшити похибку
моделювання САК за рахунок виключення етапу апроксимації. Синтез
САК за критерієм якості (5.15) відноситься до одноекстремальних задач
оптимізації. Представлений алгоритм оптимізації САК можна
використовувати на верхньому рівні супервізорних систем керування в
якості порадника налаштувань ЦР із ПІД модифікаціями закону керування.
Важливу роль для синтезу оптимальної САК відіграє коректний вибір
каналу впливу, що визначається вимогами технологічного процесу. Як
показали дослідження, якщо система керування є стабілізуюча і її
основним завданням є компенсація збурюючих факторів – у цьому разі слід
використовувати І-ДП закон регулювання. У випадку коли САК
відпрацьовує програмну зміну завдання, ПІД закон регулювання забезпечує
кращі динамічні характеристики системи керування. ПІ-Д закон керування
за своїми динамічними властивостями у САК наближається до ПІД закону
керування. На випадок коли САК повинна компенсувати збурюючі фактори
та відпрацьовувати програмну зміну завдання, важко дати коректні
рекомендації, так як це залежить від частоти факторів впливу за каналом
зміни завдання та збурення, що визначається технологічним процесом. З
цих причин зупинитись на якійсь конкретній модифікації ПІД закону
регулювання важко без додаткових умов, що характеризують протікання
технологічного процесу.
5.8. Часткова компенсація збурення шляхом введення
інформації про нього на регулятор
Реалізації ідеї інваріантності САК відносно збурення s часто
наштовхується на проблеми ідентифікації каналів ОК та забезпечення умов
інваріантності, зокрема умов фізичної реалізовності відносно пристрою
вводу (ПВ) [44, 69].
Оцінимо можливості такого способу покращення якості стабілізації
регульованої величини шляхом комп‟ютерної оптимізації САК, показаної
на рис. 5.24.
161
Рис. 5.24. Структурна схема САК із введенням в регулятор
інформації про збурення s
Як видно із схеми рис. 5.24 – сигнал збурення s подається на
елемент порівняння регулятора через ПВ. Припустимо, що ПВ описується
передатною функцією у вигляді реальної диференціальної ланки
.
1
pK
T
pTpW
f
v
vПВ (5.29)
Тут Tv – час диференціювання ПВ, fK – конструкторський параметр, що
визначає граничну частоту фільтра Д – складової (див. п. 5.7), будемо
вважати його фіксованим, наприклад, 5fK .
Передатній функції (5.29) відповідає диференційне рівняння
dt
tdyTtu
dt
tdu
K
Tvv
v
f
v 1 . (5.30)
Замінюючи диференціали у (5.30) скінченними різницями, перейдемо до
ґратчастого рівняння. Після спрощення отримаємо рекурентне рівняння для
визначення впливу Д – складової ПВ:
1,1,11 ssvsv,vs,v yybuau , (5.31)
де TkvKT
Ta
fv
vv
,
fvv Kab .
Вибір залежності (5.29) для ПВ обумовлений наступними
міркуваннями. Вихід uv,s ПВ інформації про збурення s додається до
вихідного сигналу ОК y2,s . Отже, сигнал похибки регулятора
svsss uyзe , . В усталеному режимі за умови, що регулятор у своєму
законі має інтегральну складову матимемо 0* e (тут і далі індексом *
позначатимемо усталені значення змінних). Тим самим *y в усталеному
режимі змінюватиметься на *vu , що небажано. Використання аперіодичних
фільтрів в якості ПВ неприпустимо, враховуючи здатність таких ланок
приймати стале значення вихідного сигналу constuv *
для статичного
OK еs
ЦР
ПВ
зs ys
-
uv,s
us
- W2(р)
W1(р)
162
режиму, за рахунок чого у завдання САК буде вноситися статична
помилка. Усунути цей недолік можна шляхом диференціювання в ПВ
сигналу збурення s . Методи теорії інваріантності для таких випадків
рекомендують використання диференційних ланок високого порядку, які
відмінно компенсують нулі та полюси передатної функції каналу збурення
W2(p). Проте, така компенсація навряд чи можлива для реальних ОК. По-
перше, виникає проблема фізичної реалізованості, якщо в каналі збурення
присутнє транспортне запізнення. По-друге, коректно математично описати
“швидкодіючі” змінні ОК досить складно, враховуючи їх фізичну суть та їх
мінливість в процесі роботи технологічного обладнання, а некоректна
математична модель нанівець зведе компенсаційні дії ПВ із диференційним
фільтром високого порядку. По-третє, в роботі реальних САК присутні
високочастотні збурення в каналах вимірювання, які будуть підсилюватися
ПВ і вносити додаткові завади в роботу ЦР.
Приймемо, що математична модель ЦР реалізує модифікації ПІД
законів керування із реальною диференційною складовою, залежності
(5.25) – (5.27) див. п. 5.7:
;3,
;2,
;1,
11
1
0
11
1
0
11
1
0
NzryybuayKeT
TK
NzryybuaKeT
TeK
NzreebuaeT
TeK
u
ssds,ddsr
s
jj
i
r
ssdsd,dr
s
jj
i
sr
ssdsd,d
s
jj
i
sr
s
(5.32)
де Nzr=1 для ПІД регулятора, Nzr=2 для ПІ-Д регулятора та Nzr=3 для І-ПД
регулятора.
ОК представляється передатними функціями:
1
1
11
pe
pA
pBpW
(5.33)
для каналу регулювання та
2
2
22
pe
pA
pBpW
(5.34)
для каналу збурення. Для залежностей (5.33) – (5.34) існують перехідні
характеристики ОК h1(t) та h2(t), які будуть слугувати математичною
моделлю ОК для чисельного визначення реакції САК на сигнал керування
us та збурення s за алгоритмом, що описаний в п. 5.1. Передатні функції
ОК W1(p) та W2(p) використовуються у відлагоджувальній програмі
DemOptVs для чисельного визначення перехідних характеристик ОК h1(t)
та h2(t). За організацію масивів перехідних характеристик ОК Ht1:Coefl
та Ht2:Coefl відповідає процедура FormHt. Для її обслуговування
використовується підпрограма InpOb (див. Додаток 13).
163
Формування масиву перехідної характеристики САК Hts:Coefl
реалізується підпрограмою FormHts, яка міститься у програмному модулі
OptCompV (Додаток 14). У своїй роботі FormHts використовує
процедуру FormHtsA для формування масиву перехідної характеристики
аналогової САК із кроком dt та процедуру FormHtsD для формування
масиву перехідної характеристики цифрової САК із кроком Tkv. У
підпрограмах FormHtsA та FormHtsD реалізовано рекурентні
співвідношення (5.31) та (5.32).
Автоматичний пошук оптимальної комбінації налагоджувальних
параметрів регулятора та ПВ за умови мінімізації критерію якості (5.15)
виконує процедура OptSt. Алгоритм оптимізації із стартової точки
описаний в п. 5.5. У даному випадку оптимізації підлягають чотири
параметри САК: Kr, Ti, Td, Tv. Величини кроків варіювання Dk (для Kr),
Di (для Ti), Dd (для Td та Tv), а також вибір параметрів варіювання Ddk
(для Kr), Ddi (для Ti), Ddd (для Td) та Dtv (для Tv) проводиться
процедурою Diffs. Задання координат стартової точки пошуку та, власне,
сам пошук оптимального налагодження САК виконується у процедурі
DemOpt.
Демонстрація графіків перехідних характеристик САК при різних
комбінаціях налагоджування параметрів регулятора та ПВ реалізовано
процедурою Nastr. В процедурі Nastr можна співставити графіки
перехідних характеристик при різних параметрах САК (при варіюванні
Nvr, Nzr, r, q, K, при пошуку із різних стартових точок, з різними
кроками пошуку і т.п.).
Приклад роботи програми DemOptVs продемонстровано нижче. Для
математичної моделі ОК було взято наступні передатні функції каналів
регулювання та збурення:
pepp
pW 5
21185
1
,
185
15.022
pppW (5.35, 5.36)
Динамічні властивості ОК вибрано довільно без прив‟язки до конкретного
технологічного апарату, тому надалі налаштування ЦР представляються
без розмірностей.
Оптимізація САК розглядалася за каналом ss y . Проводити
оптимізацію САК із ПВ за каналом ss yз немає сенсу, так як для даного
каналу 0s , відповідно ПВ не приймає участі в роботі системи
керування. Оптимізація проводилася за критерієм якості (5.15) (Nvr=1, q=1,
r=0) для цифрового ПІД регулятора, хоча це не принципово. У п. 5.7 було
показано, що за каналом збурення ss y ПІД, ПІ-Д та І-ПД закони
регулювання рівноцінні. Результати моделювання представлено на рис.
5.25. Як видно із графіків, використання ПІД регулятора та ПВ (графік 4)
дозволяє найкраще компенсувати вплив збурення. Проте робити глобальні
висновки за даними результатами недоцільно. Доцільність використання
164
ПВ із ПІД регулятором (а можливо і ПІ регулятором) визначається за
динамічними властивостями каналів збурення та регулювання ОК,
відношенням їх транспортного запізнення до акумулюючої здатності.
Розглянутий алгоритм оптимізації дозволяє дати коректні рекомендації для
конкретного ОК із відомими динамічними властивостями.
Програмне забезпечення, що представлено у Додатках 13 та 14, надає
користувачеві можливість оцінки впливів вищезгаданих параметрів та їх
комбінацій на якість оптимізації САК, а також дозволяє вибрати кращі
варіанти серед кращих.
Рис. 5.25. Оптимізація САК за каналом ss y (Tkv=1, Kf=5).
1 – ПІ регулятор: Kr=1,2; Ti=9,9;
2 – ПІД регулятор: Kr=1,3; Ti=6,7; Td=2,6;
3 – ПІ + ПВ: Kr=1,05; Ti=7; Tv=0,5;
4 – ПІД + ПВ: Kr=1; Ti=5,3; Td=1,3; Tv=0,5
5.9. Оптимізація систем керування із проміжними
імпульсними сигналами
В технологічних системах окремі елементи часто з‟єднуються
послідовно, так що збурення, яке діє на певний елемент схеми, може
доходити до точки контролю (регульованої величини) зі значним
транспортним та (або) ємкісним запізненням. Ця обставина може суттєво
ускладнити своєчасну та якісну компенсацію такого (як правило,
небажаного) збурюючого чинника (втрата темпу – як кажуть шахісти).
Одним із засобів боротьби з подібним ефектом є каскадна схема САК.
Другий підхід – використання упереджуючої інформації з точки схеми, яка
ближче до місця дії збурення, а, отже, і реагує на це збурення швидше ніж
регульована величина. Схематично це може виглядати, як зображено на
рис. 5.26, а.
165
Рис. 5.26. Структурна схема САК із проміжним імпульсним сигналом
На схемі (рис. 26, а) показано, що ОК складається із двох
технологічних ланок: ОК1 та ОК2. Це може бути один технологічний
апарат, або технологічна система із двох апаратів, які з‟єднані послідовно.
ОК має два вихідних сигнали – проміжний y1,s та y2,s основний, що
регулюється. Також, на схемі присутній пристрій вводу (ПВ) інформації
про проміжну величину y1,s. Структурну схему рис. 5.26, а можна
представити, як показано на рис. 5.24, б. У цьому випадку “приведений”
ОК складається із двох каналів впливу W1 та W2. Інерційність каналу W1
містить динамічні властивості ОК1 а канал W2 включає в себе динамічні
характеристики ОК1 та ОК2. Зрозуміло, що інерційність каналу W1 повинна
бути меншою за інерційність каналу W2, інакше використання ПВ
недоцільне за рахунок “втрати цінності інформації” в сигналі y1,s.
Вихід uv,s ПВ проміжної величини y1,s додається до вихідного сигналу
ОК y2,s . Отже, сигнал похибки регулятора svsss uyзe ,,2 . В усталеному
режимі за умови, що регулятор у своєму законі має інтегральну складову
матимемо 0* e . Тим самим *2y в усталеному режимі змінюватиметься на
*vu , що небажано. Усунути цей недолік можна шляхом диференціювання в
ПВ проміжної величини y1,s. Приймемо, що ПВ – реальна диференціальна
ланка з передатною функцією
еs
OK1
ЦР
ПВ
OK2 зs y2,s y1,s
-
uv,s
us
a)
xs
-
еs OK
ЦР
ПВ
зs y2,s
y1,s -
uv,s
us
б)
xs
-
W2(р) W1(р)
166
1
pK
T
pTpW
f
v
vПВ . (5.37)
Тут Tv – час диференціювання ПВ, fK – конструкторський параметр, що
визначає граничну частоту фільтра Д – складової (див. п. 5.7), будемо
вважати його фіксованим ( 5fK ).
Усталене значення *vu на виході ПВ з передатною функцією (5.37)
буде нульовим, отже, ПІД регулятор відпрацьовуватиме завдання зs без
похибки в усталеному режимі.
Передатній функції ПВ (5.37) відповідає рекурентне рівняння (п. 5.8):
1,1,11 ssvsv,vs,v yybuau . (5.38)
Приймемо, що математична модель ЦР реалізує модифікації ПІД
законів керування із реальною диференційною складовою залежність
(5.32).
ОК представляється передатними функціями:
1
1
11
pe
pA
pBpW
,
2
2
22
pe
pA
pBpW
(5.39, 5.40)
для основного каналу регулювання. Передатним функціям W1(p) та W2(p)
відповідають перехідні характеристики ОК h1(t) та h2(t), які
використовуються для чисельного визначення реакції САК на суму
сигналів керування us та збурення s sss ux . Алгоритмізація
програмного забезпечення для даної САК аналогічна підходу, що
розглянутий у попередньому пункті. Більше того, основна програма
DemOptVs (див. Додаток 13) залишилася незмінною. Програмний підхід до
визначення масивів перехідних характеристик ОК Ht1:Coefl та
Ht2:Coefl теж не змінився. Відмінність програмного забезпечення
полягає у реалізації формування масиву перехідної характеристики САК
Hts:Coefl відповідно до структурної схеми рис. 5.26, б. Підпрограмою
FormHtsА реалізується формування масиву перехідної характеристики
для аналогової САК із кроком dt а підпрограма FormHtsD
використовується для формування масиву перехідної характеристики
цифрової САК із кроком Tkv. Процедури FormHtsА та FormHtsD
включені до програмного модулю OptImpVs, який можна розглянути у
Додатку 15. Критерій оптимізації САК (5.15) та алгоритм оптимізації
увійшли до модулю OptImpVs без змін стосовно попереднього параграфу.
Приклад роботи програми DemOptVs для оптимізації САК із ПВ
відповідно до структурної схеми рис. 5.26, б продемонстровано нижче.
Математичну модель ОК представлено передатними функціями для
допоміжного та основного каналів регулювання:
167
14
11
ppW , pe
pppW 5
221816
1
(5.41, 5.42)
Динамічні властивості ОК вибрано довільно без прив‟язки до конкретного
апарату, тому налаштування ЦР представляються без розмірностей.
Оптимізація САК проводилася для цифрового ПІД-регулятора за
каналами регулювання рис. 5.27 та збурення рис. 5.28. Як критерій
оптимізації використовувалася залежність (5.15) (Nvr=1, q=1, r=0). Як
видно із графіків рис. 5.27, використання ПВ за каналом ss yз суттєвого
покращення перехідних процесів (у порівнянні із класичною структурою
САК) не отримано. ПВ вніс додаткову високочастотну коливніть у
перехідні процеси. Проте за каналом збурення (рис. 5.28) – використання
ПВ доцільне. У даному параграфі не ставилося завдання дати конкретні
рекомендації для використання ПВ. Як уже говорилося у п. 5.8 доцільність
використання ПВ із ПІД регулятором (а можливо і ПІ регулятором)
визначається динамічними властивостями каналів впливу ОК (основного та
допоміжного), відношенням їх транспортного запізнення до акумулюючої
здатності.
Програмне забезпечення, що представлено у Додатках 13 та 15, надає
можливість користувачеві оцінки впливів вищезгаданих параметрів та їх
комбінацій на якість оптимізації САК, а також дозволяє вибрати кращі
варіанти серед кращих.
Рис. 5.27. Оптимізація САК за каналом ss yз (Tkv=1, Kf=5).
1 – ПІ регулятор: Kr=0,65; Ti=8,9;
2 – ПІД регулятор: Kr=0,8; Ti=7,5; Td=3,2;
3 – ПІ + ПВ: Kr=1,5; Ti=11,2; Tv=4,6;
4 – ПІД + ПВ: Kr=0,95; Ti=8,1; Td=3,4; Tv=1,3
168
Рис. 5.28. Оптимізація САК за каналом ss y (Tkv=1, Kf=5).
1 – ПІ регулятор: Kr=0,9; Ti=9,8;
2 – ПІД регулятор: Kr=1; Ti=6,8; Td=3,8;
3 – ПІ + ПВ: Kr=0,4; Ti=0,6; Tv=8,5;
4 – ПІД + ПВ: Kr=0,3; Ti=0,4; Td=1,2; Tv=10,1
5.10. Оптимізація каскадної системи автоматичного керування
Досі ми розглядали САК, де в процесі оптимізації варіюються 2, 3 або 4
параметри (Kr, Ti, Td, Tv). При збільшенні кількості таких параметрів час
пошуку оптимуму прогресивно збільшується, що може суттєво
ускладнювати процес оптимізації. Як один із способів прискорення
процесу пошуку можна йти до оптимуму варіюючи частину параметрів,
після чого добавляти нові параметри, але вже стартуючи із щойно
попередньо визначених позицій, які, хочеться сподіватись, значно ближчі
до шуканих, ніж ті, які задавались довільним чином (навмання). Такий
підхід є виправданим за умови існування єдиного оптимуму. Таке
припущення уявляється імовірним. На крайній випадок це припущення
можна перевірити, стартуючи з різних точок та порівнюючи отримані
результати. Для прикладу розглянемо алгоритм оптимізації системи,
розрахункова схема якої показана на рис. 5.29. Це варіант так званої
каскадної схеми. Два регулятори Р1 (стабілізуючий) та Р2 (коригуючий)
утворюють каскад, коли Р1 виконує функцію стабілізації проміжної
регульованої величини y1, тоді як Р2 коригує його роботу, задаючи йому в
якості завдання сигнал х2, який формується “в інтересах” стабілізації
основної регульованої величини y2.
169
a)
б)
Рис. 5.29. Схема каскадної САК, при W1(p)=W3(p) та W2(p)=W4(p)
схема а перетворюється на б
Подібна схема має сенс тоді, коли стабілізація y1 покращує якість
підтримання на заданому рівні величини y2, у першу чергу, за рахунок
своєчасної компенсації (нехай навіть часткової) впливу зовнішнього
збурення . Це особливо ефективно, коли інерційність (щось на зразок
очікуваної тривалості перехідних процесів) в контурі стабілізації значно
менша, ніж інерційність контуру корекції. В ідеалі контур стабілізації мав
би компенсувати дію збурення ще до того, коли “хвиля збурення
докотиться” до y2. На практиці ж усі елементи даної системи утворюють
єдине динамічне ціле і оптимізувати доводиться систему в цілому. А коли
регулятори Р1 і Р2 реалізують, наприклад, ПІД закони регулювання, то
оптимізувати систему доводиться варіюючи 6 параметрів: Kr1, Ti1, Td1 для
стабілізуючого та Kr2, Ti2, Td2 – для коригуючого.
Конкретизуємо ціль оптимізації. Частіше усього оптимізують
реакцію (перехідну характеристику) каналу “завдання регулятору – вихід
ОК”. По-перше – так простіше. Завдання регулятору задаємо ми самі, тоді
як збурення приходять самі (коли їм заманеться і які заманеться). Окрім
характеристик збурення треба знати канал, через який вони
“прориваються” на регульовану величину. На схемі рис. 5.24 а) –
проходить по двох каналах, де W3(р) – передатна функція каналу 1y та
W4(р) для 2y , тоді, як регулюючий вплив х1 іде відповідно через канал
ОК
Р1
y2
e1 х2
_
x1
Р2 e2 з
_
W3(p)
W1(p)
W4(p)
W2(p)
Р1
y2
e1 х2
_
x1
Р2 e2 з
_
W1(p)
W2(p)
170
W1(р) на y1 то W2(р) – на y2. Треба враховувати, що усі чотири канали
належать одному і тому ж ОК. Отже, задавати їх незалежно один від одного
неправомірно, оскільки кожен з них несе інформацію спільну для ОК в
цілому (наприклад, у вигляді спільного знаменника передатної функції,
тоді, як чисельники відтворюють особливості кожного із каналів). Не
вдаючись зараз в деталі цієї проблеми, ми просто звертаємо увагу читача на
цю обставину. В ідеалі було б бажано оперувати з моделлю ОК у вигляді
системи диференціальних рівнянь, яку ми могли б в процесі розрахунку
перехідних процесів САК інтегрувати, наприклад, числовими методами.
Розраховувати на варіант дослідження такої САК аналітичними методами –
неконструктивно.
Для демонстраційно-відлагоджувальної програми (де
відлагоджується алгоритм оптимізації) приймемо, що канали ОК
описуються передатними функціями такої структури:
z
z
n
z
pz
zpT
eKpW
1
, (5.43)
де 41 z .
Тоді початкова інформація про динамічні властивості ОК може бути
задана у формі масиву:
Pob s=1 2 3 4
j=1 K1 T1 n1 1
2 K2 T2 n2 2
3 K3 T3 n3 3
4 K4 T4 n4 4
У подальшому для кожного з каналів об‟єкта формується масив
ординат його перехідної характеристики (реакції на одиничний ступінчатий
сигнал t1 за нульових початкових умов). Сукупність таких масивів
утворює масив Mht=array[1..4] of Coefl, який має таку структуру:
Mht -1 0 1 2 … L L+1 … 601
Z=1 L h[1,0] h[1,1] h[1,2] … h[1,L] dt
2 L h[2,0] h[2,1] h[2,2] … h[2,L] dt
3 L h[3,0] h[3,1] h[3,2] … h[3,L] dt
4 L h[4,0] h[4,1] h[4,2] … h[4,L] dt
Розрахунок перехідних процесів в системі будемо виконувати з
використанням масиву Mht (через інтеграл згортки для кожного з каналів
зокрема [15, 17]). Масив Mht формується процедурою FormMht. Дана
процедура є демонстраційною і формує масив перехідних характеристик
Mht за передатною функцією ОК (5.43). У випадку, якщо динамічні
властивості ОК за кожним із каналів задані масивом ординат перехідної
характеристики – процедура FormMht не використовується. Лістинг
171
програми KascOpt де використовуються підпрограми даного пункту
наведено у Додатку 16.
В якості регуляторів, як ми вже вище згадували, розглянемо
реалізацію ПІД законів керування.
Процедура FormHts – формує масив Hts:Coefl ординат
перехідної характеристики системи керування (вхід з або λ , вихід – y2).
Одночасно обчислюється значення якості показника І, яке повертається в
Hts[601]. Як критерій оптимізації САК використано інтегральний
показник (5.10).
“Ручний” пошук оптимуму, так би мовити, “пристрілку” можна
виконати у процедурі типу Nastr (див. п.5.2), що стосовно до нашої задачі
може мати меню: '0-ex,1–Param,2–Kr1,3–Ti1,4-Td1,5–Kr2,6–Ti2,7–Td2,8–Sc,9–
h(t)'
Отже, тут можна переглянути, скоригувати Nvr, R, Tvs та інші
параметри, зібрані в процедурі Param, задати і побачити в інформаційному
рядку поточні значення параметрів настройки обох регуляторів,
скоригувати їх при потребі, оцінити характер перехідної характеристики
САК та значення показника якості I.
При організації автоматичного пошуку оптимуму для варіювання 6
параметрів налагодження треба реалізувати 6 вкладених циклів – процес
пошуку може в результаті небажано затягнутись. Подбаємо про те, щоб при
черговому наближенні до оптимуму варіювались одночасно не всі
параметри, а деяка вибрана користувачем їх частина. Наприклад, для
початку можна спробувати обмежитись П-законом в стабілізуючому
регуляторі та ПІ-законом – в коригуючому. Потім можна буде добавити І-
або Д-складову в стабілізуючий регулятор і т.д.
Щоб реалізувати такий підхід, цикли типу for s:=-1 to l do ..
замінимо на цикли for s:=-Ds to Ds do .., де Ds може приймати
значення 1 (змінна s варіюється), або 0 (змінна s фіксована на нулі, отже,
відповідний їй параметр налагодження Ti:=Tic+S*D буде також
фіксованим на рівні Tic).
Алгоритм пошуку приймемо такий, як в п. 5.5, а саме, варіант методу
найшвидшого спуску, коли повторюються цикли “орієнтування” та руху у
вибраному напрямку. Можна очікувати, що на початковому етапі пошуку
темп наближення до оптимуму буде вищим, ніж на наступних. Тому
достроковий вихід з пошуку, якщо пошук затягнеться, може бути
виправданим. Користувачеві для цього достатньо натиснути на клавішу
'0' ('0-exit'). Для спрощення дострокового виходу з циклу
“орієнтації” скористаємось циклам типу repeat. Алгоритм пошуку за 6
параметрами програмно реалізовано процедурою Opt6.
172
Організаційна сторона обслуговування даної процедури виконується
за допомогою підпрограм Diffs та Dem6. Лістинг програми для
оптимізації каскадної САК представлено у Додатку 16.
Приклад роботи програми СascOpt для оптимізації каскадної САК
відповідно до структурної схеми рис. 5.29 продемонстровано нижче.
Математичну модель ОК представлено передатними функціями:
14
131
ppWpW ,
pe
ppWpW 5
24214
1
(5.44, 5.45)
Динамічні властивості ОК вибрано довільно без прив‟язки до конкретного
апарату, тому налаштування регуляторів представлено без розмірностей.
Оптимізація САК проводилася для ЦР за каналами регулювання рис.
5.30 та збурення рис. 5.31. Як критерій оптимізації використано залежність
(5.10) (Nvr=1, R=1).
Оптимізація цифрової САК за каналом 2yз проводилася у
декілька етапів. На першому етапі оптимізувалися ЦР (Tkv=1) із різних
стартових точок (графіки 1, 2). Як видно, значення критеріїв якості для
обох варіантів практично співпадають, також досить близькими є
оптимальні налаштування коригуючого регулятора Р2, значення параметрів
налаштування стабілізуючого регулятора Р1 відрізняються більше. Це
пояснюється малою чутливістю алгоритму оптимізації до значень
налагоджування стабілізуючого регулятора. На другому етапі дослідження
використовувався ПД закон регулювання для стабілізуючого регулятора.
Значення критерію якості зменшилося (графік 3), причому, при оптимізації
диференційна складова регулятора Р1 виявилася нульовою. Отже, на
другому етапі оптимізації для стабілізуючого регулятора Р1 використано П
закон регулювання. Серед розглянутих, саме цей перехідний процес можна
вважати найкращим за динамікою зміни завдання у САК.
Враховуючи попередні дослідження, при оптимізації САК за каналом
2y для стабілізуючого регулятора Р1 використовувався П закон
регулювання, перехідний процес зображено на рис. 5.31.
За одиничним дослідженням не варто робити рекомендації, але
складається враження, що у каскадних систем керування для
стабілізуючого регулятора Р1 слід використовувати П закон керування. Це
дозволяє збільшити швидкість перехідних процесів у стабілізуючому
контурі каскадної САК при мінімальній кількості параметрів
налагодження. Для коригуючого контуру Р2 САК необхідно
використовувати ПІ, або ПІД закони керування. Інтегральна складова
дозволяє усунути статичну помилку а диференційна (при необхідності) –
форсувати швидкість перехідних процесів у САК.
173
Рис. 5.30. Оптимізація каскадної САК за каналом 2yз .
1 – Kr1=2,75; Ti1=9,8; Td1=0,9; Kr2=1; Ti2=9,9; Td2=2,1;
2 – Kr1=1,85; Ti1=9,3; Td1=1,6; Kr2=1,2; Ti2=12,1; Td2=2,2;
3 – Kr1=7,75; Ti1=100000; Td1=0; Kr2=0,8; Ti2=6,2; Td2=2.
Рис. 5.31. Оптимізація САК за каналом 2y ; Kr1=7,75; Ti1=100000;
Td1=0; Kr2=0,8; Ti2=6,2; Td2=2; Tkv=1.
174
ЛІТЕРАТУРА
1. Ажогин, В.В. Автоматизированное проектирование математического
обеспечения АСУ ТП [Текст] / В.В. Ажогин, М.З. Згуровский. – К.: Вища
школа, 1986. – 335с.
2. Ажогин, В.В. Машинное проектирование оптимальных систем
управления пространственно-распределенными динамическими
объектами [Текст] / В.В. Ажогин, М.З. Згуровский. – К.: Вища школа,
1985. – 170 с.
3. Анго, А. Математика для электро- и радиоинженеров [Текст] / Андре
Анго. –М.: Наука, 1964. -772с.
4. Андриянов, П.А. Влияние распределенности параметров на динамические
свойства теплообменников [Текст] / П.А. Андриянов, И.М. Масленников
// Химическая промышленность. – 1963. – № 12. – С. 50 – 52.
5. Бахвалов, Н.С. Численные методы [Текст] / Н.С. Бахвалов. – М.: Наука,
1975. – 631с.
6. Белова, Д.А. Применение ЭВМ для анализа и синтеза автоматических
систем управления [Текст] / Д.А. Белова, Р.Е. Кузин. – М.: Энергия,
1979. – 264с.
7. Бесекерский, В.А. Теория систем автоматического регулирования [Текст]
/ В.А. Бесекерский, Е.П. Попов. – М.: Наука, 1972. – 768 с.
8. Бидерман, В.Л. Прикладная теория механических колебаний [Текст] /
В.Л. Бидерман. – М.: Высшая школа, 1972. – 416с.
9. Брайсон, А. Прикладная теория оптимального управления [Текст]: пер. с
англ. / А. Брайсон, Хо Ю-ши. – М.: Мир, 1972. – 544 с.
10. Бутковский, А.Г. Характеристики систем с распределенными
параметрами [Текст] / А.Г. Бутковский. – М.: Наука, 1979. – 224 с.
11. Грищенко, А.З. Комп‟ютерне визначення коефіцієнтів передаточної
функції дискретної моделі теплоакумулюючої стінки [Текст] / А.З.
Грищенко, Н.А. Кубрак // Автоматизація виробничих процесів. – 2001.
– №1(12). – С. 28 – 35.
12. Голінко, І.М. Динамічна модель теплового режиму калорифера [Текст] /
І.М. Голінко, А.П. Ладанюк, Л.Д. Кошелєва // Інформацiйнi технології
та комп'ютерна інженерія. – 2009. – №3, – С. 59 – 63.
13. Голінко, І.М. Моделювання температурного режиму теплообмінника
[Текст] / І.М. Голінко, А.І. Кубрак, А.С. Кравченко // Східно-
європейский журнал передових технологій. – 2010. – №2. – С. 24 – 27.
14. Голінко І.М. Динамічна оптимізація при управлінні тепловим процесом
[Текст] / Голінко І.М. // –Укр. Деп.. у ДНТБ України 22.04.96,
№1012-Ук 96, –10 с.
15. Голінко, І.М. Комп‟ютерна оптимізація системи керування за
інтегральними показниками якості [Текст] / І.М. Голінко, А.І. Кубрак //
Комп‟ютерні системи та інформаційні технології. – 2011. – №2(50).
– С. 55 – 59.
175
16. Голінко, І.М. Синтез цифрової системи керування за інтегральними
показниками якості [Текст] / І.М. Голінко, А.І. Кубрак, В.Г. Трегуб //
Наукові вісті Національного технічного університету України
“Київський політехнічний інститут”. – 2011. – №6. – С. 54 – 60.
17. Голінко, І.М. Аналіз гібридної системи керування за імпульсною
характеристикою об‟єкта [Текст] / І.М. Голінко, Ю.М. Ковриго //
Наукові вісті Національного технічного університету України
“Київський політехнічний інститут”. – 2010. – № 2. – С. 30 – 33.
18. Грищенко, А.З. Динамика обогрева теплоаккумулирующих стенок
нагревателями сопротивления [Текст] / А.З. Грищенко, А.И. Кубрак,
В.П. Баско. // Сб. Научные и методические задачи создания систем и
средств автоматизации в химическом производстве. – 1980. – С. 45 – 52.
19. Двайт, Г.Б. Таблицы интегралов и другие математические формулы
[Текст] / Г.Б. Двайт. – М.: Наука, 1977.
20. Девятов, Б.Н. Теория переходных процессов в технологических
аппаратах с точки зрения задач управления [Текст] / Б.Н. Девятов. – СО
АН СССР, 1964. – 323 с.
21. Дoрф, Р. Современные системы управления [Текст]: пер. с англ. / Р.
Дoрф, Р. Бишоп. –М.: Лаборатория Базовых Знаний, 2002. – 832 с: ил.
22. Жученко А.І. Динамічна оптимізація з використанням MATLAB та
SIMULINK [Текст]: навч. посібник / А.І. Жученко, Л.Р. Ладієва, Р.М.
Дубік. –К.: СПД Моляр, 2010. –210 с.
23. Жученко, А.І. Математичне моделювання динамічних режимів
змійовикових теплообмінних апаратів [Текст] / А.І. Жученко, Н.А.
Кубрак // Автоматизація виробничих процесів. – 2003. – №1(16).
– С.43 – 47.
24. Жученко, А.І. Математичне моделювання динамічних режимів
теплообмінних апаратів типу „труба в трубі” [Текст] / А.І. Жученко,
Н.А. Кубрак // Наукові вісті НТУУ „КПІ”. – 2003. – №1. – С. 21 – 26.
25. Жученко, А.И. Динамика объектов с распределенными параметрами
[Текст]: учебн. пособие / А.И. Жученко, Н.А. Кубрак, И.М. Голинко. –
Киев: «ЭКМО», 2005. – 121с.
26. Жученко, А.И. Динамика объектов с сосредоточенными параметрами
[Текст]: учебн. пособие / А.И. Жученко, Н.А. Кубрак, И.М. Голинко. –
Київ: НТУУ “КПІ” ВПІ ВПК “Політехніка”, 2006. –152с.
27. Жученко, А.И. Базовые алгоритмы численного анализа [Текст]: учебн.
пособие / А.И. Жученко, Н.А. Кубрак, И.М. Голинко. –К.: НТУУ “КПІ”,
2006. – 236 с.
28. Калиткин, Н.Н. Численные методы [Текст] / Н.Н. Калиткин. – М.:
Наука, 1978. – 512с.
29. Карачун, В.В. Дротяні елементи приладів в акустичному середовищі
[Текст] / В.В. Карачун, Н.А. Кубрак. – К.: ФОП Корнійчук, 2001. – 160с.
30. Карачун, В.В. Комп‟ютерне визначення передаточних функцій
дискретної моделі струнного підвісу приладів [Текст] / В.В. Карачун,
176
Н.А. Кубрак // Вісник Житомирського інженерно–технологічного
інституту. – 2000. – №12. – С. 158 – 163.
31. Карачун, В.В. Влияние акустического излучения на динамику подвесов.
[Текст] / В.В. Карачун, Н.А. Кубрак, Е.Р. Потапова, Н.В. Гнатейко //
Космічна наука і технологія. – 1999. – Т. 5, №2/3. – С. 75 – 77.
32. Кваско, М.З. Числові методи комп‟ютерного моделювання
автоматичних систем. Алгоритми і програми [Текст]: навч. посібник /
М.З. Кваско, А.І. Кубрак, А.І. Жученко. – К.: Політехніка”.
– 2003. – 360 с.
33. Коновалов, М.А. Проблемы автоматизации инерционных тепло-
энергетических объектов [Текст] / М.А. Коновалов. – К.: Феникс.
– 2009. – 310 с.
34. Кремнев, О.А. Тепло- и массообмен в горном массиве и подземных
сооружениях [Текст] / О.А. Кремнев, В.Я. Журавленко. – К.: Наукова
думка. – 1980. – 382 с.
35. Кубрак, А.И. Инженерный метод расчета динамических характеристик
двухтрубных теплообменников [Текст] / А.И. Кубрак // Химическое
машиностроение. – 1972. – вып. 15. – С. 131 – 139.
36. Кубрак, А.И. О выборе типа математической модели
теплоаккумулирующей стенки [Текст] / А.И. Кубрак // Сб. Динамика
тепловых процессов. – 1972. – С. 12 – 20.
37. Кубрак, А.И. О разложении в ряд Маклорена передаточных функций
теплообменников типа „труба в трубе” [Текст] / А.И. Кубрак //
Химическое машиностроение. – 1975, – вып. 21, – С. 136 – 141.
38. Кубрак, А.И. Об учете влияния толстых стенок на динамические
свойства объектов регулирования температуры [Текст] / А.И. Кубрак,
М.З. Кваско // Химическое машиностроение. – 1970. – вып. 12,
– С. 148 – 157.
39. Кубрак, А.И. О разложении в ряд передаточной функции
теплоаккумулирующей стенки [Текст] / А.И. Кубрак, Б.Е. Шевченко //
Химическое машиностроение. – 1978. – вып. 18, – С. 95 – 97.
40. Кубрак, А.И. Численный анализ и программирование [Текст]: учебн.
пособие / А.И. Кубрак, И.М. Голинко, А.В. Ситников. –Кам.–Под.:
Калиграф, 2009. – 256 с.
41. Кубрак, Н.А. Хвильові процеси в гнучких ланках автоматичних систем
[Текст]: навч. посібник / Н.А. Кубрак. – К.: НМЦ ВО, 2000. – 160 с.
42. Кубрак А.І. Комп‟ютерний аналіз АСР за імпульсною характеристикою
об‟єкта [Текст] / А.І. Кубрак, І.М. Голінко, Ю.М. Ковриго // Нові
рішення в сучасних технологіях: зб. наук. пр. НТУ “ХПІ” –Вип. 57. –
Х., – 2010. – С. 128–132.
43. Куо, Б. Теория и проектирование цифровых систем управления [Текст]:
пер. с англ. / Б. Куо. –М.: Машиностроение, 1986. – 448 с.
44. Кухтенко, А.И. Проблемы инвариантности в автоматике [Текст] / А.И.
Кухтенко. –Киев: Гостехиздат УССР, 1963. – 328 с.
177
45. Ладиев, Р.Я. О частотных характеристиках змеевиковых
теплообменников [Текст] / Р.Я. Ладиев, А.И. Кубрак // Химическое
машиностроение. – 1971. – вып. 14. –С. 97 – 103.
46. Ладиев, Р.Я. О частотных характеристиках парожидкостных
теплообменников и трубопроводов [Текст] / Р.Я. Ладиев, А.И. Кубрак //
Химическое машиностроение. – 1970. – вып. 11. –С. 122 – 130.
47. Ладиев, Р.Я. Математическое описание объектов с распределенными
параметрами [Текст]: учеб. пособие / Р.Я. Ладиев, Ю.А. Остапенко,
А.И. Кубрак, М.З. Кваско. – К.: КПИ, 1974. – 149 с.
48. Ладієва, Л.Р. Оптимізація технологічних процесів [Текст] / Л.Р.
Ладієва. –К.: ІВЦ Видавництво “Політехніка”, 2004. – 192 с.
49. Лыков, А.В. Теория теплопроводности [Текст] / А.В. Лыков. – М.:
Высшая школа, 1967. – 570 с.
50. Маковский, В.А. Динамика металлургических объектов с
распределенными параметрами [Текст] / В.А. Маковский. – М.:
Металлургия, 1971.
51. Мосолов, В.Е. Определение передаточной функции гибкой
нерастяжимой нити при пространственном обтекании потоком [Текст] /
В.Е. Мосолов, В.С. Тихонов // Автоматика. – 1979. – №4. – С. 24 – 30.
52. Носова, Л.Н. Таблицы функций Томсона и их первых производных
[Текст]: справочник / Л.Н. Носова. – М.: Издательство АН СССР, 1960.
– 422 с.
53. Пановко, Я.Г. Введение в теорию механических колебаний [Текст] /
Я.Г. Пановко – М.: Наука, 1991. – 255с.
54. Пат. 44799 Україна, Регулюючий мікропроцесорний контролер /
Ковриго Ю.М., Коновалов М.А., Голінко І.М., Бунке О.С.; Заявник та
власник Національний технічний університет України “КПІ”. – № u
2009 05450; заявл. 29.05.2009; опубл. 12.10.2009, Бюл. № 19. – 8 с.: іл.
55. Пат. 54042 Україна, Універсальний мікропроцесорний контролер /
Ковриго Ю.М., Коновалов М.А., Голінко І.М., Бунке О.С.; Заявник та
власник Національний технічний університет України “КПІ”. – № u
2010 04874; заявл. 23.04.2010; опубл. 25.10.2010, Бюл. № 20. – 8 с.: іл.
56. Патрахин, В.А. Средства программирования РС-совместимых
контроллеров [Текст] / В.А. Патрахин // Информатизация и системы
управления в промышленности. – 2004. – №3. – С. 3 – 8.
57. Рей, У. Методы управления технологическими процессами [Текст]: пер.
с англ. / У. Рей. – М.: Мир, 1983. – 368 с.
58. Ротач, В.Я. Расчет настройки промышленных систем регулирования
[Текст] / В.Я. Ротач. – М.: Госэнергоиздат, 1961. – 214с.
59. Ротач, В.Я. Автоматизация настройки систем управления [Текст] /
В.Я. Ротач, В.Ф. Кузишин, А.С. Клюев и др. – М.: Энергоатомиздат,
1984. – 272 с.
60. Ротач, В.Я. Теория автоматического управления теплоэнергетическими
процессами [Текст] / В.Я. Ротач. – М.: Энергоатомиздат, 1985. – 296 с.
178
61. Самарский, А.А. Разностные методы для эллиптических уравнений
[Текст] / А.А. Самарский, В.Б. Андреев. – М.: Наука, 1976. – 350 с.
62. Светлицкий, В.А. Механика гибких стержней и нитей [Текст] /
В.А. Светлицкий. – М.: Машиностроение, 1978. – 222 с.
63. Слободюк, М.В. Огляд сучасних засобів програмування PC-BASED
контроллерів [Текст] / М.В. Слободюк, І.М. Голінко // Тези доповідей
IХ міжнародної науково-практичної конференції "Сучасні проблеми
наукового забезпечення енергетики" (Київ, 18-22 квітня 2011 р.) – К.:
НТУУ “КПІ”, 2011. –с.304.
64. Тимошенко, С.П. Колебания в инженерном деле [Текст] / С.П.
Тимошенко, Д.Н. Янг, У. Уивер. – М.: Машиностроение, 1985. – 472 с.
65. Тихонов, А.Н. Уравнения математической физики [Текст] / А.Н.
Тихонов, А.А. Самарский. – М.: Наука, 1977. – 736 с.
66. Фарлоу, С. Уравнения с частными производными для научных
работников и инженеров [Текст] / С. Фарлоу. – М.: Мир, 1985. – 384 с.
67. Фаронов, В.В. Турбо Паскаль 7.0. Начальный курс [Текст]: учеб.
пособие / В.В. Фаронов. – М.: Нолидж, 1997. – 616 с.
68. Чермак, И. Динамика регулируемых систем в теплоэнергетике и химии
[Текст] / И. Чермак, В. Петерка, И. Заворка – М.: Мир, 1972. – 623 с.
69. Чинаев, П.И. Самонастраивающиеся системы [Текст]: справочник /
П.И. Чинаев. – Киев: Наук. думка, 1969. – 528 с.
70. Шевяков, А.А. Инженерные методы расчета динамики теплообменных
аппаратов [Текст] / А.А. Шевяков, Р.В. Яковлева. – М.:
Машиностроение, 1968. – 317 с.
71. Щедров, В.С. Основы механики гибкой нити [Текст] / В.С. Щедров. –
М.: Машгиз, 1961. – 171 с.
72. Aidan, O'Dwyer Handbook of PI and PID Controller Tuning Rules [Text] /
O'Dwyer Aidan. – Dublin Institute of Technology, 2006. – 545 p.
73. Ang, K.H. PID control system analysis, design, and technology [Text] /
K.H. Ang, G. Chong // IEEE Transactions on Control Systems Technology.
– 2005.– Vol. 13, № 4. – P. 559–576.
74. Äström, K.J. Advanced PID control [Text] / K.J. Äström, T. Hägglund. –
ISA, 2006. – 460 p.
75. Johnson, A. PID Control. New Identification and Design Methods [Text] /
Michael A. Johnson, Mohammad H. Moradi. – Springer, 2005. – 543 p.
76. McMillan, G.K. Tuning and control loop performance - a practitioner's guide
[Text] / G.K. McMillan. – Instrumentation Systems &, 1994. – 453 p.
77. Michael A. Johnson PID Control. New Identification and Design Methods
[Text] / Michael A. Johnson, Mohammad H.Moradi. Springer, 2005. –543 p.
78. Quevedo, J. Digital Control 2000: Past, Present and Future of PID Control
[Text] / J. Quevedo, T. Escobet // Proceedings of the IFAC Workshop, Eds.,
Terrassa, Spain, 5–7 Apr. 2000. – 618 p.
179
ДОДАТКИ
Додаток 1. Програмний модуль GodoGt
unit GodoGt;
interface
uses Crt, Graph, Serv, Groms;
const
Wn:real=0.01; Wk:real=3;
Nsc:integer=50; D:real=20;
Min:integer=5; Max:integer=15;
Kw:real=1.5; Ks:integer=1;
Tg:char='P'; {alt 'L'}
var w,dw,dt:real; Gt:CoefL;
function IntGt(t: real): real;
procedure UrGod;
procedure Scan;
procedure SZ;
procedure PointGod;
procedure LineGod;
procedure Godo;
procedure IndW;
procedure DemGodo;
Implementation
function IntGt(t: real): real;
var s: integer; r: real;
begin
r:=t/Gt[L+1];{dt;}
s:=trunc(r);
t:=frac(r);
IntGt:=Gt[s]+t*(Gt[s+1]-Gt[s]);
end;
procedure UrGod;
var wt,dtw,g:real; s,Lw:integer;
begin
x:=0; y:=0; dt:=Gt[L+1];
if w<Pi/(10*dt)
then
begin
for s:=1 to L-1 do
begin
wt:=w*s*dt; g:=Gt[s];
x:=x+g*cos(wt); y:=y-g*sin(wt);
end;
x:=x*dt; y:=y*dt;
end
else
begin
180
dtw:=Pi/(10*w); Lw:=round(d/dtw); dtw:=d/Lw;
for s:=1 to Lw-1 do
begin
wt:=w*s*dtw; g:=IntGt(s*dtw);
x:=x+g*cos(wt); y:=y-g*sin(wt);
end;
x:=x*dtw; y:=y*dtw;
end;
end;
procedure SZ;
begin
UrGod;
if Dx<>0 then s:=x0+round(x/Dx)
else s:=x0;
if Dy<>0 then z:=y0-round(y/Dy)
else z:=y0
end;
procedure PointGod;
const Kw=1.2;
var Mdx,Mdy,Md,Sp,Zp:integer; Wp:real;
begin
Sp:=s; Zp:=z; Wp:=w;
repeat
W:=Wp+Dw; SZ; Mdx:=abs(S-Sp); Mdy:=abs(Z-Zp);
if Mdx>Mdy then Md:=Mdx
else Md:=Mdy;
if Md<>1 then
if Md<1 then Dw:=Dw*Kw
else Dw:=Dw/Md;
until (Md=1) or (W>Wk);
if Md=1 then PutPixel(S,Z,c)
end;
procedure LineGod;
var Mdx,Mdy,Md,Sp,Zp:integer; Wp,r:real;
begin
Sp:=s; Zp:=z; Wp:=w; r:=(Min+Max)/2;
repeat
W:=Wp+Dw; SZ; Mdx:=abs(S-Sp); Mdy:=abs(Z-Zp);
if Mdx>Mdy then Md:=Mdx
else Md:=Mdy;
if (Md>Max) or (Md<Min) then
if Md<Min then Dw:=Dw*Kw
else Dw:=Dw*r/Md;
until ((Md<=Max) and (Md>=Min)) or (W>Wk);
if (Md<=Max) and (Md>=Min) then Line(Sp,Zp,S,Z);
end;
procedure Scan;
var s:integer;
begin
181
Dw:=(Wk-Wn)/Nsc;
Xmin:=0; Xmax:=0; Ymin:=0; Ymax:=0;
for s:=0 to Nsc do
begin
W:=Wn+S*Dw; UrGod;
if X<Xmin then Xmin:=X; if X>Xmax then Xmax:=X;
if Y<Ymin then Ymin:=Y; if Y>Ymax then Ymax:=Y
end;
X0Y0(true); ClearDevice; SystCoor
end;
procedure Godo;
var J3:char; T20:string[20];
begin
PutA;Ou('0-Exit'); J3:='1';
dt:=d/L; Dw:=(Wk-Wn)/Nsc; W:=Wn; Sz;
PutPixel(S,Z,C); SetColor(C);
repeat
case Tg of
'P': PointGod;
'L': LineGod;
end;
Str(W,T20);
Clear(450,0,GetMaxX-1,10); OutTextXY(450,0,'W='+T20);
if KeyPressed then J3:=ReadKey
until (W>Wk) or (J3='0');
SetColor(15)
end;
procedure IndW;
var j2:char;
begin
repeat
PutA;
Ou('0-Ex, 1-W, 2-C, 3-Point, 4-Inscr');
Str(w:1:3,T10); Ts:='w='+T10;
Str(C,T10); Ts:=Ts+', C='+T10;
Info; j2:=ReadKey;
case j2 of
'1': Our('w',w);
'2': Oui('C',C);
'3': begin
SetColor(C); SZ; Circle(s,z,3);
SetColor(15);
end;
'4': Inscr;
end;
until j2='0';
end;
procedure DemGodo;
var j1:char; T20:string[20];
begin
182
repeat
PutA;
Ou('0-Ex,1-Wn,2-Wk,3-Nsc,4-Tg,5-C,6-Sc,7-Godo,
8-IndW,9-Groms');
Str(Wn:1:6,T20); Ts:='Wn='+T20;
Str(Wk:1:6,T20); Ts:=Ts+', Wk='+T20;
Str(Nsc,T10); Ts:=Ts+', Nsc='+T10;
Ts:=Ts+', Tg='+Tg;
Str(C,T10); Ts:=Ts+', C='+T10;
Info; j1:=ReadKey;
case j1 of
'1': Our('Wn',Wn);
'2': Our('Wk',Wk);
'3': Oui('Nsc',Nsc);
'4': if Tg='P' then Tg:='L' else Tg:='P';
'5': Oui('C',C);
'6': Scan;
'7': Godo;
'8': IndW;
'9': Service;
end;
until j1='0';
end;
end.
Додаток 2. Програма DemSt
program DemSt;
uses Graph, Crt, Serv, GodoGt, Groms;
const
Ro:real=7800; Delta:real=0.05;
R0:real=0.05; R1:real=0.1;
Cst:real=456; Lam:real=50.2;
m:integer=20; K:integer=0; {Alt 1,2}
Ngl:integer=1; Ngr:integer=2;
Ninp:integer=0; Xout:real=0.045;
A0:real=1000; A1:real=250;
Tl:integer=1;{alt 0} Tr:integer=0;
Ql:integer=1; Qr:integer=0;
Tsl:integer=1; Tsr:integer=0;
Tc:char='H'; {alt G}
var q,q1,B0,B1,B2,B3,A,Hx,Tau:real;
Nout,Ks:integer; Ht,Mt:CoefL; Teta:CoefR;
procedure Step;
var s:integer; Tet:Coefr; Rs:real;
begin
for s:=1 to m-1 do
begin
Rs:=K/(R0/Hx+S)/2;
Tet[s]:=q1*Teta[s]+q*((1-Rs)*Teta[s-1]+(1+Rs)*Teta[s+1]);
183
end;
case Ngl of
0: Tet[0]:=Teta[0]+2*(1+K)*Q*(Teta[1]-Teta[0]);
1: Tet[0]:=TL;
2: Tet[0]:=Tet[1]+Hx/Lam*QL;
3: Tet[0]:=B0*Tet[1]+B1*TsL;
end;
case Ngr of
1: Tet[m]:=Tr;
2: Tet[m]:=Tet[m-1]-Hx/Lam*Qr;
3: Tet[m]:=B2*Tet[m-1]+B3*Tsr;
end;
Tet[-1]:=m; Teta:=Tet;
end;
procedure FormHtGt;
var s:integer;
begin
Gt[-1]:=L; Ht[-1]:=L; Dt:=D/L;
Gt[0]:=0; Gt[L]:=0; Gt[L+1]:=Dt;
Ht[-1]:=L; Ht[0]:=0; Ht[L+1]:=Dt;
if K in [1,2] then Delta:=R1-R0;
if (K in [1,2]) and (R0=0) then NgL:=0;
Hx:=Delta/m;
A:=Lam/(Ro*Cst); Tau:=sqr(Hx)/(6*A);
Ks:=round(Dt/Tau);
if Ks=0 then Ks:=1;
Tau:= Dt/Ks; Q:=A*Tau/sqr(Hx); q1:=1-2*q;
B0:=Lam/(Lam+Hx*A0); B1:=1-B0;
B2:=Lam/(Lam+Hx*A1); B3:=1-B2;
Teta[-1]:=m;
for s:=0 to m do Teta[s]:=0;
TL:=0; QL:=0; TsL:=0;
Nout:=round(Xout/Hx);
Tr:=0; Qr:=0; Tsr:=0;
case Ninp of
0: begin
TL:=1; QL:=1; TsL:=1;
end;
1: begin
Tr:=1; Qr:=1; Tsr:=1;
end;
end;
for s:=1 to L do
begin
for z:=1 to Ks do Step;
Ht[s]:=Teta[Nout];
end;
for s:=0 to L-1 do Gt[s]:=(Ht[s+1]-Ht[s])/Dt;
end;
procedure GrHtGt;
var j1:char; y:real; s:integer;
184
begin
repeat
PutA;
Ou('0-ex,1-m,2-Ninp,3-Xout,4-D,5-Tc,6-Sc,7-C,8-Gr');
Str(m,T10); Ts:='m='+T10;
Str(Ninp,T10); Ts:=Ts+', Ninp='+T10;
Str(Xout:1:3,T10); Ts:=Ts+', Xout='+T10;
Str(D:1:1,T10); Ts:=Ts+', D='+T10;
Ts:=Ts+', Tc='+Tc;
Str(C,T10); Ts:=Ts+', C='+T10;
Info; J1:=ReadKey;
case J1 of
'1': Oui('m',m);
'2': Oui('Ninp',Ninp);
'3': Our('Xout',Xout);
'4': Our('D',D);
'5': if Tc='H' then Tc:='G' else Tc:='H';
'6': begin
FormHtGt; Xmin:=0; Xmax:=D;
Ymin:=0; Ymax:=0;
for s:=0 to L do
begin
if TC='H' then Y:=Ht[s]
else Y:=Gt[s];
if Y<Ymin then Ymin:=Y;
if Y>Ymax then Ymax:=Y;
end;
X0Y0(false); ClearDevice; SystCoor;
if Tc='H' then Graphic(Ht,C)
else Graphic(Gt,C);
end;
'7': Oui('C',C);
'8': begin
{FormHtGt;}
if Tc='G' then Graphic(Gt,C)
else Graphic(Ht,C);
end;
end
until J1='0'
end;
procedure TFC;
var j1: char;
begin
repeat
PutA; Ou('0-ex, 1-Lam, 2-Ro, 3-Cst, 4-A0, 5-A1');
Str(Lam:1:1,T10); Ts:='Lam='+T10;
Str(Ro:1:3,T10); Ts:=Ts+', Ro='+T10;
Str(Cst:1:1,T10); Ts:=Ts+', Cst='+T10;
Str(A0:1:1,T10); Ts:=Ts+', A0='+T10;
Str(A1:1:1,T10); Ts:=Ts+', A1='+T10;
Info; J1:=ReadKey;
case J1 of
185
'1': Our('Lam',Lam);
'2': Our('Ro',Ro);
'3': Our('Cst',Cst);
'4': Our('A0',A0);
'5': Our('A1',A1);
end;
until J1='0';
end;
procedure Geom;
var j1: char;
begin
repeat
PutA; Ou('0-ex, 1-Delta, 2-K, 3-R0, 4-R1, 5-NgL, 6-Ngr');
Str(Delta:1:3,T10); Ts:='Delta='+T10;
Str(K,T10); Ts:=Ts+', K='+T10;
Str(R0:1:3,T10); Ts:=Ts+', R0='+T10;
Str(R1:1:3,T10); Ts:=Ts+', R1='+T10;
Str(NgL,T10); Ts:=Ts+', NgL='+T10;
Str(Ngr,T10); Ts:=Ts+', Ngr='+T10;
Info; J1:=ReadKey;
case J1 of
'1': Our('Delta',Delta);
'2': Oui('K',K);
'3': Our('R0',R0);
'4': Our('R1',R1);
'5': Oui('NgL',NgL);
'6': Oui('Ngr',Ngr);
end
until J1='0';
end;
procedure GraphK;
var s0,s: integer;
begin
SetColor(C); s0:=round(Mt[L+1]);
MoveTo(x0+s0,y0-round(Mt[s0]/dy));
for s:=s0+1 to L do
LineTo(x0+s,y0-round(Mt[s]/dy));
SetColor(15);
end;
procedure DemStat;
const
TL:real=40; TR:real=100;
QL:real=5000; QR:real=5000;
TsL:real=20; TsR:real=80;
Tmin:real=0; Tmax:real=100;
var j1:char; Tx:string;
procedure Stat;
var e,f:real; s,s0:integer; ff:boolean;
begin
186
Mt[-1]:=L; Xmin:=0; ff:=true;
if k=0 then Xmax:=Delta
else Xmax:=R1;
Ymin:=Tmin; Ymax:=Tmax;
X0Y0(false); ClearDevice; SystCoor;
case k of
0: begin
case NgL of
1: case Ngr of
1: begin e:=TL; f:=(TR-e)/Delta; end;
2: begin e:=TL; f:=-QR/Lam; end;
3: begin
e:=TL; f:=(TsR-e)/(Delta+Lam/A1);
end;
end;
2: case Ngr of
1: begin f:=-QL/Lam; e:=TR-f*Delta; end;
2: ff:=false;
3: begin
f:=-QL/Lam; e:=TsR-(Lam/A1+Delta)*f;
end;
end;
3: case Ngr of
1: begin
f:=(TR-TsL)/(Delta+Lam/A0);
e:=TR-Delta*f;
end;
2: begin f:=-QR/Lam; e:=TsL+Lam/A0*f; end;
3: begin
f:=(TsR-TsL)/(Delta+Lam/A1+Lam/A0);
e:=TsL+Lam/A0*f;
end;
end;
end;
if ff then for s:=0 to L do Mt[s]:=e+f*s*dx;
end;
1: begin
case NgL of
0: case Ngr of
1: e:=TR;
2: ff:=false;
3: e:=TsR;
end;
1: case Ngr of
1: begin
f:=(TR-TL)/Ln(R1/R0); e:=TL-f*Ln(R0);
end;
2: begin f:=-R1/Lam*QR; e:=TL-f*Ln(R0); end;
3: begin
f:=(TsR-TL)/(Lam/(A1*R1)+ln(R1/R0));
e:=TL-f*ln(R0);
end;
end;
187
2: case Ngr of
1: begin f:=-R0/Lam*QL; e:=TR-f*ln(R1); end;
2: ff:=false;
3: begin
f:=-R0/Lam*QL;
e:=TsR-(Lam/(A1*R1)+ln(R1))*f;
end;
end;
3: case Ngr of
1: begin
f:=(TR-TsL)/(ln(R1/R0)+Lam/(A0*R0));
e:=TR-f*ln(R1);
end;
2: begin
f:=-R1/Lam*QR;
e:=TsL+(Lam/(A0*R0)-ln(R0))*f;
end;
3: begin
f:=(TsR-TsL)/
(ln(R1/R0)+Lam/(A1*R1)+Lam/(A0*R0));
e:=TsR-f*(ln(R1)+Lam/(A1*R1));
end;
end;
end;
if ff then
if NgL=0 then for s:=0 to L do Mt[s]:=e
else
begin
s0:=round(R0/dx); Mt[L+1]:=s0;
for s:=s0 to L do
Mt[s]:=e+f*ln(R0+(s-s0)*dx);
end;
end;
2: begin
case NgL of
0: case Ngr of
1: e:=TR;
2: ff:=false;
3: e:=TsR;
end;
1: case Ngr of
1: begin
f:=(TR-TL)/(1/R1-1/R0); e:=TL-f/R0;
end;
2: begin f:=sqr(R1)/Lam*QR; e:=TL-f/R0; end;
3: begin
f:=(TsR-TL)/(1/R1-Lam/(A1*R1*R1)-1/R0);
e:=TL-f/R0;
end;
end;
2: case Ngr of
1: begin f:=sqr(R0)/Lam*QL; e:=TR-f/R1; end;
2: ff:=false;
188
3: begin
f:=sqr(R0)/Lam*QL;
e:=TsR+(Lam/(A1*R1*R1)-1/R1)*f;
end;
end;
3: case Ngr of
1: begin
f:=(TsL-TR)/(1/R0+Lam/(A0*R0*R0)-1/R1);
e:=TR-f/R1;
end;
2: begin
f:=sqr(R1)/Lam*QR;
e:=TsL-(1/R0+Lam/(A0*R0*R0))*f;
end;
3: begin
f:=(TsL-TsR)/(1/R0+Lam/(A0*R0*R0)+
Lam/(A1*R1*R1)-1/R1);
e:=TsL-f*(1/R0+Lam/(A0*R0*R0));
end;
end;
end;
if ff then
if NgL=0 then for s:=0 to L do Mt[s]:=e
else
begin
s0:=round(R0/dx); Mt[L+1]:=s0;
for s:=s0 to L do
Mt[s]:=e+f/(R0+(s-s0)*dx);
end;
end;
end;
if ff then if (k=0) or (NgL=0) then Graphic(Mt,C)
else GraphK
else OutTextXY(250,150,'Kina ne bude');
end;
begin
repeat
Tx:='0-Ex, 1-k, 2-NgL, 3-NgR, ';
case NgL of
1: Tx:=Tx+'4-TL, ';
2: Tx:=Tx+'4-QL, ';
3: Tx:=Tx+'4-TsL, ';
end;
case NgR of
1: Tx:=Tx+'5-TR, ';
2: Tx:=Tx+'5-QR, ';
3: Tx:=Tx+'5-TsR, ';
end;
PutA; Ou(Tx+'6-Tmin, 7-Tmax, 8-Gr, 9-Service');
Str(k,T10); Ts:='k='+T10;
Str(NgL,T10); Ts:=Ts+', NgL='+T10;
Str(NgR,T10); Ts:=Ts+', NgR='+T10;
189
case NgL of
1: begin Str(TL:1:1,T10); Ts:=Ts+', TL='+T10 end;
2: begin Str(QL:1:1,T10); Ts:=Ts+', QL='+T10 end;
3: begin Str(TsL:1:1,T10); Ts:=Ts+', TsL='+T10 end;
end;
case NgR of
1: begin Str(TR:1:1,T10); Ts:=Ts+', TR='+T10 end;
2: begin Str(QR:1:1,T10); Ts:=Ts+', QR='+T10 end;
3: begin Str(TsR:1:1,T10); Ts:=Ts+', TsR='+T10 end;
end;
Str(Tmin:1:1,T10); Ts:=Ts+', Tmin='+T10;
Str(Tmax:1:1,T10); Ts:=Ts+', Tmax='+T10;
Info; j1:=ReadKey;
case j1 of
'1': Oui('k',k);
'2': Oui('NgL',NgL);
'3': Oui('NgR',NgR);
'4': case NgL of
1: Our('TL',TL);
2: Our('QL',QL);
3: Our('TsL',TsL);
end;
'5': case NgR of
1: Our('TR',TR);
2: Our('QR',QR);
3: Our('TsR',TsR);
end;
'6': Our('Tmin',Tmin);
'7': Our('Tmax',Tmax);
'8': Stat;
'9': Service;
end;
until j1='0';
end;
begin
C:=15; D:=400; H:=H-50;
repeat
PutA;
Ou('Esc-ex,1-TFC,2-Geom,3-Stat,4-GrHtGt,5-DemGodo,6-
Service');
J:=ReadKey;
case J of
'1': TFC;
'2': Geom;
'3': DemStat;
'4': GrHtGt;
'5': DemGodo;
'6': Service;
end
until J=#27;
CloseGraph
end.
190
Додаток 3. Програма DemStr
program DemStr;
uses Graph, Crt, Serv, GodoGt, Groms;
const
Ro:real=7800; D0:real=0.02;
Lng:real=0.3; Cst:real=456;
Lam:real=50.2; m:integer=100;
Xout:real=0.2; A0:real=500;
Tc:char='H'; {alt G} Tos:integer=1;
var q,q1,B0,B1,A,B,Hx,Tau:real;
Ks,Nout:integer; Ht:CoefL; Teta:CoefR;
procedure Step;
var s: integer;
Tet: Coefr;
begin
m:=round(Teta[-1]);
for s:=1 to m-1 do
Tet[s]:=Teta[s]+q*(Teta[s-1]-2*Teta[s]+
Teta[s+1])-B*Tau*(Teta[s]-Tos);
Tet[0]:=B0*Tet[1]+B1*Tos;
Tet[m]:=Tet[m-1]; Tet[-1]:=m;
Tet[-1]:=m; Teta:=Tet;
end;
procedure FormHtGt;
var s:integer;
begin
Gt[-1]:=L; Ht[-1]:=L; Dt:=D/L;
Gt[0]:=0; Gt[L]:=0; Gt[L+1]:=Dt;
Ht[-1]:=L; Ht[0]:=0; Ht[L+1]:=Dt;
Hx:=Lng/m; A:=Lam/(Ro*Cst); Tau:=sqr(Hx)/(6*A);
B:=4*A0/(Ro*Cst*D0); Ks:=round(Dt/Tau);
if Ks=0 then Ks:=1;
Tau:= Dt/Ks; q:=A*Tau/sqr(Hx);
q1:=1-2*q;
B0:=Lam/(Lam+Hx*A0); B1:=1-B0;
Teta[-1]:=m;
for s:=0 to m do Teta[s]:=0;
Nout:=round(Xout/Hx); Tos:=1;
for s:=1 to L do
begin
for z:=1 to Ks do Step;
Ht[s]:=Teta[Nout];
end;
for s:=0 to L-1 do Gt[s]:=(Ht[s+1]-Ht[s])/Dt;
end;
procedure GrHtGt;
var j1:char; y:real; s:integer;
191
begin
repeat
PutA;
Ou('0-ex,1-m,2-Xout,3-D,4-Tc,5-Sc,6-C,7-Gr');
Str(m,T10); Ts:='m='+T10;
Str(Xout:1:3,T10); Ts:=Ts+', Xout='+T10;
Str(D:1:1,T10); Ts:=Ts+', D='+T10;
Ts:=Ts+', Tc='+Tc;
Str(C,T10); Ts:=Ts+', C='+T10;
Info; J1:=ReadKey;
case J1 of
'1': Oui('m',m);
'2': Our('Xout',Xout);
'3': Our('D',D);
'4': if Tc='H' then Tc:='G' else Tc:='H';
'5': begin
FormHtGt; Xmin:=0; Xmax:=D;
Ymin:=0; Ymax:=0;
for s:=0 to L do
begin
if TC='H' then Y:=Ht[s]
else Y:=Gt[s];
if Y<Ymin then Ymin:=Y;
if Y>Ymax then Ymax:=Y;
end;
X0Y0(false); ClearDevice; SystCoor;
if Tc='H' then Graphic(Ht,C)
else Graphic(Gt,C);
end;
'6': Oui('C',C);
'7': begin
FormHtGt;
if Tc='G' then Graphic(Gt,C)
else Graphic(Ht,C);
end;
end
until J1='0'
end;
procedure Param;
var j1:char;
begin
repeat
PutA; Ou('0-ex, 1-Lng, 2-D0, 3-A0, 4-Lam, 5-Ro, 6-Cst');
Str(Lng:1:3,T10); Ts:='Lng='+T10;
Str(D0:1:3,T10); Ts:=Ts+', D0='+T10;
Str(A0:1:1,T10); Ts:=Ts+', A0='+T10;
Str(Lam:1:1,T10); Ts:=Ts+', Lam='+T10;
Str(Ro:1:1,T10); Ts:=Ts+', Ro='+T10;
Str(Cst:1:1,T10); Ts:=Ts+', Cst='+T10;
Info; J1:=ReadKey;
case J1 of
'1': Our('Lng',Lng);
192
'2': Our('D0',D0);
'3': Our('A0',A0);
'4': Our('Lam',Lam);
'5': Our('Ro',Ro);
'6': Our('Cst',Cst);
end;
until J1='0';
end;
begin
C:=15;
repeat
PutA;
Ou('Esc-ex,1-Param,2-GrHtGt,3-DemGodo,4-Service');
J:=ReadKey;
case J of
'1': Param;
'2': GrHtGt;
'3': DemGodo;
'4': Service;
end
until J=#27;
CloseGraph
end.
Додаток 4. Програма DemPrе
program DemPrе;
uses Graph,Crt,Serv,GodoGt,Groms;
const
Q0:real=20; C0:real=4193;
G0:real=200; C1:real=1424;
Ro0:real=1000; Ro1:real=1700;
F0:real=2; m:integer=20;
Del:real=0.15; Lam:real=0.75;
Ninp:integer=0; Nout:integer=0;
A0:real=3000; A1:real=50;
Ngl:integer=3; Ngr:integer=3;
T0inp:real=80; Tos:real=20;
Tmin:real=0; Tmax:real=100;
Xout:real=0.1; Tc:char='H';
var T0,T,Dt,q,q1,B0,B1,B2,B3,B4,A,Hx,Tau:real;
i,Teta0,F1,F2,F3,F4,F5,F6,F7,F8,pr:real;
Nx:integer; Ht,My:CoefL; Teta1:CoefR;
procedure Init;
var Zn:real; s:integer; U:Boolean;
begin
Zn:=q0*c0+A0*f0; T0:=g0*C0/Zn; B0:=Q0*C0/Zn;
B1:=1-B0; Hx:=Del/m; Nx:=round(Xout/Hx); A:=Lam/(Ro1*C1);
Ks:=1; dt:=D/L;
repeat
193
Tau:=Dt/Ks; F1:=Tau/T0; F2:=1-F1; F3:=B0*F1; F4:=B1*F1;
Q:=A*Tau/sqr(Hx); Q1:=1-2*Q;
F5:=Lam/(Lam+A0*Hx); F6:=1-F5; F7:=Lam/(Lam+A1*Hx);
F8:=1-F7;
U:=(F1<=0.1) and (Q<=1/6);
if not(U) then inc(Ks)
until U;
for s:=0 to m do Teta1[s]:=0;
T:=0; Teta0:=0; T0inp:=0; Tos:=0;
case Ninp of
0: T0inp:=1;
2: Tos:=1
end
end;
procedure Step;
var s:integer; Tet1:Coefr; Tet0:real;
begin
Tet0:=F2*Teta0+F3*T0inp+F4*Teta1[0];
for s:=1 to m-1 do
Tet1[s]:=Q1*Teta1[s]+Q*(Teta1[s-1]+Teta1[S+1]);
Tet1[0]:=F5*Tet1[1]+F6*Teta0;Tet1[M]:=F7*Tet1[M-1]+F8*Tos;
Tet1[-1]:=m; Teta1:=Tet1;Teta0:=Tet0
end;
procedure FormMas;
var Yp:real;
begin
Init; Gt[-1]:=L; Ht[-1]:=L; dt:=D/L;
Gt[0]:=0; Gt[L+1]:=dt; Ht[0]:=0; Ht[L+1]:=dt;
Xu:=(GetMaxX-L) div 2; Y:=0;
PutA; Rectangle(Xu,0,Xu+L,5);
for z:=1 to L do
begin
Line(Xu+z,1,Xu+z,4); Yp:=Y;
for s:=1 to Ks do Step;
case Nout of
0: y:=Teta0;
1: y:=Teta1[Nx]
end;
Ht[z]:=Y; Gt[z]:=(y-yp)/dt;
end;
end;
procedure TFC;
begin
repeat
PutA; Ou('0-Esc,1-Ro0,2-C0,3-Ro1,4-C1,5-Lam,6-A0,7-A1');
Str(Ro0:1:1,T10); Ts:='Ro0='+T10;
Str(C0:1:1,T10); Ts:=Ts+', C0='+T10;
Str(Ro1:1:1,T10); Ts:=Ts+', Ro1='+T10;
Str(C1:1:1,T10); Ts:=Ts+', C1='+T10;
Str(Lam:1:3,T10); Ts:=Ts+', Lam='+T10;
194
Str(A0:1:1,T10); Ts:=Ts+', A0='+T10;
Str(A1:1:1,T10); Ts:=Ts+', A1='+T10;
Info; J1:=ReadKey;
case J1 of
'1':Our('Ro0',Ro0);
'2':Our('C0',C0);
'3':Our('Ro1',Ro1);
'4':Our('C1',C1);
'5':Our('Lam',Lam);
'6':Our('A0',A0);
'7':Our('A1',A1);
end
until J1='0';
end;
procedure Geom;
begin
repeat
PutA; Ou('0-Esc,1-Q0,2-G0,3-F0,4-Del');
Str(Q0:1:2,T10); Ts:='Q0='+T10;
Str(G0:1:2,T10); Ts:=Ts+', G0='+T10;
Str(F0:1:2,T10); Ts:=Ts+', F0='+T10;
Str(Del:1:3,T10); Ts:=Ts+', Del='+T10;
Info;J1:=ReadKey;
case J1 of
'1':Our('Q0',Q0);
'2':Our('G0',G0);
'3':Our('F0',F0);
'4':Our('Del',Del);
end
until J1='0';
end;
procedure Stat;
var j1:char; s:integer; f,e0,e1:real;
begin
repeat
PutA;
Ou('0-Ex,1-T0inp,2-Tos,3-m,4-Tmin,5-Tmax,6-Sc,7-Nout,
8-C,9-Gr');
str(T0inp:1:1,T10); Ts:='T0inp='+T10;
str(Tos:1:1,T10); Ts:=Ts+', Tos='+T10;
str(m,T10); Ts:=Ts+', m='+T10;
str(Tmin:1:1,T10); Ts:=Ts+', Tmin='+T10;
str(Tmax:1:1,T10); Ts:=Ts+', Tmax='+T10;
str(Nout,T10); Ts:=Ts+', Nout='+T10+'(0..2)';
str(C,T10); Ts:=Ts+', C='+T10;
Info; j1:=ReadKey;
case j1 of
'1': Our('T0inp',T0inp);
'2': Our('Tos',Tos);
'3': Oui('m',m);
'4': Our('Tmin',Tmin);
195
'5': Our('Tmax',Tmax);
'6': begin
Xmin:=0; Xmax:=Del; Ymin:=Tmin; Ymax:=Tmax;
X0Y0(false); ClearDevice; SystCoor;
end;
'7': Oui('Nout',Nout);
'8': Oui('C',C);
'9': begin
b0:=Q0*c0/(Q0*c0+A0*F0); b1:=1-b0;
f:=Lam*(1/(A0*b0)+Del/Lam+1/A1);
e0:=((Lam/A1+Del)*T0inp+Lam/(A0*b0)*Tos)/f;
e1:=(Tos-T0inp)/f; Hx:=Del/m;
for s:=0 to m do Teta1[s]:=e0+e1*s*Hx;
Teta0:=b0*T0inp+b1*e0;
SetColor(C);
case Nout of
0: begin
SetColor(C);
OutTextXY(x0+L+5,y0-round(Teta0/dy)-4,'0');
Line(x0,y0-round(Teta0/dy),
x0+L,y0-round(Teta0/dy));
Setcolor(15);
end;
1: begin
SetColor(C);
OutTextXY(x0+L+5,y0-round(Teta1[m]/dy)-4,'1');
Moveto(x0,y0-round(Teta1[0]/dy));
for s:=1 to m do
Lineto(x0+round(s*L/m),
y0-round(Teta1[s]/dy));
Setcolor(15);
end;
2: begin
SetColor(C);
OutTextXY(x0+L+5,y0-round(Tos/dy)-4,'2');
Line(x0,y0-round(Tos/dy),
x0+L,y0-round(Tos/dy));
Setcolor(15);
end;
end;
SetColor(15);
end;
end;
until j1='0';
end;
procedure GrHtGt;
var j1:char;
begin
repeat
PutA;
Ou('0-Ex,1-m,2-Ninp,3-Nout,4-Xout,5-D,6-Tc,7-Sc,8-C,9-Gr');
str(m,T10); Ts:='m='+T10;
196
str(Ninp,T10); Ts:=Ts+', Ninp='+T10;
str(Nout,T10); Ts:=Ts+', Nout='+T10;
str(Xout:1:1,T10); Ts:=Ts+', Xout='+T10;
str(D:1:1,T10); Ts:=Ts+', D='+T10;
Init;
str(Ks,T10); Ts:=Ts+'(Ks='+T10+')';
Ts:=Ts+', Tc='+Tc;
str(C,T10); Ts:=Ts+', C='+T10;
Info; j1:=ReadKey;
case j1 of
'1': Oui('m',m);
'2': repeat
Oui('Ninp',Ninp)
until Ninp in [0,2];
'3': repeat
Oui('Nout',Nout)
until Nout in [0,1];
'4': repeat
Our('Xout',Xout)
until Xout <= Del;
'5': Our('D',D);
'6': if Tc='H' then Tc:='G' else Tc:='H';
'7': begin
Xmin:=0; Xmax:=D; Ymin:=0; Ymax:=0;
FormMas;
for s:=0 to L do
begin
if Tc='H' then Y:=Ht[s]
else Y:=Gt[s];
if Y<Ymin then Ymin:=Y;
if Y>Ymax then Ymax:=Y;
end;
X0Y0(false); ClearDevice; SystCoor;
end;
'8': Oui('C',C);
'9': begin
FormMas;
if Tc='H' then Graphic(Ht,C)
else Graphic(Gt,C);
end;
end;
until j1='0';
end;
begin
InGraph;
repeat
PutA;
Ou('Esc-ex,1-TFC,2-Geom,3-Stat,4-GrHtGt,5-DemGodo,6-Service');
Str(Ninp,T10); Ts:='Ninp='+T10;
Str(Nout,T10); Ts:=Ts+', Nout='+T10;
Str(Xout:1:3,T10); Ts:=Ts+', Xout='+T10;
Str(Del:1:3,T10); Ts:=Ts+', Del='+T10;
197
Info; J:=ReadKey;
case J of
'1': TFC;
'2': Geom;
'3': Stat;
'4': GrHtGt;
'5': DemGodo;
'6': Service;
end
until J=#27;
CloseGraph
end.
Додаток 5. Програма DemTr
program DemTr;
uses Crt, Graph, Serv, GodoGt, Groms;
const
Lng:real=200;
D0:real=0.1; D1:real=0.12;
c0:real=4187; c1:real=440;
Ro0:real=900; Ro1:real=7800;
w0:real=2; tau:real=0.05;
m:integer=20; Ks:integer=1;
Ninp:integer=0; Nout:integer=0;
A0:real=500; A1:real=100;
Tos:integer=0; Teta0inp:integer=0;
Xout:real=5; Tc:char='H';
var e0,e1,e2,e3,e4,e5,e6,e7,
t0,t1,t2,t3,b0,b1,Hx,pr,T,dt:real;
Teta1,Teta0:CoefR; Ht:CoefL;
Nx:integer; Ti:string[80];
procedure Init;
var s0,s1,p0,p1,Zn:real; U:boolean;
begin
s0:=Pi*sqr(d0)/4; p0:=Pi*d0;
s1:=Pi*sqr(d1)/4-s0; p1:=Pi*d1;
T0:=s0*Ro0*c0/(A0*p0); Zn:=A0*p0+A1*p1;
T1:=s1*Ro1*c1/Zn; b0:=A0*p0/Zn;
b1:=1-b0;
Hx:=Lng/m; Nx:=round(Xout/Hx);
Ks:=1; dt:=D/L;
repeat
tau:=dt/Ks; e1:=tau/t0; e2:=tau*w0/Hx;
e3:=1-e1-e2; e4:=tau/t1; e5:=1-e4;
e6:=b0*e4; e7:=b1*e4;
U:=(e1<0.1) and (e2<0.1) and (e4<0.1);
if not(U) then inc(ks)
until U;
for s:=0 to m do
begin
198
Teta0[s]:=0; Teta1[s]:=0;
end;
Teta0[-1]:=m; teta1[-1]:=m;
end;
procedure Step;
var s:integer; Tet0,Tet1:CoefR;
begin
for s:=0 to m do
begin
Tet0[s]:=e3*Teta0[s]+e2*Teta0[s-1]+e1*Teta1[s];
Tet1[s]:=e5*Teta1[s]+e6*Teta0[s]+e7*Tos;
end;
Tet0[0]:=Teta0inp; Tet0[-1]:=m;
Tet1[-1]:=m; Teta0:=Tet0; Teta1:=Tet1;
end;
procedure FormHtGt;
var z,s:integer; p,y,yg,yp,k:real; c:string;
begin
Init; Tos:=0; Teta0inp:=0;
case Ninp of
0: Teta0inp:=1;
2: Tos:=1;
end;
dt:=D/L;
Gt[0]:=0; Gt[L]:=0; Ht[0]:=0;
Gt[-1]:=L; Ht[-1]:=L; Gt[L+1]:=dt; Ht[L+1]:=dt;
Nx:=round(Xout/Hx);
for z:=1 to L do
begin
for s:=1 to Ks do Step;
case Nout of
0: y:=Teta0[Nx];
1: y:=Teta1[Nx];
end;
Ht[z]:=y;
end;
for z:=0 to L-1 do Gt[z]:=(Ht[z+1]-Ht[z])/dt;
end;
procedure GrHtGt;
var j1:char; y:real; s:integer;
begin
repeat
PutA;
Ou('0-ex,1-m,2-Ninp,3-Nout,4-Xout,5-D,6-Tc,7-Sc,8-C,9-Gr');
str(m,T10); Ts:='m='+T10;
str(Ninp,T10); Ts:=Ts+', Ninp='+T10;
str(Nout,T10); Ts:=Ts+', Nout='+T10;
str(Xout:1:2,T10); Ts:=Ts+', Xout='+T10;
str(D:1:1,T10); Ts:=Ts+', D='+T10;
Ts:=Ts+', Tc='+Tc;
199
str(C,T10); Ts:=Ts+', C='+T10;
Info; J1:=ReadKey;
case J1 of
'1': Oui('m',m);
'2': if Ninp=0 then Ninp:=2 else Ninp:=0;
'3': if Nout=0 then Nout:=1 else Nout:=0;
'4': Our('Xout',Xout);
'5': Our('D',D);
'6': if Tc='H' then Tc:='G' else Tc:='H';
'7': begin
FormHtGt;
Xmin:=0; Xmax:=D; Ymin:=0; Ymax:=0;
for s:=0 to L do
begin
if Tc='H' then Y:=Ht[s]
else Y:=Gt[s];
if Y<Ymin then Ymin:=Y;
if Y>Ymax then Ymax:=Y;
end;
X0Y0(false); ClearDevice; SystCoor;
if Tc='H' then Graphic(Ht,C)
else Graphic(Gt,C);
end;
'8': Oui('C',C);
'9': begin
FormHtGt;
if Tc='H' then Graphic(Ht,C)
else Graphic(Gt,C);
end;
end;
until J1='0';
end;
procedure Geom;
var j1:char;
begin
repeat
PutA;
Ou('0-ex,1-Lng,2-D0,3-D1,4-W0');
str(Lng:1:1,T10); Ts:='Lng='+T10;
str(D0:1:3,T10); Ts:=Ts+', D0='+T10;
str(D1:1:3,T10); Ts:=Ts+', D1='+T10;
str(W0:1:2,T10); Ts:=Ts+', W0='+T10;
Info; j1:=ReadKey;
case j1 of
'1': Our('Lng',Lng);
'2': Our('D0',D0);
'3': Our('D1',D1);
'4': Our('W0',W0);
end;
until j1='0';
end;
200
procedure TFC;
var j1:char;
begin
repeat
PutA;
Ou('0-ex,1-Ro0,2-Ro1,3-C0,4-C1,5-A0,6-A1');
str(Ro0:1:1,T10); Ts:='Ro0='+T10;
str(Ro1:1:1,T10); Ts:=Ts+', Ro1='+T10;
str(C0:1:1,T10); Ts:=Ts+', C0='+T10;
str(C1:1:1,T10); Ts:=Ts+', C1='+T10;
str(A0:1:1,T10); Ts:=Ts+', A0='+T10;
str(A1:1:1,T10); Ts:=Ts+', A1='+T10;
Info; j1:=ReadKey;
case j1 of
'1': Our('Ro0',Ro0);
'2': Our('Ro1',Ro1);
'3': Our('C0',C0);
'4': Our('C1',C1);
'5': Our('A0',A0);
'6': Our('A1',A1);
end;
until j1='0';
end;
procedure StCar;
const
Tos:real=20; T0inp:real=80;
Tmin:real=0; Tmax:real=100;
Nout:integer=0;
var
S0,S1,P0,P1,T0,b0,b1,f0:real;
s:integer; j1:char; Teta0,Teta1:CoefL;
begin
repeat
PutA;
Ou('0-Ex,1-Tos,2-T0inp,3-Tmin,4-Tmax,5-Sc,6-Nout,7-C,
8-Gr,9-Service');
Str(Tos:1:2,T10); Ts:='Tos='+T10;
Str(T0inp:1:2,T10); Ts:=Ts+', T0inp='+T10;
Str(Tmin:1:2,T10); Ts:=Ts+', Tmin='+T10;
Str(Tmax:1:2,T10); Ts:=Ts+', Tmax='+T10;
Str(Nout,T10); Ts:=Ts+', Nout='+T10+'(0..2)';
Str(C,T10); Ts:=Ts+', C='+T10;
Info; j1:=ReadKey;
case j1 of
'1': Our('Tos',Tos);
'2': Our('T0inp',T0inp);
'3': Our('Tmin',Tmin);
'4': Our('Tmax',Tmax);
'5': begin
Xmin:=0; Xmax:=Lng; Ymin:=Tmin; Ymax:=Tmax;
X0Y0(false); ClearDevice; SystCoor;
end;
201
'6': Oui('Nout',Nout);
'7': Oui('C',C);
'8': begin
S0:=pi*sqr(d0)/4; P0:=pi*d0;
S1:=pi*sqr(d1)/4-S0; P1:=pi*d1;
b0:=A0*P0/(A0*P0+A1*P1); b1:=1-b0;
T0:=S0*Ro0*C0/(A0*P0);
f0:=T0*w0/b1; Teta0[-1]:=L; Teta1[-1]:=L;
for s:=0 to L do
begin
Teta0[s]:=Tos+(T0inp-Tos)*exp(-s*dx/f0);
Teta1[s]:=Tos+b0*(T0inp-Tos)*exp(-s*dx/f0);
end;
case Nout of
0: begin
Graphic(Teta0,C); Setcolor(C);
OutTextXY(x0+L+5,
y0-round(Teta0[L]/dy)-5,'0');
Setcolor(15);
end;
1: begin
Graphic(Teta1,C); Setcolor(C);
OutTextXY(x0+L+5,
y0-round(Teta1[L]/dy)-5,'1');
Setcolor(15);
end;
2: begin
Setcolor(C);
Line(x0,y0-round(Tos/dy),
x0+L,y0-round(Tos/dy));
OutTextXY(x0+L+5,y0-round(Tos/dy)-5,'2');
SetColor(15);
end;
end;
end;
'9': Service;
end;
until j1='0';
end;
begin
C:=15;
repeat
PutA;
Ou('Esc-ex,1-Geom,2-TFC,3-GrHtGt,4-DemGodo,5-Stat,6-Service');
J:=ReadKey;
case J of
'1': Geom;
'2': TFC;
'3': GrHtGt;
'4': DemGodo;
'5': StCar;
'6': Service;
202
end
until J=#27;
CloseGraph;
end.
Додаток 6. Програма DemZt
Program DemZt;
uses Crt, Graph, Serv, GodoGt, Groms;
const
D0:real=0.016; D1:real=0.03;
C0:real=4187; Ro0:real=900;
C1:real=440; Ro1:real=7800;
C2:real=4187; Ro2:real=900;
C3:real=440; Ro3:real=7800;
w0:real=2; A0:real=700;
Q2:real=10; A1:real=500;
G2:real=100; A2:real=500;
G3:real=15; A3:real=100;
F:real=0.1; Tc:char='H';
F2:real=2; F3:real=2.2;
N:integer=10; m:integer=50;
T0inp:real=40; dT0inp:real=0;
T2inp:real=60; dT2inp:real=0;
Tos:real=20; dTos:real=0;
Tmin:real=0; Tmax:real=100;
D:real=40; Nc:integer=10;
Lng:real=10; Xout:real=10; {Xout<=Lng, Nout=0}
Ninp:integer=0; {0,2,4}
Nout:integer=0; {0..3}
var Dt,t,Tau,Hx,Af,P0,P1,S0,S1,F1,T0,T1,T2,T3,
e0,e1,e2,e3,e4,b0,b1,b2,b3,b4,b5,b6,b7,b8,
Teta2,Teta3,Tet2,Tet3:real;
Teta0,Teta1:CoefR; Ht,Tet0,Tet1:Coefl; Nx,ks:integer;
procedure Geom;
var J1:char;
begin
repeat
PutA;Ou('0-Ex,1-Lng,2-D0,3-D1,4-N,5-G2,6-G3,7-F2,8-F3');
Str(Lng:1:1,T10); Ts:='Lng='+T10;
Str(D0:1:3,T10); Ts:=Ts+', D0='+T10;
Str(D1:1:3,T10); Ts:=Ts+', D1='+T10;
Str(N,T10); Ts:=Ts+', N='+T10;
Str(G2:1:1,T10); Ts:=Ts+', G2='+T10;
Str(G3:1:1,T10); Ts:=Ts+', G3='+T10;
Str(F2:1:1,T10); Ts:=Ts+', F2='+T10;
Str(F3:1:1,T10); Ts:=Ts+', F3='+T10;
Info;
J1:=readkey;
case J1 of
'1': Our('Lng',Lng);
203
'2': Our('D0',D0);
'3': Our('D1',D1);
'4': Oui('N',N);
'5': Our('G2',G2);
'6': Our('G3',G3);
'7': Our('F2',F2);
'8': Our('F3',F3);
end;
until J1='0';
end;
procedure TfPar;
var j1,j2:char;
begin
repeat
PutA;Ou('0-Ex,1-C0,2-C1,3-C2,4-C3,5-Ro0,6-Ro1,7-As');
Str(C0:1:1,T10); Ts:='C0='+T10;
Str(C1:1:1,T10); Ts:=Ts+',C1='+T10;
Str(C2:1:1,T10); Ts:=Ts+',C2='+T10;
Str(C3:1:1,T10); Ts:=Ts+',C3='+T10;
Str(Ro0:1:1,T10); Ts:=Ts+',Ro0='+T10;
Str(Ro1:1:1,T10); Ts:=Ts+',Ro1='+T10;
Info;
J1:=readkey;
case J1 of
'1': Our('C0',C0);
'2': Our('C1',C1);
'3': Our('C2',C2);
'4': Our('C3',C3);
'5': Our('Ro0',Ro0);
'6': Our('Ro1',Ro1);
'7': repeat
PutA; Ou('0-Ex, 1-A0, 2-A1, 3-A2, 4-A3');
str(A0:1:1,T10); Ts:='A0='+T10;
str(A1:1:1,T10); Ts:=Ts+', A1='+T10;
str(A2:1:1,T10); Ts:=Ts+', A2='+T10;
str(A3:1:1,T10); Ts:=Ts+', A3='+T10;
Info; j2:=ReadKey;
case j2 of
'1': Our('A0',A0);
'2': Our('A1',A1);
'3': Our('A2',A2);
'4': Our('A3',A3);
end;
until j2='0';
end;
until j1='0';
end;
procedure Inp;
var J1:char;
begin
repeat
204
PutA;Ou('0-Ex,1-w0,2-T0inp,3-Q2,4-T2inp,5-Tos,6-m,7-f');
Str(w0:1:2,T10); Ts:='w0='+T10;
Str(T0inp:1:1,T10); Ts:=Ts+', T0inp='+T10;
Str(Q2:1:2,T10); Ts:=Ts+', Q2='+T10;
Str(T2inp:1:1,T10); Ts:=Ts+', T2inp='+T10;
Str(Tos:1:1,T10); Ts:=Ts+', Tos='+T10;
Str(m,T10); Ts:=Ts+', m='+T10;
Str(f:1:2,T10); Ts:=Ts+', f='+T10;
Info;
J1:=readkey;
case J1 of
'1': Our('w0',w0);
'2': Our('T0inp',T0inp);
'3': Our('Q2',Q2);
'4': Our('T2inp',T2inp);
'5': Our('Tos',Tos);
'6': Oui('m',m);
'7': Our('f',f);
end;
until J1='0';
end;
procedure CoefS;
var u:boolean; Zn:real;
begin
P0:=Pi*D0; S0:=Pi*sqr(D0)/4;
P1:=Pi*D1; S1:=Pi*sqr(D1)/4-S0;
T0:=S0*Ro0*c0/(A0*P0); Zn:=A0*P0+A1*P1;
T1:=S1*Ro1*c1/Zn; b0:=A0*P0/Zn; b1:=1-b0;
f1:=P1*Lng*N; Zn:=Q2*c2+A1*f1+A2*f2;
T2:=G2*c2/Zn;
b2:=A1*f1/Zn; b3:=A2*f2/Zn;
b4:=1-b2-b3; Zn:=A2*f2+A3*f3;
T3:=G3*c3/Zn; b5:=A2*f2/Zn; b6:=1-b5;
dt:=D/L; Hx:=Lng/m; ks:=1;
repeat
Tau:=dt/Ks;
e0:=Tau/T0; e1:=Tau/T1; e2:=Tau/T2;
e3:=Tau/T3; e4:=T0*w0/Hx;
u:=(e0<f)and(e1<f)and(e2<f)and(e3<f)and(e4*e2<1);
if not (u) then inc(ks);
until u;
end;
procedure Stat;
var s:integer; r0,r1,r2,r3,g,gL,dx:real;
begin
CoefS;
g:=b1/(T0*w0); gL:=g*Lng; dx:=Lng/L;
r0:=1-b2+b0*b2/gL*(1-exp(-gL))-b3*b5;
r1:=b0*b2/(gL*r0)*(1-exp(-gL));
r2:=b4/r0; r3:=b3*b6/r0;
Tet2:=r1*T0inp+r2*T2inp+r3*Tos;
205
Tet3:=b5*Tet2+b6*Tos;
Tet0[-1]:=L; Tet1[-1]:=L;
for s:=0 to L do
begin
Tet0[s]:=Tet2+(T0inp-Tet2)*exp(-g*s*dx);
Tet1[s]:=b0*Tet0[s]+b1*Tet2;
end;
end;
procedure DemStat;
var j1:char;
begin
repeat
PutA;
Ou('0-Ex,1-T0i,2-T2i,3-Tos,4-Tmin,5-Tmax,6-Sc,7-Nout,8-C,9-
Gr');
str(T0inp:1:1,T10); Ts:='T0i='+T10;
str(T2inp:1:1,T10); Ts:=Ts+', T2i='+T10;
str(Tos:1:1,T10); Ts:=Ts+', Tos='+T10;
str(Tmin:1:1,T10); Ts:=Ts+', Tmin='+T10;
str(Tmax:1:1,T10); Ts:=Ts+', Tmax='+T10;
str(Nout,T10); Ts:=Ts+', Nout='+T10+'(0..4)';
str(C,T10); Ts:=Ts+', C='+T10;
Info; j1:=ReadKey;
case j1 of
'1': Our('T0i',T0inp);
'2': Our('T2i',T2inp);
'3': Our('Tos',Tos);
'4': Our('Tmin',Tmin);
'5': Our('Tmax',Tmax);
'6': begin
Xmin:=0; Xmax:=Lng; Ymin:=Tmin; Ymax:=Tmax;
X0Y0(false); ClearDevice; SystCoor; Stat;
end;
'7': Oui('Nout',Nout);
'8': Oui('C',C);
'9': case Nout of
0: begin
Graphic(Tet0,C); Setcolor(C);
OutTextXY(x0+L+5,
y0-round(Tet0[L]/dy)-4,'0');
Setcolor(15);
end;
1: begin
Graphic(Tet1,C); Setcolor(C);
OutTextXY(x0+L+5,
y0-round(Tet1[L]/dy)-4,'1');
Setcolor(15);
end;
2: begin
Setcolor(C);
Line(x0,y0-round(Tet2/dy),
x0+L,y0-round(Tet2/dy));
206
OutTextXY(x0+L+5,y0-round(Tet2/dy)-4,'2');
Setcolor(15);
end;
3: begin
Setcolor(C);
Line(x0,y0-round(Tet3/dy),
x0+L,y0-round(Tet3/dy));
OutTextXY(x0+L+5,y0-round(Tet3/dy)-4,'3');
Setcolor(15);
end;
4: begin
Setcolor(C);
Line(x0,y0-round(Tos/dy),
x0+L,y0-round(Tos/dy));
OutTextXY(x0+L+5,y0-round(Tos/dy)-4,'4');
Setcolor(15);
end;
end;
end;
until j1='0';
end;
procedure Step;
var s:integer; Sum,Tet2,Tet3:real;
Tet0,Tet1:coefr;
begin
CoefS;
Tet0[-1]:=m; Tet1[-1]:=m;
Tet0[0]:=dT0inp;
for s:=0 to m do
begin
if s>0 then
Tet0[s]:=Teta0[s]+e0*(Teta1[s]-e4*(Teta0[s]-
Teta0[s-1])-Teta0[s]);
Tet1[s]:=Teta1[s]+e1*(b0*Teta0[s]+b1*Teta2-Teta1[s]);
end;
Sum:=(Teta1[0]+Teta1[m])/2;
for s:=1 to m-1 do Sum:=Sum+Teta1[s];
Tet2:=Teta2+e2*(b2*Sum/m+b3*Teta3+b4*dT2inp-Teta2);
Tet3:=Teta3+e3*(b5*Teta2+b6*dTos-Teta3);
Teta0:=Tet0; Teta1:=Tet1; Teta2:=Tet2; Teta3:=Tet3;
end;
procedure FormHtGt;
var s,z:integer;
begin
CoefS;
Teta0[-1]:=m; Teta1[-1]:=m;
for s:=0 to m do
begin
Teta0[s]:=0; Teta1[s]:=0;
end;
Teta2:=0; Teta3:=0;
207
dT0inp:=0; dT2inp:=0; dTos:=0;
case Ninp of
0: dT0inp:=1;
2: dT2inp:=1;
4: dTos:=1;
end;
Ht[-1]:=L; Ht[0]:=0; dt:=D/L; Ht[L+1]:=dt; Hx:=Lng/m;
Gt[-1]:=L; Gt[0]:=0; Gt[L+1]:=dt; Nx:=round(Xout/Hx);
for z:=1 to L do
begin
for s:=1 to ks do Step;
case Nout of
0: Ht[z]:=Teta0[Nx];
1: Ht[z]:=Teta1[Nx];
2: Ht[z]:=Teta2;
3: Ht[z]:=Teta3;
end;
Gt[z]:=(Ht[z]-Ht[z-1])/dt;
end;
end;
procedure GrHtGt;
var j1:char; y:real; s:integer;
begin
repeat
CoefS;
PutA;
Ou('0-Ex,1-m,2-Ninp,3-Nout,4-Xout,5-D,6-Tc,7-Sc,8-C,9-Gr');
Str(m,T10); Ts:='m='+T10;
Str(Ninp,T10); Ts:=Ts+', Ninp='+T10;
Str(Nout,T10); Ts:=Ts+', Nout='+T10;
Str(Xout:1:2,T10); Ts:=Ts+', Xout='+T10;
Str(D:1:1,T10); Ts:=Ts+', D='+T10;
Str(Ks,T10); Ts:=Ts+', (Ks='+T10+')';
Ts:=Ts+', Tc='+Tc;
Str(C,T10); Ts:=Ts+', C='+T10;
Info; j1:=readkey;
case J1 of
'1': Oui('m',m);
'2': Oui('Ninp',Ninp);
'3': Oui('Nout',Nout);
'4': Our('Xout',Xout);
'5': Our('D',D);
'6': if Tc='H' then Tc:='G' else Tc:='H';
'7': begin
Xmin:=0; Xmax:=D; Ymin:=0; Ymax:=0;
FormHtGt;
for s:=0 to L do
begin
if Tc='H' then y:=Ht[s]
else y:=Gt[s];
if y<Ymin then Ymin:=y;
if y>Ymax then Ymax:=y;
208
end;
X0Y0(false); ClearDevice; SystCoor;
end;
'8': Oui('C',C);
'9': begin
FormHtGt;
if Tc='H' then Graphic(Ht,C)
else Graphic(Gt,C);
end;
end;
until j1='0';
end;
begin
C:=15; Hx:=Lng/m;
repeat
PutA;
Ou('Esc-exit,1-Geom,2-TfPar,3-Stat,4-GrHtGt,5-DemGodo,
6-Service');
J:=readkey;
case J of
'1': Geom;
'2': TfPar;
'3': DemStat;
'4': GrHtGt;
'5': DemGodo;
'6': Service;
end;
until J=#27;
CloseGraph
end.
Додаток 7. Програма DemTrTr program DemTrTr;
uses Crt, Graph, Serv, GodoGt, Groms;
const
D0:real=0.03; D1:real=0.034;
D2:real=0.044; D3:real=0.05;
c0:real=4187; c1:real=440;
c2:real=3500; c3:real=440;
Ro0:real=1000; Ro1:real=7800;
Ro2:real=900; Ro3:real=7800;
A0:real=5000; A1:real=3000;
A2:real=3000; A3:real=100;
w0:real=2; w2:real=1.5;
T0inp:real=80; dT0inp:real=0;
T2inp:real=50; dT2inp:real=0;
Tos:real=20; dTos:real=0;
Tmin:real=0; Tmax:real=100;
m:integer=100; Nr:integer=1;
Xout:real=5; Lng:real=10;
209
Ninp:integer=2; Nout:integer=2;
Tc:char='H';
var f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,
T0,T1,T2,T3,b0,b1,b2,b3,b4,b5,Hx,tau:real;
Teta0,Teta1,Teta2,Teta3:CoefR;
Tet0,Tet1,Tet2,Tet3,Ht:CoefL;
Nx:integer;
procedure Step;
var s: integer;
Tet0, Tet1, Tet2, Tet3: CoefR;
begin
for s:=0 to m do
begin
Tet0[s]:=f0*Teta1[s]+f2*Teta0[s]+f1*Teta0[s-1];
Tet1[s]:=f4*Teta1[s]+f5*Teta0[s]+f6*Teta2[s];
if Nr=1 then Tet2[s]:=f9*Teta2[s]+f8*Teta2[s-1]+
f10*Teta1[s]+f11*Teta3[s]
else Tet2[s]:=f9*Teta2[s]+f8*Teta2[s+1]+
f10*Teta1[s]+f11*Teta3[s];
Tet3[s]:=f13*Teta3[s]+f14*Teta2[s]+f15*dTos;
end;
Tet0[0]:=dT0inp;
if Nr =1 then Tet2[0]:=dT2inp
else Tet2[m]:=dT2inp;
Tet0[-1]:=m; Tet1[-1]:=m; Tet2[-1]:=m; Tet3[-1]:=m;
Teta0:=Tet0; Teta1:=Tet1; Teta2:=Tet2; Teta3:=Tet3
end;
procedure Stat;
var s:integer;
x,b,zn,f0,f2,f3,f4,b6,b7,b8,
e1,e2,r1,r2,s0,p0,s1,p1,s2,p2,s3,p3:real;
begin
s0:=Pi*sqr(D0)/4; p0:=Pi*D0;
s1:=Pi*sqr(D1)/4-s0; p1:=Pi*D1;
s2:=Pi*sqr(D2)/4-s1; p2:=Pi*D2;
s3:=Pi*sqr(D3)/4-s2; p3:=Pi*D3;
T0:=s0*Ro0*c0/(A0*p0); Zn:=A0*p0+A1*p1;
T1:=s1*Ro1*c1/Zn;
b0:=A0*p0/Zn; b1:=1-b0; Zn:=A1*p1+A2*p2;
T2:=s2*Ro2*c2/Zn; b2:=A1*p1/Zn; b3:=1-b2;
Zn:=A2*p2+A3*p3; b4:=A2*p2/Zn; b5:=1-b4;
f0:=T0*w0/b1; b:=1-b1*b2-b3*b4; f2:=T2*w2/b;
b6:=b0*b2/b; b7:=b3*b5/b; b8:=b7/(1-b6);
b:=sqrt(sqr(f0+Nr*f2)-Nr*4*f0*f2*(1-b6));
if Nr=1
then
begin
r1:=(-(f0+f2)+b)/(2*f0*f2);
r2:=(-(f0+f2)-b)/(2*f0*f2);
f4:=(T2inp-T0inp)/f0;
end
210
else
begin
r1:=(f0-f2-b)/(2*f0*f2);
r2:=(f0-f2+b)/(2*f0*f2);
f4:=T2inp-b8*Tos;
end;
f3:=T0inp-b8*Tos;
f5:=(1+f0*r1)*exp(r1*Lng);
f6:=(1+f0*r2)*exp(r2*Lng);
if Nr=1
then
begin
e1:=(f3*r2-f4)/(r2-r1);
e2:=(f4-f3*r1)/(r2-r1);
end
else
begin
e1:=(f3*f6-f4)/(f6-f5);
e2:=(f4-f3*f5)/(f6-f5);
end;
Tet0[-1]:=L; Tet1[-1]:=L; Tet2[-1]:=L; Tet3[-1]:=L;
Tet0[0]:=T0inp; Tet2[0]:=T2inp; dx:=Lng/L;
for s:=0 to L do
begin
x:=s*dx;
Tet0[s]:=b8*Tos+e1*exp(r1*x)+e2*exp(r2*x);
Tet1[s]:=Tet0[s]+w0*T0*(e1*r1*exp(r1*x)+e2*r2*exp(r2*x));
Tet2[s]:=(Tet1[s]-b0*Tet0[s])/b1;
Tet3[s]:=b4*Tet2[s]+b5*Tos;
end;
end;
procedure DemStat;
var j1:char;
begin
repeat
PutA;
Ou('0-Ex,1-T0i,2-T2i,3-Tos,4-Tmin,5-Tmax,6-Sc,7-Nout,8-C,
9-Gr');
str(T0inp:1:1,T10); Ts:='T0i='+T10;
str(T2inp:1:1,T10); Ts:=Ts+', T2i='+T10;
str(Tos:1:1,T10); Ts:=Ts+', Tos='+T10;
str(Tmin:1:1,T10); Ts:=Ts+', Tmin='+T10;
str(Tmax:1:1,T10); Ts:=Ts+', Tmax='+T10;
str(Nout,T10); Ts:=Ts+', Nout='+T10+'(0..4)';
str(C,T10); Ts:=Ts+', C='+T10;
Info; j1:=ReadKey;
case j1 of
'1': Our('T0i',T0inp);
'2': Our('T2i',T2inp);
'3': Our('Tos',Tos);
'4': Our('Tmin',Tmin);
211
'5': Our('Tmax',Tmax);
'6': begin
Xmin:=0; Xmax:=Lng; Ymin:=Tmin; Ymax:=Tmax;
X0Y0(false); ClearDevice; SystCoor; Stat;
end;
'7': Oui('Nout',Nout);
'8': Oui('C',C);
'9': case Nout of
0: begin
Graphic(Tet0,C); SetColor(C);
OutTextXY(X0+L+5,Y0-round(Tet0[L]/dy)-4,'0');
SetColor(15);
end;
1: begin
Graphic(Tet1,C); SetColor(C);
OutTextXY(X0+L+5,Y0-round(Tet1[L]/dy)-4,'1');
SetColor(15);
end;
2: begin
Graphic(Tet2,C); SetColor(C);
OutTextXY(X0+L+5,Y0-round(Tet2[L]/dy)-4,'2');
SetColor(15);
end;
3: begin
Graphic(Tet3,C); SetColor(C);
OutTextXY(X0+L+5,Y0-round(Tet3[L]/dy)-4,'3');
SetColor(15);
end;
4: begin
SetColor(C);
Line(x0,y0-round(Tos/dy),
x0+L,y0-round(Tos/dy));
OutTextXY(X0+L+5,Y0-round(Tos/dy)-4,'4');
SetColor(15);
end;
end;
end;
until j1='0';
end;
procedure FormHtGt;
var s: integer; U:boolean;
s0,s1,s2,s3,p0,p1,p2,p3,Zn:real;
begin
s0:=Pi*sqr(D0)/4; p0:=Pi*D0;
s1:=Pi*sqr(D1)/4-s0; p1:=Pi*D1;
s2:=Pi*sqr(D2)/4-s1; p2:=Pi*D2;
s3:=Pi*sqr(D3)/4-s2; p3:=Pi*D3;
T0:=s0*Ro0*c0/(A0*p0); Zn:=A0*p0+A1*p1;
T1:=s1*Ro1*c1/Zn;
b0:=A0*p0/Zn; b1:=1-b0; Zn:=A1*p1+A2*p2;
T2:=s2*Ro2*c2/Zn; b2:=A1*p1/Zn; b3:=1-b2; Zn:=A2*p2+A3*p3;
T3:=s3*Ro3*c3/Zn; b4:=A2*p2/Zn; b5:=1-b4;
212
Hx:=Lng/m; Nx:=round(Xout/Hx);
dt:=D/L; Ks:=1;
repeat
tau:=dt/Ks; f0:=tau/T0; f1:=tau*w0/Hx;
f2:=1-f0-f1; f3:=tau/T1; f4:=1-f3;
f5:=b0*f3; f6:=b1*f3; f7:=tau/T2;
f8:=w2*tau/Hx; f9:=1-f7-f8;
f10:=b2*f7; f11:=b3*f7;
f12:=tau/T3; f13:=1-f12; f14:=b4*f12; f15:=b5*f12;
U:=(f0<0.1)and(f1<0.1)and(f3<0.1)and(f7<0.1)and
(f8<0.1)and(f12<0.1);
if not(U) then inc(Ks)
until U;
Teta0[-1]:=m; Teta1[-1]:=m; Teta2[-1]:=m; Teta3[-1]:=m;
for s:=0 to m do
begin
Teta0[s]:=0; Teta1[s]:=0;
Teta2[s]:=0; Teta3[s]:=0
end;
Ht[-1]:=L; Ht[0]:=0; Ht[L+1]:=Dt;
Gt[-1]:=L; Gt[0]:=0; Gt[L]:=0; Gt[L+1]:=Dt;
dT0inp:=0; dT2inp:=0; dTos:=0;
case Ninp of
0: dT0inp:=1;
2: dT2inp:=1;
4: dTos:=1;
end;
for z:=1 to L do
begin
for s:=1 to ks do Step;
case Nout of
0: Ht[z]:=Teta0[nx];
1: Ht[z]:=Teta1[Nx];
2: Ht[z]:=Teta2[Nx];
3: Ht[z]:=Teta3[Nx]
end;
Gt[z]:=(Ht[z]-Ht[z-1])/dt
end
end;
procedure GrHtGt;
var j1:char; y:real; s:integer;
begin
repeat
PutA;
Ou('0-ex,1-m,2-Ninp,3-Nout,4-Xout,5-D,6-Tc,7-Sc,8-C,9-Gr');
Str(m,T10); Ts:='m='+T10;
Str(Ninp,T10); Ts:=Ts+', Ninp='+T10;
Str(Nout,T10); Ts:=Ts+', Nout='+T10;
Str(Xout:1:3,T10); Ts:=Ts+', Xout='+T10;
Str(D:1:1,T10); Ts:=Ts+', D='+T10;
Ts:=Ts+', Tc='+Tc;
Str(C,T10); Ts:=Ts+', C='+T10;
213
Info; j1:=ReadKey;
case j1 of
'1': Oui('m',m);
'2': Oui('Ninp',Ninp);
'3': Oui('Nout',Nout);
'4': Our('Xout',Xout);
'5': Our('D',D);
'6': if Tc='H' then Tc:='G' else Tc:='H';
'7': begin
FormHtGt;
Xmin:=0; Xmax:=D; Ymin:=0; Ymax:=0;
for s:=0 to L do
begin
case Tc of
'H': y:=Ht[s];
'G': y:=Gt[s];
end;
if y<Ymin then Ymin:=y;
if y>Ymax then Ymax:=y;
end;
X0Y0(false); ClearDevice; SystCoor;
if Tc='H' then Graphic(Ht,C)
else Graphic(Gt,C);
end;
'8': Oui('C',C);
'9': begin
FormHtGt;
if Tc='H' then Graphic(Ht,C)
else Graphic(Gt,C);
end;
end;
until j1='0';
end;
procedure Geom;
var j2:char;
begin
repeat
PutA;
Ou('0-ex,1-Lng,2-D0,3-D1,4-D2,5-D3');
Str(Lng:1:1,T10); Ts:='Lng='+T10;
Str(D0:1:3,T10); Ts:=Ts+', D0='+T10;
Str(D1:1:3,T10); Ts:=Ts+', D1='+T10;
Str(D2:1:3,T10); Ts:=Ts+', D2='+T10;
Str(D3:1:3,T10); Ts:=Ts+', D3='+T10;
Info; j2:=ReadKey;
case j2 of
'1': Our('Lng',Lng);
'2': Our('D0',D0);
'3': Our('D1',D1);
'4': Our('D2',D2);
'5': Our('D3',D3);
end;
214
until j2='0';
end;
procedure Ro;
var j2:char;
begin
repeat
PutA;
Ou('0-ex,1-Ro0,2-Ro1,3-Ro2,4-Ro3');
Str(Ro0:1:1,T10); Ts:='Ro0='+T10;
Str(Ro1:1:1,T10); Ts:=Ts+', Ro1='+T10;
Str(Ro2:1:1,T10); Ts:=Ts+', Ro2='+T10;
Str(Ro3:1:1,T10); Ts:=Ts+', Ro3='+T10;
Info; j2:=ReadKey;
case j2 of
'1': Our('Ro0',Ro0);
'2': Our('Ro1',Ro1);
'3': Our('Ro2',Ro2);
'4': Our('Ro3',Ro3);
end;
until j2='0';
end;
procedure Cs;
var j2:char;
begin
repeat
PutA;
Ou('0-ex,1-c0,2-c1,3-c2,4-c3');
Str(c0:1:1,T10); Ts:='c0='+T10;
Str(c1:1:1,T10); Ts:=Ts+', c1='+T10;
Str(c2:1:1,T10); Ts:=Ts+', c2='+T10;
Str(c3:1:1,T10); Ts:=Ts+', c3='+T10;
Info; j2:=ReadKey;
case j2 of
'1': Our('c0',c0);
'2': Our('c1',c1);
'3': Our('c2',c2);
'4': Our('c3',c3);
end;
until j2='0';
end;
procedure As;
var j2:char;
begin
repeat
PutA;
Ou('0-ex,1-w0,2-w2,3-A0,4-A1,5-A2,6-A3');
Str(w0:1:2,T10); Ts:='w0='+T10;
Str(w2:1:2,T10); Ts:=Ts+', w2='+T10;
Str(A0:1:1,T10); Ts:=Ts+', A0='+T10;
Str(A1:1:1,T10); Ts:=Ts+', A1='+T10;
215
Str(A2:1:1,T10); Ts:=Ts+', A2='+T10;
Str(A3:1:1,T10); Ts:=Ts+', A3='+T10;
Info; j2:=ReadKey;
case j2 of
'1': Our('w0',w0);
'2': Our('w2',w2);
'3': Our('A0',A0);
'4': Our('A1',A1);
'5': Our('A2',A2);
'6': Our('A3',A3);
end;
until j2='0';
end;
procedure Param;
var j1:char;
begin
repeat
PutA;
Ou('0-ex,1-Geom,2-Ro,3-Cs,4-As');
j1:=ReadKey;
case j1 of
'1': Geom;
'2': Ro;
'3': Cs;
'4': As;
end;
until j1='0';
end;
begin
C:=15;
repeat
PutA;
Ou('Esc-ex,1-Nr,2-Param,3-Stat,4-GrHtGt,5-DemGodo,6-Service');
Str(Nr,T10); Ts:='Nr='+T10;
Info; j:=ReadKey;
case j of
'1': if Nr=1 then Nr:=-1 else Nr:=1;
'2': Param;
'3': DemStat;
'4': GrHtGt;
'5': DemGodo;
'6': Service;
end;
until j=#27;
Closegraph;
end.
216
Додаток 8. Програма DemStrn
program DemStrn;
uses Graph, Crt, Serv, GodoGt, Groms;
const
Lng:real=0.5; Tst:real=2;
Ms:real=0.05; K:real=0.5;
m:integer=100; Xout:real=0.2;
Mpz:integer=0; {alt 1,2}
Tc:char='H'; {alt G}
F:integer=0; {alt 1}
YL:integer=1; {alt 0}
YR:integer=0; {alt 1}
var q,e0,e2,Hx,Tau:real;
Nout:integer; Ht:CoefL; My,Myp:CoefR;
procedure Step;
var s: integer;
Myn: Coefr;
begin
Myn[-1]:=m; Myn[0]:=YL; Myn[m]:=Yr; Myn[m+1]:=Hx;
for s:=1 to m-1 do
Myn[s]:=2*My[s]-Myp[s]-e0*(My[s]-Myp[s])+
e2*(My[s-1]-2*My[s]+My[s+1]);
Myp:=My; My:=Myn;
end;
procedure FormHtGt;
var s,z:integer; e,Cst:real; Myn:CoefR;
begin
e:=K/Ms; Cst:=sqrt(Tst/Ms);
Hx:=Lng/m; Ks:=1; dt:=d/L;
repeat
Tau:=dt/Ks; q:=Cst*Tau/Hx;
if q>0.05 then inc(Ks);
until q<=0.05;
e0:=e*Tau; e2:=sqr(q); Myn[m+1]:=Hx;
YL:=0; Yr:=0; F:=0;
case Mpz of
0: YL:=1;
1: Yr:=1;
2: F:=1;
end;
for s:= 0 to m do
begin
My[s]:=0; Myp[s]:=0;
end;
Nout:=round(Xout/Hx);
Ht[-1]:=L; Ht[0]:=0; Ht[L+1]:=dt;
Gt[-1]:=L; Gt[L]:=0; Gt[L+1]:=dt;
for s:=1 to L do
begin
217
for z:=1 to Ks do Step;
Ht[s]:=My[Nout];
end;
for s:=1 to L do Gt[s]:=(Ht[s]-Ht[s-1])/dt;
end;
procedure GrHtGt;
var j1:char; y:real; s:integer;
begin
repeat
PutA;
Ou('0-ex,1-m,2-Xout,3-Mpz,4-D,5-Tc,6-Sc,7-C,8-Gr');
Str(m,T10); Ts:='m='+T10;
Str(Xout:1:3,T10); Ts:=Ts+', Xout='+T10;
Str(Mpz,T10); Ts:=Ts+', Mpz='+T10;
Str(D:1:1,T10); Ts:=Ts+', D='+T10;
Ts:=Ts+', Tc='+Tc;
Str(C,T10); Ts:=Ts+', C='+T10;
Info; J1:=ReadKey;
case J1 of
'1': Oui('m',m);
'2': Our('Xout',Xout);
'3': Oui('Mpz [0..2]',Mpz);
'4': Our('D',D);
'5': if Tc='H' then Tc:='G' else Tc:='H';
'6': begin
FormHtGt; Xmin:=0; Xmax:=D;
Ymin:=0; Ymax:=0;
for s:=0 to L do
begin
if TC='H' then Y:=Ht[s]
else Y:=Gt[s];
if Y<Ymin then Ymin:=Y;
if Y>Ymax then Ymax:=Y;
end;
X0Y0(false); ClearDevice; SystCoor;
if Tc='H' then Graphic(Ht,C)
else Graphic(Gt,C);
end;
'7': Oui('C',C);
'8': begin
FormHtGt;
if Tc='G' then Graphic(Gt,C)
else Graphic(Ht,C);
end;
end
until J1='0'
end;
procedure Param;
var j1: char;
begin
repeat
218
PutA; Ou('0-ex, 1-Lng, 2-Ms, 3-Tst, 4-K');
Str(Lng:1:3,T10); Ts:='Lng='+T10;
Str(Ms:1:3,T10); Ts:=Ts+', Ms='+T10;
Str(Tst:1:3,T10); Ts:=Ts+', Tst='+T10;
Str(K:1:3,T10); Ts:=Ts+', K='+T10;
Info; J1:=ReadKey;
case J1 of
'1': Our('Lng',Lng);
'2': Our('Ms',Ms);
'3': Our('Tst',Tst);
'4': Our('K',K);
end;
until J1='0';
end;
begin
C:=15; Kw:=1.1;
repeat
PutA;
Ou('Esc-ex,1-Param,2-GrHtGt,3-DemGodo,4-Service');
J:=ReadKey;
case J of
'1': Param;
'2': GrHtGt;
'3': DemGodo;
'4': Service;
end
until J=#27;
CloseGraph
end.
Додаток 9. Програма DemNit
program DemNit;
uses Graph,Crt,Serv,GodoGt,Groms;
const
Lng:real=0.5; M1:real=0.3;
Mn:real=0.05; K:real=0.05;
K1:real=0.1; m:integer=50;
Xout:real=0.2; g:real=9.8;
Mpz:integer=0; {alt 1,2}
Tc:char='H'; {alt G}
F:integer=0; {alt 1}
Yv:integer=1; {alt 0}
F1:integer=0; {alt 1}
var q,e0,e1,e2,e3,e4,e5,Hx,Tau:real;
Nout:integer; Ht:CoefL; My,Myp:CoefR;
procedure Step;
var s:integer; Myn:Coefr;
begin
Myn[-1]:=m; Myn[0]:=Yv;
219
Myn[m]:=2*My[m]-Myp[m]-e3*(My[m]-Myp[m])-
e4*(My[m]-My[m-1])+e5*f1;
Myn[m+1]:=Hx;
for s:=1 to m-1 do
Myn[s]:=2*My[s]-Myp[s]-e0*(My[s]-Myp[s])+e1*((e2-s*Hx)*
(My[s-1]-2*My[s]+My[s+1])-Hx*(My[s+1]-My[s]));
Myp:=My; My:=Myn;
end;
procedure FormHtGt;
var s,z:integer; Myn:CoefR;
begin
Hx:=Lng/m;
dt:=D/L; Tau:=dt/Ks;
e0:=K*Tau/Mn; e1:=g*sqr(Tau/Hx);
e2:=M1/Mn+Lng; e3:=K1*Tau/M1;
e4:=g*sqr(Tau)/Hx; e5:=sqr(Tau)/Mn;
Myn[m+1]:=Hx;
Yv:=0; F1:=0; F:=0;
case Mpz of
0: Yv:=1;
1: F1:=1;
2: F:=1;
end;
for s:= 0 to m do
begin
My[s]:=0; Myp[s]:=0;
end;
Nout:=round(Xout/Hx);
Ht[-1]:=L; Ht[0]:=0; Ht[L+1]:=dt;
Gt[-1]:=L; Gt[L]:=0; Gt[L+1]:=dt;
for s:=1 to L do
begin
for z:=1 to Ks do Step;
Ht[s]:=My[Nout];
end;
for s:=1 to L do Gt[s]:=(Ht[s]-Ht[s-1])/dt;
end;
procedure GrHtGt;
var j1:char; y:real; s:integer;
begin
repeat
PutA;
Ou('0-ex,1-m,2-Xout,3-Mpz,4-D,5-Ks,6-Tc,7-Sc,8-C,9-Gr');
Str(m,T10); Ts:='m='+T10;
Str(Xout:1:3,T10); Ts:=Ts+', Xout='+T10;
Str(Mpz,T10); Ts:=Ts+', Mpz='+T10;
Str(D:1:1,T10); Ts:=Ts+', D='+T10;
Str(Ks,T10); Ts:=Ts+', Ks='+T10;
Ts:=Ts+', Tc='+Tc;
Str(C,T10); Ts:=Ts+', C='+T10;
Info; J1:=ReadKey;
220
case J1 of
'1': Oui('m',m);
'2': Our('Xout',Xout);
'3': Oui('Mpz',Mpz);
'4': Our('D',D);
'5': Oui('Ks',Ks);
'6': if Tc='H' then Tc:='G' else Tc:='H';
'7': begin
FormHtGt; Xmin:=0; Xmax:=D;
Ymin:=0; Ymax:=0;
for s:=0 to L do
begin
if TC='H' then Y:=Ht[s]
else Y:=Gt[s];
if Y<Ymin then Ymin:=Y;
if Y>Ymax then Ymax:=Y;
end;
X0Y0(false); ClearDevice; SystCoor;
if Tc='H' then Graphic(Ht,C)
else Graphic(Gt,C);
end;
'8': Oui('C',C);
'9': begin
FormHtGt;
if Tc='G' then Graphic(Gt,C)
else Graphic(Ht,C);
end;
end
until J1='0'
end;
procedure Param;
var j1: char;
begin
repeat
PutA; Ou('0-ex, 1-Lng, 2-Mn, 3-M1,4-g,5-K,6-K1');
Str(Lng:1:3,T10); Ts:='Lng='+T10;
Str(Mn:1:3,T10); Ts:=Ts+', Mn='+T10;
Str(M1:1:3,T10); Ts:=Ts+', M1='+T10;
Str(g:1:3,T10); Ts:=Ts+', g='+T10;
Str(K:1:3,T10); Ts:=Ts+', K='+T10;
Str(K1:1:3,T10); Ts:=Ts+', K1='+T10;
Info; J1:=ReadKey;
case J1 of
'1': Our('Lng',Lng);
'2': Our('Mn',Mn);
'3': Our('M1',M1);
'4': Our('g',g);
'5': Our('K',K);
'6': Our('K1',K1);
end;
until J1='0';
end;
221
begin
C:=15;
repeat
PutA;
Ou('Esc-ex,1-Param,2-GrHtGt,3-DemGodo,4-Service');
J:=ReadKey;
case J of
'1': Param;
'2': GrHtGt;
'3': DemGodo;
'4': Service;
end
until J=#27;
CloseGraph
end.
Додаток 10. Програма DemPdTr program DemPdTr;
uses Graph, Crt, Serv, GodoGt, Groms;
const
Lng: real=1; n: integer=1;
W0: real=0.5; Tc: char='H'; {alt G}
var Ht:CoefL; Tau:real;
procedure FormHtGt;
var g:real; s,Nt:integer;
begin
Gt[-1]:=L; Ht[-1]:=L; Dt:=D/L;
Gt[0]:=0; Gt[L]:=0; Gt[L+1]:=Dt;
Ht[-1]:=L; Ht[0]:=0; Ht[L+1]:=Dt;
Tau:=Lng/W0; Nt:=round(Tau/dt);
g:=1/Tau;
for s:=0 to Nt do
if n=1
then
begin
Ht[s]:=s*dt/Tau; Gt[s]:=g;
end
else
begin
Ht[s]:=sqr(s*dt/Tau)/2;
Gt[s]:=s*dt/sqr(Tau);
end;
if n=1
then
for s:=Nt+1 to L do
begin
Ht[s]:=1; Gt[s]:=0;
end
else
222
begin
for s:=Nt+1 to 2*Nt do
begin
Ht[s]:=-sqr(s*dt/Tau)/2+2*s*dt/Tau-1;
Gt[s]:=2/Tau-s*dt/sqr(Tau);
end;
for s:=2*Nt+1 to L do
begin
Ht[s]:=1; Gt[s]:=0;
end;
end;
end;
procedure GrHtGt;
var j1:char; y,D1:real; s:integer;
begin
repeat
PutA;
Ou('0-ex,1-Lng,2-W0,3-N,4-D,5-Tc,6-Sc,7-C,8-Gr');
Str(Lng:1:3,T10); Ts:='Lng='+T10;
Str(W0:1:3,T10); Ts:=Ts+', W0='+T10;
Str(N,T10); Ts:=Ts+', N='+T10;
Str(D:1:3,T10); Ts:=Ts+', D='+T10;
Ts:=Ts+', Tc='+Tc;
Str(C,T10); Ts:=Ts+', C='+T10;
Info; J1:=ReadKey;
case J1 of
'1': Our('Lng',Lng);
'2': Our('W0',W0);
'3': if n=1 then n:=2 else n:=1;
'4': begin
if n=1 then D1:=1.2*Lng/W0
else D1:=2.4*Lng/W0;
repeat
Str(D1:1:3,T10);
Our('D (D>='+T10+')',D);
until D>=D1;
end;
'5': if Tc='H' then Tc:='G' else Tc:='H';
'6': begin
FormHtGt; Xmin:=0; Xmax:=D;
Ymin:=0; Ymax:=0;
for s:=0 to L do
begin
if TC='H' then Y:=Ht[s]
else Y:=Gt[s];
if Y<Ymin then Ymin:=Y;
if Y>Ymax then Ymax:=Y;
end;
X0Y0(false); ClearDevice; SystCoor;
if Tc='H' then Graphic(Ht,C)
else Graphic(Gt,C);
end;
223
'7': Oui('C',C);
'8': begin
FormHtGt;
if Tc='G' then Graphic(Gt,C)
else Graphic(Ht,C);
end;
end
until J1='0'
end;
begin
C:=15; D:=5;
repeat
PutA;
Ou('Esc-ex,1-GrHtGt,2-DemGodo,3-Service');
J:=ReadKey;
case J of
'1': GrHtGt;
'2': DemGodo;
'3': Service;
end
until J=#27;
CloseGraph
end.
Додаток 11. Програмний модуль OptHtd
unit OptHtd;
interface
uses Crt,Graph,Serv,GromS;
const
D: real=50; Ks: integer=1;
Kr: real=1; Krk: real=5;
Ti: real=10; Tik: real=30;
Td: real=0; Tdk: real=5;
Krs: real=1; Ddk: integer=1;
Tis: real=10; Ddi: integer=1;
Tds: real=0; Ddd: integer=0;
Nvr: integer=1; R: real=1;
k: integer=3; Nk: integer=10;
Hiz: real=10; Mi: integer=50;
Io: real=500; Ek: real=0.01;
L2: integer=250; H2: integer=150;
Tmo: char='D'; {'D'} Tvs: char='Z'; {'L'}
Dk: real=0.05; Di: real=0.1;
Dd: real=0.1;
var I,Tkv,Dt:real; Nt:integer;
Ht,Hts: CoefL;
procedure Sc;
procedure Grad(Hts:CoefL; c:integer);
procedure Param;
224
procedure FormHtsA;
procedure FormHtsD;
procedure FormHts;
procedure Nastr;
procedure Izo;
procedure DemIzo;
procedure OptSc2;
procedure DemSc2;
procedure OptSc3;
procedure DemSc3;
procedure OptSt;
procedure DemSt;
procedure Opt;
Implementation
procedure Sc;
begin
Xmin:=0; Xmax:=D; Ymin:=0;
Ymax:=1.5; X0Y0(false);
ClearDevice; SystCoor;
Line(x0,y0-round(1/dy),x0+L,y0-round(1/dy));
end;
procedure Grad(Hts:CoefL; c:integer);
var z,L: integer;
begin
L:=round(Ht[-1]);
Nt:=L div Nk; Setcolor(c);
MoveTo(X0,Y0-round(Hts[0]/dy));
for z:=1 to Nt do
LineTo(x0+z*Nk,y0-round(Hts[z]/dy));
SetColor(15);
end;
procedure Param;
var J2:char;
begin
repeat
PutA; Ou('0-Ex,1-Nk,2-Nvr,3-R,4-k,5-Ek,6-Tvs,7-Tmo');
str(Nk,T10); Ts:='Nk='+T10;
L:=round(Ht[-1]); Dt:=Ht[L+1]; Tkv:=Nk*dt;
str(Tkv:1:3,T10); Ts:=Ts+' (Tkv='+T10+')';
str(Nvr,T10); Ts:=Ts+', Nvr='+T10;
str(R:1:3,T10); Ts:=Ts+', R='+T10;
str(k,T10); Ts:=Ts+', k='+T10;
str(Ek:1:3,T10); Ts:=Ts+', Ek='+T10;
Ts:=Ts+', Tvs='+Tvs;
Ts:=Ts+', Tmo='+Tmo;
Info; J2:=ReadKey;
case J2 of
'1': Oui('Nk',Nk);
225
'2': Oui('Nvr',Nvr);
'3': Our('R',R);
'4': Oui('k',k);
'5': Our('Ek',Ek);
'6': if Tvs='Z' then Tvs:='L' else Tvs:='Z';
'7': if Tmo='A' then Tmo:='D' else Tmo:='A';
end
until J2='0'
end;
procedure FormHtsA;
var z,s,Zd,La,L:integer; Rs: CoefL;
x,Eps,Epsp,Epsf,Integr,f:real;
begin
L:=round(Ht[-1]); dt:=Ht[L+1]; Tkv:=Nk*Dt;
Rs:=Ht; Hts[-1]:=L;
for z:=Nk to L do Rs[z]:=Rs[z]-Ht[z-Nk];
if Tvs='Z' then begin Zd:=1; La:=0 end
else begin Zd:=0; La:=1 end;
Eps:=Zd; x:=Kr*eps; Integr:=0;
for s:=0 to L do Hts[s]:=Rs[s]*(x+La);
if Nvr in [1,2] then I:=Zd else I:=0;
z:=1;
repeat
Epsf:=Zd-Hts[z];
if z mod Nk = 0 then
begin
Epsp:=Eps; Eps:=Zd-Hts[z];
Integr:=Integr+Eps*Tkv;
x:=Kr*(Eps+Integr/Ti+Td*(Eps-Epsp)/Tkv);
for s:=0 to L-z do
Hts[z+s]:=Hts[z+s]+Rs[s]*(x+La);
end;
if abs(Hts[z])>2
then I:=500
else
begin
if Tvs='Z'
then if Epsf>0 then f:=Epsf else f:=R*Epsf
else if Epsf>0 then f:=R*Epsf else f:=Epsf;
case Nvr of
1: I:=I+abs(f);
2: I:=I+sqr(f);
3: I:=I+z/L*abs(f);
4: I:=I+z/L*sqr(f);
end;
end;
inc(z);
until (z>L) or (I>=500);
Hts[601]:=I*dt;
if I>=500 then
for s:=z to L do Hts[s]:=0.5;
end;
226
procedure FormHtsD;
var z,s,Zd,La,L:integer; Rs:CoefL;
x,Eps,Epsp,Epsf,Integr,f: real;
begin
L:=round(Ht[-1]); dt:=Ht[L+1]; Tkv:=Nk*Dt;
Nt:=L div Nk; Rs[-1]:=Nt; Rs[Nt+1]:=Tkv; Rs[0]:=Ht[0];
for z:=1 to Nt do Rs[z]:=Ht[z*Nk]-Ht[(z-1)*Nk];
if Tvs='Z' then begin Zd:=1; La:=0 end
else begin Zd:=0; La:=1 end;
Eps:=Zd; x:=Kr*eps; Integr:=0;
for z:=0 to Nt do Hts[z]:=Rs[z]*(x+La);
if Nvr in [1,2] then I:=Zd else I:=0;
z:=1;
repeat
Epsp:=Eps; Eps:=Zd-Hts[z]; Integr:=Integr+Eps*Tkv;
x:=Kr*(Eps+Integr/Ti+Td*(Eps-Epsp)/Tkv);
for s:=0 to Nt-z do
Hts[z+s]:=Hts[z+s]+Rs[s]*(x+La);
if abs(Hts[z])>2
then I:=500
else
begin
if Tvs='Z'
then if Eps>0 then f:=Eps else f:=R*Eps
else if Eps>0 then f:=R*Eps else f:=Eps;
case Nvr of
1: I:=I+abs(f);
2: I:=I+sqr(f);
3: I:=I+z/Nt*abs(f);
4: I:=I+z/Nt*sqr(f);
end;
end;
inc(z);
until (z>Nt) or (I>=500);
Hts[601]:=I*Tkv;
if I>=500 then
for s:=z to Nt do Hts[s]:=0.5;
end;
procedure FormHts;
begin
case Tmo of
'A': FormHtsA;
'D': FormHtsD;
end;
end;
procedure Nastr;
var J1:char;
begin
repeat
PutA;
227
Ou('0-Ex,1-Param,2-Kr,3-Ti,4-Td,5-Sc,6-C,7-h(t),8-Service');
Str(Kr:1:3,T10); Ts:='Kr='+T10;
Str(Ti:1:3,T10); Ts:=Ts+', Ti='+T10;
Str(Td:1:3,T10); Ts:=Ts+', Td='+T10;
Str(C,T10); Ts:=Ts+', C='+T10;
Str(I:1:3,T10); Ts:=Ts+' (I='+T10+')';
Info; J1:=ReadKey;
case J1 of
'1': Param;
'2': Our('Kr',Kr);
'3': Our('Ti',Ti);
'4': Our('Td',Td);
'5': begin
Xmin:=0; Xmax:=Ht[-1]*Ht[L+1];
Ymax:=1.5;
if Tvs='Z' then Ymin:=0
else Ymin:=-1.5;
X0Y0(false); ClearDevice; SystCoor;
if Tvs='Z' then
Line(x0,y0-round(1/dy),x0+L,y0-round(1/dy));
FormHts;
if Tmo='A' then Graphic(Hts,C)
else Grad(Hts,c);
I:=Hts[601];
end;
'6': Oui('C',C);
'7': begin
FormHts;
if Tmo='A' then Graphic(Hts,C)
else Grad(Hts,C);
I:=Hts[601];
end;
'8': Service;
end;
until J1='0';
end;
procedure Izo;
var Nr,Z,S,Zn,Sn,So,Zo,C1:integer;
Krn,Tin,Nrr:real; F:boolean; J2:char;
Mnr:array[-1..600] of integer;
begin
L:=L2; H:=H2;
Krn:=0.1*Krk; Tin:=0.1*Tik;
Xmin:=0; Xmax:=Tik;
Ymin:=0; Ymax:=Krk;
X0Y0(false); ClearDevice; SystCoor;
Sn:=round(Tin/dx); Zn:=round(Krn/dy);
Ti:=Tin-dx; Io:=500; J2:='1';
PutA; Ou('0-exit');
for z:=Zn-1 to H do
begin
Kr:=z*Dy; FormHts; Nrr:=Hts[601]/Hiz;
228
if Nrr>Mi then Mnr[z]:=Mi
else Mnr[z]:=trunc(Nrr);
end;
s:=Sn;
repeat
Ti:=S*dx; F:=true;
for z:=Zn-1 to H2 do
if F
then
begin
Kr:=Z*dy; FormHts; I:=Hts[601];
if I<Io then
begin
Io:=I; So:=S; Zo:=Z;
end;
if I>=500
then
begin
PutPixel(x0+s,y0-z,5);
F:=false;
end
else
begin
Nrr:=I/Hiz;
if Nrr>Mi then Nr:=Mi else Nr:=trunc(Nrr);
if (z>=Zn)and((Nr<>Mnr[z-1])or(Nr<>Mnr[z]))
then
begin
if Nr<Mnr[z-1] then C1:=10
else C1:=12;
PutPixel(x0+s,y0-z,C1);
end;
end;
Mnr[z]:=Nr;
end
else PutPixel(x0+s,y0-z,5);
if KeyPressed then J2:=ReadKey;
inc(s);
until (s>L) or (J2='0');
Kr:=Zo*dy; Ti:=So*dx; SetColor(10);
Circle(x0+So,y0-Zo,3); SetColor(15);
I:=Io;
L:=GetMaxX-139; H:=GetMaxY-100;
end;
procedure DemIzo;
var J1:char;
begin
repeat
PutA;
Ou('0-Ex,1-Param,2-L2,3-H2,4-Krk,5-Tik,6-Td,7-Hiz,
8-Mi,9-Izo,S-Service');
Str(L2,T10); Ts:='L2='+T10;
229
Str(H2,T10); Ts:=Ts+', H2='+T10;
Str(Krk:1:3,T10); Ts:=Ts+', Krk='+T10;
Str(Tik:1:3,T10); Ts:=Ts+', Tik='+T10;
Str(Td:1:3,T10); Ts:=Ts+', Td='+T10;
Str(Hiz:1:2,T10); Ts:=Ts+', Hiz='+T10;
Str(Mi,T10); Ts:=Ts+', Mi='+T10;
Info; J1:=ReadKey;
case J1 of
'1': Param;
'2': Oui('L2',L2);
'3': Oui('H2',H2);
'4': Our('Krk',Krk);
'5': Our('Tik',Tik);
'6': Our('Td',Td);
'7': Our('Hiz',Hiz);
'8': Oui('Mi',Mi);
'9': Izo;
'S','s': Service;
end;
until J1='0';
end;
procedure OptSc2;
var z,s,w:integer; J2:char;
dk,di,Epsk,Krc,Tic,Kro,Tio,Krn,Tin:real;
begin
Krn:=0.1*Krk; Tin:=0.1*Tik;
Krc:=0.55*Krk; Tic:=0.55*Tik;
dk:=0.45*Krk; di:=0.45*Tik;
Epsk:=Ek*Krk; Io:=500; w:=0; J2:='1';
PutA; Ou('0-exit');
repeat
dk:=dk/k; di:=di/k;
for s:=-k to k do
begin
Ti:=Tic+s*di;
if Ti<Tin then Ti:=Tin;
if Ti>Tik then Ti:=Tik;
for z:=-k to k do
begin
Kr:=Krc+z*dk;
if Kr<Krn then Kr:=Krn;
if Kr>Krk then Kr:=Krk;
FormHts; I:=Hts[601]; inc(w);
str(w,T10); clear(450,60,550,70);
OutTextXY(450,60,'W='+T10);
if I<Io then
begin
Kro:=Kr; Tio:=Ti; Io:=I;
end;
end;
end;
Krc:=Kro; Tic:=Tio;
230
if KeyPressed then J2:=ReadKey;
until (Dk<=Epsk) or (J2='0');
Kr:=Kro; Ti:=Tio; I:=Io;
Clear(450,60,550,70);
OutTextXY(450,60,'Ok');
end;
procedure DemSc2;
var J1: char;
begin
repeat
PutA; Ou('0-Ex,1-Param,2-Krk,3-Tik,4-Td,5-OptSc2');
Str(Krk:1:3,T10); Ts:='Krk='+T10;
Str(Tik:1:3,T10); Ts:=Ts+',Tik='+T10;
Str(Td:1:3,T10); Ts:=Ts+',Td='+T10;
Info; J1:=ReadKey;
case J1 of
'1': Param;
'2': Our('Krk',Krk);
'3': Our('Tik',Tik);
'4': Our('Td',Td);
'5': OptSc2;
end;
until J1='0'
end;
procedure OptSc3;
var z,s,v,w:integer; J2:char;
dk,di,dd,Krn,Tin,Tdn,Krc,Tic,Tdc,Kro,Tio,Tdo,Epsk:real;
begin
Krn:=0.1*Krk; Tin:=0.1*Tik; Tdn:=0.1*Tdk;
Krc:=0.55*Krk; Tic:=0.55*Tik; Tdc:=0.55*Tdk;
dk:=0.45*Krk; di:=0.45*Tik; dd:=0.45*Tdk;
Epsk:=Ek*Krk; Io:=500; w:=0; J2:='1';
PutA; Ou('0-exit');
repeat
dk:=dk/k; di:=di/k; dd:=dd/k;
for s:=-k to k do
begin
Ti:=Tic+s*di;
if Ti<Tin then Ti:=Tin;
if Ti>Tik then Ti:=Tik;
for z:=-k to k do
begin
Kr:=Krc+z*dk;
if Kr<Krn then Kr:=Krn;
if Kr>Krk then Kr:=Krk;
for v:=-k to k do
begin
Td:=Tdc+v*dd;
if Td<Tdn then Td:=Tdn;
if td>Tdk then Td:=Tdk;
FormHts; I:=Hts[601];
231
inc(w); str(w,T10);
clear(450,60,550,70);
OutTextXY(450,60,'W='+T10);
if I<Io then
begin
Kro:=Kr; Tio:=Ti;
Tdo:=Td; Io:=I;
end;
end;
end;
end;
Krc:=Kro; Tic:=Tio; Tdc:=Tdo;
if KeyPressed then J2:=ReadKey;
until (Dk<=Epsk) or (J2='0');
Kr:=Kro; Ti:=Tio; Td:=Tdo; I:=Io;
Clear(450,60,550,70);
OutTextXY(450,60,'Ok');
end;
procedure DemSc3;
var J1: char;
begin
repeat
PutA; Ou('0-Ex,1-Param,2-Krk,3-Tik,4-Tdk,5-OptSc3');
Str(Krk:1:3,T10); Ts:='Krk='+T10;
Str(Tik:1:3,T10); Ts:=Ts+',Tik='+T10;
Str(Tdk:1:3,T10); Ts:=Ts+',Tdk='+T10;
Info; J1:=ReadKey;
case J1 of
'1': Param;
'2': Our('Krk',Krk);
'3': Our('Tik',Tik);
'4': Our('Tdk',Tdk);
'5': OptSc3;
end;
until J1='0'
end;
procedure OptSt;
var z,s,q,w:integer; j3:char; f,out:boolean;
dkro,dtio,dtdo,Io,krc,tic,tdc,kro,tio,tdo:real;
begin
Kr:=krs; Ti:=tis; Td:=tds;
FormHts; w:=1; Io:=Hts[601];
kro:=Kr; tio:=Ti; tdo:=Td;
out:=false; j3:='1';
puta; Ou('0-ex'); Clear(500,45,630,55);
repeat
krc:=kro; tic:=tio; tdc:=tdo;
f:=false; z:=-Ddk;
repeat
Kr:=krc+z*Dk; s:=-Ddi;
repeat
232
Ti:=tic+s*Di; q:=-Ddd;
repeat
Td:=tdc+q*Dd;
FormHts; I:=Hts[601];
inc(w); str(w,T10); Clear(550,30,630,40);
OutTextXY(550,30,'w='+T10);
if I<Io then
begin
Io:=I; f:=true;
kro:=Kr; tio:=Ti; tdo:=Td;
dkro:=z*Dk; dtio:=s*Di; dtdo:=q*Dd;
end;
if KeyPressed then j3:=Readkey;
if j3='0' then out:=true;
inc(q);
until (q>Ddd) or out;
inc(s);
until (s>Ddi) or out;
inc(z);
until (z>Ddk) or out;
Kr:=kro; Ti:=tio; Td:=tdo;
if f then
repeat
Kr:=Kr+dkro; Ti:=Ti+dtio; Td:=Td+dtdo;
FormHts; I:=Hts[601]; inc(w); str(w,T10);
Clear(550,30,630,40); OutTextXY(550,30,'w='+T10);
if I<Io then
begin
kro:=Kr; tio:=Ti; tdo:=Td; Io:=I;
end;
until I>Io;
until (f=false) or out;
Kr:=kro; Ti:=tio; Td:=tdo;
Krs:=Kr; Tis:=Ti; Tds:=Td;
Clear(500,45,630,55); OutTextXY(500,45,'Ok! Press Enter');
J3:=ReadKey;
end;
procedure Diffs;
var j2:char;
begin
repeat
PutA;
Ou('0-ex,1-Dk,2-Di,3-Dd,4-Ddk,5-Ddi,6-Ddd');
str(Dk:1:3,T10); Ts:='Dk='+T10;
str(Di:1:3,T10); Ts:=Ts+', Di='+T10;
str(Dd:1:3,T10); Ts:=Ts+', Dd='+T10;
str(Ddk,T10); Ts:=Ts+', Ddk='+T10;
str(Ddi,T10); Ts:=Ts+', Ddi='+T10;
str(Ddd,T10); Ts:=Ts+', Ddd='+T10;
Info; j2:=ReadKey;
case j2 of
'1': Our('Dk',Dk);
233
'2': Our('Di',Di);
'3': Our('Dd',Dd);
'4': if Ddk=1 then Ddk:=0 else Ddk:=1;
'5': if Ddi=1 then Ddi:=0 else Ddi:=1;
'6': if Ddd=1 then Ddd:=0 else Ddd:=1;
end;
until j2='0';
end;
procedure DemSt;
var j1:char;
begin
repeat
PutA;
Ou('0-ex,1-Param,2-Diffs,3-Krs,4-Tis,5-Tds,6-OptSt');
str(Krs:1:2,T10); Ts:='Krs='+T10;
str(Tis:1:2,T10); Ts:=Ts+', Tis='+T10;
str(Tds:1:2,T10); Ts:=Ts+', Tds='+T10;
Info; j1:=ReadKey;
case j1 of
'1': Param;
'2': Diffs;
'3': Our('Krs',Krs);
'4': Our('Tis',Tis);
'5': Our('Tds',Tds);
'6': OptSt;
end;
until j1='0';
end;
procedure Opt;
var J2: char;
begin
repeat
PutA;
Ou('0-Ex,1-Nastr,2-DIzo,3-DSc2,4-DSc3,5-DemSt,5-Service');
J2:=ReadKey;
case J2 of
'1': Nastr;
'2': DemIzo;
'3': DemSc2;
'4': DemSc3;
'5': DemSt;
'6': Service;
end
until J2='0';
end;
end.
234
Додаток 12. Програма DemOptHd program DemOptHd;
uses Crt,Graph,Groms,Serv,OptHtd;
const tau:real=2;
var B,A:Coef; dt:real;
procedure InpPol(Id:char; var A:Coef);
var S,n:integer;
begin
Oui('N-step.pol. '+Id,n); A[-1]:=n;
for S:=0 to n do
begin
Str(S,T10); Our(Id+'['+T10+']',A[S])
end
end;
procedure EilWpm(B,A:Coef; X0,X1,V0:real; var Y:Coef);
var z,s,n,m:integer;
begin
n:=round(A[-1]); m:= round(B[-1]);
for z:=m+1 to n do B[z]:=0;
y[n+1]:=0;
for z:= 1 to n do
Y[z]:=Y[z]+V0*(Y[z+1]+B[n-z]*X0-A[n-z]*Y[0]);
Y[0]:=(B[n]*X1+Y[1])/A[n]
end;
procedure FormHt;
var z,s,n,Zt:integer; V0:real; My:Coef;
begin
Ht[-1]:=L; Dt:=D/L; V0:=Dt/Ks; Ht[L+1]:=Dt;
Zt:=round(tau/dt); n:=round(A[-1]); My[-1]:=n;
for z:=0 to Zt do Ht[z]:=0;
for s:=0 to n do My[s]:=0;
for z:=Zt+1 to L do
begin
for s:=1 to ks do EilWpm(B,A,1,1,V0,My);
Ht[z]:=My[0];
end
end;
procedure ScOb;
var s:integer; y:real;
begin
L:=round(Ht[-1]); Xmin:=0; Xmax:=L*Ht[L+1];
Ymin:=0; Ymax:=0;
for s:=0 to L do
begin
y:=Ht[s];
if y<Ymin then Ymin:=y;
if y>Ymax then Ymax:=y;
235
end;
X0Y0(false); ClearDevice; SystCoor;
Graphic(Ht,C);
end;
procedure InpOb;
var J1:char;
begin
repeat
PutA;
Ou('0-Ex,1-B(p),2-A(p),3-tau,4-D,5-Ks,6-SC,7-C,8-h(t),
9-Groms');
Str(tau:1:3,T10); Ts:='tau='+T10;
Str(D:1:2,T10); Ts:=Ts+', D='+T10;
Str(Ks,T10); Ts:=Ts+', Ks='+T10;
Str(C,T10); Ts:=Ts+', C='+T10;
Info; J1:=ReadKey;
case J1 of
'1': InpPol('B',B);
'2': InpPol('A',A);
'3': Our('tau',tau);
'4': Our('D',D);
'5': Oui('Ks',Ks);
'6': begin
FormHt;
ScOb;
end;
'7': Oui('C',C);
'8': begin
FormHt;
Graphic(Ht,C);
end;
'9': Service;
end;
until J1='0';
end;
procedure FormHta(Bd,Ad:Coef; Nt:integer; var Htd:CoefL);
var z,s,m,n:integer; Sum:real;
begin
m:=round(Bd[-1]); Htd[-1]:=Nt; n:=round(Ad[-1]);
for z:=0 to Nt do
begin
Sum:=0;
for s:=0 to m do if z-s>=0 then Sum:=Sum+Bd[s];
for s:=1 to n do if z-s>=0 then Sum:=Sum-Ad[s]*Htd[z-
s];
Htd[z]:=Sum;
end
end;
begin
B[-1]:=0; B[0]:=1; A[-1]:=2; A[0]:=1; A[1]:=10; A[2]:=25;
236
repeat
PutA; Ou('Esc-Ex,1-InpOb,2-Opt');
J:=ReadKey;
case J of
'1': InpOb;
'2': Opt;
end
until J=#27;
CloseGraph;
end.
Додаток 13. Програма DemOptVs program DemOptVs;
uses Crt,Graph,Groms,Serv,OptCompV{,OptImpVs};
const
tau1:real=5; tau2:real=5;
var B1,A1,A2,B2:Coef; dt:real;
procedure InpPol(Id:string; var A:Coef);
var S,n:integer;
begin
oui('N-step.pol. '+Id,n); A[-1]:=n;
for S:=0 to n do
begin
str(S,T10); Our(Id+'['+T10+']',A[S])
end;
end;
procedure EilWpm(B,A:Coef; X0,X1,V0:real; var Y:Coef);
var z,s,n,m:integer;
begin
n:=round(A[-1]); m:= round(B[-1]);
for z:=m+1 to n do B[z]:=0;
y[n+1]:=0;
for z:= 1 to n do Y[z]:=Y[z]+V0*(Y[z+1]+B[n-z]*X0-A[n-
z]*Y[0]);
Y[0]:=(B[n]*X1+Y[1])/A[n]
end;
procedure FormHt(B,A:Coef;tau:real; var Ht:CoefL);
var z,s,n,Zt:integer;
V0:real;
My:Coef;
begin
Ht[-1]:=L; Dt:=D/L; V0:=Dt/Ks; Ht[L+1]:=Dt;
Zt:=round(tau/dt); n:=round(A[-1]); My[-1]:=n;
for z:=0 to Zt do Ht[z]:=0;
for s:=0 to n do My[s]:=0;
for z:=Zt+1 to L do
begin
for s:=1 to ks do EilWpm(B,A,1,1,V0,My);
237
Ht[z]:=My[0];
end
end;
procedure InpOb;
var J1:char;
begin
repeat
PutA;
Ou('0-ex,1-B1,2-A1,3-tau1,4-B2,5-A2,6-tau2,D-D,7-Ks,C-C,
8-h1,9-h2,S-Serv');
str(tau1:1:2,T10); Ts:='tau1='+T10;
str(tau2:1:2,T10); Ts:=Ts+', tau2='+T10;
str(D:1:2,T10); Ts:=Ts+', D='+T10;
str(Ks,T10); Ts:=Ts+', Ks='+T10;
str(C,T10); Ts:=Ts+', C='+T10;
Info; J1:=ReadKey;
case J1 of
'1': InpPol('B1',B1);
'2': InpPol('A1',A1);
'3': Our('tau1',tau1);
'4': InpPol('B2',B2);
'5': InpPol('A2',A2);
'6': Our('tau2',tau2);
'D','d': Our('D',D);
'7': Oui('Ks',Ks);
'C','c': Oui('C',C);
'8': begin
FormHt(B1,A1,tau1,Ht1);
Sc(Ht1,false); Graphic(Ht1,C);
end;
'9': begin
FormHt(B2,A2,tau2,Ht2);
Sc(Ht2,false); Graphic(Ht2,C);
end;
'S','s': Service;
end;
until J1='0';
end;
begin
B1[-1]:=0;B1[0]:=1;A1[-1]:=2;A1[0]:=1;A1[1]:=8;A1[2]:=5;
B2[-1]:=0;B2[0]:=1;A2[-1]:=2;A2[0]:=1;A2[1]:=8;A2[2]:=5;
repeat
PutA; Ou('Esc-Ex,1-InpOb,2-Opt');
J:=ReadKey;
case J of
'1': InpOb;
'2': Opt;
end
until J=#27;
CloseGraph;
end.
238
Додаток 14. Програмний модуль OptCompV
unit OptCompV;
interface
uses Crt,Graph,Serv,Groms;
const
D: real=50; Ks: integer=1;
Kr: real=1;
Ti: real=10; Kf: real=5;
Td: real=0; Tv: real=0;
Krs: real=1; Ddk: integer=1; Dk: real=0.05;
Tis: real=10; Ddi: integer=1; Di: real=0.1;
Tds: real=0; Ddd: integer=1; Dd: real=0.1;
Tvs: real=0; Dtv: integer=1;
Nzr: integer=1;{1..3} Nk: integer=5;
Nvr: integer=1; K: real=1;
q: real=1; r: real=0;
Tmo: char='D';{'A'} Vs: char='Z';{'L'}
Tc: char='Y'; {'X'} Ovr: real=1e+4;
var I,Tkv,Dt:real; Nt:integer;
Ht1,Ht2,Hts,HtsX: CoefL;
procedure Sc(Ht:CoefL; Zd: boolean);
procedure Grad(Ht:CoefL; C:integer);
procedure Param;
procedure FormHtsA;
procedure FormHtsD;
procedure FormHts;
procedure OptSt;
procedure DemOpt;
procedure Opt;
Implementation
procedure Sc(Ht:CoefL; Zd: boolean);
var s,n:integer; y:real;
begin
n:=round(Ht[-1]);
Xmin:=0; Xmax:=n*Ht[n+1]; Ymin:=0; Ymax:=0;
if Zd then Ymax:=1.5
else
for s:=0 to n do
begin
y:=Ht[s];
if y<Ymin then Ymin:=y;
if y>Ymax then Ymax:=y;
end;
X0Y0(false); ClearDevice; SystCoor;
if Zd then Line(x0,y0-round(1/dy),x0+L,y0-round(1/dy));
end;
239
procedure Grad(Ht:CoefL; C:integer);
var z,n: integer;
begin
n:=round(Ht[-1]); Setcolor(c);
MoveTo(X0,Y0-round(Ht[0]/dy));
for z:=1 to n do LineTo(x0+z*Nk,y0-round(Ht[z]/dy));
SetColor(15);
end;
procedure Param;
var J2:char;
begin
repeat
PutA; Ou('0-Ex,1-Nk,2-Nzr,3-Nvr,4-q,5-r,6-K,7-Tc,8-Vs,9-
Tmo');
str(Nk,T10); Ts:='Nk='+T10;
L:=round(Ht1[-1]); Dt:=Ht1[L+1]; Tkv:=Nk*dt;
str(Tkv:1:3,T10); Ts:=Ts+'(Tkv='+T10+')';
str(Nzr,T10); Ts:=Ts+',Nzr='+T10;
case Nzr of
1: Ts:=Ts+'(PID)';
2: Ts:=Ts+'(PI-D)';
3: Ts:=Ts+'(I-PD)';
end;
str(Nvr,T10); Ts:=Ts+',Nvr='+T10;
str(q:1:3,T10); Ts:=Ts+',q='+T10;
str(r:1:3,T10); Ts:=Ts+',r='+T10;
str(K:1:3,T10); Ts:=Ts+',K='+T10;
Ts:=Ts+',Tc='+Tc;
Ts:=Ts+',Vs='+Vs;
Ts:=Ts+',Tmo='+Tmo;
Info; J2:=ReadKey;
case J2 of
'1': Oui('Nk',Nk);
'2': Oui('Nzr',Nzr);
'3': Oui('Nvr',Nvr);
'4': Our('q',q);
'5': Our('r',r);
'6': Our('K',K);
'7': if Tc='Y' then Tc:='X' else Tc:='Y';
'8': if Vs='Z' then Vs:='L' else Vs:='Z';
'9': if Tmo='A' then Tmo:='D' else Tmo:='A';
end
until J2='0'
end;
procedure FormHtsA;
var z,s,Zd,La,Lap,L:integer; Rs1,Rs2,Hts1,Hts2:CoefL;
x,y,yp,u,ud,udp,uv,uvp,e,ep,ei,sum,Ad,Bd,Av,Bv:real;
begin
L:=round(Ht1[-1]); dt:=Ht1[L+1]; Tkv:=Nk*Dt;
Ad:=Td/(abs(Td)+Kf*Tkv); Bd:=Ad*Kf;
Av:=Tv/(abs(Tv)+Kf*Tkv); Bv:=Av*Kf;
240
Hts[-1]:=L; Hts[L+1]:=dt; HtsX[-1]:=L; HtsX[L+1]:=dt;
Rs1:=Ht1; Rs2:=Ht2; HtsX[0]:=0;
for z:=Nk to L do
begin
Rs1[z]:=Rs1[z]-Ht1[z-Nk];
Rs2[z]:=Rs2[z]-Ht2[z-Nk];
end;
for s:=0 to L do
begin
Hts[s]:=0; Hts1[s]:=0; Hts2[s]:=0;
end;
if Vs='Z' then begin Zd:=1; La:=0 end
else begin Zd:=0; La:=1 end;
z:=1; I:=0; e:=0; sum:=0; ud:=0; uv:=0; Lap:=0;
repeat
if z mod Nk = 0 then
begin
y:=Hts1[z]+Hts2[z]; yp:=Hts1[z-Nk]+Hts2[z-Nk];
ep:=e; e:=Zd-y-uv; ei:=Zd-y;
sum:=sum+e*Tkv; udp:=ud; uvp:=uv;
case Nzr of
1: begin {PID}
ud:=Ad*udp+Bd*(e-ep);
u:=Kr*(e+sum/Ti+ud);
end;
2: begin {PI-D}
ud:=Ad*udp+Bd*(y-yp);
u:=Kr*(e+sum/Ti)-Kr*ud;
end;
3: begin {I-PD}
ud:=Ad*udp+Bd*(y-yp);
u:=Kr*sum/Ti-Kr*(y+ud);
end;
end;
uv:=Av*uvp+Bv*(La-Lap); Lap:=La; x:=u;
for s:=0 to L-z do
begin
Hts1[z+s]:=Hts1[z+s]+Rs1[s]*x;
Hts2[z+s]:=Hts2[z+s]+Rs2[s]*La;
end;
end;
HtsX[z]:=x;
Hts[z]:=Hts1[z]+Hts2[z];
if abs(e)>Ovr
then e:=Ovr
else
case Nvr of
1: I:=I+q*abs(ei)+r*abs(Zd-K*x);
2: I:=I+q*sqr(ei)+r*sqr(Zd-K*x);
3: I:=I+q*abs(ei)+r*abs(x);
4: I:=I+q*sqr(ei)+r*sqr(x);
end;
inc(z);
241
until (z>L) or (e=Ovr);
if e=Ovr
then
begin
for s:=z to L do
begin
Hts[s]:=0.5; HtsX[s]:=0.5;
end;
Hts[601]:=Ovr;
end
else Hts[601]:=I*Dt;
end;
procedure FormHtsD;
var z,s,Zd,La,Lap,L:integer; Rs1,Rs2,Hts1,Hts2:CoefL;
x,y,yp,u,ud,udp,uv,uvp,e,ep,ei,sum,Ad,Bd,Av,Bv:real;
begin
L:=round(Ht1[-1]); dt:=Ht1[L+1]; Tkv:=Nk*Dt; Nt:=L div Nk;
Ad:=Td/(abs(Td)+Kf*Tkv); Bd:=Ad*Kf; Av:=Tv/(abs(Tv)+Kf*Tkv);
Bv:=Av*Kf;
Hts[-1]:=Nt; Hts[Nt+1]:=Tkv; HtsX[-1]:=Nt; HtsX[Nt+1]:=Tkv;
Rs1[0]:=Ht1[0]; Rs2[0]:=Ht2[0]; HtsX[0]:=0;
for z:=1 to Nt do
begin
Rs1[z]:=Ht1[z*Nk]-Ht1[(z-1)*Nk];
Rs2[z]:=Ht2[z*Nk]-Ht2[(z-1)*Nk];
end;
for z:=0 to Nt do
begin
Hts[z]:=0; Hts1[z]:=0; Hts2[z]:=0;
end;
if Vs='Z' then begin Zd:=1; La:=0 end
else begin Zd:=0; La:=1 end;
z:=1; I:=0; e:=0; sum:=0; ud:=0; uv:=0; Lap:=0;
repeat
y:=Hts1[z]+Hts2[z]; yp:=Hts1[z-1]+Hts2[z-1];
ep:=e; e:=Zd-y-uv; ei:=Zd-y;
sum:=sum+e*Tkv; udp:=ud; uvp:=uv;
case Nzr of
1: begin {PID}
ud:=Ad*udp+Bd*(e-ep);
u:=Kr*(e+sum/Ti+ud);
end;
2: begin {PI-D}
ud:=Ad*udp+Bd*(y-yp);
u:=Kr*(e+sum/Ti)-Kr*ud;
end;
3: begin {I-PD}
ud:=Ad*udp+Bd*(y-yp);
u:=Kr*sum/Ti-Kr*(y+ud);
end;
end;
uv:=Av*uvp+Bv*(La-Lap); Lap:=La; x:=u;
242
for s:=0 to Nt-z do
begin
Hts1[z+s]:=Hts1[z+s]+Rs1[s]*x;
Hts2[z+s]:=Hts2[z+s]+Rs2[s]*La;
end;
HtsX[z]:=x;
Hts[z]:=Hts1[z]+Hts2[z];
if abs(e)>Ovr
then e:=Ovr
else
case Nvr of
1: I:=I+q*abs(ei)+r*abs(Zd-K*x);
2: I:=I+q*sqr(ei)+r*sqr(Zd-K*x);
3: I:=I+q*abs(ei)+r*abs(x);
4: I:=I+q*sqr(ei)+r*sqr(x);
end;
inc(z);
until (z>Nt) or (e=Ovr);
if e=Ovr
then
begin
for s:=z to L do
begin
Hts[s]:=0.5; HtsX[s]:=0.5;
end;
Hts[601]:=Ovr;
end
else Hts[601]:=I*Tkv;
end;
procedure FormHts;
begin
case Tmo of
'A': FormHtsA;
'D': FormHtsD;
end;
end;
procedure Nastr;
var J1:char;
begin
repeat
PutA;
Ou('0-Ex,1-Param,2-Kr,3-Ti,4-Td,5-Kf,6-Tv,7-Sc,8-C,
9-h(t),S-Service');
Str(Nzr,T10); Ts:='Nzr='+T10;
case Nzr of
1: Ts:=Ts+'(PID)';
2: Ts:=Ts+'(PI-D)';
3: Ts:=Ts+'(I-PD)';
end;
Str(Kr:1:2,T10); Ts:=Ts+', Kr='+T10;
Str(Ti:1:2,T10); Ts:=Ts+', Ti='+T10;
243
Str(Td:1:2,T10); Ts:=Ts+', Td='+T10;
Str(Kf:1:2,T10); Ts:=Ts+', Kf='+T10;
Str(Tv:1:2,T10); Ts:=Ts+', Tv='+T10;
Str(C,T10); Ts:=Ts+', C='+T10;
Str(I:1:2,T10); Ts:=Ts+' (I='+T10+')';
Info; J1:=ReadKey;
case J1 of
'1': Param;
'2': Our('Kr',Kr);
'3': Our('Ti',Ti);
'4': Our('Td',Td);
'5': Our('Kf',Kf);
'6': Our('Tv',Tv);
'7': begin
FormHts;
if Tc='Y' then Sc(Hts,Vs='Z')
else Sc(HtsX,false);
end;
'8': Oui('C',C);
'9': begin
FormHts;
if Tc='Y'
then if Tmo='A' then Graphic(Hts,C)
else Grad(Hts,C)
else if Tmo='A' then Graphic(HtsX,C)
else Grad(HtsX,C);
I:=Hts[601];
end;
'S','s': Service;
end;
until J1='0';
end;
procedure OptSt;
var z,s,q,zv,w:integer; j3:char; f,out:boolean;
dkro,dtio,dtdo,dtvo,Io,krc,tic,tdc,tvc,
kro,tio,tdo,tvo:real;
begin
Kr:=krs; Ti:=tis; Td:=tds; Tv:=tvs;
kro:=Kr; tio:=Ti; tdo:=Td; tvo:=Tv;
FormHts; w:=1; Io:=Hts[601];
out:=false; j3:='1';
puta; Ou('0-ex'); Clear(500,45,630,55);
repeat
krc:=kro; tic:=tio; tdc:=tdo; tvc:=tvo;
f:=false; z:=-Ddk;
repeat
Kr:=krc+z*Dk; s:=-Ddi;
repeat
Ti:=tic+s*Di; q:=-Ddd;
repeat
Td:=tdc+q*Dd; sv:=-Dtv;
repeat
244
Tv:=tvc+sv*Dd;
{if Tv<=0 then Tv:=0;}
FormHts; I:=Hts[601];
inc(w); str(w,T10); Clear(550,30,630,40);
OutTextXY(550,30,'w='+T10);
if I<Io then
begin
Io:=I; f:=true;
kro:=Kr; tio:=Ti; tdo:=Td; tvo:=Tv;
dkro:=z*Dk; dtio:=s*Di;
dtdo:=q*Dd; dtvo:=sv*Dd;
end;
if KeyPressed then j3:=Readkey;
if j3='0' then out:=true;
inc(sv);
until (sv>Dtv) or out;
inc(q);
until (q>Ddd) or out;
inc(s);
until (s>Ddi) or out;
inc(z);
until (z>Ddk) or out;
Kr:=kro; Ti:=tio; Td:=tdo; Tv:=tvo;
if f then
repeat
Kr:=Kr+dkro; Ti:=Ti+dtio; Td:=Td+dtdo; Tv:=Tv+dtvo;
FormHts; I:=Hts[601]; inc(w); str(w,T10);
Clear(550,30,630,40); OutTextXY(550,30,'w='+T10);
if I<Io then
begin
kro:=Kr; tio:=Ti; tdo:=Td; tvo:=Tv; Io:=I;
end;
until I>Io;
until (f=false) or out;
Kr:=kro; Ti:=tio; Td:=tdo; Tv:=tvo;
Krs:=Kr; Tis:=Ti; Tds:=Td; Tvs:=Tv;
Clear(550,30,630,40); OutTextXY(550,30,'Ok!');
end;
procedure Diffs;
var j2:char;
begin
repeat
PutA; Ou('0-ex,1-Dk,2-Di,3-Dd,4-Ddk,5-Ddi,6-Ddd,7-Dtv');
str(Dk:1:3,T10); Ts:='Dk='+T10;
str(Di:1:3,T10); Ts:=Ts+', Di='+T10;
str(Dd:1:3,T10); Ts:=Ts+', Dd='+T10;
str(Ddk,T10); Ts:=Ts+', Ddk='+T10;
str(Ddi,T10); Ts:=Ts+', Ddi='+T10;
str(Ddd,T10); Ts:=Ts+', Ddd='+T10;
str(Dtv,T10); Ts:=Ts+', Dtv='+T10;
Info; j2:=ReadKey;
case j2 of
245
'1': Our('Dk',Dk);
'2': Our('Di',Di);
'3': Our('Dd',Dd);
'4': if Ddk=1 then Ddk:=0 else Ddk:=1;
'5': if Ddi=1 then Ddi:=0 else Ddi:=1;
'6': if Ddd=1 then Ddd:=0 else Ddd:=1;
'7': if Dtv=1 then Dtv:=0 else Dtv:=1;
end;
until j2='0';
end;
procedure DemOpt;
var j1:char;
begin
repeat
PutA;
Ou('0-ex,1-Param,2-Diffs,3-Krs,4-Tis,5-Tds,6-Tvs,7-OptSt');
str(Krs:1:2,T10); Ts:='Krs='+T10;
str(Tis:1:2,T10); Ts:=Ts+', Tis='+T10;
str(Tds:1:2,T10); Ts:=Ts+', Tds='+T10;
str(Tvs:1:2,T10); Ts:=Ts+', Tvs='+T10;
Info; j1:=ReadKey;
case j1 of
'1': Param;
'2': Diffs;
'3': Our('Krs',Krs);
'4': Our('Tis',Tis);
'5': Our('Tds',Tds);
'6': Our('Tvs',Tvs);
'7': OptSt;
end;
until j1='0';
end;
procedure Opt;
var J2: char;
begin
repeat
PutA;
Ou('0-Ex,1-Nastr,2-DemOpt,3-Service');
J2:=ReadKey;
case J2 of
'1': Nastr;
'2': DemOpt;
'3': Service;
end
until J2='0';
end;
end.
246
Додаток 15. Програмний модуль OptImpVs unit OptImpVs;
interface
uses Crt,Graph,Serv,Groms;
const
D: real=50; Ks: integer=1;
Kr: real=1;
Ti: real=10; Kf: real=5;
Td: real=0; Tv: real=0;
Krs: real=1; Ddk: integer=1; Dk: real=0.05;
Tis: real=10; Ddi: integer=1; Di: real=0.1;
Tds: real=0; Ddd: integer=1; Dd: real=0.1;
Tvs: real=0; Dtv: integer=1;
Nzr: integer=1;{1..3} Nk: integer=5;
Nvr: integer=1; K: real=1;
q: real=1; r: real=0;
Tmo: char='D';{'A'} Vs: char='Z';{'L'}
Tc: char='Y'; {'X'} Ovr: real=1e+4;
var I,Tkv,Dt: real; Nt: integer;
Ht1,Ht2,Hts,HtsX,Ipid: CoefL;
procedure Sc(Ht:CoefL; Zd: boolean);
procedure Grad(Ht:CoefL; C:integer);
procedure Param;
procedure FormHtsA;
procedure FormHtsD;
procedure FormHts;
procedure OptSt;
procedure DemOpt;
procedure Opt;
Implementation
procedure Sc(Ht:CoefL; Zd: boolean);
var s,n:integer; y:real;
begin
n:=round(Ht[-1]);
Xmin:=0; Xmax:=n*Ht[n+1]; Ymin:=0; Ymax:=0;
if Zd then Ymax:=1.5
else
for s:=0 to n do
begin
y:=Ht[s];
if y<Ymin then Ymin:=y;
if y>Ymax then Ymax:=y;
end;
X0Y0(false); ClearDevice; SystCoor;
if Zd then Line(x0,y0-round(1/dy),x0+L,y0-round(1/dy));
end;
procedure Grad(Ht:CoefL; C:integer);
247
var z,n: integer;
begin
n:=round(Ht[-1]); Setcolor(c);
MoveTo(X0,Y0-round(Ht[0]/dy));
for z:=1 to n do LineTo(x0+z*Nk,y0-round(Ht[z]/dy));
SetColor(15);
end;
procedure Param;
var J2:char;
begin
repeat
PutA; Ou('0-Ex,1-Nk,2-Nzr,3-Nvr,4-q,5-r,6-K,7-Tc,8-Vs,9-
Tmo');
str(Nk,T10); Ts:='Nk='+T10;
L:=round(Ht1[-1]); Dt:=Ht1[L+1]; Tkv:=Nk*dt;
str(Tkv:1:3,T10); Ts:=Ts+'(Tkv='+T10+')';
str(Nzr,T10); Ts:=Ts+',Nzr='+T10;
case Nzr of
1: Ts:=Ts+'(PID)';
2: Ts:=Ts+'(PI-D)';
3: Ts:=Ts+'(I-PD)';
end;
str(Nvr,T10); Ts:=Ts+',Nvr='+T10;
str(q:1:3,T10); Ts:=Ts+',q='+T10;
str(r:1:3,T10); Ts:=Ts+',r='+T10;
str(K:1:3,T10); Ts:=Ts+',K='+T10;
Ts:=Ts+',Tc='+Tc;
Ts:=Ts+',Vs='+Vs;
Ts:=Ts+',Tmo='+Tmo;
Info; J2:=ReadKey;
case J2 of
'1': Oui('Nk',Nk);
'2': Oui('Nzr',Nzr);
'3': Oui('Nvr',Nvr);
'4': Our('q',q);
'5': Our('r',r);
'6': Our('K',K);
'7': if Tc='Y' then Tc:='X' else Tc:='Y';
'8': if Vs='Z' then Vs:='L' else Vs:='Z';
'9': if Tmo='A' then Tmo:='D' else Tmo:='A';
end
until J2='0'
end;
procedure FormHtsA;
var z,s,Zd,La,L: integer; Rs1,Rs2,Hts1: CoefL;
x,y1,yp1,y2,yp2,u,ud,udp,uv,uvp,
e,ep,ei,sum,Ad,Bd,Av,Bv: real;
begin
L:=round(Ht2[-1]); dt:=Ht2[L+1]; Tkv:=Nk*Dt;
Ad:=Td/(abs(Td)+Kf*Tkv); Bd:=Ad*Kf;
Av:=Tv/(abs(Tv)+Kf*Tkv); Bv:=Av*Kf;
248
Hts[-1]:=L; Hts[L+1]:=dt; HtsX[-1]:=L; HtsX[L+1]:=dt;
Rs1:=Ht1; Rs2:=Ht2; HtsX[0]:=0;
for z:=Nk to L do
begin
Rs1[z]:=Rs1[z]-Ht1[z-Nk];
Rs2[z]:=Rs2[z]-Ht2[z-Nk];
end;
for s:=0 to L do
begin
Hts1[s]:=0; Hts[s]:=0;
end;
if Vs='Z' then begin Zd:=1; La:=0 end
else begin Zd:=0; La:=1 end;
z:=1; I:=0; e:=0; sum:=0; ud:=0; uv:=0;
repeat
if z mod Nk = 0 then
begin
y1:=Hts1[z]; yp1:=Hts1[z-Nk];
y2:=Hts[z]; yp2:=Hts[z-Nk];
ep:=e; e:=Zd-y2-uv; ei:=Zd-y2;
sum:=sum+e*Tkv; udp:=ud; uvp:=uv;
case Nzr of
1: begin {PID}
ud:=Ad*udp+Bd*(e-ep);
u:=Kr*(e+sum/Ti+ud);
end;
2: begin {PI-D}
ud:=Ad*udp+Bd*(y2-yp2);
u:=Kr*(e+sum/Ti)-Kr*ud;
end;
3: begin {I-PD}
ud:=Ad*udp+Bd*(y2-yp2);
u:=Kr*sum/Ti-Kr*(y2+ud);
end;
end;
uv:=Av*uvp+Bv*(y1-yp1); x:=u+La;
for s:=0 to L-z do
begin
Hts1[z+s]:=Hts1[z+s]+Rs1[s]*x;
Hts[z+s]:=Hts[z+s]+Rs2[s]*x;
end;
end;
HtsX[z]:=x;
if abs(e)>Ovr
then e:=Ovr
else
case Nvr of
1: I:=I+q*abs(ei)+r*abs(Zd-K*x);
2: I:=I+q*sqr(ei)+r*sqr(Zd-K*x);
3: I:=I+q*abs(ei)+r*abs(x);
4: I:=I+q*sqr(ei)+r*sqr(x);
end;
inc(z);
249
until (z>L) or (e=Ovr);
if e=Ovr
then
begin
for s:=z to L do
begin
Hts[s]:=0.5; HtsX[s]:=0.5;
end;
Hts[601]:=Ovr;
end
else Hts[601]:=I*Dt;
end;
procedure FormHtsD;
var z,s,Zd,La,L: integer; Rs1,Rs2,Hts1: CoefL;
x,y1,yp1,y2,yp2,u,ud,udp,uv,uvp,
e,ep,ei,sum,Ad,Bd,Av,Bv: real;
begin
L:=round(Ht2[-1]); dt:=Ht2[L+1]; Tkv:=Nk*Dt; Nt:=L div Nk;
Ad:=Td/(abs(Td)+Kf*Tkv); Bd:=Ad*Kf;
Av:=Tv/(abs(Tv)+Kf*Tkv); Bv:=Av*Kf;
Hts[-1]:=Nt; Hts[Nt+1]:=Tkv; HtsX[-1]:=Nt; HtsX[Nt+1]:=Tkv;
Rs1[0]:=Ht1[0]; Rs2[0]:=Ht2[0]; HtsX[0]:=0;
for z:=1 to Nt do
begin
Rs1[z]:=Ht1[z*Nk]-Ht1[(z-1)*Nk];
Rs2[z]:=Ht2[z*Nk]-Ht2[(z-1)*Nk];
end;
for z:=0 to Nt do
begin
Hts1[z]:=0; Hts[z]:=0;
end;
if Vs='Z' then begin Zd:=1; La:=0 end
else begin Zd:=0; La:=1 end;
z:=1; I:=0; e:=0; sum:=0; ud:=0; uv:=0;
repeat
y1:=Hts1[z]; yp1:=Hts1[z-1];
y2:=Hts[z]; yp2:=Hts[z-1];
ep:=e; e:=Zd-y2-uv; ei:=Zd-y2;
sum:=sum+e*Tkv; udp:=ud; uvp:=uv;
case Nzr of
1: begin {PID}
ud:=Ad*udp+Bd*(e-ep);
u:=Kr*(e+sum/Ti+ud);
end;
2: begin {PI-D}
ud:=Ad*udp+Bd*(y2-yp2);
u:=Kr*(e+sum/Ti)-Kr*ud;
end;
3: begin {I-PD}
ud:=Ad*udp+Bd*(y2-yp2);
u:=Kr*sum/Ti-Kr*(y2+ud);
end;
250
end;
uv:=Av*uvp+Bv*(y1-yp1); x:=u+La;
for s:=0 to Nt-z do
begin
Hts1[z+s]:=Hts1[z+s]+Rs1[s]*x;
Hts[z+s]:=Hts[z+s]+Rs2[s]*x;
end;
HtsX[z]:=x;
if abs(e)>Ovr
then e:=Ovr
else
case Nvr of
1: I:=I+q*abs(ei)+r*abs(Zd-K*x);
2: I:=I+q*sqr(ei)+r*sqr(Zd-K*x);
3: I:=I+q*abs(ei)+r*abs(x);
4: I:=I+q*sqr(ei)+r*sqr(x);
end;
inc(z);
until (z>Nt) or (e=Ovr);
if e=Ovr
then
begin
for s:=z to L do
begin
Hts[s]:=0.5; HtsX[s]:=0.5;
end;
Hts[601]:=Ovr;
end
else Hts[601]:=I*Tkv;
end;
procedure FormHts;
begin
case Tmo of
'A': FormHtsA;
'D': FormHtsD;
end;
end;
procedure Nastr;
var J1:char;
begin
repeat
PutA
Ou('0-Ex,1-Param,2-Kr,3-Ti,4-Td,5-Kf,6-Tv,7-Sc,8-C,
9-h(t),S-Service');
Str(Nzr,T10); Ts:='Nzr='+T10;
case Nzr of
1: Ts:=Ts+'(PID)';
2: Ts:=Ts+'(PI-D)';
3: Ts:=Ts+'(I-PD)';
end;
Str(Kr:1:2,T10); Ts:=Ts+', Kr='+T10;
251
Str(Ti:1:2,T10); Ts:=Ts+', Ti='+T10;
Str(Td:1:2,T10); Ts:=Ts+', Td='+T10;
Str(Kf:1:2,T10); Ts:=Ts+', Kf='+T10;
Str(Tv:1:2,T10); Ts:=Ts+', Tv='+T10;
Str(C,T10); Ts:=Ts+', C='+T10;
Str(I:1:2,T10); Ts:=Ts+' (I='+T10+')';
Info; J1:=ReadKey;
case J1 of
'1': Param;
'2': Our('Kr',Kr);
'3': Our('Ti',Ti);
'4': Our('Td',Td);
'5': Our('Kf',Kf);
'6': Our('Tv',Tv);
'7': begin
FormHts;
if Tc='Y' then Sc(Hts,Vs='Z')
else Sc(HtsX,false);
end;
'8': Oui('C',C);
'9': begin
FormHts;
if Tc='Y'
then if Tmo='A' then Graphic(Hts,C)
else Grad(Hts,C)
else if Tmo='A' then Graphic(HtsX,C)
else Grad(HtsX,C);
I:=Hts[601];
end;
'S','s': Service;
end;
until J1='0';
end;
procedure OptSt;
var z,s,q,zv,w:integer;
f,out:boolean; j3:char;
dkro,dtio,dtdo,dtvo,Io,krc,tic,tdc,tvc,
kro,tio,tdo,tvo:real;
begin
Kr:=krs; Ti:=tis; Td:=tds; Tv:=tvs;
kro:=Kr; tio:=Ti; tdo:=Td; tvo:=Tv;
FormHts; w:=1; Io:=Hts[601];
out:=false; j3:='1';
puta; Ou('0-ex'); Clear(500,45,630,55);
repeat
krc:=kro; tic:=tio; tdc:=tdo; tvc:=tvo;
f:=false; z:=-Ddk;
repeat
Kr:=krc+z*Dk; s:=-Ddi;
repeat
Ti:=tic+s*Di; q:=-Ddd;
repeat
252
Td:=tdc+q*Dd; sv:=-Dtv;
repeat
Tv:=tvc+sv*Dd;
{if Tv<=0 then Tv:=0;}
FormHts; I:=Hts[601];
inc(w); str(w,T10); Clear(550,30,630,40);
OutTextXY(550,30,'w='+T10);
if I<Io then
begin
Io:=I; f:=true;
kro:=Kr; tio:=Ti; tdo:=Td; tvo:=Tv;
dkro:=z*Dk; dtio:=s*Di;
dtdo:=q*Dd; dtvo:=sv*Dd;
end;
if KeyPressed then j3:=Readkey;
if j3='0' then out:=true;
inc(sv);
until (sv>Dtv) or out;
inc(q);
until (q>Ddd) or out;
inc(s);
until (s>Ddi) or out;
inc(z);
until (z>Ddk) or out;
Kr:=kro; Ti:=tio; Td:=tdo; Tv:=tvo;
if f then
repeat
Kr:=Kr+dkro; Ti:=Ti+dtio; Td:=Td+dtdo; Tv:=Tv+dtvo;
FormHts; I:=Hts[601]; inc(w); str(w,T10);
Clear(550,30,630,40); OutTextXY(550,30,'w='+T10);
if I<Io then
begin
kro:=Kr; tio:=Ti; tdo:=Td; tvo:=Tv; Io:=I;
end;
until I>Io;
until (f=false) or out;
Kr:=kro; Ti:=tio; Td:=tdo; Tv:=tvo;
Krs:=Kr; Tis:=Ti; Tds:=Td; Tvs:=Tv;
Clear(550,30,630,40); OutTextXY(550,30,'Ok!');
end;
procedure Diffs;
var j2:char;
begin
repeat
PutA; Ou('0-ex,1-Dk,2-Di,3-Dd,4-Ddk,5-Ddi,6-Ddd,7-Dtv');
str(Dk:1:3,T10); Ts:='Dk='+T10;
str(Di:1:3,T10); Ts:=Ts+', Di='+T10;
str(Dd:1:3,T10); Ts:=Ts+', Dd='+T10;
str(Ddk,T10); Ts:=Ts+', Ddk='+T10;
str(Ddi,T10); Ts:=Ts+', Ddi='+T10;
str(Ddd,T10); Ts:=Ts+', Ddd='+T10;
str(Dtv,T10); Ts:=Ts+', Dtv='+T10;
253
Info; j2:=ReadKey;
case j2 of
'1': Our('Dk',Dk);
'2': Our('Di',Di);
'3': Our('Dd',Dd);
'4': if Ddk=1 then Ddk:=0 else Ddk:=1;
'5': if Ddi=1 then Ddi:=0 else Ddi:=1;
'6': if Ddd=1 then Ddd:=0 else Ddd:=1;
'7': if Dtv=1 then Dtv:=0 else Dtv:=1;
end;
until j2='0';
end;
procedure DemOpt;
var j1:char;
begin
repeat
PutA;
Ou('0-ex,1-Param,2-Diffs,3-Krs,4-Tis,5-Tds,6-Tvs,7-OptSt');
str(Krs:1:2,T10); Ts:='Krs='+T10;
str(Tis:1:2,T10); Ts:=Ts+', Tis='+T10;
str(Tds:1:2,T10); Ts:=Ts+', Tds='+T10;
str(Tvs:1:2,T10); Ts:=Ts+', Tvs='+T10;
Info; j1:=ReadKey;
case j1 of
'1': Param;
'2': Diffs;
'3': Our('Krs',Krs);
'4': Our('Tis',Tis);
'5': Our('Tds',Tds);
'6': Our('Tvs',Tvs);
'7': OptSt;
end;
until j1='0';
end;
procedure Opt;
var J2: char;
begin
repeat
PutA;
Ou('0-Ex,1-Nastr,2-DemOpt,3-Service');
J2:=ReadKey;
case J2 of
'1': Nastr;
'2': DemOpt;
'3': Service;
end
until J2='0';
end;
end.
254
Додаток 16. Програма СascOpt program СascOpt;
uses Crt,Graph,Serv,GromS;
const
D: real=50; Nk: integer=10;
Nc: integer=1; epsmax: real=5;
Nvr: integer=1; R: real=1;
Dk: real=0.05; Di: real=0.1;
Dd: real=0.1; Ks: integer=5;
Kr1: real=1; Kr2: real=1;
Ti1: real=10; Ti2: real=10;
Td1: real=0; Td2: real=0;
Kr1s: real=1; Kr2s: real=1;
Ti1s: real=10; Ti2s: real=10;
Td1s: real=0; Td2s: real=0;
dk1: integer=1; dk2: integer=1;
di1: integer=1; di2: integer=1;
dd1: integer=1; dd2: integer=1;
Tvs: char='Z'; {L}
var Pob: array[1..4,1..4] of real;
Mrs,Mht: array[1..4] of CoefL;
Hts: CoefL; B,A: Coef;
Nt:integer; dt,tkv,v0,e,eo:real;
procedure UmnPol(A,B:Coef; var C:Coef);
var s,z,na,nb,nc:integer;
begin
na:=round(A[-1]);
nb:=round(B[-1]); nc:=na+nb; C[-1]:=nc;
for s:=0 to nc do C[s]:=0;
for z:=0 to na do
for s:=0 to nb do C[z+s]:=C[z+s]+A[z]*B[s];
end;
procedure EilWpm(B,A:Coef; x0,x1,v0:real; var y:Coef);
var z,m,n:integer;
begin
m:=round(B[-1]); n:=round(A[-1]); Y[n+1]:=0;
for z:=m+1 to n do B[z]:=0;
for z:=1 to n do
y[z]:=y[z]+v0*(y[z+1]+B[n-z]*x0-A[n-z]*y[0]);
y[0]:=(y[1]+B[n]*x1)/A[n];
end;
procedure FormMht;
var u,z,s,n,zt:integer;
B,A,My:Coef; Ht:CoefL;
begin
dt:=D/L; v0:=Dt/Ks;
for u:=1 to 4 do
begin
255
zt:=round(Pob[u,4]/Dt);
A[-1]:=0; A[0]:=1; B[-1]:=1;
B[0]:=1; B[1]:=Pob[u,2];
n:=round(Pob[u,3]);
for s:=1 to n do UmnPol(A,B,A);
B[-1]:=0; B[0]:=Pob[u,1];
for s:=0 to n do My[s]:=0;
for z:=0 to L do
if z<=zt
then Ht[z]:=0
else
begin
for s:=1 to Ks do
EilWpm(B,A,1,1,v0,My);
Ht[z]:=My[0];
end;
Ht[-1]:=L; Ht[L+1]:=dt; Mht[u]:=Ht;
end;
end;
procedure InpOb;
var j1: char; s:integer; y:real;
Rs,ht:CoefL; T2:string[2];
begin
repeat
puta;
Ou('0-ex,1-Nc,2-K,3-T,4-n,5-Tau,6-D,7-Ks,8-SC,9-h(t)');
str(Nc,T2); Ts:='Nc='+T2;
str(Pob[nc,1]:1:3,T10); Ts:=Ts+', K['+T2+']='+T10;
str(Pob[nc,2]:1:3,T10); Ts:=Ts+', T['+T2+']='+T10;
str(round(Pob[nc,3]),T10); Ts:=Ts+', n['+T2+']='+T10;
str(Pob[nc,4]:1:3,T10); Ts:=Ts+', Tau['+T2+']='+T10;
str(D:1:2,T10); Ts:=Ts+', D='+T10;
str(Ks,T10); Ts:=Ts+', Ks='+T10;
Info; j1:=ReadKey;
case j1 of
'1': Oui('Nc',NC);
'2': Our('K['+T2+']',Pob[nc,1]);
'3': Our('T['+T2+']',Pob[nc,2]);
'4': Our('n['+T2+']',Pob[nc,3]);
'5': Our('Tau['+T2+']',Pob[nc,4]);
'6': Our('D',D);
'7': Oui('Ks',Ks);
'8': begin
FormMht; Ht:=Mht[nc];
Xmin:=0; Xmax:=D; Ymin:=0; Ymax:=Pob[nc,1];
if Ymax=0 then Ymax:=1;
X0Y0(false); ClearDevice;
SystCoor; Graphic(Ht,C);
end;
'9': begin
FormMht; Ht:=Mht[Nc]; Graphic(Ht,C);
end;
256
end;
until j1='0';
end;
procedure Param;
var j2: char;
begin
repeat
puta;
Ou('0-ex,1-Nk,2-Nvr,3-R,4-D,5-Ks.6-Epsmax,7-Tvs,8-C');
str(Nk,T10); Ts:='Nk='+T10;
tkv:=Nk*dt;
str(tkv:1:3,T10); Ts:=Ts+'(tkv='+T10+')';
str(Nvr,T10); Ts:=Ts+', Nvr='+T10;
str(R:1:2,T10); Ts:=Ts+', R='+T10;
str(D:1:2,T10); Ts:=Ts+', D='+T10;
str(Ks,T10); Ts:=Ts+', Ks='+T10;
str(Epsmax:1:2,T10); Ts:=Ts+', Epsmax='+T10;
Ts:=Ts+', Tvs='+Tvs;
str(C,T10); Ts:=Ts+', C='+T10;
Info; j2:=ReadKey;
case j2 of
'1': Oui('Nk',Nk);
'2': Oui('Nvr',Nvr);
'3': Our('R',R);
'4': Our('D',D);
'5': Oui('Ks',Ks);
'6': Our('Epsmax',Epsmax);
'7': if Tvs='Z' then Tvs:='L' else Tvs:='Z';
'8': Oui('C',C);
end;
until j2='0';
end;
procedure FormHts;
var eps1,eps2,eps1p,eps2p,
integr1,integr2,x1,x2,y1,y2,f:real;
z,s,zd,La:integer; Ht1:CoefL;
begin
if Tvs='Z' then begin Zd:=1; La:=0; end
else begin Zd:=0; La:=1; end;
y1:=0; y2:=0; eps2:=Zd-y2; x2:=Kr2*eps2;
eps1:=x2-y1; x1:=Kr1*eps1;
Nt:=L div Nk; Hts[-1]:=Nt;
dt:=D/L; Tkv:=Nk*dt; Hts[Nt+1]:=Tkv;
for z:=1 to 4 do
begin
Mrs[z,0]:=Mht[z,0];
for s:=1 to Nt do
Mrs[z,s]:=Mht[z,s*Nk]-Mht[z,(s-1)*Nk];
end;
for s:=0 to Nt do
begin
257
Ht1[s]:=Mrs[1,s]*x1+Mrs[3,s]*La;
Hts[s]:=Mrs[2,s]*x1+Mrs[4,s]*La;
end;
integr1:=0; integr2:=0; y1:=Ht1[0]; y2:=Hts[0];
if Nvr in [1..2] then e:=Zd else e:=0;
z:=1;
repeat
eps1p:=eps1; eps2p:=eps2; eps2:=Zd-y2;
integr2:=integr2+eps2*tkv;
x2:=Kr2*(eps2+integr2/Ti2+Td2*(eps2-eps2p)/tkv);
y1:=Ht1[z]; eps1:=x2-y1; integr1:=integr1+eps1*tkv;
x1:=Kr1*(eps1+integr1/Ti1+Td1*(eps1-eps1p)/tkv);
for s:=0 to Nt-z do
begin
Ht1[z+s]:=Ht1[z+s]+Mrs[1,s]*x1+Mrs[3,s]*La;
Hts[z+s]:=Hts[z+s]+Mrs[2,s]*x1+Mrs[4,s]*La;
end;
y2:=Hts[z];
if abs(y2)>epsmax
then e:=500
else
begin
case Tvs of
'Z': if eps2>=0 then f:=eps2*R else f:=eps2;
'L': if eps2<0 then f:=eps2*R else f:=eps2;
end;
case Nvr of
1: e:=e+abs(f);
2: e:=e+sqr(f);
3: e:=e+z/Nt*abs(f);
4: e:=e+z/Nt*sqr(f);
end;
end;
inc(z);
until (z>Nt) or (e>=500);
if e>=500 then
for s:=z to Nt do Hts[s]:=epsmax/2;
Hts[601]:=e*Tkv;
end;
procedure Grad(Hts:CoefL; C:integer);
var s,Nt:integer;
begin
Nt:=round(Hts[-1]); SetColor(C);
MoveTo(x0,y0-round(Hts[0]/dy));
for s:=1 to Nt do
LineTo(x0+s*Nk,y0-round(Hts[s]/dy));
Setcolor(15);
end;
procedure Nastr;
var j1:char;
begin
258
repeat
puta;
Ou('0-ex,1-Param,2-Kr1,3-Ti1,4-Td1,5-Kr2,6-Ti2,7-Td2,
8-SC,9-h(t)');
str(Kr1:1:3,T10); Ts:='Kr1='+T10;
str(Ti1:1:3,T10); Ts:=Ts+',Ti1='+T10;
str(Td1:1:3,T10); Ts:=Ts+',Td1='+T10;
str(Kr2:1:3,T10); Ts:=Ts+',Kr2='+T10;
str(Ti2:1:3,T10); Ts:=Ts+',Ti2='+T10;
str(Td2:1:3,T10); Ts:=Ts+',Td2='+T10;
FormHts;
str(Hts[601]:1:1,T10); Ts:=Ts+'(e='+T10+')';
Info; j1:=ReadKey;
case j1 of
'1': begin Param; FormMht; end;
'2': Our('Kr1',Kr1);
'3': Our('Ti1',Ti1);
'4': Our('Td1',Td1);
'5': Our('Kr2',Kr2);
'6': Our('Ti2',Ti2);
'7': Our('Td2',Td2);
'8': begin
FormHts;
Xmin:=0; Xmax:=D; Ymin:=0;
if Tvs='Z' then Ymax:=1.5
else
begin
Ymax:=epsmax;
Ymin:=-0.5*epsmax;
end;
X0Y0(false); ClearDevice; SystCoor;
if Tvs='Z' then
Line(x0,y0-round(1/dy),x0+L,y0-round(1/dy));
Grad(Hts,C);
end;
'9': begin
FormHts; Grad(Hts,C);
end;
end;
until j1='0';
end;
procedure Opt6;
var z1,s1,v1,z2,s2,v2,w:integer;
j2:char; f,out:boolean;
dk1o,di1o,dd1o,dk2o,di2o,dd2o,e,
kr1c,ti1c,td1c,kr2c,ti2c,td2c,
kr1o,ti1o,td1o,kr2o,ti2o,td2o:real;
label stop;
begin
kr1:=kr1s; ti1:=ti1s; td1:=td1s;
kr2:=kr2s; ti2:=ti2s; td2:=td2s;
FormHts; e:=Hts[601];
259
kr1o:=kr1; ti1o:=ti1; td1o:=td1;
kr2o:=kr2; ti2o:=ti2; td2o:=td2;
out:=false; eo:=e; w:=1; j2:='1'; puta;
Ou('0-ex'); Clear(500,45,630,55);
repeat
kr1c:=kr1o; ti1c:=ti1o; td1c:=td1o;
kr2c:=kr2o; ti2c:=ti2o; td2c:=td2o;
f:=false; z1:=-dk1;
repeat
kr1:=kr1c+z1*dk; s1:=-di1;
repeat
ti1:=ti1c+s1*di; v1:=-dd1;
repeat
td1:=td1c+v1*dd; z2:=-dk2;
repeat
kr2:=kr2c+z2*dk; s2:=-di2;
repeat
ti2:=ti2c+s2*di; v2:=-dd2;
repeat
td2:=td2c+v2*dd; FormHts;
e:=Hts[601]; inc(w); str(w,T10);
Clear(550,30,630,40);
OutTextXY(550,30,'w='+T10);
if KeyPressed then j2:=Readkey;
if j2='0' then out:=true;
if j2='0' then goto stop;
if e<eo then
begin
eo:=e; f:=true;
kr1o:=kr1; ti1o:=ti1; td1o:=td1;
kr2o:=kr2; ti2o:=ti2; td2o:=td2;
dk1o:=z1*dk; di1o:=s1*di; dd1o:=v1*dd;
dk2o:=z2*dk; di2o:=s2*di; dd2o:=v2*dd;
end;
inc(v2);
until (v2>dd2) or out;
inc(s2);
until (s2>di2) or out;
inc(z2);
until (z2>dk2) or out;
inc(v1);
until (v1>dd1) or out;
inc(s1);
until (s1>di1) or out;
inc(z1);
until (z1>dk1) or out;
kr1:=kr1o; ti1:=ti1o; td1:=td1o;
kr2:=kr2o; ti2:=ti2o; td2:=td2o;
if f then
repeat
kr1:=kr1+dk1o; ti1:=ti1+di1o; td1:=td1+dd1o;
kr2:=kr2+dk2o; ti2:=ti2+di2o; td2:=td2+dd2o;
FormHts; e:=Hts[601]; inc(w); str(w,T10);
260
Clear(550,30,630,40); OutTextXY(550,30,'w='+T10);
if e<eo then
begin
eo:=e;
kr1o:=kr1; ti1o:=ti1; td1o:=td1;
kr2o:=kr2; ti2o:=ti2; td2o:=td2;
end;
until e>eo;
until (f=false) or out;
stop:
kr1:=kr1o; ti1:=ti1o; td1:=td1o;
kr2:=kr2o; ti2:=ti2o; td2:=td2o;
Clear(500,45,630,55); OutTextXY(500,45,'Ok! Press Enter');
j2:=ReadKey;
end;
procedure Diffs;
var j3:char;
begin
repeat
puta;
Ou('0-ex,1-dk1,2-di1,3-dd1,4-dk2,5-di2,6-dd2,7-dk,
8-di,9-dd');
str(dk1,T10); Ts:='dk1='+T10;
str(di1,T10); Ts:=Ts+', di1='+T10;
str(dd1,T10); Ts:=Ts+', dd1='+T10;
str(dk2,T10); Ts:=Ts+', dk2='+T10;
str(di2,T10); Ts:=Ts+', di2='+T10;
str(dd2,T10); Ts:=Ts+', dd2='+T10;
str(Dk:1:3,T10); Ts:=Ts+', Dk='+T10;
str(Di:1:3,T10); Ts:=Ts+', Di='+T10;
str(Dd:1:3,T10); Ts:=Ts+', Dd='+T10;
Info; j3:=ReadKey;
case j3 of
'1': if dk1=1 then dk1:=0 else dk1:=1;
'2': if di1=1 then di1:=0 else di1:=1;
'3': if dd1=1 then dd1:=0 else dd1:=1;
'4': if dk2=1 then dk2:=0 else dk2:=1;
'5': if di2=1 then di2:=0 else di2:=1;
'6': if dd2=1 then dd2:=0 else dd2:=1;
'7': Our('Dk',Dk);
'8': Our('Di',Di);
'9': Our('Dd',Dd);
end;
until j3='0';
end;
procedure Dem6;
var j1:char;
begin
kr1s:=kr1; ti1s:=ti1; td1s:=td1;
kr2s:=kr2; ti2s:=ti2; td2s:=td2;
repeat
261
puta;
Ou('0-ex,1-Par,2-Dif,3-Kr1s,4-Ti1s,5-Td1s,6-Kr2s,7-Ti2s,
8-Td2s,9-Opt');
str(Kr1s:1:3,T10); Ts:='Kr1s='+T10;
str(Ti1s:1:3,T10); Ts:=Ts+',Ti1s='+T10;
str(Td1s:1:3,T10); Ts:=Ts+',Td1s='+T10;
str(Kr2s:1:3,T10); Ts:=Ts+',Kr2s='+T10;
str(Ti2s:1:3,T10); Ts:=Ts+',Ti2s='+T10;
str(Td2s:1:3,T10); Ts:=Ts+',Td2s='+T10;
Info; j1:=ReadKey;
case j1 of
'1': Param;
'2': Diffs;
'3': Our('Kr1s',Kr1s);
'4': Our('Ti1s',Ti1s);
'5': Our('Td1s',Td1s);
'6': Our('Kr2s',Kr2s);
'7': Our('Ti2s',Ti2s);
'8': Our('Td2s',Td2s);
'9': Opt6;
end;
until j1='0';
end;
begin
Pob[1,1]:=0.1; Pob[1,2]:=5; Pob[1,3]:=1; Pob[1,4]:=0;
Pob[2,1]:=1; Pob[2,2]:=5; Pob[2,3]:=2; Pob[2,4]:=4;
Pob[3,1]:=0.1; Pob[3,2]:=5; Pob[3,3]:=1; Pob[3,4]:=0;
Pob[4,1]:=1; Pob[4,2]:=5; Pob[4,3]:=2; Pob[4,4]:=4;
repeat
puta;
Ou('Esc-ex, 1-InpOb, 2-Nastr, 3-Dem6, 4-Groms');
j:=ReadKey;
case j of
'1': InpOb;
'2': Nastr;
'3': Dem6;
'4': Service;
end;
until j=#27;
CloseGraph;
end.
262
Наукове видання
ГОЛІНКО Ігор Михайлович
КУБРАК Анатолій Іванович
Моделювання та оптимізація
систем керування
Монографія
За редакцією авторів
Дизайн та верстка Н.Л. Москаленко
Підписано до друку 17.09.2012р. Формат 60х84 1/16.
Папір офсетний. Гарнітура Times.
Друк офсетний. Умов.-друк.-арк. 14.88. Наклад 350. Зам. 881
ПП Буйницький
32300, Хмельницька обл., м. Кам`янець-Подільський,
вул. Лесі Українки , 31/308, тел. (03849) 3-63-54
Свідоцтво про внесення до Державного реєстру
від 28.04.2006 р. серія ДК №2477