Система захисту від блискавки
Вступ
Сучасний
науково-технічний прогрес невідривно пов’язаний з бурхливим розвитком систем
управління і автоматики (СУА). Автоматика - це галузь науки і техніки, яка
охоплює теорію та принципи побудови систем управління процесами, що діють без
безпосередньої участі людини. У відповідності до загальних принципів управління
різними процесами, автоматичне управління здійснюється на основі інформації з
використанням комплексу технічних засобів. [1]
Система керування -
систематизований набір засобів впливу на підконтрольний об'єкт для досягнення
цим об'єктом певної мети. Об'єктом системи керування можуть бути як технічні
об'єкти так і люди. Об'єкт системи керування може складатися з інших об'єктів,
які можуть мати постійну структуру взаємозв'язків. Об'єктом керування може бути
будь-яка динамічна система чи її модель. Стан об'єкта характеризується деякими
кількісними величинами, що змінюються в часі, тобто змінними стану. В
технологічних процесах у ролі таких змінних може виступати температура,
густина, в'язкість сировини або механічні переміщення (кутові або лінійні) і
їхня швидкість, електричні змінні, температура технологічного обладнання, у
бізнес-процесах - курс цінних паперів тощо. Аналіз і синтез систем керування
проводиться методами спеціального розділу математики - теорії керування. [2]
Технічні засоби СУА за
їх конструктивними та функціональними ознаками поділяють на елементи та
пристрої (вузли). Елементи, зазвичай, виконують одну просту операцію з
сигналами (вимірювання, підсилення, запам’ятовування і т. ін.), а для більш
складних перетворень сигналів (виконання основних математичних операцій,
дешифрування, запам’ятовування багаторозрядних кодів і т. п.) служать пристрої
(сукупності з’єднаних певним чином елементів). Об’єднання елементів та
пристроїв для вирішення всієї масштабної задачі являє собою систему (система
стеження, ЕОМ, АСУ технологічним процесом та ін.). [1]
Автоматизована система
управління - автоматизована система, що ґрунтується на комплексному
використанні технічних, математичних, інформаційних та організаційних засобів
для управління складними технічними й економічними об'єктами. [3]
Таким чином, сучасні
технічні засоби, що охоплюють різноманітні елементи та пристрої, служать для
отримання, передавання, перетворення та збереження контрольної інформації,
порівняння контрольної та програмної інформації, виконання прийнятого рішення.
Якість функціонування
систем управління і автоматики в значній мірі залежить від елементної бази, яка
в них використовується. [1]
1. Огляд технологій
розрахунку блискавковідвода
.1 Загальні відомості
про дію блискавки
Блискавка являє собою
електричний розряд довжиною кілька кілометрів, що розвивається між грозовою
хмарою і землею або якою-небудь наземною спорудою. Розряд блискавки починається
з розвитку лідера - каналу з струмом в кілька сотень ампер. По напрямку руху
лідери бувають спадними (від хмари вниз) або відбитими (від наземної споруди).
Лідер низхідної
блискавки виникає під дією процесів між хмарами, і його поява не залежить від
наявності на поверхні землі будь-яких споруд. У міру просування лідера до землі
з наземних об'єктів можуть збуджуватися спрямовані до хмари зустрічні лідери.
Зіткнення одного з них з низхідним лідером (або торкання останнім поверхні
землі) визначає місце удару блискавки в землю або який-небудь об'єкт. Розвиток
низхідної блискавки відбувається наступним чином. Після встановлення
наскрізного лідерного каналу слідує головна стадія розряду - швидка
нейтралізація зарядів лідера, що супроводжується яскравим світінням і
наростанням струму до пікових значень, що варіюються від одиниць до сотень
кілоампер. При цьому відбувається інтенсивний розігрів каналу (до десятків
тисяч кельвін) та його ударне розширення, яке сприймається на слух як гуркіт
грому. Тривалість спалаху становить 0,2 с, а в окремих випадках 1,0-1,5 с.
Заряд, що переноситься
під час спалаху блискавки, коливається від одиниць до сотень кулон. У більшості
випадків він має негативну полярність і приблизно в 10% випадків - позитивну.
При розрахунках захисту
від блискавок сила струму при грозовому розряді приймається рівною 100 кА,
виходячи з того, що цій умові відповідає 99% уражень спадними блискавками.
Відбиті лідери можуть з’являтись як з високих заземлених споруд, так і з
загострених елементів рельєфу, у вершин яких електричне поле під час грози
різко посилюється.
Після того, як лідер
нисхідної блискавки досягне грозової хмари, починається процес розряду, що
супроводжується приблизно в 80% випадків струмами негативної полярності. Заряд
блискавки може досягати до 40 кулон, а струм - до декількох сотень ампер.
У гірській місцевості
нисхідні блискавки виникають частіше і характеризуються більш високими
параметрами. На рівнинній місцевості нисхідні блискавки найчастіше вражають
об'єкти вище 150 м (більш ніж у 90% випадків), а у гірських районах - меншої
висоти.
Сила, що створює різницю
потенціалів, необхідна для пробою атмосфери, тобто для виникнення блискавки,
пов'язана з різницею температур між поверхнею землі та верхніми шарами
атмосфери. Конвективні рухи повітря що викликані цією різницею температур, і є
джерелом виникнення різниці потенціалів між хмарами або між хмарою і землею.
Тому в зимову пору року, а також у приполярних областях, де різниця температур
мала, грозові явища - рідкість. В жарких пустелях, незважаючи на потужні конвективні
потоки, грози також рідкість. У той же час у тропічній зоні грози бувають майже
щодня. У Центральній Європі в середньому трапляється від 15 до 25 грозових
днів. Щодня на Землі проходить близько 45 тис. гроз. За даними міжнародної
статистики, число жертв, пов'язаних з блискавок, досягає 10 тис. чоловік
щорічно.
1.2 Види небезпечних
впливів блискавки
Впливи блискавки
прийнято розділяти на дві основні групи:
- первинні,
викликані прямим ударом блискавки;
- вторинні,
індуковані її розрядами або занесені в об'єкт протяжними металевими
комунікаціями.
Прямий удар блискавки
викликає наступну дію на об'єкт:
- Електричну,
пов’язану з враженням людей або тварин електричним струмом і появою напруги в
декілька мегавольт на на вражених елементах;
- термічну,
пов'язану з різким виділенням теплоти при прямому контакті каналу блискавки з
об'єктом та при протіканні через об'єкт блискавки. У 95% випадків розрядів
блискавки ця енергія на два-три порядки перевищує енергію займання більшості
газо-, паро-і пилоповітряних сумішей, що використовуються в промисловості.
Прямий контакт з каналомблискавки може призвести проплавлення корпусів
вибухонебезпечних установок і викликати пожежі та вибухи;
- механічну,
зумовлену потужною ударної хвилею, що розповсюджується від каналу блискавки, і
електродинамічними силами, діючими на провідники зі струмами блискавки. Цей
вплив може бути причиною, наприклад, сплющування тонких металевих трубок і
навіть механічних руйнувань об'єктів. Вторинні прояви блискавки пов'язані з
дією на об'єкт електромагнітного поля близьких розрядів. Зазвичай це поле
розглядають у вигляді двох складових: перша обумовлена переміщенням зарядів у
лідері і каналі блискавки (електростатична індукція), друга - зміною струму
блискавки в часі (електромагнітна індукція).
Електромагнітна індукція
пов'язана з наведенням у металевих контурах ЕРС величиною в кілька десятків
кіловольт. У місцях зближення протяжних металевих конструкцій та в розривах
незамкнутих контурів створюється небезпека іскріння.
Ще одним видом
небезпечного впливу блискавки є занесення потенціалу по контактам, що вводяться
в об'єкт (кабелів, наземним і підземним конструкціям, трубопроводах, проводам
повітряних ліній електропередачі). [4]
1.3 Характеристика
грозової діяльностіі враженням грозою будівель і споруд
Про інтенсивність
грозової діяльності в різних районах Землі судять по повторюваності і
тривалості гроз, що реєструються в днях чи годинах за рік по чутному грому на
початку і наприкінці грози. Однак більш важливою характеристикою для оцінки
можливого числа поразок об'єктів блискавкою є щільність ударів землю.
Щільність ударів блискавки в землю,
виражена через число уражень 1 км2 земної поверхні за рік,
визначається за даними метеорологічних спостережень у місці розташування
об'єкта.
Якщо ж щільність ударів
в землю (N) невідома, її можна розрахувати за наступною формулою (1.1):
N = 6,7 ? T / 100, (1.1)
-
середньорічна тривалість гроз у годинах.
При розрахунку числа
поразок спадними блискавками приймається, що об'єкт приймає на себе розряди,
які в його відсутність вразили б поверхню землі певної площі (так звану
поверхню стягування). Ця площа має форму кола для округлих об’єктів та форму прямокутника
для протяжних.
1.4 Засоби та способи
захисту від блискавки
Комплекс засобів захисту
будівель або споруд від блискавки включає в себе пристрої захисту від прямих
ударів (зовнішня блискавкозахисна система (БЗС)) і пристрої захисту від
вторинних впливів блискавки (внутрішня БЗС). [5]
Засобом захисту від
прямих ударів блискавки служить блискавковідвід - пристрій, розрахований на
безпосередній контакт з каналом блискавки і відводить її струм в землю.
Вважається, що блискавковідвід був винайдений Бенджаміном Франкліном в 1752
році, хоча є свідчення про існування конструкцій із блискавковідводами й до
цієї дати.
Складається із трьох
зв'язаних між собою частин, які складаються з блискавкоприймача,
заземлювача і струмовідвідних спусків, які з'єднують блискавкоприймач із
землею:
- блискавкоприймач
- слугує для прийому
розряду блискавки й розташовується в зоні можливого контакту з каналом
блискавки; в залежності від захищуваного об'єкта, може являти собою металевий
штир, мережу із провідного матеріалу або металевий трос, натягнутий над
захищуваним об'єктом.
- струмовідвідні
спуски - провідники, що слугують для відводу заряду від блискавкоприймача
до заземлювач; звичайно являє собою провід досить великого перетину
- заземлювач
- провідник або кілька
з'єднаних між собою провідників, що торкаються ґрунту; звичайно являє собою
металеву плиту, заглиблену в ґрунт.
Елементи блискавковідводу
з'єднуються між собою й закріплюються на несучій конструкції. Оскільки
ймовірність влучення у наземний об'єкт блискавкою зростає із збільшенням його
висоти, блискавковідвід розташовується на якомога більшій висоті або
безпосередньо на об'єкті, що захищається, або як окреме спорудження поруч із
об'єктом. Іноді блискавковідвід вбудовується в декоративні елементи будинку або
споруди. [6]
Рисунок 1.1 - Стрижневий
громовідвід
Зовнішня
блискавкозахисна система може бути ізольована від споруди (окремо розташовані
стрижневі громовідводи, (рис. 1.1) або окремо розташовані тросові громовідводи
(рис. 1.2), а також сусідні споруди, що виконують функції природних
блискавковідводів), також може бути встановлена на будівлі, яку треба захистити
і навіть бути його частиною (у останньому випадку вони називаються природними
блискавкоприймачами). [5]
Рисунок 1.2 - Тросовий
громовідвід
Тросовий громовідвід має
значно більшу площу захисту ніж стрижневий, але при цьому на його виготовлення
потрібно значно більше матеріалів та інших ресурсів.
2. Розробка методики
розрахунку блискавковідвода
Стандартної зоною
захисту одиночного стрижневого блискавковідводу висотою h є круговий конус
висотою h0 < h, вершина якого співпадає з вертикальною віссю
блискавковідводу (рис. 2.1). Габарити зони визначаються двома параметрами:
висотою конуса h0 і радіусом конуса на рівні землі r0.
Рисунок 2.1 - Зона захисту одиночного стрижневого блискавковідводу
За ступенем надійності
захисту розрізняють два типи зон:
А - ступінь надійності
захисту перевищує 99,5%;
Б - ступінь надійності
захисту становить 95-99,5%.
Зв'язки між параметрами
блискавковідводу в залежності від типу зон захисту визначені за наступними
формулами.
Для зони А висота конусу
знаходиться за формулою:
h0 = 0.85h, (2.1)
h - повна висота блискавковідводу.
Для зони А радіус конуса на рівні землі знаходиться за формулою:
r0 = (1.1 - 2×10-3h) h. (2.2)
Для зони А радіус горизонтального перерізу на висоті об'єкта:
rx = (1.1 - 2×10-3h) (h - 1.2hx), (2.3)
hx - найбільша висота
споруди, що захищається.
Для зони Б висота конусу
знаходиться за формулою:
h0 = 0.92h. (2.4)
Для зони Б радіус конуса на рівні землі знаходиться за формулою:
r0 = 1.5h. (2.5)
Для зони Б радіус горизонтального перерізу на висоті об'єкта:
rx = 1.5 (h - 1.1hx). (2.6)
Розрахункові формули
(2.1) - (2.6) придатні для блискавковідводів висотою до 150 м. Для більш
високих блискавковідводів слід користуватися іншою методикою розрахунку.
N = 9πhx2n×10-6, (2.7)
n - середньорічне число
ударів блискавки в 1 км2 земної поверхні в місці знаходження будівлі
або споруди, 1 / (км2 · год). [7]
Для будівель і споруд прямокутної форми:
N = ((B + 6hx)
(A + 6hx) - 7.7hx2) n ×10-6.
(2.8)
Кут захисту (між
вертикаллю та гіпотенузою) знаходиться за формулою:
α = arctg(h0/r0). (2.9)
Площа захищеної області
на рівні землі знаходиться за формулою:
Se = . (2.10)
Площа захищеної області
на висоті об'єкта знаходиться за формулою:
Se = . (2.11)
Вибір типу зони захисту
здійснюється відповідно до [8] в залежності від призначення, географічного
розташування, класів вибухо-і пожежонебезпеки об'єкта, що захищається, а також
з урахуванням середньої тривалості гроз на рік.
Перевірка того, чи
блискавковідвід захистив об’єкт проводиться за
логічним виразом:
. (2.11)
Якщо нерівність справджується, то
блискавковідвід захищає об’єкт повністю. [8]
3. Приклад розрахунку
блискавковідводу
Потрібно визначити, чи
блискавковідвід заданої висоти буде захищати об’єкт, скільки блискавок на рік
буде в нього влучати, а також параметри захищеної області, такі як радіус,
висота. Вхідні дані занесені в таблицю 3.1.
блискавковідвод грозовий
споруда
Таблиця 3.1 - Вхідні
дані для розрахунку
Позначення
|
Назва
|
Одиниці виміру
|
Значення
|
А
|
Довжина об’єкта
|
м
|
40
|
В
|
Ширина об’єкта
|
м
|
20
|
hx
|
Висота об’єкта
|
м
|
15
|
n
|
Щільність ударів блискавки в землю
|
1/км2×год
|
1
|
h
|
Висота блискавковідводу
|
м
|
40
|
Припустимо, що
призначення, географічне розташування та клас вибухо-і пожежонебезпеки об'єкта
відповідає зоні захисту типу А. Обрану саме цю зону, так як в радіусі її дії
об'єкт більш захищений.
За формулою (2.8)
розрахуємо середню кількість поразок блискавкою в рік:
N = ((B + 6hx)
(A + 6hx) - 7.7hx2) n ×10-6.
N = ((20 + 6×15) (40 + 6×15) - 7.7×225) 1 ×10-6 = 0.013, шт./рік
За формулою (2.1)
розрахуємо висота конусу:
h0 = 0.85h.
h0 = 0.85×40 = 34, м
За формулою (2.2)
розрахуємо радіус конуса на рівні землі:
r0 = (1.1 - 2×10-3h) h.
0 = (1.1 - 2×10-3×40) 40 = 40.8, м
За формулою (2.3)
розрахуємо радіус горизонтального перерізу на висоті об'єкта:
rx = 1.5 (h - 1.1hx).
rx = (1.1 - 2×10-3×40) (40 - 1.2×15) = 22.44, м
За формулою (2.9)
розрахуємо кут захисту (між вертикаллю та гіпотенузою):
α = arctg(h0/r0).
α = arctg (34/40.8) = 50.2, град
За формулою (2.10)
розрахуємо площу захищеної області на рівні землі:
Se = .
Se = 5229,62, м2
За формулою
(2.11) розрахуємо площу захищеної області на рівні об'єкта:
Se = .
Sо = 1581,96, м2
За нерівністю
(2.11) перевіримо, чи блискавковідвід захищає об'єкт:
.
.
Як бачимо
нерівність справджується, тобто блискавковідвід повністю захищає об'єкт.
Результати
зобразимо в таблиці 3.2.
Таблиця 3.2 - Вихідні
дані розрахунку
Назва
|
Одиниці виміру
|
Значення
|
N
|
Середню кількість поразок на рік
|
шт./рік
|
0.013
|
h0
|
Висота конуса
|
м
|
34
|
r0
|
Радіус конуса на рівні землі
|
м
|
40.8
|
rx
|
Радіус на висоті об'єкта
|
м
|
22.44
|
α
|
Кут захисту
|
градус
|
50.2
|
Se
|
Площу захищеної області на рівні
землі
|
м2
|
5229,62
|
Sо
|
Площа захищеної області на рівні об'єкта
|
м2
|
1581,96
|
4. Розробка програмного
забезпечення
Програмний додаток
розроблявся на мові високого рівня Python. Python - інтерпритована
об'єктно-орієнтована мова програмування високого рівня з динамічною семантикою.
Розроблена в 1990 році Гвідо ван Россумом. Структури даних високого рівня разом
із динамічною семантикою та динамічним зв'язуванням роблять її привабливою для
швидкої розробки програм, а також як засіб поєднання існуючих компонентів.
Пайтон підтримує модулі та пакети модулів, що сприяє модульності та повторному
використанню коду. Інтерпретатор Пайтон та стандартні бібліотеки доступні як у
скомпільованій так і у вихідній формі на всіх основних платформах. В мові
програмування Пайтон підтримується декілька парадигм програмування, зокрема:
об'єктно-орієнтована, процедурна, функціональна та аспектно-орієнтована. [9]
Графічна оболонка реалізована
використовуючи фреймворк Qt. Qt - крос-платформовий інструментарій розробки ПЗ
мовою програмування C++. Дозволяє запускати написане за його допомогою ПЗ на
більшості сучасних операційних систем шляхом простої компіляції тексту програми
для кожної ОС без зміни початкового коду. Включає всі основні класи, які можуть
бути потрібні при розробці прикладного програмного забезпечення, починаючи з
елементів графічного інтерфейсу і закінчуючи класами для роботи з мережею,
базами даних, OpenGL, SVG і XML. Бібліотека дозволяє керувати потоками,
працювати з мережею, і забезпечує крос-платформовий доступ до файлів. [10]
Зв’язок між Python та Qt
забезпечується завдяки PySide. PySide - прив’язка мови Python до інструметнарію Qt.
Так як використовувались
лише крос-платформені інструменти даний додаток можна запускати навіть без
перекомпіляції вихідних кодів на найпопулярніших платформах, таких як Linux, Mac OS X, Microsoft Windows.
В додатку реалізована обробка помилок, про які користувач інформується за
допомогою спеціального спливаючого повідомлення.
Для того, що б запустити
додаток потрібно спочатку встановити необхідні пакети (Python, Qt, PySide) а потім з
терміналу виконати команду python main.py, після чого на екрані повинно з’явитись вікно програми.
Також, для того що б не
втратити результати розрахунків був реалізований експорт даних у html формат.- стандартна
мова розмітки документів у Всесвітній павутині. Більшість веб-сторінок
створюються за допомогою мови HTML (або XHTML). Документ HTML оброблюється
браузером та відтворюється на екрані у звичному для людини вигляді. [11]
Тобто після розрахунку користувач зможе в себе зберегти або роздрукувати
звіт.
Робота додатка виглядає
наступним чином: спочатку користувачу пропонується ввести параметри об’єкта що захищається, а також обрати тип захисту. Тип захисту
впливає на надійність блискавковідводу. В програмній частині це лише впливає на
коефіцієнти в формулах. Якщо користувач введе хибні дані, як то один з
параметрів рівний нулю, або взагалі забуде про ньго додаток виведе помилку в
нижній частині вікна. На наступному кроці користувачу пропонується ввести
щільність ударів блискавки в 1 км2. В додатку вже запропоновано
безліч варіантів для областей України та Росії. Також передбачене введення
свого варіанту.
На наступному кроці додаток
запропонує ввести висоту блискавковідводу, який хоче використати інженер.
Оптимізація полягає в тому, що додаток за формулами (2.6) та (2.11) перевірить,
чи насправді об'єкт захищений, якщо ні - виведе помилку, якщо так - запропонує
меншу висоту блискавковідвода, якщо така доступна.
Результати обчислюються за формулами
(2.7) - (2.11). Також в задежності від обраного типу захисту початкові
параметри (радіуси та висота конусу) обчислюються за формулами (2.1) - (2.3)
або (2.4) - (2.6). Ці дані виводяться в спеціальному вікні та мають заборону на
редагування.
Після закінчення обрахунків додаток
пропонує зберегти звіт.
Отримані результати відповідають
результатам, що наведені в 3 розділі. Також додаток протестований на прикладі,
наведеному в державному стандарті України[8], і повністю йому відповідають.
Також необхідно зазначити, що результати є вичерпними для даного випадку.
Висновки
Системи управління і
автоматики - це передній край науково-технічного прогресу. В цій галузі зміни
відбуваються дуже швидко. Елементи СУА безупинно удосконалюються прискореними
темпами. Звичайно, існують елементи, які працюють на інших принципах, мають
іншу побудову (наприклад, гідравлічні виконавчі пристрої, пневматичні датчики і
перетворювачі і т. п.). Важливо вміти правильно вибрати тип елемента для
конкретного застосування. Немає чітких постійних правил і установок - коли
варто застосовувати елементи одного типу, а коли - іншого, оскільки постійно
з'являються нові елементи. Можна сказати, що елементи різних типів конкурують
між собою. [1]
Отже після огляду
інформаційних матеріалів було вирішено розробити методику розрахунку саме для
стрижневого блискавковідводу, так як цей пристрій найпростіше реалізувати і
ефективність його дії складає 95 - 99% захисту від прямих ударів блискавки.
Звичайно, цей тип захисту підійде не для всіх випадків. Також є велика
кількість приладів, які захищають не від самого удару, а від наслідків (високої
напруги). Нажаль такі прилади не достатньо ефективні і досить складні
технологічно. Через що доцільним було провести саме розрахунок
блискавковідводу.
Методика розрахунку
блискавковідвода велась відповідно до стандарта України [8], що робить програмний додаток дуже корисним саме для громадян
України. Методика справедлива для блискавковідводів нижче 150 метрів.
Для підтвердження
правильності додаток був протестований на даних, що були спочатку обраховані
вручну. Результат повністю співпадає з результатом отриманим в результаті
обчислень та наведений в додатках.
Перелік посилань
1. Васюра А.С. Елементи та пристрої систем управління і
автоматики: навч. посіб. / А.С. Васюра - Вінниця:, ВДТУ 1999. - 157 с.
2. Система керування [Електронний ресурс] // Вікіпедія. Вільна енциклопедія [сайт]. Режим доступу:
#"793995.files/image008.jpg">
Лістинг програми
#!/usr/bin/python
# -* - coding: utf-8
-*-sysPySide. QtCore import *PySide. QtGui import *PySide. QtGui import
QPushButtonmath
WrongDataException(Exception):=
u "Помилка! Введіть вірні дані.»__init__(self):
Form(QDialog):
__init__(self,
parent=None):(Form, self).__init__(parent)
.saved = False
.stack =
QStackedLayout().stack.setSizeConstraint (QLayout. SetMinAndMaxSize)
.dataScreen().flashScreen().heightScreen().resultScreen().aboutScreen()
.doneButton =
QPushButton (u «Готово»).prevButton = QPushButton (u
«Назад»).prevButton.setEnabled(False).nextButton = QPushButton (u «Вперед»)
# Create layout and add
widgets
= QVBoxLayout()
= QHBoxLayout()
.addWidget
(self.prevButton).addWidget (self.nextButton).addWidget (self.doneButton)
.errorLabel =
QLabel().errorLabel.setAlignment (Qt. AlignCenter).errorLabel.setVisible(False)
.addLayout
(self.stack).addWidget (self.errorLabel).addLayout(buttonLayout)
.setLayout(layout)
#QObject.connect
(self.combo, SIGNAL ('activated(int)'), self.stack, SLOT
('setCurrentIndex(int)'))sizeHint (self, *args, **kwargs):= QSize (460,330)s
aboutScreen(self):.aboutFrame
= QFrame()
= QLabel (u «Про автора:
Перегончук Роман Олександрович, студент 4 курсу ФАКСУ, ВНТУ.<br>Про
роботу: Програмний додаток розроблено для розрахунку блискавковідводу.
Використовувались такі засоби, як Python, PySide, Qt.<br>Про університет:
Вінницький національний технічний університет - вищий навчальний заклад відомий
як в Україні, так і далеко за її межами, четвертого рівня
акредитації.»).setWordWrap(True).setAlignment (Qt. AlignJustify)
= str
(QDir.currentPath()).edit = QLineEdit(currentDir)
.button = QPushButton (u
«Огляд»)= QHBoxLayout().addWidget (self.edit).addWidget (self.button)
=
QScrollArea().setWidgetResizable(True)= QVBoxLayout()
.addWidget(aboutMe).addLayout(fileLayout)=
QVBoxLayout()= QFrame().setLayout(layout).setWidget(scrollFrame).addWidget(scroll).aboutFrame.setLayout(aboutFrameLayout).stack.addWidget
(self.aboutFrame)
.button.clicked.connect
(self.greetings)
dataScreen(self):.dataFrame
= QFrame()= QScrollArea().setWidgetResizable(True)= QVBoxLayout().setAlignment
(Qt. AlignTop)
= QLabel (u «Введіть
будь-ласка параметри об’єкта захисту, а саме довжину ширину та висоту будівлі в
метрах. Також потрібно обрати тип зони захисту. Степінь надійності зони захисту
показує на який відсоток об’єкт буде захищений.<br>На наступному екрані
вам буде запропоновано обрати з наявних або ввести своє значення середнього
часу грози протягом року. Це значення потрібне для вирахування очікуваної
кількості вражень блискавкою в рік.»).setWordWrap(True).setAlignment (Qt.
AlignJustify)
= QHBoxLayout()
= QIntValidator (0, 150,
self)= QLabel (u «А:»).xEdit =
QLineEdit().xEdit.setValidator(validator).xEdit.setPlaceholderText (u «Довжина,
м»)
y = QLabel (u
«В:»).yEdit =
QLineEdit().yEdit.setValidator(validator).yEdit.setPlaceholderText (u «Ширина,
м»)
= QLabel (u «h:»).hEdit
= QLineEdit().hEdit.setValidator(validator).hEdit.setPlaceholderText (u
«Висота, м»)
=
QVBoxLayout().reliabilityButtonGroup = QButtonGroup().connect
(self.reliabilityButtonGroup, SIGNAL ('buttonPressed(int)'), self, SLOT
('reliabilityButtonGroupProcess(int)'))= QRadioButton (u «Захист типу А.
Степінь надійності перевищує 99.5%»).setChecked(True).selectedReliability = 0=
QRadioButton (u «Захист типу Б. Степінь надійності складає 95 -
99.5%»).reliabilityButtonGroup.addButton (reliabilityA,
0).reliabilityButtonGroup.addButton (reliabilityB,
1).addWidget(reliabilityA).addWidget(reliabilityB)
.addWidget(x).addWidget
(self.xEdit).addWidget(y).addWidget (self.yEdit).addWidget(h).addWidget
(self.hEdit)
#TODO: доробити
signalMapper
# signalMapper =
QSignalMapper()
#
signalMapper.mapped.connect (self.xEditFinished)
#
signalMapper.setMapping (self.xEdit, 0)
#
self.xEdit.editingFinished.connect (signalMapper.map)
#
#
signalMapper.setMapping (self.yEdit, 1)
# signalMapper.setMapping
(self.hEdit, 2)
.addWidget(aboutMe).addLayout(reliabilityLayout).addLayout(dataLayout)
= QVBoxLayout()=
QFrame().setLayout(layout).setWidget(scrollFrame).addWidget(scroll)
.dataFrame.setLayout(dataFrameLayout).stack.addWidget
(self.dataFrame)
flashScreen(self):.flashFrame
= QFrame().buttonGroup = QButtonGroup().connect (self.buttonGroup, SIGNAL
('buttonPressed(int)'), self, SLOT ('buttonGroupProcess(int)'))
scroll =
QScrollArea().setWidgetResizable(True)= QGridLayout().editList = []=
[].selectedRadio = 10
= QLabel (u «Місто»)=
QLabel (u «Тривалість грози»)
.addWidget (town,
0,0).addWidget (time, 0,1)i in range(11):= QRadioButton().buttonGroup.addButton
(button, i).append(button)
=
QLineEdit().editList.append(edit).setReadOnly(True)
#label = QLabel()
#labelList.append(label).addWidget
(button, i+1,0)
#layout.addWidget
(label, i+1,1).addWidget (edit, i+1,1)
[0].setText (u
«Івано-Франківськ, Чернівці»).editList[0].setText («9»)
buttonList[1].setText (u
«Львів, Тернопіль, Луцьк, Рівне»).editList[1].setText («8»)
[2].setText (u «Донецьк,
Луганськ, Харків»).editList[2].setText («7»)
[3].setText (u
«Крим»).editList[3].setText («4»)
[4].setText (u «Київ,
інші регіони»).editList[4].setText («6»)
[5].setText (u
«Мурманськ, Магадаг, Верхоянськ»).editList[5].setText («1»)
[6].setText (u
«Архангельськ, Астрахань»).editList[6].setText («1»)
[7].setText (u «Москва,
С-Петербург, Казань, Кіров»).editList[7].setText («2»)
[8].setText (u
«Новосибірск, Єкатеринбург»).editList[8].setText («4»)
[9].setText (u «Брянск,
Смоленськ»).editList[9].setText («6»)
[10].setText (u «Власний
варіант»).editList[10].setReadOnly(False)[10].setChecked(True)= QVBoxLayout()=
QFrame().setLayout(layout).setWidget(scrollFrame).addWidget(scroll)
.flashFrame.setLayout(aboutFrameLayout).stack.addWidget
(self.flashFrame)
resultScreen(self):.resultFrame
= QFrame()= QScrollArea().setWidgetResizable(True)= QVBoxLayout().setAlignment
(Qt. AlignTop)
= QLabel (u «На цьому
екрані ви можете бачити результати проведених обчислень, а також перевірити
висоту вашого блискавковідводу.»).setWordWrap(True).setAlignment (Qt.
AlignJustify)= QGridLayout()= QLabel (u «Очікувана кількість вражень блискавкою
в рік:»).impressionEdit = QLineEdit().impressionEdit.setReadOnly(True)
.addWidget
(impressionLabel, 0,0).addWidget (self.impressionEdit, 0,1)
coneHeightLabel = QLabel
(u «Висота вершини конуса блискавковідводу:»).coneHeightEdit =
QLineEdit().coneHeightEdit.setReadOnly(True)
.addWidget
(coneHeightLabel, 1,0).addWidget (self.coneHeightEdit, 1,1)
= QLabel (u «Радіус
захисту на рівні землі:»).radiusEarthEdit =
QLineEdit().radiusEarthEdit.setReadOnly(True)
.addWidget
(radiusEarthLabel, 2,0).addWidget (self.radiusEarthEdit, 2,1)
= QLabel (u «Радіус
захисту на рівні об’єкта:»).radiusHEdit = QLineEdit().radiusHEdit.setReadOnly(True)
.addWidget
(radiusHLabel, 3,0).addWidget (self.radiusHEdit, 3,1)
= QLabel (u «Кут захисту
(між вертикаллю та гіпотенузою):»).angelEdit =
QLineEdit().angelEdit.setReadOnly(True)
.addWidget (angelLabel,
4,0).addWidget (self.angelEdit, 4,1)
squareEarthLabel =
QLabel (u «Захищена площа на рівні землі:»).squareEarthEdit =
QLineEdit().squareEarthEdit.setReadOnly(True)
.addWidget
(squareEarthLabel, 5,0).addWidget (self.squareEarthEdit, 5,1)
= QLabel (u «Захищена
площа на рівні об’єкта:»).squareHEdit =
QLineEdit().squareHEdit.setReadOnly(True)
.addWidget
(squareHLabel, 6,0).addWidget (self.squareHEdit, 6,1)
.addWidget(informationLabel).addLayout(impressionLayout)
= QVBoxLayout()=
QFrame().setLayout(layout).setWidget(scrollFrame).addWidget(scroll).resultFrame.setLayout(resultFrameLayout).stack.addWidget
(self.resultFrame)
heightScreen(self):.heightFrame
= QFrame()= QScrollArea().setWidgetResizable(True)= QVBoxLayout().setAlignment
(Qt. AlignTop)
= QLabel (u «Введіть
значення висоти наявного блискавковідводу. Це значення потрібне для визначення,
чи буде захищений об’єкт за наявної висоти. Про результат буде повідомлено у
цьому ж вікні.»).setWordWrap(True).setAlignment (Qt. AlignJustify)= QLabel (u
«Висота блискавковідводу, м:»).conductorEdit = QLineEdit()=
QIntValidator().conductorEdit.setValidator(validator)
=
QHBoxLayout().addWidget(conductorlLabel).addWidget (self.conductorEdit)
.addWidget(conductorlLabelInfo).addLayout(conductorLayout)
= QVBoxLayout()=
QFrame().setLayout(layout).setWidget(scrollFrame).addWidget(scroll).heightFrame.setLayout(heightFrameLayout).stack.addWidget
(self.heightFrame)
greetings(self):= «Html
files (*.html)»= QFileDialog.getSaveFileName (None, 'Save as',
self.edit.text(), filter)= str (filePath[0]).edit.setText(filePath)
<html>
<head>
<title></title>
<meta http-equiv=
«Content-Type» content= «text/html; charset=utf-8»>
<style></style>
</head>
<body>
<center>
<table width = «600»
border = «1»>
<tr>
<td>Параметр</td>
<td>Одиниця
виміру</td>
<td>Значення</td>
</tr>
<tr>
<td>Очікувана
кількість вражень блискавкою в рік</td>
<td>шт./год</td>
<td>%0.3f</td>
</tr>
<tr>
<td>Середня тривалість
грози</td>
<td>година</td>
<td>%i</td>
</tr>
<tr>
<td>Розмір об’єкта
(A х B х hx)</td>
<td>м</td>
<td>%s</td>
</tr>
<tr>
<td>Степінь
надійності захисту</td>
<td>-</td>
<td>%s</td>
</tr>
<tr>
<td>Повна висота
блискавковідводу h</td>
<td>м</td>
<td>%i</td>
</tr>
<tr>
<td>Висота вершини
конуса блискавковідводу h0</td>
<td>м</td>
<td>%0.3f</td>
</tr>
<tr>
<td>Радіус захисту
на рівні землі r0</td>
<td>м</td>
<td>%0.3f</td>
</tr>
<tr>
<td>Радіус захисту
на рівні об’єкта rx</td>
<td>м</td>
<td>%0.3f</td>
</tr>
<tr>
<td>Кут захисту
(між вертикаллю та гіпотенузою) a</td>
<td>град</td>
<td>%0.3f</td>
</tr>
<tr>
<td>Захищена площа
на рівні землі</td>
<td>м2</td>
<td>%0.3f</td>
</tr>
<tr>
<td>Захищена площа
на рівні об’єкта</td>
<td>м2</td>
<td>%0.3f</td>
</tr>
</body>
«»«%
(self.impressionCount, self.n, objectSize, reliabilityType,
self.conductorHeight, self.coneHeight, self.radiusEath, self.radiusH,
self.angel, self.squareEarth, self.squareH).writelines(htmlCode).close().saved
= TruedoneProcess(self):self.saved:.exit(0):= QMessageBox.warning (self, u
«Увага!», u «Ви не зберегли результати, продовжити?», QMessageBox. Cancel,
QMessageBox. Yes)
result == QMessageBox.
Yes:.exit(0)
prevProcess(self):=
self.stack.currentIndex() -1
number >=
0:.stack.setCurrentIndex(number)
.countControl(number)
nextProcess(self):=
self.stack.currentIndex()
current == 0::.x = int
(self.xEdit.text()).y = int (self.yEdit.text()).h = int
(self.hEdit.text())self.x == 0 or self.y == 0 or self.h ==
0:WrongDataExceptionWrongDataException as e:.errorLabel.setText
(e.msg).errorLabel.setVisible(True)
ValueError as
e:.errorLabel.setText
(WrongDataException.msg).errorLabel.setVisible(True):.errorLabel.setVisible(False)
current == 1::.n = int
(self.editList [self.selectedRadio].text())self.n == 0:WrongDataException
WrongDataException as
e:.errorLabel.setText (e.msg).errorLabel.setVisible(True)
ValueError as
e:.errorLabel.setText (WrongDataException.msg).errorLabel.setVisible(True)
:.errorLabel.setVisible(False)
current ==
2::.conductorHeight = int (self.conductorEdit.text())self.conductorHeight ==
0:WrongDataException
WrongDataException as
e:.errorLabel.setText (e.msg).errorLabel.setVisible(True)
ValueError as
e:.errorLabel.setText (WrongDataException.msg).errorLabel.setVisible(True)
:.errorLabel.setVisible(False)
.impressionCount = 9 *
math.pi * math.pow (self.h, 2) * self.n * math.pow (10, -6) #N
self.selectedReliability
== 0: #A.coneHeight = 0.85 * self.conductorHeight.radiusEath = (1.1 - 2 *
math.pow (10, -3) * self.conductorHeight) * self.conductorHeight.radiusH = (1.1
- 2 * math.pow (10, -3) * self.conductorHeight) * (self.conductorHeight - 1.2 *
self.h): #B.coneHeight = 0.92 * self.conductorHeight.radiusEath = 1.5 *
self.conductorHeight.radiusH = 1.5 * (self.conductorHeight - 1.1 * self.h)
.angel = math.degrees
(math.atan (self.radiusEath/self.coneHeight)).squareH = math.pi * math.pow
(self.radiusH, 2).squareEarth = math.pi * math.pow (self.radiusEath, 2)
math.pow (math.pow
(self.x, 2) + math.pow (self.y, 2), 0.5) / 2 > self.radiusH:.errorLabel.setText
(u «Об’єкт не захищений! Введіть більшу висоту
блискавковідводу.»).errorLabel.setVisible(True):.errorLabel.setVisible(False)
.impressionEdit.setText
(«%0.3f»% self.impressionCount).coneHeightEdit.setText («%0.3f»%
self.coneHeight).radiusEarthEdit.setText («%0.3f»%
self.radiusEath).radiusHEdit.setText («%0.3f»% self.radiusH).angelEdit.setText
(«%0.3f»% self.angel).squareEarthEdit.setText («%0.3f»%
self.squareEarth).squareHEdit.setText («%0.3f»% self.squareH)
= current + 1
number < self.stack.count():.stack.setCurrentIndex(number)
.countControl(number)
def countControl (self,
count):count > 0 and count < self.stack.count()
-1:.prevButton.setEnabled(True).nextButton.setEnabled(True)
count ==
0:.prevButton.setEnabled(False).nextButton.setEnabled(True)
count ==
self.stack.count() -1:.nextButton.setEnabled(False).prevButton.setEnabled(True)
buttonGroupProcess
(self, selected):.selectedRadio = selected
reliabilityButtonGroupProcess
(self, selected):.selectedReliability = selected
__name__ == '__main__':
# Create the Qt
Application= QApplication (sys.argv)
# Create and show the
form= Form().setMinimumWidth(460).setMinimumHeight(330).show()
# Run the main Qt
loop.exit (app.exec_())
Результати програми
Введення даних про
об’єкт
Демонстрація помилки
Введення щільності
ударів блискавки
Введення хибної висоти
блискавковідводу. Демонстрація помилки
Введення правильної висоти
Вікно результатів
Вікно експорту
Демонстрація збереженого
звіту в браузері