Please use this identifier to cite or link to this item:
https://er.chdtu.edu.ua/handle/ChSTU/6548Full metadata record
| DC Field | Value | Language |
|---|---|---|
| dc.contributor.advisor | Лукашенко, Валентина Максимівна | - |
| dc.contributor.author | Адаменко, Максим Олександрович | - |
| dc.date.accessioned | 2024-01-25T12:07:38Z | - |
| dc.date.available | 2024-01-25T12:07:38Z | - |
| dc.date.issued | 2024-01 | - |
| dc.identifier.uri | https://er.chdtu.edu.ua/handle/ChSTU/6548 | - |
| dc.description.abstract | Мета кваліфікаційної роботи магістра спрямована на підвищення ефективності роботи системи міні-метеостанції за рахунок підвищення техніко-економічних параметрів приладу. Об’єкт дослідження – процеси спеціалізованих приладів прийому та обробки метеорологічних даних. Предмет дослідження – спеціалізовані прилади прийому та обробки метеорологічних даних. На основі проведеного системного аналізу, встановлених залежностей основних параметрів зарубіжних аналогів та досліджуваного пристрою в цілому, сформованої бази визначальних параметрів мікроконтролерів сімейства Microchip;математичні моделі мікроконтролерів надали можливість підвищити ефективність роботи приладу прийому та обробки метеорологічних даних при обробці інформації на основі мікроконтролерасімейства Microchip. Для реалізації циклу обміну даними у міні-метеостанції використаний трьохрівневий сигнал, тобто такий сигнал, у котрого є можливість виділити за амплітудою три логічних рівня: логічний рівень “0”, логічний рівень “1” та логічний рівень “синхронізація. Прилад прийому та обробки метеорологічних даних складається з двох нероздільних частин: приладу прийому метеорологічних даних до його складу входить: прийомо-передавач та модуль попередньої обробки сигналу; прилад збору метеорологічних даних, який містить керуючий мікроконтролер та блок датчиків для вимірювання метеопараметрів. Дані складові міні-метеостанції та прилад прийому та обробки метеорологічних даних подаються у вигляді структурних схем. Запропоноване конструкторське виконання приладу дозволяє стверджувати про його зручність та надійність у використанні. Технічні рішення, що були запропоновані при розробці, повністю задовольняють вимогам, які висувалися до приладу прийому інформації та міні-метеостанції в цілому. Програмне забезпечення для приладу прийому та обробки метеорологічних даних являється спеціалізованим програмним виробом, що входить до його складу. Оскільки даний програмний продукт є спеціалізованим програмним забезпеченням, то його призначенням є – надання зручного інтерфейсу між користувачем (оператором) та модулями збору інформації, що входять до складу метеорологічного комплексу. Даний програмний виріб, має ряд переваг: надання користувачеві можливості керування міні-метеостанцією; отримання та оперування метеопараметрами, що надходять від модулів збору метеорологічної інформації; можлива інсталяція і на стаціонарну, непереносну робочу станцію. В роботі одержані такі основні результати: 1 Проведено системний аналіз технічних параметрів метеоприладів. 2 Встановлено залежностітехнічних параметрів зарубіжних аналогів в безрозмірних координатах. 3 Проведено аналіз визначальних параметрів мікроконтролерів сімейства Microchip. 4 Сформовано базувизначальних параметрів мікроконтролерів сімейства Microchip, встановлено залежності основних визначальних параметрівмікроконтролерів в безрозмірних координатах. 5 Практично доведено, що в мікроконтролері PIC16C54C якісні показники дозволяють вводити додаткові схемотехнічні рішення, що розширюють функції та можливості метеоприладу. На основі наукових досліджень запропоновані такі інженерні рішення: – структурні схеми модулю попередньої обробки сигналу, модулю збору метеорологічних даних та метеорологічного комплексу в цілому; – принципово-електричні схеми пристрою прийому та обробки метеоданих тапідключення датчиків до мікроконтролера PIC16C54C. Область застосування приладу – радіочастотне, високоточне вимірювання та прийом спеціалізованих даних для подальшої обробки від приладів автономного збирання метеорологічних даних, а також при проведенні перевірки, калібрування, випробувань і метеорологічної атестації засобів вимірювання температури, атмосферного тиску, вологості повітря та ін. Метеовеличини отриманні за допомогою даної міні-метеостанції можуть бути використанні для створення більш точного прогнозу погоди. Сфера застосування – даний прилад має широкий спектр застосування та являється універсальним; метеорологічний комплекс орієнтований на використання в метеорології, для екологічного моніторингу, науково-дослідницьких, та навчальних закладів, курортів, будинків відпочинку, туристичних баз, та в сільському господарстві. | uk_UA |
| dc.language.iso | uk | uk_UA |
| dc.title | Дослідження основних компонентів спеціалізованих систем міні-метеостанцій | uk_UA |
| dc.type | Master Thesis | uk_UA |
| Appears in Collections: | 123 Комп’ютерна інженерія (Спеціалізовані комп’ютерні системи) | |
Files in This Item:
| File | Description | Size | Format | |
|---|---|---|---|---|
| М_123_2023_Адаменко+.pdf Restricted Access | 1.68 MB | Adobe PDF | View/Open Request a copy |
Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.
Extracted text
1
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ І СИСТЕМ
КАФЕДРА РОБОТОТЕХНІКИ ТА СПЕЦІАЛІЗОВАНИХ
КОМП’ЮТЕРНИХ СИСТЕМ
Пояснювальна записка
до кваліфікаційної роботи
освітнього ступеню «магістр»
на тему: Дослідження основних компонентів спеціалізованих систем
міні-метеостанцій
Виконав: здобувач вищої освіти 2 курсу,
групи МСКС-2207
спеціальності 123 «Комп’ютерна інженерія»
(освітня програма «Спеціалізовані комп’ютерні
системи»)
Максим АДАМЕНКО
(ім’я та прізвище)
Керівник Валентина ЛУКАШЕНКО
(ім’я та прізвище)
Рецензент Сергій РОТТЕ
(ім’я та прізвище)
Черкаси 2023 року
2
ЗМІСТ
ЗАГАЛЬНА ХАРАКТЕРИСТИКА РОБОТИ 5
РОЗДІЛ 1 СТАН ПРЕДМЕТА ДОСЛІДЖЕННЯ ТА ФОРМУЛЮВАННЯ
ПРОБЛЕМНОЇ ЗАДАЧІ, ЩО РОЗВ’ЯЗУЄТЬСЯ 9
1.1 Системний аналіз існуючих аналогів 10
1.2 Автоматичний метеорологічний комплекс Vantage Pro 2 Plus 13
1.3 Системний аналіз основних технічних параметрів метеоприладів 17
1.4 Формування визначальних параметрів мікроконтролерів сімейства
Microchip 20
Висновки 25
РОЗДІЛ 2 ВСТАНОВЛЕННЯ ЗАЛЕЖНОСТЕЙ ОСНОВНИХ ТЕХНІЧНИХ
ПАРАМЕТРІВ МІКРОКОНТРОЛЕРІВ 26
2.1 Вибір технічних параметрів та мікроконтролеру для досліджуваного
приладу 31
Висновки 33
РОЗДІЛ 3 ОБРАЗНО-ЗНАКОВІ МОДЕЛІ МІНІ-МЕТЕОСТАНЦІЇ 34
3.1 Вибір елементної бази 34
3.2 Розробка модулю попередньої обробки сигналу 35
3.2.1 Обробка прийнятого сигналу 35
3.3 Підготовка сигналу для передачі 38
3.4 Образно-знакова модель приладу прийому метеорологічних даних 41
3.4.1 Розробка принципово-електричної схеми приладу прийому
метеоданих 41
3.5 Структурна схема приладу збору метеорологічних даних 43
3.5.1 Розробка принципово-електричної схеми підключення датчиків до
мікроконтролера PIC16C54C 44
3.6 Розробка образно-знакової моделі метеорологічного комплекса 45
3.7 Розробка протоколу передачі даних 46
3
3.7.1 Трьохрівневий сигнал обміну даними 46
3.7.2 Передача даних через LPT-порт ПК 47
3.7.3 Вибір режиму прийому-передачі через LPT-порт 48
3.8 Розробка інтерфейсу передачі даних через LPT –порт 49
3.9 Алгоритм циклу зчитування даних за допомогою LPT -порта 51
3.10 Алгоритм запису даних до LPT –порту 51
3.11 Розробка топології приладу 52
3.11.1 Розміщення мікросхем на печатній платі 52
3.11.2 Забезпечення живлення приладу 53
3.11.3 Зовнішній вигляд приладу 54
3.11.4 Розрахунок ударостійкості 55
Висновки 57
РОЗДІЛ 4 СТВОРЕННЯ СПЕЦІАЛІЗОВАНОГО ПРОГРАМНОГО
СЕРЕДОВИЩА ДЛЯ МІНІ-МЕТЕОСТАНЦІЇ 58
4.1 Призначення та галузь застосування 58
4.2 Вимоги до програмного виробу 58
4.3 Вибір програмних засобів для реалізації поставленої задачі 59
4.4 Об’єктно-орієнтований підхід для вирішення постановленої задачі 59
4.4.1 Структура програми 60
4.4.2 Класи з полями та інкапсульованими методами 60
4.5 Організація обміну даними по розробленому протоколу 63
4.5.1 Структура пакету даних 63
4.5.2 Прийом даних 65
4.5.3 Структура вихідного пакету даних 66
4.5.4 Передача даних 66
4.6 Додаткові можливості програми 67
4.6.1 Збереження отриманих даних 67
4.7 Аналіз прийнятих даних 68
4.8 Функціонально-логічні аспекти програми 70
4
4.8.1 Функціональне призначення програми 70
4.8.2 Опис логічної структури програми 70
4.8.3 Структура програми з описом її складових частин. Головний поток
програми 71
Зв'язок роботи з науковими програмами, планами, темами
4.9 Технічно-функціональні аспекти програми 74
4.9.1 Використані технічні та програмні засоби 74
4.9.2 Виклик та завантаження програми 75
4.9.3 Вхідні дані для програми 75
4.9.4 Вихідні дані 76
4.9.5 Приклад функціонування програми 76
Висновки 78
ВИСНОВКИ 80
СПИСОК ВИКОРИСТАНИХ ЛІТЕРАТУРНИХ ДЖЕРЕЛ 83
ДОДАТОК А – ЛІСТИНГ ПРОГРАМИ 85
5
ЗАГАГАЛЬНА ХАРАКТЕРИСТИКА РОБОТИ
Актуальність теми. Метеоприлади, які знаходяться в експлуатації в
теперішній час на Україні в системі Держкомгідромет, Гідрографії, Академії наук
та в інших галузях використання, що вимірюють метеопараметри як фізично, так
і апаратно застаріли та потребують при їх експлуатації значних витрат.
Тому експлуатаційні засоби вимірювання метеопараметрів в більшості
випадків не задовольняють вимогам по оперативній точності метеорологічних
даних.
Таким чином, назріла необхідність оснащення відповідних служб,
організацій та населення України сучасними засобами вимірювання
метеопараметрів.
Широкі дослідження метеовеличин та параметрів метеоприладів провів
Щербань М.І. В його працях викладаються закономірностіформування
метеовеличин, методи мікрокліматичних досліджень та визначення основних
мікрокліматичних показників.
Основу класичної української кліматології складають результати групи
кліматологів, отримані під керівництвом В.М.Бабіченко. Особливо слід відмітити
дослідження В.М. Бабіченко щодо сучасного розподілу метеовеличин.
Надзвичайно перспективними є дослідження з питань довгострокового
прогнозу погодно-кліматичних умов Центральної Європи на варіації океанічних
течій Атлантичного океану, проведені Єфімовим В.М. і Полонським О.Б.
Інтенсивні дослідження даної проблеми проводяться на кафедрі
метеорології та кліматології Київського національного університету імені Тараса
Шевченка, в Українському науково-дослідному гідрометеорологічному інституті,
Одеському гідрометеорологічному інституті, Севастопольському морському
гідрофізичному інституті, Інституті геологічних наук та Інституті географії
Академії Наук України тощо.
Отже, тема дослідження та створення спеціалізованого приладу прийому та
обробки метеорологічних даних є важливою та актуальною.
6
Напрямок дослідження пов'язаний з планом наукових досліджень
Черкаського державного технологічного університету у рамках держбюджетної
науково-дослідницької роботи: «Моделі локальних підсистем керування лазерним
випромінюванням для рішення тракторних задач на базі таблично-алгоритмічних
методів апаратурної реалізації в проблемно-орієнтованих системах» (ДР
№01094002739), що використовується на кафедрі спеціалізованих комп’ютерних
систем.
Мета і задачі дослідження. Мета роботи спрямована на підвищення
ефективності роботи системи за рахунок підвищення техніко-економічних
параметрів приладу.
Для досягнення цієї мети необхідновирішити наступні задачі:
– провести системний аналіз основних параметрів метеоприладів та
мікроконтролерів сімейства Microchip;
– визначити залежності основних технічних параметрів
мікроконтролерів на основі теорії неповної подібності;
– розробка образно-знакової моделімодулю попередньої обробки
сигналу, модулю збору метеорологічних даних та метеорологічного комплексу в
цілому;
– розробка принципово-електричної схеми прийому метеоданих
тапідключення датчиків до мікроконтролера.
Об’єкт дослідження – процеси спеціалізованих приладів прийому та
обробки метеорологічних даних.
Предмет дослідження – спеціалізовані прилади прийому та обробки
метеорологічних даних.
7
Методи дослідження. Базуються на використанні теорій: системного
аналізу, неповної подібності, розмірностей, надійності та цифрових автоматів.
Наукова новизнаотриманих результатів полягає в наступному:
1. Встановлені залежності визначальних параметрів мікроконтролерів,
відмінною особливістю, яких є наглядність, що дозволяє легко варіювати їх
величини.
2. Створені математичні моделі та визначені на основі їх апроксимаційні
поліноми N-го порядку, що на практичному рівні підтверджує правильність
вибору мікроконтролера.
Практичне значення одержаних результатів полягає в такому:
На основі наукових досліджень розроблені нові інженерні рішення:
– структурні схеми модулю попередньої обробки сигналу, модулю
збору метеорологічних даних та метеорологічного комплексу в цілому;
– принципово-електричні схеми пристрою прийому та обробки
метеоданих тапідключення датчиків до мікроконтролера PIC16C54C;
Апробація результатів роботи.
Результати роботи доповідалися й обговорювалися на студентських наукових
конференціях:
студентськоа науковопрактична конференція ЧДТУ: 18–20 квітня 2023 р.
Публікації
М. О. Адаменко. ТЕХНОЛОГІЇ ДЕТЕКТУВАННЯ В СУЧАСНИХ ПРИСТРОЯХ ПОШУКУ МЕТАЛУ /
О. В. Макарицький, В. М. Лукашенко // Збірник тез доповідей студентської науковопрактичної конференції
ЧДТУ: 18–20 квітня 2023 р. [Електронний ресурс] / [упоряд.: Єгорова О. В., Захарова О. В., Кисельов В. Б. та ін.];
Мво освіти і науки України, Черкас. держ. технол. унт. – Черкаси: ЧДТУ, 2023. – C. 15-16.
8
Структура й обсяг магістерської роботи. Магістерська робота
складається з вступу, 4 розділів, висновків, ілюстрована 45 рисунками та має
6 таблиць, список використаних літературних джерел містить 42
найменування та займає 3 сторінки.
9
РОЗДІЛ 1
СТАН ПРЕДМЕТА ДОСЛІДЖЕННЯ ТАФОРМУЛЮВАННЯ
ПРОБЛЕМНОЇ ЗАДАЧІ,ЩО РОЗВ’ЯЗУЄТЬСЯ
У розвинутих країнах погода та клімат давно стали категоріями
економічними. Кожного року у світі стихійні нещастя забирають близько 300 тис.
людських життів, розмір збитків, які наносяться майну, лежать у межах 50-100
млрд. $ США. Користуючись світовою статистикою, було побудовано графік (рис.
1.1).
Використовуючи міні-метеостанції, при цьому довіряючи
гідрометеорологічній інформації та адекватно на неї реагуючи, то дійсно можна
суттєво знизити кількість людських жертв, внаслідок стихійних катастроф на 65%
та відвернути щорічні витрати з державного бюджету кожної країни на подолання
стихійних катастроф на 40%.
120
100
80
Витрати на
60
подоланння Без використання
стихійних катастроф, метеокомплекса
млрд. дол. США 40 З використанням
метеокомплексу
20
0
0 100 200 300 400
Людські жертви, тис.чол.
Рисунок 1.1 – Зменшення щорічних витрат з держбюджету та зниження
кількості людських жертв при використанні міні-метеостанцій
10
Світовий ринок автоматичних засобів вимірювання метеопараметрів
достатньо широкий, тому їх вартість достатньо велика і закупівля їх в необхідній
кількості для України в теперішній час не має можливості. З іншого боку,Україна
з її науково-промисловим потенціалом спроможна виконати розробку і серійне
виготовлення автоматичних засобів вимірювання метеопараметрів, які б
задовольняли сучасним світовим вимогам.
На Україні, починаючи, з 90- х рр. стали вестись розробки автоматичних
засобів вимірювання Спеціальним конструкторсько-технологічним бюро МГ І
НАНУкраїни з 1991 р. ведуться розробки и виготовлення окремих зразків міні-
метеостанцій.
В теперішній час, проблема розробки сучасного та конкурентно-
спроможного метеоприладу стоїть досить гостро. Даний прилад не повинен
поступатися своїм зарубіжним аналогамта мати не високу собівартість.
1.1 Системний аналіз існуючих аналогів
Існує декілька технічних розробок, які мають за мету прийом, передачу та
збереження певних метеопараметрів, тому інтерес представляють їх технічні,
конструктивні аспекти, переваги, недоліки та відмінності.
В таблиці 1.1 наведені переваги та недоліки аналогів.
Таблиця 1.1
Переваги, недоліки аналогів
Тип метео-
Відмінності/Переваги Недоліки
комплексу
–Точність прогнозу погоди на –Внаслідок великої відстані між
основі атмосферного тиску складає метеостанцією та метеодатчиком за
80-90%; наявності перешкод (стін) – дальність
–Символьний прогноз погоди (яс- розташування виносного метеодатчика
но, хмарно, дощ); скорочується в рази;
Vantage Pro 2
–Одна із не багатьох метеостанцій, –Досить мала точність прийнятих да-
Plus
що відображає атмосферний тиск в них;
міліметрах ртутного стовпчика; –Інтервал затримки вхідних даних –
–Наявність діаграми зміни атмо- високий;
сферного тиску за минулі 30 годин; –Висока собівартість виготовлення
–Індикація тенденції зміни метеове- розробки готового виробу;
11
Прод овження табл. 1.1
Тип метео-
Відмінності/Переваги Недоліки
комплексу
личин; –Присутня дуже складна функція
–Інтервал зчитування даних кожні калібрування;
60 секунд; –Радіус дії радіосигналу обмежений –
–Зміна вологості повітря усередині до 30 м;
й з зовні приміщення; –Метеодані, що збираються приладом,
з’являються на дисплеї у вигляді не
–Сигнал про вихід температури за зручних, не зрозумілих для аналізу
установленні критичні межі. таблиць, графіків та діаграм;
–Не можливо зберігати метеодані при
вимкненому ПК;
–При вимкненні живлення на 3-4 хв всі
дані, які були збережені в міні-
метеостанції втрачаються;
–Датчики міні-метеостанції знаходять-
ся на зовні, тоді внаслідок дії на них
температури та різних кліматичних
умов, призводить до виходу з ладу
датчиків або до їх поломки, або ж не
правильного діагностування метеопа-
раметрів.
–Передача даних відбувається без- –В залежності від частоти передачі
посередньо напряму з блоку внут- інформації споживання енергії зрос-
рішніх датчиків ISS без використа- тає;
ння консолі Vantage Pro 2 Plus за –Не можливо попередньо розглядати
допомогою безпровідної технології; та редагувати поточні значення та
–В комплекті не має дисплея і графіки;
клавіатури управління, відсутність –Підключення метеостанції до ПК
яких повністю заміняє ПК; л и ш е з а д о п о м о г о ю і н т е р ф е й с у т а
–Наявність додаткового живлення програмного забезпечення 6510 USB
від сонячної батареї; Weatherlink (застосування будь-якого
Wireless
–Збереження метеоданих при вимк- іншого інтерфейсу та ПЗ призводить
Weather Envoy
неному ПК. до недостовірного прогнозу погоди);
–Не можливе використання спроще-
них або не спеціалізованих та не лі-
цензійних варіантів ПЗ;
–Обов’язкове використання блоку
живлення;
–Інтервал оновлення інформації –
досить високий;
–Не висока точність датчиків;
–Висока собівартість виробу.
–Наявність датчика інфрачервоного –При зниженому рівні освітленості,
випромінювання та датчика соняч- робота аспіраційного вентилятора
Davis 6163 EU ної радіації; зменшується, а при різкому збіль-
Wireless –В комплект блоку метеодатчиків шенні освітлення, внаслідок чого
Vantage Pro 2 входить 24-годиний аспіраційний вентилятор не в змозі охолоджувати
вентилятор з пластинами для захис- сам пристрій, що може призвести до
ту від сонячної радіації та від поломки даного метеоприладу;
12
Продовження табл. 1.1
Тип метео-
Відмінності/Переваги Недоліки
комплексу
перенагрівання корпусу комплексу; –Метеостанція вимагає обов’язкового
–Досить зручна функція калібру- використання блоку живлення;
вання температури, відносної воло- –Консоль безпровідної метеостанції
гості повітря, напряму вітру і Davis 6163 EU Wireless Vantage Pro
атмосферного тиску; 2має обжену можливість приймати
–Велика кількість одиниць вимірю- метеодані максимум від 8 передавачів,
вання вітру, атмосферного тиску, існує межа кількості кожного типу
сонячної радіації. датчиків;
–Вимірювання вологості листя,
температури, вологості ґрунту та
ультрафіолетового випромінювання,
можливо тільки після підключення
станції Davis 6345.
–Збереження в пам’яті максималь- –В комплект не входять датчики ульт-
них та мінімальних значень метео- рафіолетового і сонячного випроміню-
величин із зазначенням часу та дати вання, відсутні елементи кріплення
реєстрації(день, місяць, рік); цих датчиків;
–Три лужні батареї типу "С" –Не можливо переглядати одночасно
забезпечують роботу консолі приб- до десяти змінних величин, а також
лизно на протязі 12 місяців; дати, часу, місячної фази, прогнозу
Davis 6162 EU –Живлення блоку метеодатчиків і погоди і графіка декількох з вибраних
Wireless анемометра здійснюється за допо- величин;
Vantage Pro 2 могою сонячної та літієвої батарей; –Відсутня функція зміни одиниць
Plus –Передбачена можливість переда- вимірювання;
вати метеодані на інші безпровідні –Зчитування (оновлення) інформації
консолі Vantage Pro 2 Plus або відбувається на протязі великого
Wireless Weather Envoy. проміжку часу – близько 90 сек, що
унеможливлює швидкий аналіз та
відображення метеоданих;
–Не економічне споживання енергії
батарей внутрішніх датчиків.
–Наявність термо-гігро датчика та –Відсутність захисту від сонячного
датчика випаровування; випромінювання;
–Станція оптимізована з мінімаль- –Функція калібрування внутрішніх і
ним споживанням енергії і не по- зовнішніх датчиків – відсутня;
требує обов’язкового блоку живле- –Передача даних від зовнішнього
ння; датчика за наявності перешкод змен-
–Символьний прогноз погоди (кож- шується до 30 м;
Davis 6152 ні 12 год: ясно, перемінна хмар- –Мала та недостатня кількість метео-
CEU Cabled ність, хмарно, дощ, сніг); датчиків для прогнозування погоди
Vantage Pro 2 –Можливе відображення прогнозу (необхідно додатково підключати та
погоди на кожні 48 год у вигляді купувати необхідну кількість винос-
строки; них метеодатчиків).
–Захист від радіоперешкод;
–Для вимірювання великих значень
швидкості вітру (242..282 км/год),
можлива заміна стандартних вітро-
вих чашок на малі;
13
1.2Автоматичний метеорологічний комплекс Vantage Pro 2 Plus
Даний автоматичний метеорологічний комплекс Vantage Pro 2 Plus
розроблений Спеціальним конструкторсько-технологічним бюро Морського
гідрофізичного Інституту (МГІ) НАНУкраїни. Ідеологія побудови комплекса
полягає в можливості використання окремих сенсорів самостійно так і в його
складі.
На рисунку 1.2 представлена структурна схема одного із таких
автоматичних міні-метеостанцій Vantage Pro 2 Plus.
Ідеологія побудови МК полягає в можливості використання окремих
датчиків самостійно або в складі МК.
До складу Vantage Pro 2 Plus входить:
• датчик параметрів вітру механічний;
• датчик температури чотирьох канальний та вологості повітря;
• датчик параметрів опадів;
• датчик сонячної радіації;
• вимірювальний перетворювач льодового покриву.
БЦ
RS-232
=24 В
ПЕОМ
КЦ ОП
F1
ИТВ
F2
БЗП
An1
КВ
An2
ИПО
ВПАД
ИСР
+12В -12В +5В
=24 В ПН
ИПГО
=24В
Рисунок 1.2 – Структурна схема побудови автоматичної міні-метеостанції
Vantage Pro 2 Plus
14
Основу МК складає блок центральний (БЦ), який призначений для
виконання наступних функцій:
• забезпечення інформаційного обміну з датчиками (до 15-ти датчиків)
по послідовній кодовій шині в форматі RS-232 (DE-9 синхронна та асинхронна
передача двійкових даних між терміналом);
• забезпечення прийому (по чотирьом каналам) аналогових сигналів в
вигляді струму та напруги від датчиків та перетворення їх в кодовий еквівалент;
• забезпечення прийому (по двом каналам) інформаційних сигналів від
вимірювальних перетворювачів з вихідним сигналом в вигляді частоти та
перетворення їх в кодовий еквівалент;
• вимірювання та перетворення в кодовий еквівалент атмосферного
тиску;
• перетворення інформаційних сигналів та формування
інформаційного вихідного кадру;
• зберігання відповідних вимірювальних параметрів на буферному
запам’ятовуючому пристрої;
• вихід інформаційного кадру на ПЕОМ та інші внутрішні пристрої в
стандарті RS-232;
• забезпечення датчиків напругою живлення 24 В постійного струму,
при напрузі МК від 220 В, 50 Гц або від джерела постійного струму з напругою
живлення 24 В.
БЦ складається із наступних основних функціональних вузлів (рис.1.1):
• контролер центральний (КЦ);
• контролер вимірювач (КВ);
• вимірювальний перетворювач атмосферного тиску (ВПАТ);
• перетворювач напруги (ПН).
КЦ забезпечує виконання наступних функцій:
• інформаційний обмін з датчиками в цифровому вигляді по
двопроводному лінії струму з оптронною розв`язкою в стандарті RS-485 (DB-
25F);
15
• формування інформаційного кадру і зберігання поточних їх значень
на буферному ЗП;
• обмін з внутрішніми пристроями в стандарті RS-232.
КВ призначений для прийому аналогових сигналів від датчиків,
перетворення їх в кодовий еквівалент і забезпечує інформаційний обмін з КЦ.
КВ виконаний на основі 24-х розрядного АЦП та мікроконтролера.
ВПАТ призначений для вимірювання та перетворення атмосферного тиску
в напругу постійного струму.
ПН служить для формування вторинної стабілізуючої живлячої напруги,
необхідної для живлення електричних плат БЦ і для формування напруги
живлення постійного струму 24 В, необхідної для живлення датчиків МК.
Датчики МК складаються із наступних основних вузлів (рис. 1.3):
Вимірювальний
перетворювач
Rx
Контролер- Tx
вимірювач LSA
LSB
Перетворювач
напруги
=24 В
Рисунок 1.3 – Структурна схема побудови датчиків метеопараметрів
Vantage Pro 2 Plus
До складу датчиків метеопараметрів Vantage Pro 2 Plus входять наступні
вузли:
• вимірювальний перетворювач (ВП);
• контролер-вимірювач (КВ);
• перетворювач напруги (ПН).
ВП необхідний для вимірювання відповідних фізичних величин та
перетворення їх в уніфікаційний вихідний сигнал – струм або напруга.
16
ПН уніфікаційний та виконаний на основі інтегрального імпульсного
перетворювача напруги.
Підключення датчиків до БЦ здійснюється за допомогою двопроводної лінії
з послідовно-паралельним їх підключенням. Кожний датчик має свій
ідентифікаційний код за допомогою якого БЦ при інформаційному обміні
визначає вид датчика.
Програмування роботи МК здійснюється через ПЕОМ. В процесі роботи
МК при вимірюванні метеопараметрів, БЦ здійснює послідовний обмін з
датчиками, формуючи вихідний інформаційний кадр, відповідні значення якого
записуються в буферний ЗП, після перетворення в формат RS-232, паралельно
передається в ПЕОМ і на інші внутрішні пристрої. В ПЕОМ здійснюється
необхідна обробка інформації та формування виміряних та обрахованих
метеопараметрів в стандартну форму їх представлення.
Основні технічні параметри мікроконтролерів представлені в таблиці 1.2.
Таблиця 1.2
Основні технічні параметри автоматизованого метеорологічного
комплексаVantage Pro 2 Plus
Діапазон Погрішність Роздільна
Вимірювальний параметр
вимірювання вимірювання здатність
Швидкість вітру, м/с,
0…60 (0,5±0,05) 0,1
(середня за 10 хв)
Напрям вітру,º,
0…360 5 3
(середня за 10 хв)
Температура повітря, ℃ -50…+50 0,1 0,025
Вологість повітря, % 0…100 7 1
Різниця температур, ℃,
-1…+1 0,03 0,01
(на базі 1 м)
Атмосферний тиск, гПа 800…1080 0,25 0,1
Сумарна сонячна радіація,
не визначена 5% 1
МДж/м, за день
Ожеледиця, г/м 1…5 5% 0,6
Автоматичний метеорологічний комплекс Vantage Pro 2 Plus має досить
низькі технічні параметри, тому є доцільним створення нової міні-метеостанції з
більш високими технічними параметрами.
17
1.3Системний аналіз основних технічних параметрів метеоприладів
Системний аналіз полягає в аналізі якісних параметрів вітчизняних та
зарубіжних аналогів, та вартості готового виробу. Підвищення або зниження
набору цих параметрів та факторів впливає на ціну приладу. Аналоги вибираються
із групи однорідних об’єктів, максимально подібних до оцінюваного пристрою як
за набором якісних параметрів, так і за їх числовими значеннями.
Відібрані аналоги повинні мати те ж саме функціональне призначення та
сферу застосування, що і досліджуваний пристрій. Водночас, технічні параметри
та функціональне призначення досліджуваного пристрою мають відповідати
принципу найкращого і набувати найбільш ефективного використання в своїх
сферах застосування, що далеко не завжди має місце на практиці.
Для кожного з аналогів проводиться вибірка найбільш актуальних
технічних параметрів, до них можна віднести: частоту прийому/передачі даних,
діапазон робочих температур, інтервал оновлення даних, напруга живлення,
струм споживання та потужність. На основі даних технічних параметрів
складаються графіки залежностей даних величин в безрозмірних координатах.
Фактично, даний підхід вимагає знання апроксимації результату ще до початку
розв’язання поставленої задачі.
Таким чином, з вище зазначеного можна стверджувати, що основними
проблемними питаннями при системному аналізі є вибір для досліджуваного
пристрою конкретних аналогів та визначення значущих та актуальних технічних
параметрів.
В таблиці 1.3 розглянуто основні технічні параметри аналогів.
Таблиця 1.3
Основні технічні параметри аналогів
Діапазон Інтервал Макс.
Частота
температур/ P, оновлен- відстань
№ Тип метео- прийому/ I, U, Вартість,
робоча мВт, ня між
п/п комплексу передачі, мА В тис. грн.
температура, *10-3 даних, пристроєм
МГц
К мкс та
18
датчиками,
м
Vantage
1 868,35 273...333 15 4 60 60 3000 3,5
Pro2 Plus
Wireless
2 Weather 902 263…343 10 5 50 45 3500 22
Envoy
Davis
6163 EU
3 Wireless 920 263…353 12 6 72 80 1700 20
Vantage
Pro2
Davis
6162 EU
4 Wireless 910 233…363 20 6 120 90 1500 33
Vantage
Pro2 Plus
На основі формул (1.1) та (1.2) отримана залежність основних технічних
параметрів: частоти прийому/передачі даних, інтервалу оновлення даних та
температурного коефіцієнту.
1
Kn = fn ∗ tn, [ ∗ c], (1.1)
c
де Кn – величина пропорційна швидкості опрацювання;
fn – частота прийому/передачі даних, МГц;
tn – інтервал оновлення даних, мкс.
Qmax−Q
Q = min
n , (1.2)
Qmax
де Qn – температурний коефіцієнт;
Qmax – максимальна температура з діапазону вимірювальних температур;
Qmin – мінімальна температура з діапазону вимірювальних температур.
На рисунку 1.4 наведено графік залежності основних технічних параметрів
аналогів в безрозмірних координатах.
Qmax − Qmin
Qn =
Qmax
19
0,4
0,35
4
0,3
0,25
3
0,2
1
2
0,15
0,1
0,05
0
0 10000 20000 30000 40000 50000 60000 70000 80000 90000
Kn = Fn ∗ tn
Рисунок 1.4 – Графік залежності основних технічних параметрів міні-
метеостанцій в безрозмірних координатах
Покращити значення коефіцієнта Kn можна за допомогою вибору іншого
прийомо-передавача з вищою частотою передачі даних та в свою чергу зменшити
значення інтервалу оновлення даних, досягнути це можливо лише при
використані комплектуючої бази з малим часом затримки.
Температурний коефіцієнт Qnаналогів можна збільшити в результаті
підвищення параметра Qmax, тобто для вирішення поставленої задачі необхідно
використати інший датчик з більшим порогом вимірювання Qmax – максимальної
температури з діапазону вимірювальних температур. Відповідно, знижуючи
значення Qmin – мінімальної температури з діапазону вимірювальних температур,
в результаті температурний коефіцієнт Qn – знизиться.
Дані маніпуляції призведуть до збільшення/зменшення собівартості,
вартості готової міні-метеостанції, об’єму продаж, додаткових витрат на
комплектуючі деталі, заробітної плати інженерного персоналу, напруги
живлення, вхідного/вихідного струму, габаритних розмірів та потужності
споживання.
20
1.4Формуваннявизначальних параметрів мікроконтролерів сімейства
Microchip
В даному розділі такожстворюється база визначальнихпараметрів
мікроконтролерів фірми Microchip та проводиться системний аналіз їх параметрів.
В таблиці 1.4 наведені визначальні параметри мікроконтролерів сімейства
Microchip.
Таблиця 1.4
Визначальні параметри мікроконтролерів сімейства Microchip
Тактова
Діапазон
№ Тип Uжив, Iспож, частота tзатр,
температур,
п/п мікроконтролера В мА МК, мкс
K
МГц
1 PIC12C508 2,5...5,5 2,4 273...343 4 10
2 PIC12CE519 3,0...5,5 1,4 233...358 4 10
3 PIC12LCR509A 2,0...5,5 0,8 273...343 4 15
4 PIC12C672 2,5...5,5 10 233...398 4 20
5 PIC12LC672T 3,0...5,5 25 233...358 4 20
6 PIC16C54C 2,0...5,5 0,6 233...398 40 50
7 PIC16CR54A 4,5...5,5 3,3 233...358 40 70
8 PIC16C58B 4,5...5,5 12,3 273...343 40 85
9 PIC16C55 2,5...6,3 20 233...358 40 100
10 PIC16C620 2,5...5,5 7 233...398 10 30
11 PIC16F72 2,0...5,5 25 273...343 8 20
12 PIC16F527 2,0...5,5 0,7 273...343 20 70
13 PIC16F628 3,0...5,5 0,8 233...398 40 90
14 PIC16F773 2,0...5,5 2 233...398 16 40
15 PIC16F877 4,0...5,5 4 273...343 40 80
16 PIC18F242 2,0...5,5 4 233...358 40 100
17 PIC18F442 4,2...5,5 2 233...398 40 120
18 PIC18F452 3,0...6,3 1,4 273...343 40 150
19 PIC18F1220 2,0...5,5 0,9 233...358 40 200
20 PIC18F8720 2,5...6,3 1,4 233...398 40 250
21
На основі даних, таблиці 1.4 були розраховані коефіцієнти:
1 Q
K = f ∗ t = ∗ c, Q = max−Qmin
n n n n та коефіцієнт запасу потужності
c Qmax
Pp
розсіювання кристала – Kp = ,де(1.3)
U∗I
150−T
P = max
p –потужність розсіювання кристала, мВт;
0,23
Tmax – максимальна температура з діапазону температур, ℃;
Uжив. – напруга живлення;
Iспож. – струм споживання.
На основі даних коефіцієнтів були встановлені залежності між основними
визначальними параметрами мікроконтролерів сімейства Microchip. На рисунку
1.5изображено залежність основних визначальних параметрівмікроконтролерів
сімейства Microchip в безрозмірних координатах.
Q
Q = max−Qmin
n
Qmax 0,45
10
0,4 14 6 13 17 20
4 7 9, 16
0,35
19
5 II
0,3 III
I
2
0,25
3
12 15
0,2 8
11 18
0,15 1
0,1
0,05
0
0 1000 2000 3000 4000 5000 6000 7000
Kn = Fn ∗ tn
Рисунок 1.5 – Залежність основних визначальних
параметрівмікроконтролерів (температурний коефіцієнт та коефіцієнт
пропорційний швидкості опрацювання) в безрозмірних координатах
22
Як видно з даного графіка, дані мікроконтролери (в кількості 20 штук) були
об’єднано в три групи. До першої групи потрапили мікроконтролери з високою
потужністю розсіювання, до другої групи увійшли мікроконтролери звисоким
часом затримки відповідно 150, 200, 250 мкс, остання третя група об’єднала в
себемікроконтролери з різноманітними параметрами.
Pp
K -3
p = *10
U∗I
300
250 12
3
200
19
150
6
100
5 II
2 4 18
ІII 13
50 1 16
14 15
7 20
8 9
10 17
0
0 2000 4000 6000 8000 10000 12000
Kn = Fn ∗ tn
Рисунок 1.6 – Залежність основних визначальних
параметрівмікроконтролерів (коефіцієнт потужності розсіювання кристала та
коефіцієнт пропорційний швидкості опрацювання) в безрозмірних координатах
В таблиці 1.5 наведені основні технічні параметрів (потужність, об’єм
пам’яті, пропускна здатність та швидкість наростання Uddдля формуваннясигналу
затримки) мікроконтролерів фірми Microchip.
23
Таблиця 1.5
Основні технічні параметри мікроконтролерів фірми Microchip
Пам'ять
Пам'ять даних Швидкість
програм
ОЗУ, наростаня Потужність,
FLASH, мВт
№ Тип байт Udd для Пропускна
байт формуваня здатність,
п/п мікроконтролера
сигналу Спожива- Розсію- байт/с
EPROM RAM EEPROM затримки, ння вання
В/мкс *10-3 *10-3
1 PIC16CR54A 512х12 25х8 8х8 0,033 18,15 282,61 2,86
2 PIC16C58B 1024х12 41х8 16х8 0,04 67,65 347,83 3,86
3 PIC16C55 1024х14 224х8 128х8 0,015 126 282,61 17,92
4 PIC16F628 2048х14 224х8 128х8 0,01 4,4 108,70 19,91
5 PIC16F1220 4096х14 192х8 128х8 0,02 4,95 282,61 7,68
6 PIC16F877 8192х14 368х8 256х8 0,04 22 347,83 36,80
7 PIC16C54C 512х12 258х8 128х8 0,05 3,3 108,70 41,28
8 PIC18F242 16Кх16 768х8 256х8 0,04 22 282,61 61,44
9 PIC18F442 32Кх16 1536х8 512х8 0,084 11 108,70 102,40
10 PIC18F452 32Kx16 1536х8 1024x8 0,075 8,82 347,83 81,92
11 PIC18F8720 32Kx18 1536x8 1024x8 0,1 8,82 108,70 61,44
На рисунку 1.7наведено залежність основнихтехнічнихпараметрів
мікроконтролерів фірмиMicrochipв безрозмірних координатах.
Рр
*10-3
Рсп
60
5
50
40
7 II
10
30 I
4 II
20 1 6
8 11
10 9
3 2
0
0 50000 100000 150000 200000 250000 300000 350000 400000 450000
VFLASH ∗ FMK
ν
Рисунок 1.7 – Залежність основнихтехнічнихпараметрів (потужностей,
об’єму пам’яті, частоти, пропускної здатності) мікроконтролерів в безрозмірних
координатах
24
На рисунку 1.8 (а, б) зображена залежність основних технічних параметрів
мікроконтролерів (пам’яті Flash, RAM, EEPROM, частоти, напруги та швидкості
наростаня Udd) сімейства Microchipв безрозмірних координатах.
Flash
RAM
60
50
8, 9
6 10 III 11
40
2 5
30 11 II II
20
4
10
3 I
0 7
0 0,0002 0,0004 0,0006 0,0008 0,001 0,0012 0,0014
νUdd
FМК ∗ Udd
Рисунок 1.8 а – Залежність основних технічних параметрів мікроконтролерів в
безрозмірних координатах
Flash
EEPROM
140
8, 9
120
100
2 III
1
80
II 10 11
60
5, 6
40
20 3
4 I 7
0
0 0,0002 0,0004 0,0006 0,0008 0,001 0,0012 0,0014
νUdd
FМК ∗ Udd
Рисунок 1.8 б – Залежність основних технічних параметрів мікроконтролерів в
безрозмірних координатах
25
Дані мікроконтролери розділені на три групи: перша група об’єднала
νU
мікроконтролери з малим об’ємом пам’яті та коефіцієнтом dd , з не великою
FМК∗Udd
напругою живлення Uddта з швидкістю наростання Udd для формування сигналу
затримки, друга група включила в себе мікроконтролери з дещо більшими
параметри, котрі наведені вище, до третьої групи потрапили мікроконтролери з
великими об’ємами пам’яті, великою напругою живлення та з високою швидкістю
наростання напругиживлення для формування сигналу затримки.
Висновки. В даному розділі проведено системний аналіз зарубіжних
аналогів міні-метеостанцій.
Визначені вимоги до приладу прийому та обробки метеорологічних
даних:
- висока оперативність збору точної інформації;
- мінімізація технічних та матеріальних засобів для її отримання;
- простота у використанні;
- мобільність технічних засобів збору інформації;
Проводитьсясистемний аналіз основних параметрів метеоприладів та
мікроконтролерів сімейства Microchip. Наведено порівняльну таблицю з
основними технічними параметрами аналогів. Визначено залежності основних
технічних параметрів мікроконтролерів на основі теорії неповної подібності та
розмірностей.
Тому, дослідження приладу прийому та обробки метеорологічних даних є
задачею першочерговою та актуальною.
26
РОЗДІЛ 2
ВСТАНОВЛЕННЯ ЗАЛЕЖНОСТЕЙ ОСНОВНИХ ТЕХНІЧНИХ
ПАРАМЕТРІВ МІКРОКОНТРОЛЕРІВ
Апроксимація, це представлення складних функцій s(x) або дискретних
вибірок з цих функцій s(xi) простими і зручними для практичного використання
функціями апроксимації f(x) так, щоб відхилення f(x) від s(x) в області її завдання
було найменшим по певному критерію наближення.
Якщо наближення будується на заданіймножиніточок {xi}, то апроксимація
називається точковою. До неї відносяться інтерполяція, середньоквадратичне
наближення та ін. При побудові наближення на безперервній множині точок,
наприклад на відрізку [а,b], апроксимація називається безперервною або
інтегральною.
Математична модель апроксимації поліномом 5-го порядку визначальних
параметрівмікроконтролерів в безрозмірних координатах:
K = ( 1950 2770 3400 5230 5640 6050 ) T
K = K
Q = (0.414 0.349 0.204 0.204 0.349 0.414 ) T
Q = Q
span = 5
vs = loess(K Q span)
z = 1900 2000 11000
r(z) = interp(vs K Q z),
де К – матриця розміром 1х6, визначає величину пропорціональну швидкості
опрацювання;
Q – матриця розміром 1х6, визначає температурний коефіцієнт;
КТ, QT – транспонентні матриці;
span– порядок апроксимуючого поліному;
vs – точкова залежність температурного коефіцієнту від величини
пропорційної швидкості опрацювання;
r(z) – апроксимаційний поліномом 5-го порядку визначальних
параметрівмікроконтролерів в безрозмірних координатах.
27
На рисунку 2.1 наведена апроксимація поліномом 5-го порядку визначальних
параметрівмікроконтролерів сімейства Microchip за допомогою програмного
середовища MathCAD.
0.45
20
0.405
6
0.36
7 19
0.315
0.27
Q
0.225
r(z)
8 18
0.18
0.135
0.09
0.045
0
1950 2360 2770 3180 3590 4000 4410 4820 5230 5640 6050
K z
Рисунок 2.1 – Апроксимація поліномом 5-го порядку визначальних
параметрівмікроконтролерів в безрозмірних координатах
В результаті апроксимації була отримана залежність визначальних
параметрівмікроконтролерів від температурного коефіцієнту та коефіцієнту
пропорційного швидкості опрацювання. Всі мікроконтролери мають тактову
частоту в 40 Мгц. Мікроконтролери 6, 7, 8 характеризуються не великим часом
затримки 50, 70, 85 мкс відповідно, останні мікроконтролери – 18, 19, 20 мають
великий час затримки – 150, 200, 250 мкс. Температурний коефіцієнт
мікроконтролерів знаходиться в трьох діапазонах: 0,41, 0,35 та 0,2.
Третю групу мікроконтролерів умовно можна поділити на дві підгрупи. В
першій підгрупі мікроконтролерів при збільшені часу затримки стрімко
зменшується температурний коефіцієнт, друга підгрупа мікроконтролерів має
28
лінійну залежність – при збільшенні часу затримки, відповідно зростає
температурний коефіцієнт.
На рисунку 2.2 наведена апроксимація поліномом 4 порядку основних
визначальних параметрів мікроконтролерів сімейства Microchipв безрозмірних
координатах.
100
3
90
17
80
70
60
6
Kp
50
r(z)
40
13
30
20
10
16
0
1900 2330 2760 3190 3620 4050 4480 4910 5340 5770 6200
K z
Рисунок 2.2 – Апроксимація поліномом 4 порядку визначальних
параметрівмікроконтролерів в безрозмірних координатах
Залежність параметрів мікроконтролерів, котра наведена на рисунку 2.2
носить такий же характер, що і вище наведена (рис. 2.1). При збільшенні часу
мікроконтролера зменшується коефіцієнт запасу потужності розсіювання
кристала, даний коефіцієнт характеризує як потужність розсіювання кристала, так
і напругу живлення та струм споживання. При стрімкому спаданні коефіцієнта Kp
та зростанні часу затримки мікроконтролерів, далі наступає лінійна залежність
даних параметрів – зростаючи час затримки, відповідно зростає і коефіцієнт Kp.
Мікроконтролер 7 має малу напругу живлення та струм споживання,
відповідно і коефіцієнт запасу потужності розсіювання кристала буде теж не
високим.
29
Рр V
Залежність від FLASH∗FMK (рис. 2.3) можна обґрунтувати тим, що при
Рсп ν
збільшенні об’єму пам’ятіVFLASHмікроконтролерів та при збільшенні пропускної
Рр
здатності − ν, відповідно зростає коефіцієнт .
Рсп
140
126
112
98
84
A
70
r(z) 5
56
10
42
7
28
8
9
14
0
3000 32800 62600 92400 122200 152000 181800 211600 241400 271200 301000
M z
Рисунок 2.3– Апроксимація поліномом 5 порядку основних
технічнихпараметрів мікроконтролерів в безрозмірних координатах
На рисунку 2.4 (а, б) наведена апроксимація поліномами 2 та 3 порядку
основних технічних параметрів мікроконтролерів в безрозмірних координатах.
30
100
1
82 11
64
5
46
11
C
28 5
r(z)
10 7
D
q(x) − 8
− 26
− 44
− 62
− 80
0.00017 0.00028 0.00039 0.0005 0.00061 0.00072 0.00082 0.00093 0.00104 0.00115 0.00126
T z W x
Рисунок 2.4 (а, б) – Апроксимація поліномами 2 та 3 порядку основних
технічних параметрів мікроконтролерів в безрозмірних координатах
Flash νU
Залежність від dd (див. рис. 2.4 а) можна обґрунтувати тим, що
RAM FМК∗Udd
при зростанні напруги живлення та швидкості наростання Udd для формування
Flash
сигналу затримки, відповідно зростає коефіцієнт . Беручи до уваги, іншу
RAM
Flash νU
залежність від dd (див. рис. 2.4 б), то дана залежність носить більш
EEPROM FМК∗Udd
Flash
складний характер: мікроконтролери 1, 5, 7 мають високий коефіцієнт ,
EEPROM
νU
зменшення коефіцієнта dd призводить до збільшення параметра ν
F ∗U U та
dd
МК dd
νU
напруги живлення, далі коефіцієнт dd – зростає, відповідно зростають і
FМК∗Udd
напруга живлення та швидкість наростання напруги живлення для формування
сигналу затримки даних мікроконтролерів (зростає також
Flash та EEPROM пам’ять мікроконтролерів).
31
2.1 Вибір технічних параметрів та мікроконтролеру для досліджуваного
приладу
На основі системного аналізу основних параметрів метеоприладів створено
таблицю 2.1 основних технічних параметрівдосліджуваного приладу.
Таблиця 2.1
Основні технічні параметри досліджуваного пристрою
Макс.
Діапазон Інтервал відстань
Частота
температур/ оновлен- між
№ Тип метео- прийому/ I, U, P, Вартість,
робоча ня пристроєм
п/п комплексу передачі, мА В мВт тис. грн.
температура, даних, та
МГц
К мкс датчиками,
м
Досліджуваний
5 700 233…393 8 2 16 30 5000 2,227
прилад
Використовуючи формули (1.1) та (1.2),було отримано залежність основних
технічних параметрів аналогів та досліджуваного приладу в безрозмірних
координатах: частоти прийому/передачі даних, інтервалу оновлення даних та
температурного коефіцієнту (рисунок 2.5).
Qmax − Qmin
Qn =
Qmax
0,45
0,4
5
0,35 4
0,3
0,25 3
1
0,2
2
0,15
0,1
0,05
0
0 10000 20000 30000 40000 50000 60000 70000 80000 90000
Kn = Fn ∗ tn
Рисунок 2.5 – Графік залежності основних технічних параметрів аналогів
та досліджуваного приладу в безрозмірних координатах
Досліджуваний прилад (5) має найкращий показник по коефіцієнту Kn його
складовою являється добуток частоти прийому/передачі даних на інтервал
32
оновлення даних. Вище згадані технічні параметри виводять досліджуваний
прилад на перше місце серед його аналогів.
Проаналізувавши технічні параметри та коефіцієнти Kn, Qn,визначено
технічні параметри досліджуваного приладу:
• частотою прийому/передачі даних досліджуваного пристрою було
обрано частоту в 700 МГц, так як дана частота належить до діапазону
“аматорських” частот, прийом/передача даних до п’яти кілометрів не потребує
реєстрації в Укрчастотнагляді та може використатися без додаткових документів
та відповідних ліцензій;
• інтервал оновлення даних обрано в 30 мкс – дане рішення можна
обґрунтувати тим, що не рентабельно та не економічно використовувати
комплектуючу базу з більш меншим часом затримки, ніж запропоновано для
масового виробництва даного приладу. В іншому випадку використання
комплектуючої бази з меншим часом затримки призведе до значних витрат при
виробництві та наслідком чого стане підвищення договірної та відпускної ціни
виробу;
По технічним параметрам найкращим аналогом являється (2) Wireless
Weather Envoy (табл. 2.1). Але економічний параметр досить високий в даного
аналогу.
В(2)/В(6)=22 тис. грн./ 2,2 тис. грн.= 10 раз. (2.1)
З даної формули видно, що досліджуваний прилад в десять раз екомічно-
рентабельний за свій аналог.
Системний аналіз тазалежності визначальних параметрів мікроконтролерів
сімейства Microchip дали змогу теоретично виокремити один мікроконтролер
серед N-ї запропонованої кількості, за допомогою теорії неповної подібності та
розмірностей.
33
Висновки.Створено математичні моделі та побудовані на основі них
апроксимаційні поліноми N-го порядку, які на практичному рівні підтверджують
правильність вибору мікроконтролера.Для здійснення попередньої обробки
інформації, прийнятої від датчиків було обраний мікроконтролер РІС16С54С, так
як він має досить низьку ціну, досить поширений на ринку, та здатен
забезпечувати всі необхідні функції для роботи метеоприладу.
Напруга живлення, наростання напруги живлення для формування сигналу
затримки та об’єм пам’яті мікроконтролера PIC16C54C, задовольняють повністю
досліджуваний прилад прийому та передачі метеоданих.
34
РОЗДІЛ 3
ОБРАЗНО-ЗНАКОВІ МОДЕЛІ МІНІ-МЕТЕОСТАНЦІЙ
3.1 Вибір елементної бази
Для передачі даних між модулями збору та прийому метеоінформації через
радіоканал потрібно вибрати радіо прийомо-передавальний пристрій, який
задовольняв би наступним вимогам:
- низька ціна;
- досить малі габаритні розміри;
- забезпечувати високу частоту передачі даних – понад 500 МГц;
- мати можливість зовнішнього живлення до 5В, та 30 мA у режимі передачі;
- забезпечувати прийом/передачу даних у напівдуплексному режимі.
Оскільки у технічному завданні зазначено 1 канал радіозв’язку для прийому
та передачі, тому буде використано напівдуплексний режим передачі даних.
Виходячи із частотних вимог передачі даних, частотою для прийому та
передачі даних є частота в 700 МГц.
Прийомо-передавальний пристрій швейцарської фірми Xemics XE1201A, бо
він має низьку ціну (близько 18% від запланованої суми витрат), має відносно
невеликі габаритні розміри (25х25 мм) та задовольняє іншим вищезгаданим
вимогам.
Характеристики прийомо-передавального пристрою:
- напруга живлення 2,4В;
- струм живлення в режимах прийом/передача до 6/8 мА;
- потужність передавача 20 мВт;
- температурний діапазон роботи -40 + 85℃;
- частотний діапазон передачі даних 400 – 700 МГц;
- швидкість передачі даних – до 64 Кбіт/с.
Елементна база досліджуваної міні-метеостанції наведено в Додатку А.
35
3.2Розробка модулю попередньої обробки сигналу
3.2.1 Обробка прийнятого сигналу
Модуль збору метеорологічних даних має наступну структуру (рис. 3.1):
Запит Запит(код
модулю)
Прийомо-
Блок датчиків Мікро- передавальний
контролер RF i/o
Відповідь Відповідь пристрій
Рисунок 3.1 –Образно-знакова модельмодулю збору інформації
Мікроконтролер модуля збору інформації передає дані, які щойно були
зчитані з блоку датчиків, та збережені у власному буфері мікроконтролера.
Форма сигналу на виході прийомо-передавального пристрою – приладу
прийому інформації, який був отриманий від модуля збору інформації представлений
на рисунку 3.2).
Стає очевидним необхідність мати модуль, який би розпізнавав
інформаційні та синхронізуючі сигнали та розділяв би їх на дві складові (рис. 3.2).
Інформаційний сигнал
Сигнал від прийомника Модуль LPT-
обробки порт
Синхронізуючий сигнал сигнал
Рисунок 3.2 – Образно-знакова модель модулю попередньої обробки
прийнятого сигналу
Слід також зважати на те, що модуль збору може знаходитись на будь- якій
відстані від модулю прийому інформації, тому амплітуди сигналу, що
надходитимуть на вхід модуля попередньої обробки є нефіксованими та
залежатимуть від відстані між двома прийомо-передавальними пристроями.
Тривалість інформаційного рівня сигналу становить 40 мкс, тривалість
синхронізуючого сигналу становить 10 мкс (рис. 3.3).
36
За таких умов тривалостей сигналу, можлива передача інформації зі
швидкістю до 20 000 біт/сек.
U0, В
Uсинхр
U”1”
U”0” t
0
50 мкс 10 мкс 40 мкс 40 мкс
Рисунок 3.3 – Форма сигналу на виході прийомо-передавального
пристрою приладу прийому
Рівні вхідних інформаційних та синхронізуючого сигналів отримано у
процентному співвідношенні від постійної утворюючої сигналу, що прийшов на
вхід.
Для вирішення даних вимог запропоновано наступну образно-знакову
модель (рис. 3.4).
37
VD1
R1 DD1
C1
U1
= =
^/#
DD4
=
R2
U2 DD2 DD6 Інформа-
ційний
= = 1 сигнал
^/# DD5
R3
U3
=
DD3
= =
^/#
R4
Синхронізуючий
сигнал
Рисунок 3.4 – Образно-знакова модель обробки прийнятого сигналу для
передачі до LPT-порта
Оскільки передається сигнал зі швидкістю 20 000 біт/с, у якості логічних
компонентів можуть слугувати будь-які мікросхеми ТТЛ-логіки низької
потужності та з часом переключення не більшим 2000 нс.
У якості мікросхем DD1, DD2, DD3, використовуються мікропотужні
чотирьох канальні аналогові компаратори TLC339 (мінімальна напруга живлення
– +1,5 В, вхідний струм 0,005 А, час переключення 1700 нс).
У якості мікросхем DD4, DD5 – обрано, мікросхема SN7486N, що являє
собою 4-и двох входових логічних елементи “виключаюче або” (напруга
живлення – +3,6В, час переключення 30 нс). У якості мікросхеми DD6,
використано, мікросхему 74SN7432, що являє собою 4-и двох входових логічних
елементи “або” (напруга живлення – +3,6 В, час переключення 30 нс).
38
Розрахунок параметрів схеми:
= R *C,
(3.1)
де R, C – параметри RC-ланцюга;
τ – час падіння напруги на конденсаторі.
Оскільки в даній схемі виділено лише три різні рівні сигналів, то τ прийнято
τ>20. Тобто рівень падіння напруги на виході конденсатора не повинен
перевищувати 5%.
Загальний опір ланцюга R=R1+R2+R3+ R4 = 10 КОм (вважаючи при цьому,
що струм, що протікає у ланцюгу дорівнює 0,36 мА).
Визначення ємкості конденсатора:
С = τ/R = 50 ∙ 10-6 ∙ 20 / 104 = 10-7 Ф. (3.2)
Амплітуди спрацьовування логічних рівнів сигналів:
логічний рівень „0” – 0,7 В;
логічний рівень „1” – 2,0 В;
логічний рівень „синхронізація” – 3,0 В.
Визначення опорів резисторів R1, R2, R3, R4, прийнявши вхідну напругу 3,6
В, струм ланцюга 0,36 мА.
R4 = 0,7 / 0,00036 = 1,9 КОм;
R3 = 2,0 / 0,00036 – 1,9 ∙ 103 = 3,6 КОм;
R2 = 3,0 / 0,00036 – 1,9 ∙ 103 – 3,6 ∙ 103 = 2,7 КОм;
R1 = 10 – 1,9 – 3,6 – 2,7 = 1,8 КОм.
Таким чином, отримано на одному виході схеми інформаційний рівень
сигналу – “0” або “1”, на іншому – сигнал синхронізації.
3.3 Підготовка сигналу для передачі
На вході прийомо-передавального пристрою повинен бути аналогічний
трьох рівневий сигнал для можливості передачі як інформаційної частини
сигналу, так й синхронізуючої послідовності (рис. 3.5)
39
Передача логічного „0”
Модуль Передача логічної „1” LPT-
Сигнал до передавача обробки порт
Синхронізуючий сигнал
Рисунок 3.5 – Образно-знакова модель модулю обробки сигналу для
передачі
На виході модулю обробки сигналу для передачі повинні отримати форму
сигналу, аналогічну до форми сигналу (рис. 3.3).
Для цього необхідне програмне чергування передачі сигналів даних та
сигналів синхронізації керуючої програми ПК.
Наприклад, при передачі логічної „1” на вихід LPT-порта необхідно
записати байт даних „00000010”, для передачі логічного нуля потрібно записати
байт „00000001”, при цьому слід передавати біт синхронізації після кожного
запису байта даних.
Для вирішення даних вимог запропоновано наступну модель (рис. 3.6).
У якості мікросхеми DD1 використано мікросхему потрійного аналогового
мультиплексора IW4053B (напруга живлення +3,6 В, вхідний струм до 10 мA,
робочий діапазон температур від -60 до +150℃).
Розрахунок опорів резисторів. При цьому, струм, що протікає у ланцюгу –
0,36 мА, напруга – 3,6 В.
R = R1+ R2+ R3+ R4=10 КОм
R4 = 0,7 / 0,0005 = 1,4 КОм;
R3 = 2,0 / 0,0005 – 1,4 ∙ 103 = 2,6 КОм;
R2 = 3,0 / 0,0005 – 2,6 ∙ 103 – 1,4 ∙ 103 = 2,0 КОм;
R1 = 10 – 1,4 – 2,6 – 2,0 = 4 КОм
Таким чином, при передачі на вхід модуля трьох сигналів, отримано один
трьохрівневий сигнал.
40
U0
DD1
U1
R1
U2
Сигнал до
передавача
R2
U3
R3
R4
Data0
Сигнали від LPT-
Data1
порту
Init#
Рисунок 3.6 – Образно-знакова модель модулю обробки сигналу для
передачі
U1– рівень напруги, що дорівнює рівню напруги сигналу “синхронізація” (3
В);
U2 – рівень напруги, що дорівнює рівню напруги сигналу “логічна 1” (2
В);
U3– рівень напруги, що дорівнює рівню напруги сигналу “логічний 0” (0,7
В);
41
3.4 Образно-знакова модель приладу прийому метеорологічних даних
На підставі розглянутого аналогу Vantage Pro 2 Plus, запропоновано
наступну образно-знакову модель приладу (рис. 3.7):
Пакет інформації до Сигнал
LPT-порту для обробки Сигнал-відповідь
Модуль Прийомо-
попередньої передатчик
За пит від LPT- обробки сигналу Запит до модуля
п орту ПК збору
Рисунок 3.7 – Образно-знакова модель приладу прийому метеорологічних
даних
Головні функціональні блоки схеми – прийомо-передавальний пристрій та
модуль попередньої обробки прийнятого сигналу.
Прийомо-передавальний пристрій – пристрій, здійснює радіо передачу
запиту до модуля збору метеоінформації та прийом інформації, що надійшла від
блоку датчиків модуля.
Модуль попередньої обробки – здійснює попередню обробку прийнятого
сигналу від прийомо-передавального пристрою для подальшої передачі
інформації на LPT-порт ПК.
3.4.1 Розробка принципово-електричної схемиприладу прийому
метеоданих
На рисунку 3.8 зображена принципово-електрична схемаприйому
метеоданих.
У якості мікросхем DD1, DD2, DD3 використано логічні елементи 3І-НІ –
SN7410N, DD4 відповідає шести входовий інвертор НІ – SN7404N, в якості DD5
використано логічний елемент 3АБО-НІ – SN4025, DD6 та DD7 відповідно
відповідають прийомо-передавальний пристрій XE1201A та мультиплексор
IW4053B.
42
Рисунок3.8 – Принципово-електрична схема прийому метеоданих
При натисканні на будь-яку кнопку, відбувається зміна вимірювальних
параметрів (температури, атмосферного тиску або вологості повітря), відповідно
при натисканні будь-якої кнопки замикається відповідний ключ SA1, SA2, SA3.
Якщо ключ SA1 замкнутий на вхід мікросхеми DD1 пройде логічна одиниця, на
43
інших ключах буде присутній логічний нуль, так як до ключів під’єднанні
резистори R2, R3. Мікросхеми DD1, DD2, DD3 об’єднано по принципу роботи
компаратора, дані мікросхеми мають інверсний вихід, тому має місце
застосування шести входового інвертора DD4. На виходах інвертора отриманий
не інверсний сигнал, котрий передається на мікросхему DD5, інверсний вихід 4
мікросхеми DD5 ініціалізує роботу LPT-порта. Вихідна комбінація 8, 9, 10 подана
на управляючі сигнали мультиплексора IW4053B, котра дозволяє передавати
відповідну комбінацію до LPT-порта. На виході XE1201A отриманий код, котрий
відповідає зібраним метеопоказникам від блоку метеодатчиків, сигнал Strobe
відповідає за напрям передачі метеопараметрів прийомо-передавального
пристрою. На виході DD5 отримана від селектована мультиплексором комбінація
14, 15, 4, котра подається на входи даних D0, D1, D2 LPT-порта. Отримана
комбінація являє собою остаточні метеопараметри прийняті від блоку датчиків.
Остаточні метеопараметри опрацьовуються керуючою програмою і передаються
користувачеві у зручному для перегляду вигляді.
3.5 Структурна схема приладу збору метеорологічних даних
Структурна схема приладу збору метеорологічних даних представлена на
(рис. 3.9).
Сигнал-запит
Запит на видачу Запит (код
модулю)
Керуючий Прийомо-
Блок д атчиків мікро- переда-
контролер
Інформація від Видача вальний До приладу
датчиків інформації прийому
пристрій
Рисунок 3.9 – Структурна схема приладу збору метеорологічної
інформації
Прийомо-передавальний пристрій – здійснює зв’язок між приладом
прийому метеорологічних даних та модулем збору метеоінформації.
Мікроконтролер – відповідає за керування роботою прийомо-
передавального пристрою та блоку датчиків у складі модуля збору інформації.
44
Блок датчиків – конкретний набір датчиків, що здійснюють вимірювання
певних метеорологічних показників.
3.5.1 Розробка принципово-електричної схеми підключення датчиків
до мікроконтролера PIC16C54C
На рисунку 3.10 наведена принципова електрична схема підключення блоку
датчиків до мікроконтролера PIC16C54C.
Рисунок 3.10 – Принципово-електрична схема підключення датчиків до
мікроконтролера PIC16C54C
В якості мікросхеми DD1 використано мікроконтролер PIC16C54C, а в
якості DD2 – таймер NE555N.
Мікросхема DD1 здійснює контроль та управління над вимірювальними
метеопоказниками за допомогою відповідних метеодатчиків. Мікросхема DD2
являє собою таймер, призначений для вимірювання метеопараметрів через певні
проміжки часу, автоматичного вмикання або вимикання метеоприладу. До блоку
метеодатчиків відносяться: MPX 4115A – сенсор для вимірювання атмосферного
тиску, TC77 SPI – температурний сенсор для вимірювання як внутрішньої
температури приміщення, так і температури навколишнього середовища, H1 –
сенсор для вимірювання вологості повітря, MCP 120-450D – сенсор, котрий являє
45
собою індикацію низького рівня живлячого елементу. Для вимірювання вологості
повітря необхідно застосувати два конденсатори, так як зі зміною вологості
повітря буде змінюватися ємкість.
3.6Розробка образно-знакової моделіметеорологічного комплекса
Для аналізу роботи приладу за структурною схемою, потрібно розглянути
цикл передачі інформації, який проходить у процесі роботи метеорологічного
комплексу.Образно-знакова модельметеорологічного комплексу наведено на
рисунку 3.11.
Прилад прийому метеорологічних даних Керуюча
програма
3 2 1
Модуль
Приємо- попередньої LPT-
п ередавач обробки порт
10 сигналу 11 ПК 12
4 9
5 6
Приємо- Мікроконтро- Блок
передавач 8 лер 7 датчиків
Модуль збору метеорологічних даних
Рисунок 3.11 – Образно-знакова модельметеорологічного комплексу
Умовно алгоритм обміну інформацією між модулем збору, приладом
прийому інформації, та керуючою програмою ПК можна представити через
структурну схему комплексу збору метеорологічних даних.
Алгоритм обміну інформації:
46
• керуюча програма передає на LPT-порт код модулю, що буде
опитаний (лінія 1);
• з порта інформація поступає на блок попередньої обробки інформації
(лінія 2);
• звідки код модуля поступає на прийомо-передавальний пристрій для
запиту до модуля збору (лінія 3);
• прийомо-передавальний пристрій приладу прийому інформації
передає прийомо-передавальному пристрою модуля збору метеорологічних даних
код модуля (лінія 4);
• далі іде передача коду для аналізу мікроконтролером переданого коду
(лінія 5) мікроконтролер власний код (код модуля) з отриманим, якщо не
співпадає – цикл завершується, якщо співпадає – цикл триває;
• мікроконтролер передає запит до блоку датчиків для отримання
корисної інформації (лінія 6);
• блок датчиків отримавши повідомлення, робить замір погодних
показників та повертає корисну інформацію до мікроконтролера (лінія 7);
• мікроконтролер, зберігши інформацію у власному буфері, передає її
до прийомо-передавального пристрою (лінія 8);
• модуль збору (прийомо-передавальний пристрій) передає
інформацію до модулю прийому метеорологічних даних (лінія 9);
• прийомо-передавальний пристрій передає інформацію модулю
попередньої обробки сигналу для її подальшої передачі у ПК (лінія 10);
• модуль попередньої обробки робить необхідні перетворення та
передає відповідну інформацію на LPT-порт (лінія 11);
• керуюча програма робить зчитування інформації з LPT-порту та
робить подальшу обробку прийнятої інформації (лінія 12).
3.7 Розробка протоколу передачі даних
3.7.1 Трьохрівневий сигнал обміну даними
47
Для реалізації циклу обміну даними у метеорологічному комплексі
запропоновано трьохрівневий сигнал, тобто такий сигнал, у котрому є можливість
виділити за амплітудою три логічних рівня: логічний рівень „0”, логічний рівень
„1” та логічний рівень „синхронізація”.
Умовно такий сигнал зображений на рисунку 4.12:
U0, В
U
синхр
U”1”
U”0”
t, мкс
0
Рисунок 3.12 – Трьохрівневий сигнал обміну даними
Uсинхр. – рівень напруги синхронізуючого сигналу;
U1 – рівень напруги логічної одиниці;
U0 – рівень напруги логічного нуля.
Згідно рисунка 3.12, сигнал, що передається має три логічних рівня, тобто
після інформаційного сигналу („0” або „1”), відразу йде сигнал-підтвердження
високого рівня. У момент приходу синхронізуючого сигналу можна знімати
попередній інформаційний рівень.
3.7.2 Передача даних через LPT-порт ПК
Оскільки, виходячи із технічного завдання, прийом-передача інформації
повинна здійснюватись через LPT-порт ПК, модуль прийому інформації повинен
задовільняти його фізичним та електричним інтерфейсам.
Адаптер паралельного інтерфейсу являє собою набір регістрів,
розташованих у просторі введення/виводу. Регістри порту адресуються щодо
базової адреси порту, стандартними значеннями якого є 3BCh, 378h і 278h. Порт
48
може використати лінію запиту апаратного переривання, зазвичай IRQ5 або IRQ7.
Порт має зовнішню 8-бітну шину даних, 5-бітну шину сигналів стану й 4-бітну
шину керуючих сигналів. При передачі даних використовуватимемо адресу 378h
(LPT1).
Стандарт на паралельний інтерфейс IEEE 1284, прийнятий у 1994 році,
визначає терміни SPP, EPP, і ECP. Стандарт визначає п'ять режимів обміну
даними, метод узгодження режиму, фізичний і електричний інтерфейси. Згідно
IEEE 1284, можливі наступні режими обміну даними через паралельний порт:
До передавачів пред'являються наступні вимоги:
- рівні сигналів без нагрузки не повинні виходити за рівні -0,5 ... +5,5В;
- рівні сигналів при струмі нагрузки 14 мА мають бути не нижчими за +2,4
мА;
- швидкість наростання (спаду) імпульса має знаходитись в межах 0,05-0,4
В/нс.
Вимоги до приймачів:
- припустимі амплітудні рівні сигналів -2,0 + 7,0 В;
- пороги спрацьовування мають бути не вище 2,0 В (VIH) для високого рівня
та не нижче 0,8 В (VIL) для низького;
- вхідна ємність не повинна перевищувати 50 пФ.
Стандарт IEEE 1284 визначає три типи роз’ємів. Типи А (DB-25) і В
(Centronics-36) використовуються у традиційних кабелях підключення принтера,
тип С – новий, малогабаритний, 36-контактний роз’єм.
При розробці буде використовуватися стандартний А (DB-25F) роз’єм.
3.7.3 Вибір режиму прийому-передачі через LPT-порт
Режими роботи LPT-порта:
49
- Compatibility Mode – одно направлений (вивід) за протоколом Centronics.
Цей режим відповідає стандартному (традиційному) порту SPP.
- Nibble Mode – введення байта в два цикли (по 4 біта), використовуючи для
прийому лінії стану.
- Byte Mode – введення цілого байта, використовуючи для прийому лінії
даних.
- ЕРР (Enhanced Parallel Port) Mode – двонаправлений обмін даними, при
якому керуючі сигнали інтерфейсу генеруються апаратно під час циклу звернення
до порта (читання або запису в порт).
- ECP (Extended Capability Port) Mode – двонаправлений обмін даними з
можливістю апаратного стискання даних за методом RLE (Run Length Encoding)
та використання FIFO-буферів та DMA. Керуючі сигнали інтерфейсу генеруються
апаратно.
Вимоги, що висуваються до прийому та передачі даних через LPT-порт:
- двонаправлений обмін даними;
- найбільша поширеність та апаратна реалізація у сучасних ПК функцій, що
застосовуватимуться під час прийому та передачі;
- керуючі сигнали мають генеруватися як програмно, так і апаратно;
- цикли читання й запису можуть чергуватися в довільному порядку або йти
блоками.
Для забезпечення всіх цих вимог стандартні режими обміну є
неприйнятними, тому запропоновано власний режим (протокол) обміну.
3.8 Розробка інтерфейсу передачі даних через LPT –порт
Стандартний порт має 8-ми бітні регістри, які розташовані на сусідніх
адресах вводу/виводу, починаючи з базової адреси порту BASE.
Data Register(DR) – регістр даних. Дані, записані у цей регістр, виводяться
на лінії інтерфейсу. Дані, зчитані з цього регістра, в залежності від схемотехніки
адаптера відповідають або раніше записаним даним, або сигналам на тих же
лініях.
50
Status Register (SR) – регістр стану, що представляє собою 5-бітний порт
уведення сигналів стану принтера (біти SR4-SR7). Біт SR7 інвертується –
низькому рівню сигналу відповідає одиничне значенню біта в регістрі, і навпаки.
Control Register (CR) – регістр керування. Як і регістр даних, цей 4-бітний
порт виводу допускає запис і зчитування (бітів 0-3), але його вихідний буфер
звичайно, має тип відкритий колектор. Це дозволяє більш коректно
використовувати лінії даного регістра. Біти 0, 1, 3 інвертуються – одиничному
значенню в регістрі відповідає низький рівень сигналу і навпаки.
Стандартні роз’єми порта DB-25F (розетка).
Для розробки протоколу обміну даними використано такі клеми:
• DR0 (Data 0) – працює на виведення інформації. У режимі виводу –
передає номер модулю, від якого будуть запрошені дані (контакт номер 2 у DB-
25F);
• DR1 (Data 1) – працює на виведення інформації. У режимі виводу –
передає номер модулю, від якого будуть запрошені дані (контакт номер 3 у DB-
25F);
• CR2 (Init#) – працює на виведення інформації. Використовується для
синхронізації під час запису до порту (контакт номер 16 у DB-25F);
• CR3 (Select Input#) – працює на виведення інформації.
Використовується для задання напрямку виводу (запис або читання), також
служить для задання режиму роботи прийомо-передавального пристрою – RX/TX
– інвертований сигнал (контакт номер 17 у DB-25F);
• SR7 (Busy) – працює на введення інформації. Використовується для
прийому даних від зовнішнього пристрою. Інвертований сигнал (контакт номер
11 у DB-25F);
• SR5 (Paper Out) – працює на введення інформації. Використовується
для синхронізації під час читання інформації з порту (контакт номер 12 у DB-25F);
Умовно графічну схему обміну даними через LPT-порт можна зобразити так
(рис. 3.13):
51
LPT-порт DR0 дані
ПК DR1
CR2 дані
CR3 синхронізація до ППП
SR7 дані
SR5 синхронізація
Рисунок 3.13 – Виводи LPT-порта при роботі з приладом
3.9 Алгоритм циклу зчитування даних за допомогою LPT -порта
1. Програмно встановлюється низький рівень сигналу Select Input# (CR3),
тим самим, переключаючи порт у режим читання даних, цей же сигнал й
передається на вхід прийомо-передавальний пристрою RX/TX, переключаючи
його у режим прийому даних.
2. На вхід Busy (SR7) від блоку попередньої обробки сигналу надходять
дані. Порт чекає на підтвердження від периферійного пристрою.
3. Від блоку попередньої обробки сигналу на вхід Paper Out (SR5) надходить
синхронізуючий сигнал (високий рівень).
4. Знімаються дані з SR7.
5. Програмно встановлюється низький рівень сигналу Paper Out (SR5) для
готовності прийому наступного біту інформації.
3.10 Алгоритм запису даних до LPT –порту
1. Програмно встановлюється високий рівень сигналу Select Input# (CR3),
тим самим переключаючи порт у режим запису даних, цей же сигнал й
передається на вхід прийомо-передавального пристрою RX/TX, переключаючи
його у режим передачі даних.
2. До LPT-порту програмно записується байт 00000001, що символізує
передачу „0”, або 00000010, що символізує передачу „1”, тим самим з’являються
відповідні сигнали на виходах DR0 або DR1.
52
3. Програмно встановлюється високий рівень сигналу CR3 (Select Input#)
для підтвердження посилки наступного біту інформації.
4. Дається програмна затримка (10 мкс) – для затримки рівня сигналу CR3.
5. Програмно встановлюється низький рівень сигналу CR3 (Select Input#)
для кінця підтвердження.
3.11РОЗРОБКА ТОПОЛОГІЇ ПРИЛАДУ
3.11.1 РОЗМІЩЕННЯ МІКРОСХЕМ НА ПЕЧАТНІЙ ПЛАТІ
Оскільки основні мікросхеми приладу мають невеликий розмір та схожі
електричні параметри, їх можна розмістити на одній печатній платі, що
кріпитимуться чотирма штирями до корпусу.
Корпус приладу вилитий з ABS пластика – G828G(O)BC.
Розміри елементів мікросхем приладу, щодо їх розміщення на печатній
платі:
- прийомо-передавальний пристрій XE1201A – 25х25х5 мм;
- мультиплексор IW4053B – 19х7,5х5 мм;
- компаратор TLC339 – 19х7,5х5 мм;
- мікросхема “виключаюче або” SN7486N 19х7,5х5 мм;
- мікросхема “або” 74SN7432 19х7,5х5 мм;
- стандартний роз’єм LPT-порту DB-25F 40х7 мм.
Для розміщення мікросхем використано печатну плату розміром 45х60 мм.
Розміщення елементів представлено на печатній платі у масштабі 1:1 (рис. 3.14):
2 1
3
4
5
Рисунок 3.14 – Умовне розміщення основних мікросхем приладу на печатній
платі
53
- XE1201A (1) – прийомо-передавальний пристрій;
- IW4053B (2) – обробка сигналу для передачі;
- TLC339 (3), 74ALS86 (4), SN7432 (5) – обробка прийнятого сигналу.
3.11.2 Забезпечення живлення приладу
Для забезпечення живлення приладу використовуються підзаряджувальні
акумулятори, а саме нікель-метал-гідридний акумулятор:
- вихідна напруга 1,2В;
- ємність акумулятора 800 мА/год;
- розміри 16х16х8 мм.
При послідовному включенні трьох таких акумуляторів, вихідна напруга
живлення становитиме 3,6 В, що буде достатньо для живлення будь-якої
мікросхеми.
Основні елементи, які включені у корпус приладу:
- головна печатна плата приладу (2);
- блок живлення приладу (1);
- роз’єм приладу DB-25F (3);
- кріплення антени (4).
Усі основні блоки приладу у масштабі 1:1 наведені на рисунку 4.15.
Для розміщення основних блоків приладу у корпусі, достатньо використати
корпус, розміром 108х50х20 мм.
2 1
3
30мм
42м м 50мм
4
13мм
6мм 60мм 17мм
108мм
Рисунок 3.15 – Розміщення основних блоків приладу у корпусі
54
3.11.3 Зовнішній вигляд приладу
Усі елементи приладу будуть розміщені у пластмасовому корпусі, розміром
108х50х20 мм, оскільки штирьова антена має довжину 107,5 мм, її доцільно було
б розмістити “вздовж” корпуса, зовнішній вигляд приладу наведений на рисунку
3.16.
Для якомога кращого прийому та передачі даних, антена має бути
розташована горизонтально до земної поверхні. Тому запропоновано два види
розташування приладу під час роботи з ним. У вигляді “зачіпки” (рис. 3.17 (а)) та
у вигляді стойки (рис. 3.17 (б)).
108 мм
50 мм
20мм
65 мм
Рисунок 3.16 – Зовнішній вигляд приладу
а) б)
Рисунок 3.17 (а, б) – Розташування та закріплення приладу під час роботи
з ним
55
3.11.4 Розрахунок ударостійкості
Далі наводяться необхідні розрахунки, щодо ударостійкості приладу при
падінні з певної висоти.
Початкові дані:
- висота падіння приладу h = 1 м;
- пружність поверхні при падінні h0п = 1 мм;
- пружність корпусу приладу h0к = 2 мм;
- початкова швидкість падіння v0 = 0 м/с;
- прискорення a0 під час „тормозного шляху” приладу при падінні є
рівномірним.
Довжина „тормозного шляху” приладу дорівнює сумі пружності поверхні та
корпусу приладу:
h0 = h0п + h0к (3.1)
Швидкість приладу при падінні становить:
v = v0 + gt = 10t(3.2)
Шлях при падінні визначається за формулою:
gt 2
(s3.=3) 2
Отже, час падіння визначається як:
2s
t =
(3.4) g
Швидкість тіла у момент падіння:
(3.5)
v = 2gs = 20 = 4.47(м / с)
Прискорення приладу у момент падіння (деформація корпусу приладу та
поверхня падіння приймається рівномірно у часі).
2v2
a =
2 h , або a = (3.6)
t 2 h
Отже, ударостійкість приладу має складати a = 1,33*104 або 1,33*103*g.
56
Сумарна вага головної мікросхеми приладу, що кріпитиметься на штирьові
опори корпусу складає 50 г.
Для фіксації мікросхеми усередині корпуса використовуються чотири
штирьові опори.
Оскільки, максимальне навантаження на закріплення мікросхеми
становитиме при горизонтальному навантаженні на штирьові опори, тобто при
горизонтальному падінні мікросхеми (рис. 3.18).
F
d
s
Рисунок 3.18 – Закріплення плати до корпуса
s – довжина штира;
d – діаметр штира;
F – сила, що діє на штир при падінні.
Розрахунок діаметру капронового штира, який витримає нагрузку при
падінні.
Для капрону максимальна припустима напруга складає 30 МПа.
M
= x ,
max (3.9)
Wx
де σmax – максимальна напруга, Па;
Мх – момент при падінні, Н∙м;
57
Для циліндричного штира:
d 3
W = W = = 0,1d 3
(3.10)
x y
32
Момент при падінні:
M x = s F = s m a (3.11)
Тобто:
s m a (3.12)
max =
0,1 d 3
Тоді діаметр капронового штиря:
sma 0,004 0,05 1,33 103
d = 3 = 3
= 0,0043м (3.13)
0,1 max 0,1 3 107
Отже для закріплення головної плати на корпусі використовується 4
капронові штирі діаметром 4,5 мм.
Висновки. В даному розділі розроблені образно-знакові моделі модулю
попередньої обробки сигналу, модулю збору метеорологічних даних та
метеорологічного комплексу. Створено принципово-електричні схеми прийому
метеоданих та підключення датчиків до мікроконтролера PIC16C54C.
58
РОЗДІЛ 4
СТВОРЕННЯ СПЕЦІАЛІЗОВАНОГО ПРОГРАМНОГО
СЕРЕДОВИЩА ДЛЯ МЕТЕОРОЛОГІЧНОГО КОМПЛЕКСУ
4.1 Призначення та галузь застосування
Дана програма є спеціалізованим програмним виробом, що входить до
складу метеорологічного комплексу.
Призначення програми – надання користувачеві можливості керування
метеорологічним комплексом; отримання та оперування результатами інформації,
що надходить від модулів збору метеорологічної інформації.
Програма призначена для встановлення на переносному персональному
комп’ютері (ноутбуці). Також можлива інсталяція і на стаціонарній
(непереносній) робочій станції.
Оскільки даний програмний продукт є спеціалізованим програмним
виробом, його призначенням є надання зручного інтерфейсу між користувачем
(оператором) та модулями збору інформації, що входять до складу
метеорологічного комплексу.
4.2 Вимоги до програмного виробу
Постановка задачі вимагала виконання кінцевим програмним продуктом
наступних вимог:
• приймання даних, що надходять з LPT-порту ПК;
• аналіз даних, які були щойно прийняті;
• обчислення метеопоказників, на основі даних, отриманих від приладу
збору метеорологічних даних;
• надання зручної індикації оброблених даних;
• можливість роботи з міні-метеостанцією у різних режимах;
• можливість підключення нових модулів збору інформації під час
роботи програми;
• зручне збереження оброблених даних;
59
• імітацію вхідних сигналів від модуля збору інформації;
• можливість підлаштування різних параметрів прийому під час роботи
програми;
• можливість вдосконалення програми – додання нових
функціональних можливостей без зміни структури програми.
4.3 Вибір програмних засобів для реалізації поставленої задачі
Зручність роботи з прикладною програмою користувача завжди зумовлює
собою зручний графічний інтерфейс програми. Тому для рішення цієї проблеми
потрібно використовувати мову високого рівня з об’єктно-орієнтованим
підходом, бо це відразу вирішує іншу проблему – проблему легкого
масштабування програмного виробу. До того ж обраний програмний засіб мусить
мати досить потужний математичний апарат для можливості обчислення та
аналізу певних вхідних даних. Також слід враховувати й вимогу до вводу вхідних
даних для програми через LPT-порт, звідси виходить задача можливості
керування портами вводу/виводу.
Для рішення всіх вище згаданих задач можна запропонувати мову
програмування java, яка до того ж є платформо незалежною.
Серед інтегрованих середовищ розробки (Integrated Development
Environment) можна виділити програмний продукт Borland JBuilder X, який є на
сьогоднішній день є одним з найпотужніших.
4.4 Об’єктно-орієнтований підхід для вирішення постановленої
задачі
Оскільки обрана мова програмування, як і більшість сучасних мов
програмування високого рівня є об’єктно-орієнтованою, для написання програми
буде використовуватися об’єктно-орієнтований підхід. Де головними питаннями
є не „що робити” та „як робити”, а хто має виконувати ту чи іншу функції.
60
4.4.1 Структура програми
Як і будь-яка інша java-програма дана програма складається з класів, кожен
з яких розміщується у конкретному пакеті.
За своєю функціональністю класи програми поділені на три пакети:
ui – містить класи для графічного відображення (user interface);
util – допоміжні та утилітарні класи для роботи програми;
obj – класи-структури даних для логічного та зручного оперування даними.
4.4.2 Класи з полями та інкапсульованими методами
Огляд фізичних даних.
По-перше, інформація, що надходить. Її можна інкапсулювати у єдиний
клас – WeatherData з наступними полями:
- номер модуля (moduleNumber);
- температура (temperature);
- атмосферний тиск (preasure);
- сила вітру (windPower);
- напрямок вітру (windDirection);
- контрольна сума (src);
Також інкапсульовані у класи методи для оперування з цими полями.
По-друге, фізична модель модуля збору інформації може бути уособлена в
класі Module. З наступними молями:
- номер модуля (moduleNumber);
- опис модуля (moduleDescription);
- інформація про погоду, що передається (WeatherData).
До того ж необхідні методи, що характеризуватимуть роботу модуля:
sendModuleNumber() – посилає поточному модулю запит на відповідь –
інформацію від погодних датчиків.
61
createWeatherData(byte [] recivedBytes) – утворення об’єкта класу
WeatherData; параметри byte [] recivedBytes – набір байтів, який є відповіддю
поточного модуля на запит від керуючої програми.
Також для роботи будь-якої програми необхідний набір утилітарних класів,
які будуть допоміжними під час виконання програми (пакет util).
Transmitter – клас, що відповідає за передачу даних. Він характеризується
наступними полями:
OutputStream out – вихідний поток, куди вестиметься передача;
int PACKAGE_SIZE – розмір вихідного буфера для передачі даних.
sendBytes (byte [] byte01) – метод для відправки пакету байтів до вихідного потока,
параметри byte [] byte01 – набір вихідних байтів для передачі.
Receiver – клас, що відповідає за прийом даних. Він характеризується
наступними полями:
InputStream out – вхідний поток, звідки вестиметься передача;
int PACKAGE_SIZE – розмір вхідного буфера для прийому даних.
byte [] readData() – метод для прийому пакету байтів до вхідного потока.
Слід також зазначити, що клас Receiver реалізує інтерфейс Runnable, це
означає, що від призначений для запуску у окремому потоці.
Класи Transmitter та Receiver побудовані по шаблону Singletone, це означає,
що присутній лише єдиний екземпляр класу. І дійсно: непотрібно тримати у
системі два класи для передачі або прийому даних, аби уникнути помилок при
роботі програми.
Наприклад для реалізації цього шаблону застосовується:
private Receiver() { }
public static Receiver getInstanse()
{if (receiver != null) return receiver;
receiver = new Receiver();
return receiver;}
Скільки б раз не викликаючи метод getInstanse(), робота йтиме з одним й
тим самим екземпляром класу.
62
Розробка інших утилітарних класів. При роботі програми, що проектується
можливі виникнення двох умовних типів помилок:
- перша група – некритична, тобто помилка, що не заважатиме
нормальному ходу виконання програми. Очевидно дії при її виникненні мають
носити суто інформаційний характер для користувача; наприклад «помилка при
передачі даних».
- друга група – критичні помилки, при виникненні яких подальша
робота програми є неможливою, та необхідно робити терміновий вихід з
програми; наприклад «LPT-порт не знайдено», або «помилка при спробі відкрити
порт на запис».
Для зручної обробки цих помилок у класі BadEvent передбачено два
статичних методи:
public static void throwCriticalEvent(Exception ex, Component sourse, String
message)
public static void throwNonCriticalEvent(Exception ex, Component sourse,
String message)
параметри: Exception ex – клас помилки, Component sourse – джерело
помилки, String message – повідомлення про помилку.
У класі Helper інкапсульовані допоміжні методи для роботи програми, а
також методи, призначені для роботи програми у тестовому режимі.
public static byte[] integerToBytes(int number) – переведення числа в
послідовність бітів, придатних для передачі до LPT-порту при даному протоколі
передачі; параметри int number – число для передачі.
public static byte [] testStringIntoBytes(int moduleNumber) – переведення
тестової строки, взятої з файлу для імітації сигналів, отриманої від модуля.
63
4.5 Організація обміну даними по розробленому протоколу
4.5.1 Структура пакету даних
Структура вхідного пакету даних, згідно з набором даних, що будуть
надходити від приладу збору метеорологічних даних.
Набір даних, з якими оперувати програма:
- температура;
- атмосферний тиск;
- сила вітру;
- напрямок вітру.
Формат даних про температуру (рис. 4.1):
хххх хххх хххх хххх
Десята доля градуса
Значення температури у
градусах Цельсія
Знак температури (+/-)
Рисунок 4.1 – Формат даних про температуру
Формат даних про атмосферний тиск – 16 біт, що відображує абсолютне
значення атмосферного тиску у мм. рт. ст. Інформацію про силу та напрямок вітру
отримана у вигляді послідовності трьох шістнадцяти бітних чисел, за допомогою
яких будуть обчислені дані показники (рис. 4.2):
хххх хххх хххх хххх - показання від датчику вітру (1)
хххх хххх хххх хххх - показання від датчику вітру (2)
хххх хххх хххх хххх - показання від датчику вітру (3)
Рисунок 4.2 – Інформація від датчику сили та напрямку вітру
Також до пакету буде включено дані про номер модуля, від якого були
отримані дані та передана контрольна сума, завдяки чому можна перевірити
відсутність помилок під час передачі даних, обчисливши власну контрольну суму
від усіх погодних показників (рис. 4.3).
64
хххх хххх хххх хххх - температура
хххх хххх хххх хххх - атм. тиск
хххх хххх хххх хххх - показання від датчику вітру (1)
хххх хххх хххх хххх - показання від датчику вітру (2)
хххх хххх хххх хххх - показання від датчику вітру (3)
хххх хххх хххх хххх - обчислена контрольна сума
Рисунок 4.3 – Обчислення контрольної суми
Тобто контрольна сума обчислюється прямим сумуванням всіх показників
за модулем «2», та порівняється є контрольною сумою, яка щойно була передана.
Також при організації обміну даними слід передбачити наявність бітової
послідовності, що слугуватиме сигналом для початку аналізу бітової
послідовності, яка надходить від зовнішнього пристрою та формування
інформаційного пакету. Для цього потрібно додати до початку вхідної бітової
послідовності (пакету даних) комбінацію з восьми логічних одиниць – „стартову”
послідовність (СП) біт.
Тепер можна представити структуру пакету, яка являє собою послідовність
біт (рис. 4.4):
СП біт код модуля температура атм. тиск дані про вітер контр. сума
8 біт 8 біт 16 біт 16 біт 16х3 біт 16 біт
Рисунок 4.4 – Структура пакету, що приймається
Де СП – стартова вхідна послідовність.
Тобто, вхідний пакет даних буде являти собою бітову послідовність,
довжиною 112 біт.
65
4.5.2 Прийом даних
Організація прийому даних.
Інформація надходить на контакти роз’єму паралельного LPT-порту ПК
(SR7 – Busy, SR5 – PaperOut), які належать до 5-бітного порту стану принтера.
Інформація з них може бути програмно зчитана з використанням методів
isBusy() isPaperOut(), які вернуть true або false при наявності на роз’ємах високого
або низького рівня сигналів відповідно.
Для прийому даних у ініціалізуючому методі initData() запускається на
виконання окремий поток, що буде „стежити” за зміною рівнів сигналів на
роз’ємах паралельного порту.
receiver = Receiver.getInstanse();
receiver.setOwner(this);
new Thread(receiver).start();
У класі Receiver метод run() циклічно опитує рівень сигналу на роз’ємах SR5
(наявність синхронізуючого сигналу), викликаючи метод isPaperOut(), якщо метод
вертає true, починається приймання даних (опит рівня сигналу на роз’ємі SR7,
метод isBusy()), після чого програмно встановлюється низький рівень
синхронізуючого сигналу setPaperOut(false).
Аналіз бітової послідовності, що надходить. Якщо в результаті приймання
послідовності з восьми одиниць – накопичуються вхідні дані у буфер:
b = isBusy() ? 1 : 0;
buffer[counter++] = b;
Коли буфер заповнюється (counter == PACKAGE_SIZE), закінчується
приймання даних, та „руйнується” поток, що читає дані (receiver.interrupt()).
Поток, що читає дані буде знов запущений на виконання при наступному виклику
метода askModule() – тобто при необхідності приймання даних від наступного
модуля збору інформації.
66
4.5.3 Структура вихідного пакету даних
Необхідність передачі даних виникає, коли керуюча програма подає запит
до чергового модулю збору метеорологічних даних. При цьому інформація, що
має передаватися – є код модуля, який має бути миттєво опитаний.
Для задання коду модуля використано восьми бітну послідовність даних,
тобто максимальний номер модуля, який зможе обслуговувати програма буде
дорівнювати 256.
Також необхідно передати певну стартову послідовність біт, бо міні-
метеостанція може працювати в умовах сторонніх перешкод. Для задання
стартової послідовності (СП) використано послідовність з восьми біт, тоді пакет
даних, що пересилатиметься матиме наступну структуру (рис. 4.5):
1111 1111 хххх хххх
Стартова
Код модуля
послідовність
Рисунок 4.5 – Вихідний інформаційний пакет даних
Тобто, вхідний пакет даних буде являти собою бітову послідовність,
довжиною 16 біт.
4.5.4 Передача даних
Для передачі даних використовуються контакти роз’ємів паралельного
порту, що працюють на вивід інформації (DR0 для передачі логічного сигналу „0”,
DR0 для передачі логічного сигналу „1”, СR2 для передачі логічного сигналу
„синхронізація”).
Перед початком передачі даних у методі initData() виконується утворення
класу-передавача, що відповідає за передачу даних:
transmitter = Transmitter.getInstance();
transmitter.setOut(out);
transmitter.setOwner(this).
67
Передача даних починається при виклику метода askModule(). Для передачі
інформації програма виконує наступні дії:
1. Програмно встановлюється високий рівень сигналу Select Input# (CR3),
тим самим переключаючи порт у режим запису даних, цей же сигнал й
передається на вхід прийомо-передавача RX/TX, переключаючи його у режим
передачі даних (метод setPrinterSelect(true)).
2. До LPT-порту програмно записується байт 00000001, що символізує
передачу „0”, або 00000010, що символізує передачу „1”, тим самим з’являються
відповідні сигнали на виходах DR0 або DR1 (this.getOut().write(byte01)).
3. Дається програмна затримка (40 мкс) – для затримки рівня сигналу DR0
або DR1 (Thread.sleep(0, 40000)).
4. Програмно встановлюється високий рівень сигналу CR3 (Select Input#)
для підтвердження посилки наступного біту інформації (setInputSelect(true)).
5. Дається програмна затримка (10 мкс) – для затримки рівня сигналу CR3
(Thread.sleep(0, 10000)).
6. Програмно встановлюється низький рівень сигналу CR3 (Select Input#)
для кінця підтвердження (setInputSelect(true)).
7. Програмно встановлюється низький рівень сигналу Select Input# (CR3),
тим самим переключаючи порт у режим читання даних, цей же сигнал й
передається на вхід прийомо-передавача RX/TX, переключаючи його у режим
прийому даних (метод setPrinterSelect(false)).
4.6 Додаткові можливості програми
4.6.1 Збереження отриманих даних
Для збереження результатів роботи користувача з програмою
запропоновано збереження результатів опитування певного модуля у текстовий
файл (метод saveResultsToFile(String fileName, WeatherData dataToSave)).
При цьому, інформація, що зберігається має наступний формат (рис. 4.6):
68
Дата і час Номер Атм. Сила Напрямок
Температура
вимірювання модуля тиск вітру вітру
Рисунок 4.6 – Метеопараметри, що зберігаються у текстовий файл
Якщо користувач вирішить зберегти інформацію, отриману від щойно
опитаного модулю, він обирає опцію „зберегти у файл”. Програма додасть
інформацію про щойно отриманий модуль до вказаного текстового файлу.
4.7 Аналіз прийнятих даних
Дані, що надходять від модуля збору:
- температура;
- атмосферний тиск;
- сила вітру;
- напрямок вітру.
При отриманні пакету даних від модуля збору, утворюється модель даних
(клас WeatherData), що інкапсулює у собі поля та методи по обробці, аналізу,
обчисленню, та відокремленню даних із вхідного пакету даних.
WeatherData data = createWeatherData(byte [] recivedBytes)
data.initValues();
Температура (метод calculateTemperature(byte[] temperature)).
Дані, про температуру що надійшли мають такий формат (рис. 3.1).
Знак температури („+” або „–”) визначається аналізом перших чотирьох біт
(„0000” – „+”; „1111” – „–”). Значення температури у градусах Цельсія
визначається аналізом наступних восьми біт (0..255). Дробова частина
знаходиться шляхом аналізу наступних чотирьох біт.
Наприклад, проаналізувавши бітову послідовність 0000 0000 1100 1000,
отримуємо +12,5℃.
Атмосферний тиск (метод calculatePreasure(byte[] preasure)).
Значення атмосферного тиску у міліметрах ртутного стовпчика знаходиться
шляхом аналізу шістнадцяти біт, які були виділені з вхідного інформаційного
пакету.
69
Наприклад, проаналізувавши бітову послідовність 0000 0101 1111 0000,
отримуємо 760 мм. рт. ст.
Напрямок та сила вітру (метод calculateWind(byte[] wind)).
Напрямок та силу вітру отримано у вигляді частот, розкладених по вісям
полярної системи координат від датчика сили й напрямку вітру наступним чином:
v1e
j0
2
− j
v e 3
2
(4.1)2
j
v e 3
3
v1 = F ( f1)
(4.2)
v2 = F ( f2 )
v3 = F ( f3 )
де f1, f2, f3 – дані від датчику вітру (рис. 5.2).
При цьому:
Формули, що застосовуються при роботі з комплексними числами:
a + jb = (cos + j sin )
e j
= cos + j sin (4.3)
Застосовуючи формули 5.1, 5.4, суму v1+v2+v3 можна представити як:
v1 + v2 + v3 = (a1 + a 2 + a3) + j(b1 + b2 + b3)
(4.4)
Тому для знаходження сили вітру застосовано формулу:
(4.5)
3 3
= ( a i )2 +(bi )2
i=1 i=1
Для знаходження напрямку вітру застосовано формулу:
3
bi
= arctg i=1
3 (4.6)
ai
i=1
Для виконання всіх вищезгаданих операцій у середовищі java, використано
статичні методи класу Math.
70
Після обчислення показників сили та напрямку вітру, вони заносяться до
відповідних полей класу WeatherData.
4.8 Функціонально-логічні аспекти програми
4.8.1 Функціональне призначення програми
Дана програма є спеціалізованим програмним виробом та призначена для
надання користувачеві можливості керування метеорологічним комплексом за
допомогою стаціонарного або переносного персонального комп’ютера
(ноутбука).
4.8.2Опис логічної структури програми
Дана програма, як і будь-яка інша java-програма складається з класів.
Усі класи поділені на пакети за її функціональним призначенням. Виділено
три основні пакети:
ui – містить класи для графічного відображення (user interface);
util – допоміжні та утилітарні класи для роботи програми;
obj – класи-структури даних для логічного та зручного оперування даними.
Ім’я головного класу, класу, у якому розташована функція main –
ui.MainFrame. Оскільки в ньому є функція main він є головним класом, який
запускає програму та є її головним інтерфейсом – викликає інші програмні модулі.
Також він відповідає за початкову ініціалізацію параметрів LPT-порта та запускає
окремий поток для зчитування інформації на входах LPT-порта.
ui.UserSettingsDialog – діалог для надання користувачеві можливості
настройки параметрів роботи програми.
util.Helper – клас для зберігання статичних утилітарних методів та
глобальних констант програми.
util.Receiver – клас-поток, відповідає за прийом даних від LPT-порту;
util.Tranceiver – відповідає за передачу вихідних даних;
util.BadEvent – клас, котрий опрацьовує стандартні помилки, що можуть
виникнути під час роботи програми;
obj.Module – структура даних, що відображає роботу (інкапсулює у собі
набір властивостей та методів) модуля прийому;
obj.WeatherData – структура даних, що відображає набір метеоданих, та
містить методи по роботі з ними.
71
4.8.3 Структура програми з описом її складових частин. Головний
поток програми
В Java немає таких понять як “запис” у Pascal, або “структура” в C, тут
використовується найбільш широке, зручніше та узагальнююче поняття – клас.
Для найкращого розуміння роботи та взаємодії класів, розглянуто графічну
схему зв’язку класів – UML-діаграму класів (рис. 4.7).
Рисунок4.7– UML-діаграма класів програми
72
Конструкція JFrame frame = getMainFrame(); використовується для
запобігання запуску на даному ПК ще одної аналогічної програми, що зашкодить
її нормальній роботі:
frame = getMainFrame();
frame.show();
Ще одне вікно не відкриється. Робота йтиме з тим же самим вікном.
Такий шаблон у програмуванні носить назву Singletone, тобто завжди у
пам’яті ПК зберігається лише один екземпляр класу, що реалізує цей шаблон,
повторне звернення до нього поверне той самий екземпляр.
Алгоритм ініціалізації програми:
• завантажується конструктор класу;
• завантажується необхідний драйвер для роботи з портами
вводу/виводу com.sun.comm.Win32Driver.
• відбувається перевірка наявності на ПК портів вводу/виводу, серед
списку необхідних відбувається пошук необхідного нам LPT-порта, якщо такого
в системі не знайдено, програма видає помилку та припиняє свою роботу;
• утворюються два потоки на читання/запис у LPT-порт. У даному
випадку потоками можна вважати специфічні вказівники на області пам’яті
(регістри), які відповідають за зміст даних у LPT-порті;
• проводиться ініціалізація утилітарних класів, що відповідають за
прийом та передачу даних Receiver та Transmitter, при цьому слід зауважити, що
клас Receiver запускається у окремому потоку, що забезпечує безперервний опит
стану LPT-порта;
• задаються розміри вхідних та вихідних програмних буферів для
запису/зчитування даних;
• установлюється програма-володар порта, яка займає порт на весь час
роботи з ним;
• відбувається графічна ініціалізація програми.
73
Початкова ініціалізація на цьому закінчується. Після цього відбувається
робота користувача з графічними елементами програми (кнопками, пунктами
меню і т.і.):
а) Користувач натискає кнопку „Список активних модулей”. Визивається
функція readModulesFromFile(). При цьому відбувається наступний порядок дій:
- очищується модель списку модулів;
- завантажується з файлу Modules.properties список активних модулей, який
користувач задав перед початком функціонування програми. Слід зазначити, що
список модулей можна змінювати й під час роботи програми, слід тільки
натиснути відповідну кнопку;
- заповнюється модель списку модулів.
б) Користувач натискає кнопку „опитати модуль”, задавши попередньо
значення номеру опитуємого модуля. Викликається метод askModule(Integer
moduleNumber). При цьому відбувається наступний порядок дій:
• утворюється новий екземпляр класу Module, йому передається
вказаний номер модуля;
• номер модуля конвертується у бітову послідовність;
• за допомогою одиничного екземпляра класа Transmitter, метод
sendBytes відбувається відправка бітової послідовності на порт, при цьому
передані дані потрапляють у поток, що був про ініційований раніше, який
відповідає за передачу даних на порт;
• після цього встановлюється програмна затримка (що за умовчанням
дорівнює 10 мілісекундам та може бути змінена користувачем під час роботи
програми);
• опрошується вхідний буфер порта, якщо значення не змінилося –
викликається помилка „даний модуль не дає відповіді” у цьому випадку модуль
може бути опитаний повторно. Якщо вхідний буфер не дорівнює константі
довжини вхідного буфера, викликається помилка „помилка при отримані
відповіді”, якщо помилок немає – робимо аналіз прийнятого пакету;
74
• у вказаного об’єкта-модуля утворюється та ініціюється поле
WeatherData, при цьому робиться перевірка переданого та прийнятого номерів
модуля, якщо номери не співпадають, генерується помилка: „неспівпадання
номерів модуля”, робота при аналізі прийнятих даних немає сенсу;
• за алгоритмами, що описані у методах класу WeatherData робиться
перерахунок прийнятої перекодованої інформації з бітової послідовності у реальні
показники;
• на інформаційній панелі відображується отриманий результат.
в) Користувач натискає кнопку „опитати всі модулі”. Викликається метод
askAllModules(). При цьому відбувається наступний порядок дій:
- циклічно опитується кожний модуль, за алгоритмом, наведеним у пункті
“б”;
- якщо при опиті модуля виникають певні помилки – накопичуються у
буфер, модуль набуває признак „недійсний”;
- відображується інформація про всі модулі з признаком „дійсний”;
- відображується інформація про помилки, що виникли під час опиту усіх
модулів з указанням номеру модуля та тексту помилки.
4.9 Технічно-функціональні аспекти програми
4.9.1 Використані технічні та програмні засоби
Для розробки даної програми було використане інтегроване середовище
розробки (IDE –Integrated Development Environment ) Borland Jbuilder Х.
Версія java-машини: 1.4.2_01-b06.
Програма була розроблена та протестована на IBM-сумісному комп’ютері з
тактовою частотою процесора 5 ГГц, об’ємом оперативної пам’яті 2 Gb.
Також була використана стандартна java-бібліотека для роботи з портами
вводу/виводу java community api (JCA) версії 2.0.
75
4.9.2 Виклик та завантаження програми
Для завантаження даної програми необхідно мати встановлену на
комп’ютер java-машину, версією не нижче 1.4.2.
Програма може бути завантажена як за допомогою bat-файлу, в який у якості
параметру будуть передані шлях до файлу javaw.exe та змінна classpath (шлях до
файлу *.class – головного файлу даної програми – класу, в якому знаходиться
функція main), а також прописані шляхи до всіх бібліотек, які є необхідними для
функціонування програми.
Наприклад, для зручного запуску програми необхідно утворити такий bat-
файл:
..\..\..\jre\bin\javaw -classpath "E:\comm\comm\classes;E:\comm\lib\comm.jar”
dip.ui.MainFrame, де:
..\..\..\jre\bin\javaw – шлях до java-машини;
E:\comm\comm\classes – шлях до *.class-файлів – робочих файлів програми;
dip.ui.MainFrame – головний клас з методом main.
4.9.3 Вхідні дані для програми
Вхідними даними для програми є спеціалізовані дані, що надходять з
модулю прийому метеорологічних даних.
Вхідні дані – послідовність біт, що надходить з певною швидкістю з LPT-
порта ПК, які утворюють собою інформаційний пакет певної структури.
Також програма читає вхідну інформацію з текстових файлів, які містять
інформацію про внутрішні адреси та опис модулів збору даних, а також
тестові послідовності, що імітують сигнали-відповіді від LPT-порту для
можливості тестування тестових фрагментів інформації.
76
4.9.4 Вихідні дані
Вихідні дані програми – інформація, отримана від модуля збору
метеорологічних даних, при наявності помилок – повідомлення з інформацією про
помилку. Вихідні дані можуть бути представлені у вигляді текстового файлу, або
графічним відображенням.
Вихідні дані також можуть бути представлені у вигляді об’єктів, для їх
подальшої обробки та використання.
4.9.5 Приклад функціонування програми
Після запуску програми на екрані з’являється головне вікно, яке містить всі
необхідні компоненти для роботи з програмою. Головне вікно програми має
вигляд (рис. 4.8).
Рисунок 3.8 – Головне вікно програми
Рисунок 4.8 – Головне вікно програми
Після натиснення кнопки „Список активних модулів”, з файлу
Modules.properties завантажується список модулів, з якими програма вестиме
роботу (рис. 4.9). При цьому слід зауважити, що завантажувати нові модулі для
роботи можна й під час роботи програми, варто знову натиснути кнопку “Список
77
активних модулів”, програма зробить перезапис файлу та відображення нових
(якщо відбулися певні зміни) модулів.
Список модулів являє собою особистий номер (код модуля), який співпадає
з внутрішнім кодом самого модуля збору метеорологічних даних, та опис самого
модуля (будь-яка текстова інформація); у даному випадку – місце розташування
модуля, для більш зручного його використання.
Рисунок 4.9– Список активних модулів
Далі користувач натискає „Опитати модуль”, попередньо вказавши номер
модуля, у правому полі, який він бажає опитати.
Далі програма робить опит вказаного модуля, при цьому можливі наступні
види помилок:
• модуль, що опитується не існує в списку модулів;
• вказаний модуль не дає відповіді;
• не співпадає номер модуля (номер модуля що був відправлений, не
співпадає з прийнятим номером модуля);
• помилка у контрольній сумі (виникла помилка при передачі).
Якщо все гаразд – (не виникло жодної помилки) – на екрані буде отримано
результат опитування модуля (рис. 4.10).
78
Рисунок 4.10– Результат опитування модуля №2
Також можна опитати усі активні модулі натиснувши на кнопку “Опитати
всі модулі”, при цьому отримаємо інформацію по всіх модулях, зазначених у
списку, якщо результати опитування певного модуля не присутні на
інформаційній панелі – треба дивитися список помилок (рис. 4.11).
Рисунок 4.11 – Результат опиту усіх модулів зі списку модулів
Висновки. Дана програма є спеціалізованим програмним виробом, що
входить до складу метеорологічного комплексу.
Призначенням програми являється надання користувачеві можливості
керування метеорологічним комплексом; отримання та оперування результатами
інформації, що надходить від модулів збору метеорологічної інформації.
79
Програма призначена для встановлення на переносному персональному
комп’ютері (ноутбуці). Також можлива інсталяція і на стаціонарній
(непереносній) робочій станції.
Оскільки даний програмний продукт є спеціалізованим програмним
виробом, його призначенням є надання зручного інтерфейсу між користувачем
(оператором) та модулями збору інформації, що входять до складу
метеорологічного комплексу.
80
ВИСНОВКИ
На основі проведеного системного аналізу, встановлених залежностей
основних параметрів зарубіжних аналогів та досліджуваного пристрою в цілому,
сформованої бази визначальних параметрів мікроконтролерів сімейства
Microchip;математичні моделі мікроконтролерів надали можливість підвищити
ефективність роботи приладу прийому та обробки метеорологічних даних при
обробці інформації на основі мікроконтролерасімейства Microchip.
Для реалізації циклу обміну даними у міні-метеостанції використаний
трьохрівневий сигнал, тобто такий сигнал, у котрого є можливість виділити за
амплітудою три логічних рівня: логічний рівень “0”, логічний рівень “1” та
логічний рівень “синхронізація.
Прилад прийому та обробки метеорологічних даних складається з двох
нероздільних частин: приладу прийому метеорологічних даних до його складу
входить: прийомо-передавач та модуль попередньої обробки сигналу; прилад
збору метеорологічних даних, який містить керуючий мікроконтролер та блок
датчиків для вимірювання метеопараметрів. Дані складові міні-метеостанції та
прилад прийому та обробки метеорологічних даних подаються у вигляді
структурних схем.
Запропоноване конструкторське виконання приладу дозволяє стверджувати
про його зручність та надійність у використанні.
Технічні рішення, що були запропоновані при розробці, повністю
задовольняють вимогам, які висувалися до приладу прийому інформації та міні-
метеостанції в цілому.
Програмне забезпечення для приладу прийому та обробки метеорологічних
даних являється спеціалізованим програмним виробом, що входить до його
складу. Оскільки даний програмний продукт є спеціалізованим програмним
забезпеченням, то його призначенням є – надання зручного інтерфейсу між
користувачем (оператором) та модулями збору інформації, що входять до складу
метеорологічного комплексу.
81
Даний програмний виріб, має ряд переваг: надання користувачеві можливості
керування міні-метеостанцією; отримання та оперування метеопараметрами, що
надходять від модулів збору метеорологічної інформації; можлива інсталяція і на
стаціонарну, непереносну робочу станцію
В роботі одержані такі основні результати:
1 Проведено системний аналіз технічних параметрів метеоприладів.
2 Встановлено залежностітехнічних параметрів зарубіжних аналогів в
безрозмірних координатах.
3 Проведено аналіз визначальних параметрів мікроконтролерів
сімейства Microchip.
4 Сформовано базувизначальних параметрів мікроконтролерів
сімейства Microchip, встановлено залежності основних визначальних
параметрівмікроконтролерів в безрозмірних координатах.
5 Практично доведено, що в мікроконтролері PIC16C54C якісні
показники дозволяють вводити додаткові схемотехнічні рішення, що
розширюють функції та можливості метеоприладу.
Практична значимість одержаних результатів.
На основі наукових досліджень запропоновані такі інженерні рішення:
– структурні схеми модулю попередньої обробки сигналу, модулю
збору метеорологічних даних та метеорологічного комплексу в цілому;
– принципово-електричні схеми пристрою прийому та обробки
метеоданих тапідключення датчиків до мікроконтролера PIC16C54C.
Наукова новизна отриманих результатів полягає в наступному:
1. Проведений системний аналіз існуючих метеоприладів та їх основних
параметрів.
2. Встановлені залежності визначальних параметрів мікроконтролерів,
82
відмінною особливістю, яких є наглядність, що дозволяє легко варіювати їх
величини.
3. Створені математичні моделі та визначені на основі їх апроксимаційні
поліноми N-го порядку, що на практичному рівні підтверджує правильність
вибору мікроконтролера.
Область застосування приладу – радіочастотне, високоточне вимірювання
та прийом спеціалізованих даних для подальшої обробки від приладів
автономного збирання метеорологічних даних, а також при проведенні перевірки,
калібрування, випробувань і метеорологічної атестації засобів вимірювання
температури, атмосферного тиску, вологості повітря та ін. Метеовеличини
отриманні за допомогою даної міні-метеостанції можуть бути використанні для
створення більш точного прогнозу погоди.
Сфера застосування – даний прилад має широкий спектр застосування та
являється універсальним; метеорологічний комплекс орієнтований на
використання в метеорології, для екологічного моніторингу, науково-
дослідницьких, та навчальних закладів, курортів, будинків відпочинку,
туристичних баз, та в сільському господарстві, також має не оцінене значення при
побутовому використанні.
Результати досліджень і розробок знайшли застосування у навчальному
процесі в дисциплінах: “Проектування вбудованих комп’ютерних систем”,
“Дослідження і проектування спеціалізованих комп’ютерних систем ”, “Основи
наукових досліджень”, “Напрямки досліджень і розвитку спеціалізованих
комп’ютерних систем” та “Основи теорії передачі даних і сигналів”.
Перспективи даного дослідження та подальший розвиток за даним
напрямком:
В теперішній час ведеться робота по вдосконаленню як функціональних
вузлів даної міні-метеостанції, так і програмного забезпечення для неї в цілому.
83
СПИСОК ВИКОРИСТАНИХ ЛІТЕРАТУРНИХ ДЖЕРЕЛ
1 Антонов А.В. Системный анализ. — К. 2004. — 454 с.
2 Бахвалов Н.С., Жидков Н.П., Кобельков Г.М. Численные методы.
2003.
3 Бойко В.І., Жуйков В.Я. Схемотехніка електронних систем. Цифрова
схемотехніка. 2-ге вид., допов. і переробл. – К.:, 2004. – 423 с.
4 Волкова В.Н., Денисов А.А. Теория систем: Учебник для студентов
вузов. — К. 2006. — 511 с.
5 Гайдес М.А., Общая теория систем (системы и системный
анализ). — Винница: Глобус-пресс, 2005. — 201 с.
6 Грушка І.Г. Методи і засоби експрес-контролю метеорологічних
умов// Праці УкрНДГМІ. –1998. – Вип. 246. – С. 151-165.
7 Грушка І.Г. Нові методи і засоби метеорологічних вимірювань і
питання гідрометеорологічного забезпечення// Матеріали наради-семінару
“Обмін досвідом гідрометеорологічного забезпечення у сучасних умовах”, Ялта,
15-20 жовтня 2001 р. – Київ: 201701. – С. 43-54.
8 Грушка І. Г., Грушка Я.І. Блок датчиків вологості та температури. G01
N27/02, G 01 N 25/56, заявки № РСТ/UA2005/000009 від 02.03.2005 та
№20044011597 від 04.03.2004.
9 Грушка І. Г., Грушка Я.І. Спосіб вимірювання електричної ємності,
індуктивності та вологості і пристрій для його здійснення (варіанти).001 N 22/00,
27/02, 27/12/ 27/22, № 200500714 від 26.01.2005.
10 Грушка И.Г. Измеритель климатических факторов ИПП-1 // Киевское
отделение УкрНИИНТИ – 1987. – 4с.
11 Грушка И. Г., Калинин Ю. И., Грушка Г. Г. и др. Способ
определениявлажности материалов. G 01 N 27/02, А. С. 1695209 : Бюлл. изобрет.
– 1991. – № 44, 30.11.1991.
12 ГукМ.О.“Аппаратные средства. 1999. - 816 с.
84
13 Ивановский Р. И. “Компьютерные технологии в науке и образовании.
Практика применения систем Mathcad 7.0 Pro, Mathcad 8.0 Pro и Mathcad 2000
Pro: Учебное пособие. ”— СПб.: Изд-во СПбГТУ, 2000.— 201 с.
14 Красюк О.П., Кондратюк І.О. “Побудова та застосування
метеорологічних комплексів”. – Львів: АСВ, 2009. – 166 с.
15 Лукашенко В.М., Баранов А.Г., Шеховцов Б.А. Анализ параметров
координатно-измерительных машин методами теории неполного подобия и
размерностей // Тр.1-ої Міжнародної конференції «Наука і освіта - 98». – Том 3. –
Дніпропетровськ : Наука і освіта. – 1998. – с. 106.
16 Лукашенко В.М. Критериальные зависимости для выбора
оптимальных параметров коммутаторов // Вісник ЧІТІ. – 2000. - №3. – с. 65-70.
17 Носач В.В. Решение задач аппроксимации с помощью персональных
компьютеров. – К. 1994. - 332 с.
18 Прокопенко Б. Я. “Микроконтроллеры. Выпуск 2 :Однокристальные
микроконтроллеры”. – К.: ДОДЭКА, 2000.- 336 с.
19 Системні дослідження в науці і техніці. Частина І. Методологія
наукових досліджень. Черкаси, ЧДТУ, 2006. Бібліотечка НТЖ «Вісник ЧДТУ».
20 Системні дослідження в науці і техніці. Частина ІІ. Технологія
наукових досліджень. Черкаси, ЧДТУ, 2006. Бібліотечка НТЖ «Вісник ЧДТУ».
21 Скороделов В.В. “Особенности проектирования МКУ и архитектура
микроконтроллеров PIC” - Харков, 1999. – 234с.
22 Тимченко А.А. “Основи системного проектування та системного
аналізу складних об'єктів (у двох книгах)”. "Либідь", Київ, 2000.
23 Яземський О.С. “Основи економічного аналізу” К.: 1998.
85
Додаток А
Лістинг програми
Клас ui.MainFrame
package dip.ui;
//Підключення необхідних класів та пакетів
import javax.swing.*;
import java.awt.*;
import java.awt.Color;
import javax.comm.CommDriver;
import javax.comm.CommPortIdentifier;
import java.util.Enumeration;
import javax.comm.ParallelPort;
import java.io.OutputStream;
import java.io.*;
import javax.comm.*;
import dip.util.*;
import java.awt.event.ActionEvent;
import dip.obj.Module;
import dip.obj.WeatherData;
import javax.swing.table.DefaultTableModel;
import java.util.ResourceBundle;
import java.util.ArrayList;
import java.util.Locale;
import java.util.PropertyResourceBundle;
public class MainFrame extends JFrame implements ParallelPortEventListener,
CommPortOwnershipListener{
//ініціалізація полей класу
private JMenuBar mainMenu = new JMenuBar();
private JSplitPane split = new JSplitPane();
private JPanel leftPanel = new JPanel();
private JPanel rightPanel = new JPanel();
private UserSettingsDialog settingsDialog=new UserSettingsDialog(this);
private JTable table = new JTable();
private Object [] tableColumnNames=new Object[]{"№ мод", "Т-ра (\u25E6C)",
"Тиск(мм.рт.ст.)", "Напр. вітру", "Сила вітру(м/с)"};
private DefaultTableModel tableModel = new
DefaultTableModel(null,tableColumnNames);
private JList list = new JList();
private DefaultListModel listModel = new DefaultListModel();
private JScrollPane scrollTable = new JScrollPane();
private JScrollPane scrollList = new JScrollPane();
private static JFrame mainFrame = null;
86
private JButton activeModulesListButton = new JButton("Список активних модулів");
private JButton askAllModulesButton = new JButton("Опитати всі");
private JButton askModuleButton = new JButton("Опитати модуль");
private JButton settingsButton = new JButton("Настройки");
private JSpinner moduleNumberSpinner = new JSpinner();
private ParallelPort ourParallelPort = null;
private Transmitter transmitter = null;
private Receiver receiver = null;
private ArrayList activeModules = new ArrayList();//список активних модулів
private MainFrame() {
initData();
try {
jbInit();
this.setSize(600, 400);
this.setTitle("Прийом та обробка метеорологічних даних");
// this.pack();}
catch(Exception ex)
{JOptionPane.showMessageDialog(this, "Ошибка инициализации данных");
ex.printStackTrace();}}
public static JFrame getMainFrame()
{if (mainFrame != null) return mainFrame;
mainFrame = new MainFrame();
return mainFrame;}
void jbInit() throws Exception
{//ініціалізація графічного інтерфейсу
this.setJMenuBar(mainMenu);
mainMenu.add(new JMenu("Файл"));
JMenu settingsMenu = new JMenu("Настройки");
mainMenu.add(settingsMenu);
JMenuItem settingsItem = new JMenuItem("Настройки");
settingsMenu.add(settingsItem);
settingsItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
settingsDialog.show();}});
leftPanel.setLayout(new BorderLayout());
rightPanel.setLayout(new GridBagLayout());
this.getContentPane().add(split);
split.add(leftPanel, JSplitPane.LEFT);
leftPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBo
rder(Color.green,Color.blue),"Інформаційна панель"));
split.add(rightPanel, JSplitPane.RIGHT);
split.setDividerLocation(200);
leftPanel.add(scrollTable);
87
scrollTable.getViewport().add(table);
rightPanel.add(scrollList,newGridBagConstraints(0,0,2,1,1.0,1.0,
GridBagConstraints.NORTH, GridBagConstraints.BOTH, new Insets(3,3,3,3),0,0));
scrollList.getViewport().add(list);
scrollList.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedB
order(Color.green,Color.blue),"Список модулів"));
rightPanel.add(activeModulesListButton, new GridBagConstraints(0,1,2,1, 0.0,0.0,
GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL, new Insets(3,3,3, 3), 0,
0));
rightPanel.add(askAllModulesButton, new GridBagConstraints(0,2,2,1,0.0,0.0,
GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL, new Insets(3,3,3,3),0,
0));
rightPanel.add(askModuleButton, new GridBagConstraints(0,3,1,1,0.0,0.0,
GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL, new Insets(3,2,3,2),0,
0));
rightPanel.add(moduleNumberSpinner, new GridBagConstraints(1,3,1,1,0.0,0.0
,GridBagConstraints.NORTH, GridBagConstraints.NONE, new Insets(3,0,3,0),0, 5));
moduleNumberSpinner.setModel(new SpinnerNumberModel(0,0,255,1));
table.setModel(tableModel);}
void initData()
{try
{//ініціалізація драйверу для роботи з портом
String drivername = "com.sun.comm.Win32Driver";
Class.forName(drivername);
CommDriver driver = (CommDriver) Class.forName(drivername).newInstance();
driver.initialize();}
catch (Exception ee) {
ee.printStackTrace();}
CommPortIdentifier portIdentifier;
Enumeration portList = CommPortIdentifier.getPortIdentifiers();//отримання спису
портів вводу/виводу
while (portList.hasMoreElements()) {
portIdentifier = (CommPortIdentifier) portList.nextElement();
if (portIdentifier.getPortType() == CommPortIdentifier.PORT_PARALLEL)
{System.out.println("Found Parralel Port :" + portIdentifier.getName());
if (portIdentifier.getName().equals("LPT1")) {//знаходимо потрібний для роботи порт
try
{ourParallelPort = (ParallelPort) portIdentifier.open("APP", 2000);//”відкриваємо
порт для подальшої роботи”}
catch (PortInUseException ex)
{ BadEvent.throwCriticalEvent(ex, this, "LPT-порт занят");}
OutputStream out = null;
try
88
{out = ourParallelPort.getOutputStream();//отримання потоку на запис
ourParallelPort.setOutputBufferSize(Transmitter.PACKAGE_SIZE);}
catch (IOException ex)
{BadEvent.throwCriticalEvent(ex, this, "Ошибка при инициализации LPT-порта для
записи данных");
ourParallelPort.close();}
catch (NullPointerException ex)
{System.out.println("ERROR: OutPutStream could not be Created.");
ourParallelPort.close();}
InputStream in = null;
try
{ourParallelPort.setInputBufferSize(Receiver.PACKAGE_SIZE);}
catch (NullPointerException ex)
{System.out.println("ERROR: OutPutStream could not be Created.");
ourParallelPort.close();}
//клас для роботи з портом на запис
transmitter = Transmitter.getInstance();
transmitter.setOut(out);
transmitter.setOwner(this);
transmitter.setParallelPort(ourParallelPort);
//клас для роботи з портом на читання
receiver = Receiver.getInstanse();
receiver.setIn(in);
receiver.setOwner(this);
receiver.setParalellPort(ourParallelPort);
new Thread(receiver).start();
//задаємо прослуховувачі на кнопки
askModuleButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
Integer moduleNumber = (Integer)moduleNumberSpinner.getValue();
boolean show = false;
if (activeModules != null)
{for (int i = 0; i < activeModules.size(); i++) {
Module m = (Module)activeModules.get(i);
if (m.getModuleNumber().intValue() == moduleNumber.intValue())
{show = true; break;}}}
if (show) askModule(moduleNumber); else
{JOptionPane.showMessageDialog(MainFrame.this, "Модуля с таким номером не
существует ");}}});
askAllModulesButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
askAllModules();}});
activeModulesListButton.addActionListener(new java.awt.event.ActionListener() {
89
public void actionPerformed(ActionEvent e) {
readModulesFromFile();}});}
public void parallelEvent(ParallelPortEvent parallelPortEvent){}
public void ownershipChange(int type){}
void askModule(Integer moduleNumber)
{Module module = new Module(moduleNumber);
module.sendModuleNumber();
if (Helper.TEST_MODE)//якщо режим тестовий,засилаємо у порт певну послідовність
{byte[] bb = Helper.testStringIntoBytes(moduleNumber.intValue());
Transmitter t = Transmitter.getInstance();
t.writeTestQuerysendBytes(Helper.integerToBytes(bb);}
try { Thread.sleep(Helper.WaitForResponceInMilis); } catch (InterruptedException
ex) { }
//відправили повідомлення. Тепер чекаємо
byte[] answer = receiver.getBuffer();//отримуємо буфер через певний проміжок часу.
try
{module.createWeatherData(answer);//утворюємо дані пропогоду}
catch (Exception ex)
{JOptionPane.showMessageDialog(this, ex.getMessage());
return;}
WeatherData wethData = module.getWeatherData();
if (wethData.checkSrc() == true)
{drowOneModule(module);//якщо контрольна сума збіглася – рисуємо.}
else
{JOptionPane.showMessageDialog(this, "Ошибка контрольной суммы");}}
private void askAllModules()
{ArrayList modulesToDraw = new ArrayList();
String errStr = "";
if (activeModules == null || activeModules.size() == 0)//якщо список модулів
порожній
{JOptionPane.showMessageDialog(this, "Список активных модулей пуст");
return;}
System.err.println("Всего модулей: "+activeModules.size());
for (int i = 0; i < activeModules.size(); i++)//опитуємо всі модулі
{Module currentModule = (Module)activeModules.get(i);//звернення до поточного
currentModule.sendModuleNumber();//запитуємо певний модуль
try { Thread.sleep(Helper.WaitForResponceInMilis); } catch (InterruptedException
ex) { }
if (Helper.TEST_MODE)//якщо режим тестовий, засилаємо у порт певну послідовність
{byte[] bb = Helper.testStringIntoBytes(moduleNumber.intValue());
Transmitter t = Transmitter.getInstance();
t.writeTestQuery(Helper.integerToBytes(bb);}
if (bb == null)
90
{errStr += "Модуль № "+currentModule.getModuleNumber()+" не даёт ответ\n";
continue;//якщо помилка – перериваємо обробку модуля}
try { Thread.sleep(Helper.WaitForResponceInMilis); } catch (InterruptedException
ex) { }
byte[] answer = receiver.buffer;//отримуємо буфер через певний проміжок часу
try
{currentModule.createWeatherData(answer);}
catch (Exception ex) {
System.err.println("Несовпадение");
errStr += "Модуль № "+currentModule.getModuleNumber()+" Несовпадение номера
модуля\n";
continue;}
WeatherData wethData = currentModule.getWeatherData();
if (wethData.checkSrc() == true)
{modulesToDraw.add(currentModule);//додаємо до списку відних модулів}
else
{errStr += "Модуль № "+currentModule.getModuleNumber()+" Ошибка контрольной
суммы\n";
continue;// якщо помилка – перериваємо обробку модуля}}
drowModules(modulesToDraw);
if (errStr.length() > 0) JOptionPane.showMessageDialog(this, errStr);}
private void drowOneModule(Module module)// прорисовка даних про один модуль
{System.err.println(""+module.getWeatherData().getRealTemperature());
System.err.println(""+module.getWeatherData().getRealPresure());
Object[][] objectData = new Object [][]{
{module.getModuleNumber(),
module.getWeatherData().getRealTemperature(),
module.getWeatherData().getRealPresure(),
module.getWeatherData().getRealWindDirection(),
module.getWeatherData().getRealWindPower()}};
tableModel = new DefaultTableModel(objectData, tableColumnNames);
table.setModel(tableModel);}
//рисуємо відразудекілька модулів
private void drowModules(ArrayList modules)
{Object [][] objectData = new Object[modules.size()][5];
for (int i = 0; i < modules.size(); i++)
{Module m = (Module)modules.get(i);
objectData[i][0] = m.getModuleNumber();
objectData[i][1] = m.getWeatherData().getRealTemperature();
objectData[i][2] = m.getWeatherData().getRealPresure();
objectData[i][3] = m.getWeatherData().getRealWindDirection();
objectData[i][4] = m.getWeatherData().getRealWindPower();}
tableModel = new DefaultTableModel(objectData, tableColumnNames);
91
table.setModel(tableModel);}
//читаємо з файлу список активних модулів
private void readModulesFromFile(){
listModel.clear();
ResourceBundle bundle = null;
bundle = ResourceBundle.getBundle("m"/*, new Locale("ru", "RU")*/);
Enumeration modules = bundle.getKeys();
while (modules.hasMoreElements()) {
Integer moduleNumber = new Integer(modules.nextElement()+"");
String moduleDescription = bundle.getString(moduleNumber + "");
Module module = new Module(moduleNumber, moduleDescription);
activeModules.add(module);
listModel.addElement(module);}
list.setModel(listModel);}
public ParallelPort getParalellPort(){return ourParallelPort;}
public static void main(String[] args)
{JFrame frame = getMainFrame();
frame.show();}}
Клас ui.UserSettingsDialog
package dip.ui;
//імпорт необхідних пакетів
import java.awt.*;
import javax.swing.*;
//поля класу
private JButton okButton = new JButton();
private JButton cancelButton = new JButton();
private JTextField waitForResponseFld = new JTextField();
private JCheckBox isTestModuleCheck = new JCheckBox();
public class UserSettingsDialog extends JDialog {
public UserSettingsDialog(Frame owner) {
super(owner, "Настройки користувача", true);
try
{jbInit();
pack();}
catch(Exception ex) {
ex.printStackTrace();}}
//відображення графічного стану діалогу
private void jbInit() throws Exception {
this.getContentPane().setLayout(new FlowLayuout());
this.getContentPane().add(new JLabel("Тестовый режим"));
this.getContentPane().add(isTestModuleCheck);
this.getContentPane().add(new JLabel("Время ожидания милисекунд"));
this.getContentPane().add(waitForResponseFld);
92
this.getContentPane().add(cancelButton);
this.getContentPane().add(okButton);
//додаємо необхідні прослуховувачі
okButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
Helper.WaitForResponceInMilis = new
Integer(waitForResponseFld.getText());//затримка для чекання
Helper.TEST_MODE = isTestModuleCheck.isSelected();//вибір режиму роботи з
програмою}});
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
this.setVisible();}});}}
Клас util.BadEvent
package dip.util;
import java.awt.Component;
import javax.swing.JOptionPane;
public class BadEvent//власні оброблювачі помилок
{public static void throwCriticalEvent(Exception ex, Component sourse, String
message)
{ex.printStackTrace();
JOptionPane.showMessageDialog(sourse, message);
System.exit(0);//у разі критичної помилки – виходимо з програми}
public static void throwNonCriticalEvent(Exception ex, Component sourse, String
message)
{ex.printStackTrace();
JOptionPane.showMessageDialog(sourse, message);//у разі помилки видаємо
повідомлення}}
Клас util.Helper
package dip.util;
import java.util.ResourceBundle;
import java.util.StringTokenizer;
public class Helper {
public static int WaitForResponceInMilis = 10;//очикування відповіді
public static int syncroTime = 10000;//тривалість синхроімпульсу
public static int dataTime = 40000;//тривалість інформаційного рівня сигналу
public static boolean TEST_MODE = false;//наявність тестового режиму
public static byte[] integerToBytes(int number)
{byte [] bytes = new byte [16];
String str01 = Integer.toBinaryString(number);
int length = 16-str01.length();
for (int i = 0; i < length; i++) {
str01="0"+str01;//дописуємо (якщо необхідно) послідовність нулів}
for (int i = 0; i < str01.length(); i++)
93
{bytes[i] = Byte.parseByte(str01.substring(i, i+1));
System.err.print(""+bytes[i]);}
System.err.println("");
return bytes;}
public static byte [] testStringIntoBytes(int moduleNumber)
{ResourceBundle bundle = ResourceBundle.getBundle("TestValues");
byte [] bytes = new byte[Receiver.PACKAGE_SIZE];
String valueDigits = "";
try
{valueDigits = bundle.getString(moduleNumber + "");}
catch (Exception ex) {return null;}
StringTokenizer token = new StringTokenizer(valueDigits);
int k = 0;
int tokenCount = 0;
while (token.hasMoreTokens()){
Integer value = new Integer(token.nextToken());//розбір тестової строки
byte [] b = integerToBytes(value.intValue());
for (int i = 0; i < b.length ; i++)
{// System.err.println("i+k="+(i+k)+" i="+i+" k="+k+"
moduleNumber="+moduleNumber);
bytes[i+k] = b[i+1];//для подачі відповідних сигналів на DR0, DR1}
k = k+16;
tokenCount++;
if (tokenCount > 7) break;//перевірка, якщо проаналізували тестову строку}
// for (int i = 0; i < bytes.length; i++) {
// System.err.print(bytes[i]);
//}
return bytes;}
public static void main(String[] args) {
// integerToBytes(255);
testStringIntoBytes((byte)2);}}
Клас util.Receiver
package dip.util;
import java.io.*;
import javax.swing.JFrame;
import javax.comm.ParallelPort;
public class Receiver extends Thread{//даний клас є потоком
public static final int PACKAGE_SIZE = 1;//размер читаемого пакета
private InputStream in = null;
private ParallelPort parallelPort = null;
private JFrame owner = null;
private static Receiver receiver = null;
public byte [] buffer = new byte [PACKAGE_SIZE];//вхідний буфер даних
94
private int startCounter = 0;
public int counter = 0;
private Receiver()
{}
public static Receiver getInstanse()//тримаємо лише один активний екземпляр класу
{if (receiver.isAlive()) return receiver;
receiver = new Receiver();
return receiver;}
private byte readByte()//читання байту (біту) з паралельного порту
{byte b = 0;
if (parallelPort.isPaperOut())//якщо є синхроімпульс
{b = (parallelPort.isBusy()) ? 1 : 0;//читаємо
parallelPort.setPaperOut(true);//скидуємо сигнал синхроімпульсу}
return b;}
public void run()
{while (true) {
byte currentByte = 0;
currentByte = readByte();
if (currentByte == 1) startCounter++;
else startCounter = 0;
if (startCounter == 7) {//якщо пройшла стартова послідовність
buffer[counter++] = b;
if (counter == PACKAGE_SIZE) {//якщо буфер повний
this.interrupt();}
try
{Thread.sleep(0, 100);//затримка у 0,1 мкс для звільнення процесорного часу}
catch (InterruptedException e) {}}}}
public void setIn(InputStream in) {
this.in = in;}
public JFrame getOwner() {
return owner;}
public void setOwner(JFrame owner) {
this.owner = owner;}
public void setParalellPort(ParallelPort parallelPort) {
this.parallelPort = parallelPort;}
public byte [] getBuffer() {return buffer;}}
Клас util.Transmitter
package dip.util;
import javax.comm.ParallelPortEventListener;
import javax.comm.CommPortOwnershipListener;
import javax.comm.ParallelPortEvent;
import java.io.OutputStream;
import javax.comm.ParallelPort;
95
import java.io.*;
import javax.swing.JOptionPane;
import javax.swing.JFrame;
public class Transmitter {
private static Transmitter transmitter = null;
private JFrame owner = null;
private OutputStream out = null;
private ParallelPort parallelPort = null;
public static final int PACKAGE_SIZE = 8;//довжина пакету, що посилається
public static final int SYNCROCOUNT = 8;//кількість підзаряжувальних
синхроімпульсів
public static Transmitter getInstance()//маємо лише один екземпляр класу
{if (transmitter != null) return transmitter;
transmitter = new Transmitter();
return transmitter;}
private Transmitter()
{}
public OutputStream getOut() {
return out;}
public void setOut(OutputStream out) {
this.out = out;}
public void sendBytes (byte [] byte01)
{doStartQuery();//спочатку передаємо стартову послідовність
for (int i = 0; i < byte01.length ; i++)
sendByte(byte01[i]);}
private void sendByte(byte b)
{try
{this.getOut().write(b);//запис до відповідного регістру
try { Thread.sleep(0, Helper.dataTime); } catch (InterruptedException ex) {
}//встановлюємо затримку
sendSyncro();//посилаємо синхроімпульс}
catch (IOException ex)
{ex.printStackTrace();
System.err.println("Не могу записать в параллельный порт!");}}
private void sendSyncro()
{this.parallelPort.setInputSelect(true);//встановлюємо сигнал
try { Thread.sleep(0, Helper.syncroTime); } catch (InterruptedException ex) {
}//затримка
this.parallelPort.setInputSelect(false);//скидаємо сигнал}
private void doStartQuery()
{for (int i = 0; i < 8; i++)//спочатку синхроімпульси
sendByte((byte)0);
for (int i = 0; i < 8; i++)//потім – послідовність «одиниць»
96
sendByte((byte)1);}
private void writeTestQuery(byte [] testBytes)
{if (testBytes.length != Receiver.PACKAGE_SIZE + 8)
{ System.err.println("Неспівпадання довжини пакету");
return;}
for (int i = 0; i < testBytes.length; i++)
{parallelPort.setPaperOut(testBytes[i]==2);//пишемо «1» якщо 2, інакше – «0»
try { Thread.sleep(0, Helper.dataTime); } catch (InterruptedException ex) { }
parallelPort.setPaperOut(false);
//задання синхроімпульсу
parallelPort.setPaperOut(true);
try { Thread.sleep(0, Helper.syncroTime); } catch (InterruptedException ex) { }
parallelPort.setPaperOut(false);}}
public JFrame getOwner() {
return owner;}
public void setOwner(JFrame owner) {
this.owner = owner;}
public void setParallelPort(ParallelPort parallelPort) {
this.parallelPort = parallelPort;}}
Клас obj.WeatherData
package dip.obj;
import dip.util.Helper;
public class WeatherData
{private int temperature = 0;
private int presure = 0;
private int wind1 = 0;
private int wind2 = 0;
private int wind3 = 0;
Double realTemperature ;//температура
Integer realPresure ;//тиск
Double realWindDirection ;//напрямок вітру
Double realWindPower ;//сила вітру
int src = 0;
public int moduleNumber = 0;
byte [] bTemperature = new byte[16];
byte [] bPresure = new byte[16];
byte [] bWind1 = new byte[16];
byte [] bWind2 = new byte[16];
byte [] bWind3 = new byte[16];
byte [] bSrc = new byte[16];
byte [] bModuleNumber = new byte[8];
byte [] receivedBytes ;
public WeatherData(byte [] receivedBytes)
97
{this.receivedBytes = receivedBytes;
initValues();}
private void initValues()//аналіз прийнятої послідовності
{for (int i = 0; i < receivedBytes.length; i++)
{receivedBytes[i]+=Receiver.PACKAGE_SIZE;
if (i>=0 && i<=7) bModuleNumber[i] = receivedBytes[i];
if (i>=8 && i<=23) bTemperature[i-8] = receivedBytes[i];
if (i>=24 && i<=39) bPresure[i-24] = receivedBytes[i];
if (i>=40 && i<=55) bWind1[i-56] = receivedBytes[i];
if (i>=56 && i<=71) bWind2[i-72] = receivedBytes[i];
if (i>=72 && i<=87) bWind3[i-72] = receivedBytes[i];
if (i>=88 && i<=103) bSrc[i-104] = receivedBytes[i];}
moduleNumber = Integer.parseInt(new String(bModuleNumber), 2);
temperature = Integer.parseInt(new String(bTemperature), 2);
presure = Integer.parseInt(new String(bPresure), 2);
wind1= Integer.parseInt(new String(bWind1), 2);
wind2 = Integer.parseInt(new String(bWind2), 2);
wind3 = Integer.parseInt(new String(bWind3), 2);
src = Integer.parseInt(new String(bSrc), 2);
reliveValues();}
public void reliveValues()
{if (checkSrc())
{if (temperature > 61440)//1111 0000 0000 0000 якщо мінусова температура
{temperature = temperature << 4;
temperature = 0 - temperature;}
realTemperature = new Double(temperature/16);
realPresure = new Integer(presure);
double w1, w2,w3, s1,s2;
w1 = windFunction(wind1);
w2 = windFunction(wind2);
w3 = windFunction(wind3);//обчислення показників за формулою
s1=w1*Math.cos(Math.pi*0)+w2*Math.cos(Math.pi*(-
2/3))+w2*Math.cos(Math.pi*(2/3));//a1+a2+a3
s2=w1*Math.sin(Math.pi*0)+w2*Math.sin(Math.pi*(-
2/3))+w2*Math.sin(Math.pi*(2/3));//b1+b2+b3
realWindPower = new Double(Math.sqrt(s1*s1+s2*s2));//знаходимо силу вітру
realWindDirection = new Double(Math.arctg(s2/s1));// та напрямок}}
private double windFunction(double chastota)
{if (chastota > 2) /обчислення показників за формулою
return (double)(1.614878*Math.sqrt(198.304-49.5759*f*f));
else return (double)(1.614878*Math.sqrt(49.5759*f*f-198.304));}
public boolean checkSrc()
98
{return (src == (temperature ^ presure ^ windPower ^ windDirection));//перевірка
контрольної суми}
public Integer getRealPresure() {
return realPresure;}
public Double getRealTemperature() {
return realTemperature;}
public Integer getRealWindDirection() {
return realWindDirection;}
public Double getRealWindPower() {
return realWindPower;}
public void setRealPresure(Integer realPresure) {
this.realPresure = realPresure;}
public void setRealTemperature(Double realTemperature) {
this.realTemperature = realTemperature;}
public void setRealWindDirection(Integer realWindDirection) {
this.realWindDirection = realWindDirection;}
public void setRealWindPower(Double realWindPower) {
this.realWindPower = realWindPower;}
public static void main(String[] args) {
System.err.println(55^144^85^10);
System.err.println(48^93^15^78);
System.err.println(255^13^2^7);
System.err.println(77^66^34^32);
System.err.println(217^207^105^35);
System.err.println(56^199^201^124);
System.err.println(43^14^1^91);
System.err.println(165^222^15^204);
System.err.println(8^92^104^6);
System.err.println(31^101^206^6);
System.err.println(13^17^19^23);
System.err.println(57^75^209^200);
System.err.println(78^232^223^206);
System.err.println(5^0^85^5);
System.err.println(2^7^0^6);}}
Клас obj.Module
package dip.obj;
import dip.util.Transmitter;
import dip.util.Helper;
import javax.swing.JOptionPane;
public class Module
{private Integer moduleNumber = null;//номер модуля
private String moduleDescription = null;//його опис
private WeatherData weatherData;//показники з модуля
99
public Module(Integer moduleNumber)
{setModuleNumber(moduleNumber);}
public Module(Integer moduleNumber, String moduleDescription)
{setModuleNumber(moduleNumber);
this.moduleDescription = moduleDescription;}
public Integer getModuleNumber() {
return moduleNumber;}
public void setModuleNumber(Integer moduleNumber) {
this.moduleNumber = moduleNumber;}
public void sendModuleNumber()//посилка номера модуля (запит)
{Transmitter t = Transmitter.getInstance();
t.sendBytes(Helper.integerToBytes(this.moduleNumber.intValue()));}
public void createWeatherData(byte [] recivedBytes)throws Exception
//побудова екземпляру класу даних про погоду WeatherData – дані, отримані з модуля
{this.weatherData = new WeatherData(recivedBytes);
if (weatherData.moduleNumber != getModuleNumber().intValue())
throw new Exception("Несовпадение номера модуля");}
public WeatherData getWeatherData() {
return weatherData;}
public String getModuleDescription() {
return moduleDescription;}
public void setModuleDescription(String moduleDescription) {
this.moduleDescription = moduleDescription;}
public String toString(){
return getModuleNumber()+"("+getModuleDescription
}}