МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
“ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”
Кафедра “обчислювальна техніка та програмування”
Затверджую :
Завідуючий кафедрою “ОТП”
______________ xxxxx.
“___”________________ 2005р
Прилад прийому та обробки метеорологічних даних
Опис програми
Лист затвердження
xxxxxxx99092-00-13 ЛЗ
Розробники:
Керівник проекту:
проф. xxxx
“___”_________2005р
Виконавець:
xxxxx.
“___”_________2005р
Харків 2005
ЗАТВЕРДЖЕНО
xxxxx 99092-13 ЛЗ
Прилад прийому та обробки метеорологічних даних
Опис програми
xxxxxxx 99092-00-13
Листів 10
Харків 2005
Анотація
У дипломному проекті виконана розробка приладу прийому і обробки інформації, який є однією з головних частин метеорологічного комплексу.
У ході виконання розробки приладу реалізовані протокол обміну даними між модулями збору інформації та приладом прийому за допомогою високочастотного радіозв’язку; протокол передачі отриманих даних до персонального комп’ютера для їх зручного використання та подальшої спеціалізованої обробки. Керуюча програма для персонального комп’ютера реалізує графічний інтерфейс та ряд функцій при роботі користувача з метеокомплексом.
До складу конструкторської документації входять пояснювальна записка, принципові та функціональні схеми приладу та окремих його вузлів. У програмну документацію включені текст, опис та алгоритми керуючої програми.
Аннотация
В дипломном проекте выполнена разработка прибора приема и обработки информации, который является одной из основных частей метеорологического комплекса.
В ходе выполнения разработки прибора реализованы протокол обмена данными между модулями сбора информации и прибором приема с помощью высокочастотной радиосвязи; протокол передачи полученных данных персональному компьютеру для их удобного использования и дальнейшей специализированной обработки. Управляющая программа для персонального компьютера реализует графический интерфейс и ряд функций при работе пользователя с метеокомплексом.
В состав конструкторской документации входят пояснительная записка, принципиальные и функциональные схемы прибора и отдельных его узлов. В программную документацию включены пояснительная записка, текст, описание и алгоритмы управляющей программы.
Annotation
In the degree work the development of receive-processing information device is implemented, which is the main part of weather-station.
During the device developing, data exchange protocol between gathering module and receive device with high-frequency wireless are relised; the recived data transmission protocol to personal computer for sufficient using and specialized handling are relised. The control program for personal computer realizes graphical interface and other functions during the operator’s work.
The explanatory note, principal and functional device circuits, part-device circuits are part of constructor documentation. The explanatory note, control-program sources, control-program description, algorithms, are included to program documentation.
Зміст
1 Функціонально-логічні аспекти програми
1.1 Функціональне призначення програми
1.2 Опис логічної структури програми
1.3 Структура програми з описом її складових частин. Головний поток програми
2 Технічно-функціональні аспекти програми
2.1 Використані технічні та програмні засоби
2.2 Виклик та завантаження програми
2.3 Вхідні дані для програми
2.4 Вихідні дані
2.5 Приклад функціонування програми
Вступ
У різних галузях народного господарства досить часто виникає необхідність мати певне уявлення про характеристику погодних умов на певній, досить невеликій ділянці місцевості, це може бути використано у статистичних, інформативних, синоптичних цілях.
При цьому головними вимогами, що висуваються до цієї інформаціі про погодні умови є:
оперативність збору, а отже доцільність інформації;
мінізація технічних та матеріальних засобів для її отримання;
зручнічть у використанні та мобільність технічних засобів збору інформації;
точність інформації, що надходить, тощо.
Тому для реалізації всих цих вимог потрібен комплекс збору метеорологічних даних, далі – комплекс, до складу якого належіть прилад, що розроблюється – „прилад прийому метеорологічних даних”, далі – прилад.
Звичайні метеорологічні станції не завжди можуть бути корисними: по-перше, збирання метеорологічних даних (тих або інших метеопоказників) є узагальнюючим; по-друге, вони є стаціонарними, тобто розташовані на певних ділянках місцевості; по третє, не всі ділянки земної поверхні знаходяться у зонах дії метеорологічних станцій.
Серед галузей використання комплексу можна насамперед виділити наступні:
— сільське господарство – необхідна швидка та точна інформація щодо температури, вологості повітря та ін. для термінового проведення (або відкладення проведення) сільськогосподарських робіт – пахота, засівання, збір врожаю, тощо;
— проведення розважальних та тренувальних заходів (наприклад: авіашоу, стрибки з парашутами, великі фестивалі та концерти на відкритому повітрі) – інформація щодо стану та зміну стану нижніх шарів атмосфери може бути край важливою, та може слугувати підставою для перенесення або скасування цих заходів;
— санатарно-курортні заклади та пляжі;
— дослідження стану нижніх шарів атмосфери на певній, віддаленій від зони дії метеостанцій, ділянці місцевості.
Тому прилад, що розроблюється має відповідати наступним вимогам та реалізовувати наступні дії:
— отримувати дані, що були щойно виміряні, від модулей збору метеорологічної інформації, далі – модулі, за допомогою радіозв’язку;
— передавати отримані дані до персонального комп’ютера для іх подальшого зручного зберігання, моніторінгу та обробки;
— забезпечувати зв’язок між модулями копмлексу на відстані до 5 кілометрів;
— задовільняти існуючим „оматорським” стандартам радіозв’язку.
Для функціонування радіозв’язку між приладом та модулями комплексу було обрано частоту 315 МГц, оскільки вибір частоти передачі даних понад 500 МГц може призвезти до перешкоди збоку сотового зв’язку, передача даних на більш низькій частоті (менше 200 МГц) може перешкоджати робіті радіомовленевого зв’язку (рації, інші переговорні пристрої).
Обрана частота передачі (300-400 МГц) належіть до діапазону „оматорських” частот, передача даних у радіусі до 5 кілометрів не потребує реєстрації у Укрчастотнагляді та інших подібних державних установах, та може використовуватись без додаткових документів та відповідних ліцензій.
1. Функціонально-логічні аспекти програми
1.1 Функціональне призначення програми
Дана програма є спеціалізованим програмним виробом та призначена для надання користувачеві можливості керування метеорологічним комплексом за допомогою стаціонарного або переносного персонального комп’ютера (ноутбука).
Програма виконує наступні функціональні дії:
приймання даних, що надходять з lpt-порту ПК;
аналіз даних які були щойно прийняті;
обчислення метеопоказників, на основі даних, отриманих від приладу збору метеорологічних даних;
зручну індикацію оброблених даних;
можливість роботи з метеокомплексом у різних режимах;
можливість підключення нових модулів збору інформації під час роботи програми;–PAGE_BREAK–
зручне збереження оброблених даних;
імітацію входних сигналів від модуля збору інформації;
можливість підстройки різних параметрів прийому під час роботи програми.
1.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 – структура даних, що відображає набір метеоданих, та містить методи по роботі з ними.
1.3 Структура програми з описом її складових частин. Головний поток програми
В java немає таких пойнять як “запис” у pascal, або “структура” в C, тут використовується найбільш широке, зручніше та узагальнююче пойняття –клас.
Для найкращого розуміння роботи та взаємодії класів, розглянемо графічну схему зв’язку класів – UML-діаграму класів (рис. 1.3.1).
/>
Рис. 1.3.1 UML-діаграма класів програми.
Головним класом програми є клас MainFrame, який догружатиме у процесі роботи усі інші класи. Розглянемо його роботу, починаючи з методу main.
Розглянемо головний робочий цикл програми, головний поток.
Конструкція JFrame frame = getMainFrame(); використовується для запобігання запуску на данному ПК ще одної аналогічної програми, що зашкодить її нормальній роботі.
При наступному визові
frame = getMainFrame();
frame.show();
Ще одно вікно не відкриється. Ми будемо працювати з тим же самим вікном.
Такий шаблон у програмуванні носить назву Singletone, тобто завжди у пам’яті ПК зберігається лише один екземпляр класу, що реалізує цей шаблон, повторне звернення до нього поверне той самий екземпляр.
завантажується конструктор класу;
завантажується необхідний драйвер для роботи з портами вводу/виводу com.sun.comm.Win32Driver.
відбувається перевірка наявності на ПК портів вводу/виводу, серед списку необхідних відбувається пошук необхідного нам lpt-порта, якщо такого в системі не знайдено, програма видає помилку та припиняє свою роботу;
утворюються два потоки на читання/запис у lpt-порт. У даному випадку потоками можна вважати специфічні вказівники на області пам’яті (регістри), яки відповідають зміст даних у lpt-порті;
проводиться ініціалізація утилітарних класів, що відповідають за прийом та передачу даних Receiver та Transmitter, при цьому слід зауавжити, що клас Receiver запускається у окремому потоку, що забезпечує безперервний опит стану lpt-порта;
задаються розміри вхідних та вихідних програмних буферів для запису/зчитування даних;
установлюється програма-володар порта, яка займає порт на весь час роботи з ним;
відбувається графічна ініціалізація програми;
Початкова ініціалізація на цьому закінчується. Після цього відбувається робота користувача з графічними елементами програми (кнопками, пунктами меню і т.п.).
а) Користувач натискає кнопку „Список активних модулей”. Визивається функція readModulesFromFile(). При цьому відбувається наступний порядок дій:
— очищується модель списку модулей;
— завантажується з файту Modules.properties список активних модулей, який користувач задав перед початком функціонування програми. Слід зазначити, що список модулей можна змінювати й під час роботи програми, слід тільки натиснути указану кнопку;
— заповнюється модель списку модулей.
б) Користувач нажимає кнопку „опитати модуль”, задавши попередньо значення номеру опитуємого модуля. Викликається метод askModule(Integer moduleNumber). При цьому відбувається наступний порядок дій:
утворюється новий екземпляр класу Module, йому передається вказаний номер модуля;
номер модуля конвертується у бітову послідовність;
за допомогою одиничного екземпляра класа Transmitter, метод sendBytes відбувається відправка бітової послідовності на порт, при цьому передані дані потрапляють у поток, що був проініційований раніше, який відповідає за передачу даних на порт;
після цього встановлюється пограмна затримка (що за умовчанням дорівнює 10 мілісекундам та може бути змінена користувачем під час роботи програми);
опрошується вхідний буфер порта, якщо значення не змінилося – викликається помилка „даний модуль не дає відповіді” у цьому випадку модуль може бути опитаний повторно. Якщо вхідний буфер не дорівнює константі довжини вхідного буфера, викликається помилка „помилка при отримані відповіді”, якщо помилок немає – робимо аналіз прийнятого пакету;
у вказаного об’єкта-модуля утворюється ініціюється поле weatherData, при цьому робиться перевірка переданого та прийнятого номерів модуля, якщо номери не співпадають, генерується помилка: „неспівпадіння номерів модуля”, робити аналіз прийнятих даних немає сенсу;
робиться перекодування прийнятої бітової послідовності у цілі числа та перевірка контрольної суми, якщо прийнята та щойно прорахована контрольні суми не співпадають – генерується помилка „помилка контрольної суми”;
за алгоритмами, що описані у методах класу WeatherData робиться перерахунок прийнятої перекодованої інформації з бітової послідовності у реальні показники;
на інформаційній панелі відображується отриманий результат.
в) Користувач натискає кнопку „опитати всі модулі”. Викликається метод askAllModules(). При цьому відбувається наступний порядок дій:
— циклічно опитується кожний модуль, за алгоритмом, наведаним у пункті “б”;
— якщо при опиті модуля виникають певні помилки – накопичуються у буфер, модуль набуває признак „недійсний”;
— відображується інформація про всі модулі з признаком „дійсний”;
— відображується інформація про помилки, що виникли під час опиту усіх модулей з указаням номеру модуля та тексту помилки.
2. Технічно-функціональні аспекти програми
2.1 Використані технічні та програмні засоби
Для розробки даної програми була використана інтегрована середа розробки (IDE –Integrated development environment ) Borland Jbuilder Х.
Версія java-машини: 1.4.2_01-b06.
Програма була розроблена та протестована на IBM-сумісному комп’ютері з тактовою частотою процесора 2,5 ГГц, обє’мом оперативної пам’яті 512Мв.
Також була використана стандартна java-бібліотека для роботи з портами вводу/виводу java community api (JCA) версії 2.0.
2.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.
2.3 Вхідні дані для програми
Вхідними даними для програми є спеціалізовані дані, що надходять з модулю прийому метеорологічних даних.
Вхідні дані – послідовнітсь біт, що надходить з певною швидкістю з lpt-порта ПК, які утворюють собою інформаційний пакет певної структури.
Також програма читає вхідну інформацію з текстових файлів, які містять інформацію про внутрішні адреси та опис модулів збору даних, а також тестові послідовності, що імітують сигнали-відповіді від lpt-порту для можливості тестування тестових фрагментів інформації.
2.4 Вихідні дані
Вихідні дані програми – інформація, отримана від модуля збору метеорологічних даних, при наявності помилок – повідомлення з інформацією про помилку. Вихідні дані можуть бути представлені у вигляді текстового файлу, або графічним відображенням.
Вихідні дані також можуть бути представлені у вигляді серіалізованих об’єктів, для їх подальшої обробки та використання. продолжение
–PAGE_BREAK–
2.5 Приклад функціонування програми
Після запуску програми на екрані з’являється головне вікно яке містить всі необхідні компоненти для роботи з програмою. Головне вікно програми має вигляд (рис 2.5.1)
/>
Рис. 2.5.1. Головне вікно програми.
Після натиснення кнопки „Список активних модулів”, з файлу Modules.properties завантажується список модулів, з якими програма вестиме роботу (рис. 2.5.2). При цьому слід зауважити, що завантажувати нові модулі для роботи можна й під час роботи програми, варто знову натиснути кнопку “Список активних модулів”, програма зробить перечитку файлу та відображення нових (якщо відбулися певні зміни) модулів.
Список модулів являє собою особистий номер (код модуля), який співпадає з внутрішнім кодом самого модуля збору метеорологічних даних, та опис самого модуля (будь-яка текстова інформація); у данному випадку – місце розташування модуля, для більш зругного його використання.
/>
Рис. 2.5.1. Список активних модулів.
Далі користувач тисне „Опитати модуль”, попередньо вказавши номер модуля, у правому полі, який він бажає опитати.
Далі програма робить опит вказаного модуля, при цьому можливі наступні види помилок:
модуль, що опитується не існує в списку модулів;
вказаний модуль не дає відповіді;
не співпадає номер модуля (номер модуля що був відправлений, не співпадає з прийнятим номером модуля);
помилка у контрольній сумі (виникла помилка при передачі).
Якщо все гаразд – (не виникло жодної помилки) – отримуємо на екрані результат опитування модуля (рис 2.5.2).
/>
Рис. 2.5.2. Результат опитування модуля №2.
Також можна опитати усі активні модулі натиснувши на кнопку “Опитати всі модулі”, при цьому отримаємо інформаціюпо всіх модулях, зазначених у списку, якщо результати опитування певного модуля не присутні на інформаційній панелі – треба дивитися список помилок (рис 2.5.3).
/>
Рис. 2.5.3. Результат опиту усіх модулів зі списка модулів.
Міністерство освіти і науки України
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
“ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”
Кафедра “Обчислювальна техніка та програмування”
ЗАТВЕРДЖУЮ
Завідуючий кафедрою ОТП
__________ (xxxxxxx.)
“____”___________ 2005 р.
Прилад прийому та обробки метеорологічних даних
Пояснювальна записка
XXXXXX.099092.00 ПЗ
Консультанти:
Науково-дослудна робота:
___________доц. xxxxxxxx
Економічна частина:
___________доц. xxxxxxxxx.
Охорона праці і навколишнього середовища
___________ст.викл. xxxxxxx
Розробники проекту:
Керівник
________ (xxxxxxxІ)
“____” __________ 2005 р.
Виконавець
______ (xxxxxx.)
“____” ___________2005 р.
Харків 2005
Зміст
Вступ
1 Огляд існуючих технічних аналогів
2 Структурна схема приладу та її опис
2.1 Структурна схема і призначення окремих функціональних блоків
2.2 Робота пристрою за структурною схемою
2.2.1 Прилад збору метеорологічних даних
2.2.2 Обмін інформацією між вузлами метеорологічного комплекса
3 Вибір апаратних засобів
3.1 Вибір та характеристики прийомо-передавального пристрою
3.2 Вибір та характеристики мікроконтролера
4 Розобка протоколу передачі даних
4.1 Трьохрівневий сигнал обміну даними
4.2 Передача даних через lpt-порт ПК
4.2.1 Характеристики lpt-порта
4.2.2 Вибір режиму обміну даними через lpt-порт
4.2.3 Розробка інтерфейсу передачі даних через lpt-порт
5 Розробка модулю попередньої обробки сигналу
5.1 Обробка прийнятого сигналу
5.2 Підготовка сигналу для передачі
6 Розрахунок антеного модуля для прийомо-передавального пристрою
7 Розробка конструкторського виконання приладу
7.1 Розміщення мікросхем усередені приладу
7.2 Забезпечення живлення приладу
7.3 Зовнішній вигляд приладу
7.4 Розрахунок ударостійкості
8 Техніко-економічне обгрунтування розробки
8.1 Опис виробу
8.2 Дослідження і аналіз ринків збуту
8.2.1 Сегментація ринку по споживачах
8.2.2 Параметрична сегментація ринку
8.2.3 Аналіз конкурентноздатності
8.3 Розрахунок затрат на розробку виробу (передвиробничі затрати)
8.4 Розрахунок договірної ціни виробу
8.5 Розрахунок річних витрат споживача
8.6 Розрахунок інтегрального показника конкурентноздатності
8.7 Аналіз стратегії маркетингу
8.7.1 Схема розповсюдження виробів
8.7.2 Організація реклами
8.7.3 Прогнозування об’єму продаж
8.8 Визначення беззбитковості виробництва
Висновки
Перелік посилань
Вступ
У різних галузях народного господарства досить часто виникає необхідність мати певне уявлення про характеристику погодних умов на певній, досить невеликій ділянці місцевості, це може бути використано у статистичних, інформативних, синоптичних цілях.
При цьому головними вимогами, що висуваються до цієї інформаціі про погодні умови є:
— оперативність збору, а отже доцільність інформації;
— мінізація технічних та матеріальних засобів для її отримання;
— зручнічть у використанні та мобільність технічних засобів збору інфор-мації;
— точність інформації, що надходить, тощо.
Тому для реалізації всих цих вимог потрібен комплекс збору метеорологічних даних, далі – комплекс, до складу якого належіть прилад, що розроблюється – „прилад прийому метеорологічних даних”, далі – прилад.
Звичайні метеорологічні станції не завжди можуть бути корисними: по-перше, збирання метеорологічних даних (тих або інших метеопоказників) є узагальнюючим; по-друге, вони є стаціонарними, тобто розташовані на певних ділянках місцевості; по третє, не всі ділянки земної поверхні знаходяться у зонах дії метеорологічних станцій.
Серед галузей використання комплексу можна насамперед виділити наступні:
— сільське господарство – необхідна швидка та точна інформація щодо температури, вологості повітря та ін. для термінового проведення (або відкладення проведення) сільськогосподарських робіт – пахота, засівання, збір врожаю, тощо;
— проведення розважальних та тренувальних заходів (наприклад: авіашоу, стрибки з парашутами, великі фестивалі та концерти на відкритому повітрі) – інформація щодо стану та зміну стану нижніх шарів атмосфери може бути край важливою, та може слугувати підставою для перенесення або скасування цих заходів; продолжение
–PAGE_BREAK–
— санатарно-курортні заклади та пляжі;
— дослідження стану нижніх шарів атмосфери на певній, віддаленій від зони дії метеостанцій, ділянці місцевості.
Тому прилад, що розроблюється має відповідати наступним вимогам та реалізовувати наступні дії:
— отримувати дані, що були щойно виміряні, від модулей збору метеорологічної інформації, далі – модулі, за допомогою радіозв’язку;
— передавати отримані дані до персонального комп’ютера для іх подальшого зручного зберігання, моніторінгу та обробки;
— забезпечувати зв’язок між модулями копмлексу на відстані до 5 кілометрів;
— задовільняти існуючим „оматорським” стандартам радіозв’язку.
Для функціонування радіозв’язку між приладом та модулями комплексу було обрано частоту 315 МГц, оскільки вибір частоти передачі даних понад 500 МГц може призвезти до перешкоди збоку сотового зв’язку, передача даних на більш низькій частоті (менше 200 МГц) може перешкоджати робіті радіомовленевого зв’язку (рації, інші переговорні пристрої).
Обрана частота передачі (500-700 МГц) належіть до діапазону „оматорських” частот, передача даних у радіусі до 5 кілометрів не потребує реєстрації у Укрчастотнагляді та інших подібних державних установах, та може використовуватись без додаткових документів та відповідних ліцензій.
1. Огляд існуючих технічних аналогів
Розглянемо декілька технічних розробок, що несуть сособою мету збору та збереження певних метеопоказників.
1. Система „ІОН”, російського виробника „ООО Прома” (2001р). Метеорологічний комплекс являє собою прилад збору метеопоказників, у який вбудовані певний набір датчиків, та мікроконтролер з досить великим об’ємом внутрішньої пам’яті для збереження результатів вимірювання.
Його структурну схему можна уомвно представити так (рис. 1.1):
/>/>/>/>
/>/>/>
/>
Рисунок 1.1. Система збору метеорологічних даних „ІОН” російського виробника „ООО Прома”.
Алгоритм роботи даного пристрою можна представити так:
— задається план вимірів за допомогою текстового файла та при підключенні пристрою до Пкзаноситься план вимірів;
— людина (оператор) пересувається з пристроєм до точки заміру та натискаючи кнопку „Пуск” робить запит до датчиків на вимірювання відповідних показників;
— щойно виміряні дані зберігаються у внутрішній пам’яті мікроконтролера пристрою;
— робиться замір у наступній контрольній точці, і так доти, доки не буде виконаний план, внесений у началі маршруту;
— після завершення маршруту, дані, що буди збережені, переносяться до персонального комп’ютера для їх подальшої обробки.
Недоліки такої системи є очевидними: неможливість працювати у реальному часі даних, необхідність пересування з приладом по контрольних точках, жорстка прив’язка до плану вимірів, незручність користування та .ін.
2. Стандартна система моніторінгу за погодою. У стандартної метеорологічної станції є також недоліки у роботі: збирання метеорологічних даних (тих або інших метеопоказників) є узагальнюючим; по-друге, вони є стаціонарними, тобто розташовані на певних ділянках місцевості; по третє, не всі ділянки земної поверхні знаходяться у зонах дії метеорологічних станцій, витрата великої кількості коштів при експлуатації, через залучення великої кількості працівників-метеорологів.
Ці системи не можуть бути застосованими у тих випадках, коли необхідна можливість збору інформації у реальному часі, для збору метеопоказників може залучатися лише одна особа, є необхідність збору метеоінформації у місцях, що не входять до зони дії стаціонарних метеостан-цій, можливість легкого та швидкого оперування з отриманими даними.
Для вирішення усіх цих проблем необхідна розробка нового метеокомплекса.
2. Структурна схема приладу та її опис
2.1 Структурна схема і призначення окремих функціональних блоків
Можна запропонувати наступну структурну схему приладу (рис. 2.1.1):
/>/>/>/>/>
/>/>
/>/>/>
/>/>
/>
Рисунок. 2.1.1. Структурна схема приладу
Головні функціональні блоки схеми – прийомо-передавальний пристрій та модуль попередньої обробки прийнятого сигналу.
Прийомо-передавальний пристрій – пристрій, що здійснює радіо передачу запиту до модуля збору метеоінформації та прийом інфорамціції, що надійшла від блоку датчиків модуля.
Модуль попередрьої обробки – здійснює попередню обробку прийнятого сигналу від прийомо-передавального пристрою для подальшої передачі інформації на lpt-порт ПК.
2.2 Робота пристрою за структурною схемою
2.2.1 Прилад збору метеорологічних даних
Розглянемо структурну схему приладу збору метеорологічних даних (рис. 2.2.1.1)
/>/>/>/>/>
/>/>
/>/>/>/>/>
/>/>/>
Рисунок. 2.2.1.1. Структурна схема приладу збору метеорологічної інформації.
Прийомо-передавальний пристрій – здійснює зв’язок між приладом прийому метео-рологічних даних та модулем збору метеоінформації.
Мікроконтролер – відповідає за керування роботою прийомо-передавального пристрою та блоку датчиків у складі модуля збору інформації.
Блок датчиків – конкретний набір датчиків, що здійснюють вимірюють певні метеорологічні показники.
Для аналізу роботи приладу за структурною схемою, розглянемо цикл передачі інформації, який проходить у процесі роботи метеорологічного комплексу.
2.2.2 Обмін інформацією між окремими вузлами метеорологічного комплекса
Обмін інформацією між окремеми вузлами метеорологічного комплекса можно наведено на рис. 2.2.2.1.
Умовно цикл обміну інформацією між модулем збору, приладом прийому інформації, та керуючою програмою ПК можна представити через структурну схему комплексу збору метеорологічних даних (рис. 4.1.1)
Розглянемо цикл обміну інформації
керуюча програма передає на lpt-порт код модулю, що буде опитаний (лінія 1);
з порта інформація поступає на блок попередньої обробки інформації (лінія 2);
звідки код модуля поступає на прийомо-передавальний пристрій для запиту до модуля збору (лінія 3);
прийомо-передавальноий пристрій приладу прийому інформації передає прийомо-передавальному пристрою модуля збору метеорологічних даних код модуля (лінія 4);
далі іде передача коду для аналіза мікроконтролером переданого коду (лінія 5) мікроконтролер власний код (код модуля) з отриманим, якщо не співпадає – цикл завершується, якщо співпадає – цикл триває;
мікроконтролер передає запит до блоку датчиків для отримання корисної інформації (лінія 6);
блок датчиків отримавши повідомленя, робить замір погодних показників та повертає корисну інформацію до мікроконтролера (лінія 7);
мікроконтролер, зберігши інформацію у власному буфері, передає її до прийомо-передавального пристрою (лінія 8);
модуль збору (прийомо-передавальний пристрій) передає інформацію до модулю прийому метеорологічних даних (лінія 9);
прийомо-передавальний пристрій передає інформацію модулю попередньої обробки сигналу для її подальшої передачі у ПК (лінія 10);
модуль попередньої обробки робить необхідні перетворення та передає відповідну інформацію на lpt-порт (лінія 11);
керуюча програма робить зчитування інформації з lpt-порту та робить подальшу обробку прийнятої інформації (лінія 12).
Прилад прийому метеорологічних даних
Модуль збору метеорологічних даних
Рисунок. 2.2.2.1. Обмін інформацією між вузлами метеорологічного комплекса. продолжение
–PAGE_BREAK–
3. Вибір апаратних засобів
3.1 Вибір та характеристики прийомо-передавального пристрою
Для передачі даних між модулями збору та прийому метеоінформації через радіоканал потрібно вибрати радіо прийомо-передавальний пристрій, який задовільняв би наступним вимогам:
— низька ціна;
— досить малі габаритні розміри;
— забезпечувати високу частоту передачі даних – понад 500 МГц;
— мати можливість зовнішнього живлення до 5В, та 30 mA у режимі передачі;
— забезпечувати прийом/передачу даних у напівдуплексному режимі.
Оскільки у технічному завданні маємо 1 канал радіозв’язку для прийому та передачі, використаємо напівдуплексний режим передачі даних.
Виходячи із частотних вимог передачі даних, оберемо частоту 700 МГц для прийому та передачі даних.
Оберемо прийомо-передавальний пристрій швейцарської фірми Xemics XE1201A, бо він має низьку ціну (близько 5% від запланованої суми витрат), має відносно невеликі габаритні розміри (25х25 мм), та задовільняє іншим вищезгаданим вимогам.
Характеристики прийомо-передавального пристрою:
— напруга живлення 2,4В;
— ток живлення в режимах прийом/передача до 6/8 мА;
— потужність передавача 20 мВт;
— температурний діапазон роботи -40 + 850С;
— частотний діапазон передачі даних 400 – 700 МГц;
— швидкість передачі даних – до 64 Кбіт/С.
3.2 Вибір мікроконтролера
Для здійснення попередньої обробки інформації, прийнятої від датчиків оберемо мікроконтролер РІС16С54, бо він має досить низьку ціну, досить поширений на ринку, та здатен забезпечувати всі необхідні функції для роботи модуля збору інформації.
Мікроконтролер має вісімнадцять ніжок. Усі регістри мікросхеми 8-бітні.
4. Розобка протоколу передачі даних
4.1 Трьохрівневий сигнал обміну даними
Для реалізації циклу обміну даними у метеорологічному комплексі запропонуємо троьрівневий сигнал, тобто такий сигнал, у которому є можливим виділити за амплітудою три логічних рівня: логічний рівень „0”, логічний рівень „1” та логічний рівень „синхронізація”.
Умовно такий сигнал можна зобразити так (рис. 4.1.1):
/>/>/>/>/>/>/>/>/>
/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>
/>
/>/>/>/>
/>/>
/>/>/>/>/>
/>/>
Рисунок 4.1.1. Трьохрівневий сигнал, що використовуватиметься при передачі даних.
Uсинхр. – рівень напруги синхронізуючого сигналу;
U1 – рівень напруги логічної одиниці;
U0– рівень напруги логічного нуля.
Як бачимо з рисунка, сигнал, що передається має три логічних рівня, тобто після інформаційного сигналу („0” або „1”), відразу йде сигнал-підтвердження високого рівня. У момент приходу синхронізуючого сигналу можна знімати попередній інформаційний рівень.
4.2 Передача даних через lpt-порт ПК
4.2.1 Характеристики LPT-порту
Оскільки виходячи із технічного завдання прийом-передача інформації повинна здійснюватись через LPT-порт ПК, модуль прийому інформації повинен задовільняти його фізичним та електричним інтерфейсам.
Адаптер паралельного інтерфейсу являє собою набір регістрів, розташованих у просторі введення/виводу. Регістри порту адресуються щодо базової адреси порту, стандартними значеннями якого є 3BCh, 378h і 278h. Порт може використати лінію запиту апаратного переривання, зазвичай 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-25) рознімання.
4.2.2 Вибір режиму прийому-передачі через lpt-порт
Розглянемо основні (найбільш поширені) режими роботи lpt-порта.
— Compatibility Mode — однонаправлений (вивід) за протоколом Centronics. Цей режим відповідає стандартному (традиційному) порту SPP.
— Nibble Mode — ввід байта у два цикли (по 4 біта), використовуючи для прийому лінії стану.
— Byte Mode – ввід цілого байта, використовуючи для прийому лінії даних.
— ЕРР (Enhanced Parallel Port) Mode – двонаправлений обмін даними, при якому керуючі сигнали інтерфейсу генеруються апаратно під час циклу звернення до порта (читання або запису в порт).
— ECP (Extended Capability Port) Mode — двонаправлений обмін даними з можливістю апаратного стискання даних за методом RLE (Run Length En-coding) та використання FIFO-буферів та DMA. Керуючі сигнали інтерфейсу генеруються апаратно.
Розглянемо вимоги, що висуваються до прийому та передачі даних через lpt-порт:
— двонаправлений обмін даними;
— найбільша поширеність та апаратна реалізація у сучасних ПК функцій, що застосовуватимуться під час прийому та передачі;
— керуючі сигнали мають генеруватися як програмно, так й апаратно.
— цикли читання й запису можуть чергуватися в довільному порядку або йти блоками.
Для задоволення всих цих вимог стандартні режими обміну є неприйнятними, тому запропонуємо власний режим (протокол) обміну.
4.2.3 Розробка інтерфейсу передачі даних через lpt-порт
Стандартний порт має при 8-ми бітних регістри, розташованих на сусідніх адресах вводу/виводу, починаючи з базової адреси порту BASE.
Data Register(DR) – регістр даних. Дані, записані у цей регістр, виводяться на лінії інтерфейсу. Дані, зчитані з цього регістра, в залежності від схемотехніки адаптера відповідають або раніше записаним даним, або сигналам на тих же лініях.
Status Register (SR) — регістр стану, що представляє собою 5-бітний порт уведення сигналів стану принтера (біти SR.4-SR.7). Біт SR.7 інвертується — низькому рівню сигналу відповідає одиничне значенню біта в регістрі, і навпаки.
Control Register (CR) — регістр керування. Як і регістр даних, цей 4-бітний порт виводу допускає запис і читання (біти 0-3), але його вихідний буфер звичайно, має тип відкритий колектор. Це дозволяє більш коректно використовувати лінії даного регістра як вхідні при програмуванні їхній у високий рівень. Біти 0, 1, 3 інвертуються — одиничному значенню в регістрі відповідає низький рівень сигналу, і навпаки. продолжение
–PAGE_BREAK–
Будемо розглядати стандартне рознімання порту DB-25S (розетка).
Для розробки протоколу обміну даними будемо використовувати такі клеми:
DR0 (Data 0) – працює на вивід інформації. У режимі виводу – передає номер модулю, від якого будуть запрошені дані (контакт номер 2 у DB-25S).
DR1 (Data 1) – працює на вивід інформації. У режимі виводу – передає номер модулю, від якого будуть запрошені дані (контакт номер 3 у DB-25S).
CR2 (Init#) – працює на вивід інформації. Використовується для синхронізації під час запису до порту (контакт номер 16 у DB-25S).
CR3 (Select Input#) – працює на вивід інформації. Використовуєтся для задання напрямку виводу (запис або читання), також служить для задання режиму роботи прийомо-передавального пристрою – RX/TX – інвертований сигнал (контакт номер 17 у DB-25S).
SR7 (Busy) – працює на ввід інформації. Використовується для прийому даних від зовнішнього пристрою. Інвертований сигнал (контакт номер 11 у DB-25S).
SR5 (Paper Out) – працює на ввід інформації. Використовується для синхронізації під час читання інформації з порту (контакт номер 12 у DB-25S).
Умовно графічну схему обміну даними через lpt-порт можна зобразити так (рис. 4.2.3.1 ):
/>/>/>/>/>
/>/>/>/>/>/>
/>/>
/>/>
Рисунок 4.2.3.1. Виводи lpt-порта при роботі з приладом.
Алгоритм циклу читання даних за допомогою lpt-порта можна представити так:
1. Програмно встановлюється низький рівень сигналу Select Input# (CR3), тим самим переключаючи порт у режим читання даних, цей же сигнал й передається на вхід прийомо-передавальний пристрою RX/TX, переключаючи його у режим прийому даних.
2. На вхід Busy (SR7) від блоку попередньої обробки сигналу надходять дані. Порт чекає на підтверждення від переферійного пристрою.
3. Від блоку попередньої обробки сигналу на вхід Paper Out (SR5) надхо-дить синхронізуючий сигнал (високий рівень).
4. Знімаються дані з SR7.
5. Програмно встановлюється низікий рівень сигналу Paper Out (SR5) для готовності прийому наступного біту інформації.
Алгоритм запису даних до lpt-порту можна представити так:
1. Програмно встановлюється високий рівень сигналу Select Input# (CR3), тим самим переключаючи порт у режим запису даних, цей же сигнал й передається на вхід прийомо-передавального пристрою RX/TX, переключаючи його у режим передачі даних.
2. До lpt-порту програмно записується байт 00000001, що символізує передачу „0”, або 00000010, що символізує передачу „1”, тим самим з’являються відповідні сигнали на виходах DR0 або DR1.
3. Програмно встановлюється високий рівень сигналу CR3 (Select Input#) для підтвердження посилки наступного біту інформації.
4. Дається програмна затримка (10 мкс) – для витримування рівня сигналу CR3.
5. Програмно встановлюється низький рівень сигналу CR3 (Select Input#) для кінця підтвердження.
5 Розробка модулю попередньої обробки сигналу
5.1 Обробка прийнятого сигналу
Модуль збору метеорологічних даних має наступну структуру (рис. 5.1.1):
Рисунок. 5.1.1 Структура модулю збору інформації
Мікроконтролер модуля збору інформації передає дані, які щойно були зчитані з блоку датчиків, та збережені у власному буфері мікроконтролера.
Розглянемо форму сигналу на виході прийомо-передавального пристроюприладу прийому інформації, який був отриманий від модуля збору інформації (рис. 5.1.2).
Тривалість інформаційного рівня сигналу становить 40 мкс, тривалість синхронізуючого сигналу становить 10 мкс.
За умови таких тривалостей сигналу, можлива передача інформації зі швидкістю до 20 000 біт/сек.
Стає очевиндим необхідність мати модуль, який би розпізнавав інформаційні та синхронізуючі сигнали та розділяв би їх на дві складові (рис. 5.1.2).
Рисунок 5.1.2 Модуль попередньої обробки прийнятого сигналу.
Слід також зважати на те, що модуль збору може знаходитись на будь якій відстані від модулю прийому інформації, тому амплітуди сигналу, що надходитимуть на вхід модуя попередньої обробки є нефіксованими, та залежитимуть від відстані між двома прийомо-передавальними пристроями.
/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>/>
/>
Рисунок 5.1.3. Форма сигналу на виході прийомо-передавального пристрою приладу прийому.
Рівні вхідних інформаційних та синхронізуючого сигналів отримуємо у процентному співвідношені від постійної утворюючої сигналу, що прийшов на вхід.
Для вирішення цих вимог запропонуємо наступну схему (рис. 5.1.4):
Оскільки передається сигнал зі швидкістю 20 000 біт/сек, у якості логічних компонентів можуть слугувати будь-які мікросхеми ТТЛ-логіки низької потужності та з часом переключення не більшим 2000 нс.
У якості мікросхем DD1, DD2, DD3, наприклад мікропотужний чотирьохканальний аналоговий компаратор TLC339 (мінімальна напруга живлення – +1,5 В, вхідний ток 0,005 нА, час переключення 1700 нс).
/>
/>/>/>/>/>/>/>
/>/>/>
/>/>/>/>/>/>/>
/>/>
/>/>/>
/>/>/>/>/>/>/>
/>/>/>/>/>/>
/>/>/>/>/>/>/>/>
/>/>/>/>/>/>
/>/>/>/>
/>/>/>/>/>/>
/>
Рисунок 5.1.4. Обробка прийнятого сигналу для передачі до lpt-порта.
У якості мікросхем DD4, DD5 – наприклад, мікросхема 74ALS86, що являє собою 4 двохвходових логічних елементи “виключаюче або” (напруга живлення – +3,6В, час переключення 30 нс). У якості мікросхеми DD6, наприклад, мікросхему 74SN7432, що являє собою 4 двохвходових логічних елементи “або” (напруга живлення – +3,6В, час переключення 30 нс).
Зробимо розрахунок параметрів схеми, використаємо формули:
/>(1)
де R, C – параетри RC-ланцюга;
τ – час падіння напруги на конденсаторі.
Оскільки в даній схемі виділяємо лише три різні рівні сигналів, приймемо τ > 20. Тобто рівень падіння напруги на виході конденсатора не повинен перевищувати 5% продолжение
–PAGE_BREAK–
Приймемо загальний опір ланцюга R = R1+ R2+ R3+ R4 = 10 КОм (вважа-ючи при цьому, що ток, що протікає у ланцюгу дорівнює 0,36 mА).
Обчислимо ємкість конденсатора:
С = τ/R = 50 ∙ 10-6 ∙ 20 / 104 = 10-7 (Ф).
Приймемо амплітуди спрацьовування логічних рівнів сигналів:
логічний рівень „0” – 0,7 В;
логічний рівень „1” – 2,0 В;
логічний рівень „синхронізація” – 3,0 В.
Обчислимо R1, R2, R3, R4, прийнявши вхідну напругу 3,6 В, ток ланцюга 0,36 mA.
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”, на іншому – сигнал синхронізації.
5.2 Підготовка сигналу для передачі
На вході прийомо-передавального пристрою прилада мусимо мати аналогічний трьох-рівневий сигнал для можливості передачі як інформаційної частини сигналу, так й синхронізуючої послідовності (рис. 5.2.1):
/>
/>/>/>/>
/>/>/>/>
/>Рисунок 5.2.1 Модуль обробки сигналу для передачі.
На виході модулю обробки сигналу для передачі мусимо отримати форму сигналу, аналогічну до форми сигналу (рис. 5.1.2).
Для цього необхідне програмне чергування передачі сигналів данних та сигналів синхронізації керуючої програми ПК.
Наприклад, при передачі логічної „1” на вихід lpt-порта треба записати байт даних „00000010”, для передачі логічного нуля треба записати байт „00000001”, при цьому слід передавати біт синхронізації після кожного запису байта даних.
Для вирішення цих вимог запропонуємо наступну схему (рис. 5.2.2):
У якості мікросхеми AD1 можна запропонувати мікросхему тройного аналогового мультиплексора IW4053B (напруга живлення +3,6В, вхідний ток до 10 mA, робочий діапазон температур від -60 до +1500С).
Зробимо розрахунок параметрів дільника напруги. При цьому, що ток, що протікає у ланцюгу приймемо 0,36 mА, напруга 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 Ком.
Таким чином передаючи на вхід модуля три сигнали, отримуємо один трьохрівневий сигнал.
/>
/>
/>/>/>
/>/>/>
/>/>/>
/>/>/>/>
/>/>/>/>/>
/>/>
/>/>/>/>/>
/>/>/>/>/>
/>/>/>
/>/>/>
/>/>
/>/>
/>/>/>/>/>
/>
Рисунок 5.2.2 Модуль обробки сигналу для передачі.
U1 – рівень напруги, що дорівнює рівню напруги сигналу “синхро-нізація” (3 В);
U2 – рівень напруги, що дорівнює рівню напруги сигналу “логічна 1” (2 В);
U3 – рівень напруги, що дорівнює рівню напруги сигналу “логічний 0” (0,7 В);
6. Розрахунок антеного модуля для прийомо-передавального пристрою
Зробимо розрахунок антеного модуля для прийомо-передавального пристрою.
В якості антени використаємо несиметричний вертикальний чвертьхвильовий зазамлений вібратор (штирьова антена).
Маючи внутрішню опорну частоту прийомо-передавального пристрою, виділяючи різні гармоніки, застосовуючи резонансні контури з відповідним посиленням можна отримати різні частоти.
Наприклад, маючи опорну частоту прийомо-передавального пристрою 20 МГц, виділяючи п’яту та сьому гармоніки можна отримати частоту f0 = 20 ∙ 106 ∙ 5 ∙ 7 = 700 МГц.
Розрахуємо довжину хвилі сигналу:
/>
(1)
де: λ0 – довжина хвилі,
с – швидкість хвилі,
f0 – частота передачі.
Знаходимо λ0 = 0,43 (м).
Оскільки використовується чвертьхвильовий вібратор, визначемо висоту вібратора:
h = 0,25 λ0 (2)
Знаходимо h= 0,1075 (м).
Діючу висоту вібратора визначимо за формулою:
hд = 0,64h (3)
Знаходимо hд = 0,0688 (м).
Визначимо також показники ємкості та індуктивності на вході антени:
/>
(4)
де: w – частота на виході LC-контуру,
L – індуктивність катушки,
С – ємкість конденсатора.
Маємо:
w = 2πf (5)
Знаходимо w = 4,4 109 .
Підберемо L, C так, щоб вони задовільняли формулі (4).
При С = 10 пФ, знайдемо:
/>Гн. (6)
Обчислимо параметри катушки індуктивності, використаємо формулу:
/> продолжение
–PAGE_BREAK–
/>(7)
де: N – кількість вітків катушки,
L – індуктивність катушки у мкГн,
R – радіус вітка катушки у дюймах,
Н – висота катушки.
Обчислимо:
Звідки взявши висоту катушки 0,1 дюйма, а радіус катушки 0,025 дюйма, обчислимо кількість вітків:
/>
(8)
Знайдемо амплітуду сили тока, та силу тока в пучності:
/>
(9)
Для чвертьволнового вібратора опір випромінювання, віднесений до пучності тока складає RΣп 37Ом.
Візьмемо опір втрачень у антені Rп = 7Ом.
Від прийомо-передавального пристрою до антени підводиться потужність Pa = 10мВт.
Обчислимо:
/>
/>(10)
Знайдемо КПД антени:
/>
(11)
Обчислимо: ηa=0,84.
Знайдемо максимальну напруженість електричного поля на відстані 5 кілометрів від антени:
/>(12)
де: r – відстань від антени для вимірювання;
Е – напруженність електричного поля.
Обчислимо:
Е = 60∙0,03/5000 = 0,36 мВт/м.
Що перевищує показники чутливості приймача, та є достатнім для передачі сигналу.
7. Розробка конструкторського виконання приладу
7.1 Розміщення мікросхем усередені приладу
Оскільки основні мікросхеми приладу мають невеликий розмір, та схожі електричні параметри, їх можна розмістити на одній печатній платі, що кріпитиметься чорирьма штирами до корпусу.
Запропонуємо пласмасове виконання корпсу приладу.
Розглянемо розміри елементів мікросхем приладу, щодо їх розміщення на печатній платі.
— прийомо-передавальний пристрійXE1201A – 25х25х5 мм;
— мультиплексор IW4053B – 19х7,5х5 мм;
— компаратор TLC339 – 19х7,5х5 мм;
— мікросхема “виключаюче або” 74ALS86 19х7,5х5 мм;
— мікросхема “або” SN7432 19х7,5х5 мм;
— стандартне рознімання lpt-порту DB-25S 40х7 мм.
Для розміщення мікрохем використаємо печатну плату розміром 45х60 мм. Представимо розміщення елементів на печатній платі у масштабі 1:1 (рис. 7.1.1):
Рисунок 7.1.1. Умовне розміщення основних мікросхем приладу на печатній платі.
— XE1201A (1) – прийомо-передавальний пристрій;
— IW4053B (2) – обробка сигналу для передачі;
— TLC339 (3), 74ALS86 (4), SN7432 (5) – обробка прийнятого сигналу.
7.2 Забезпечення живлення приладу
Для забезпечення живлення приладу використовуватимемо підзаряджувані акумулятори.
Наприклад запропонуємо нікельметалгідридний акумулятор:
вихідна напруга 1,2В;
ємкіть укумулятора 800 mA/ч;
розміри 16х16х8 мм.
Якщо послідовно включити три таких акумулятори, отримаємо вихідну напругу живлення 3,6 В, що буде достатньо для подання живлення на будь-яку з обраних мікросхем.
Розглянемо основні елементи, які будуть включені у корпус приладу:
— головна печатна плата приладу(2);
— блок живлення приладу(1);
— вихідне рознімання приладу DB-25S(3);
— закріплення антени(4).
Зобразимо усі основні блоки приладу у масштабі 1:1 (рис. 7.2.1):
Як бічимо, для розміщення основних блоків приладу у корпусі, достатньо використати корпус, розміром 108х50х20 мм.
/>/>/>/>/>/>/>
/>/>/>
/>
/>/>
/>/>/>/>/>/>/>
/>/>/>/>/>/>/>/>/>
/>/>/>
/>/>/>
/>/>
Рисунок 7.2.1. Розміщення основних блоків приладу у корпусі.
7.3 Зовнішній вигляд приладу
Усі елементи приладу будуть розміщені у пластмасовому корпусі, розміром 105х50х20 мм, оскільки штирьова антена має довжину 107,5 мм, її доцільно було б розмістити “вздовж” корпуса, зовнішній вигляд приладу матиме такий вигляд (рис. 7.3.1).
Для якомога кращого прийому та передачі даних, антена має бути розташована горизонтально до земної поверхні. Тому запропонуємо два види розташування приладу під час роботи з ним. У вигляді “зачіпки” (рис. 7.3.2 (а)), та у вигляді стойки (рис. 7.3.2 (а)).
/>/>/>/>/>/>/>/>
/>
/>/>
/>/>/>
/>/>/>/>/>/>/>/>/>/>/>/>/>
/>/>
Рисунок 7.3.1. Зовнішній вигляд приладу.
/>/>/>/>/>/>/>/>/>/>
/>/>
/>/>
Рисунок 7.3.2(а, б). Розташування та закріплання приладу під час роботи з ним.
7.4 Розрахунок ударостійкості продолжение
–PAGE_BREAK–
Зробимо необхідні розрахунки, щодо ударостійкості приладу при падінні з певної висоти.
Візьмемо початкові умови:
висота падіння приладу h = 1м;
пружність поверхні при падінні h0п = 1 мм;
пружність корпусу приладу h0к = 2мм;
початкова швидкість падіння v0 = 0 м/с;
будемо вважати, що пришвидшення a0під час „тормозного шляху” приладу при падінні є рівномірним.
Довжина „тормозного шляху” приладу дорівнює суммі пружності поверхні та корпусу приладу
h0 = h0п + h0к (1)
Швидкість приладу при падінні становитиме
v = v0 + gt = 10t (2)
Шлях при падінні визначаємо за формулою:
/>
(3)
Отже час падіння визначаємо як:
/>
(4)
Швидкість тіла у момент падіння
/>(5)
Визначимо прискорення приладу у момент падіння (деформацію корпусу приладу та поверхні падіння приймаємо рівномірній у часі):
Отже ударостійкість приладу має складати a = 1,33 104, або 1,33 103g.
Сумарну вагу головної мікросхеми приладу, що кріпитиметься на штирьові опори корпусу приймемо 50 г.
/>/>
, або (6)
Візьмемо чотири штирьові опори для фіксації мікросхеми усередені копруса.
Оскільки максимальне навантаження на закріплення мікросхеми становитиме при горизонтальному навантаженні на штирьові опори, тобто при горизонтальному падінні мікросхеми (рис. 7.1).
/>
/>
/>
Рисунок 7.1 Закріплення плати до корпуса.
s – довжина штиру;
d – діаметр штиру;
F – сила, що діє на штир при падінні.
Зробимо розрахунок діаметру капронового штиру, який витримає нагрузку при падінні:
Для капрону максимальна припустима напруга складатиме 30 Мпа.
/>
(7)
σmax – максимальна напруга, Па;
Мх – момент при падінні Н∙м.
Для циліндричного штиру маємо:
/>
(8)
Момент при падінні:
/>
(9)
Тобто
/>
(10)
Звідки:
/>
Отже для закріплення головної плати на корпусі використаємо 4 капронові штири діаметром 4,5 мм.
8. Техніко-економічне обгрунтування розробки
8.1 Опис виробу
Апаратний продукт “прилад прийому та обробки метеорологічних даних”, розроблений в даному проекті (далі – прилад), є складовою частиною комплексу збирання та обробки метеорологічних даних (далі – комплекс) і потрібен для прийому та обробки метеорологічних данних від окремих збираючих модулів комплекса та їх подальшої обробки.
Продукт представляє собою конструктивно закінчений вироб, що підключається для передачі даних в ПК через паралельний порт.
Середня нароботка на відмову приладу становить не менше 8 000 годин.
Розробка вказаного апаратного продукту завершується створенням і передачею замовнику принципової схеми пристрою та супроводжувальної документації.
8.2 Дослідження і аналіз ринків збуту
8.2.1 Сегментація ринку по споживачах
Вироб орієнтований на наступні категорії споживачів:
Сегментація ринку по споживачах наведенау таблиці 8.1.
Таблиця 8.1 – Сегментація ринку за категоріями споживачів.
Області використання (сегменти)
Код сегмента
Спеціалізовані метеорологічні установи
А
Сільське господарство
Б
Інші оргаізації
В
Результати аналіза ємності сегментів ринку збуту наведені у таблиці 8.2.
Таблиця 8.2 – Ємність сегментів ринку
Область використання, Код сегмента
Кількість об’єктів, що використовують вироб, шт.
Передбачуване число продажів одному об’єкту, шт.
Передбачувана ємність сегмента, шт.
А
10
5
50
Б
50
1
50
В
30
1
30
УСЬОГО
130
Передбачувана підсумкова ємність, можливо, зросте у зв’язку з розширенням ринку збуту за рахунок зарубіжних споживачів (збільшення частки експорту), так як ціна продукції, що виробляється в Україні значно нижче, ніж у зарубіжних конкурентів.
Основними вимогами споживачів є простота і зручність використання, надійність, мінімальна вартість продукту.
8.2.2 Параметрична сегментація ринку
Для проведення параметричної сегментації ринку оцінимо по п’ятибальній шкалі основні параметри виробу за ступенем важливості з точки зору споживачів. Параметрична сегментація ринку наведена в таблиці 8.3.
Таблиця 8.3 – Параметрична сегментація ринку
Параметри виробу
Оцінка параметрів по сегментах
Підсумкова оцінка параметра
Відсоток до загального підсумку
А
Б продолжение
–PAGE_BREAK—-PAGE_BREAK—-PAGE_BREAK—-PAGE_BREAK–
198,7
13.
Адміністративні витрати (100% від п.5)
11,48
14.
Витрати на збут продукції (5% від п.12+п.13)
9,96
15.
Прибуток (45% від п.12+…+п.14)
95,28
16.
Оптова ціна (п.12+п.15)
282,98
17.
Налог на додану вартість (НДС) (20% від п.16)
56,6
18.
Відпускна (договірна) ціна (п.16+п.17)
339,58
8.5 Розрахунок річних витрат споживача
Річні експлуатаційні витрати включають витрати на заробітну плату обслуговуючого персоналу, витрати на поточний ремонт та інші витрати. Розрахунок цих витрат проводиться по виробу-аналогу та по виробу, що проектується.
Розрахунок заробітної плати персоналу, обслуговуючого виріб-аналог та виріб, що проектується, наведено у таблиці 8.13.
Таблиця 8.13 – Розрахунок заробітної плати обслуговуючого персоналу
Вид обслуговування
Професія
Ок-лад, грн
Коефіцієнт зайнятості робітника
Кількість персоналу, чол
Річна зарплата, грн.
аналог
проект
аналог
проект
Налагодження
Інженер-налагоджувальник
600
0,1
1
1
720
720
Експлуатація
Оператор з експлуатації
450
0,5
1
1
225
225
УСЬОГО
945
945
Доплати та надбавки приймаємо в розмірі 12% від основної зарплати:
Аналог: ЗДоп = 0,12 × 945 = 113,4 (грн)
Проект: ЗДоп = 0,12 × 945 = 113,4 (грн)
Відрахування на соцзабезпечення становлять 50% від основної зарплати:
Аналог: ЗСоц = 0,5 × 945 = 472,5 (грн)
Проект: ЗСоц = 0,5 × 945 = 472,5 (грн)
Річна сума амортизаційних відрахувань визначається за відповідними нормами амортизації (в дипломі становлять 10%) від первинної вартості виробу, що включає договірну ціну виробу та затрати на транспортування (в дипломі становлять 5% від договірної ціни).
Первинна вартість виробу – це капітальні витрати для споживача (К).
Аналог: К = 350 + 0,05 × 350 = 367,5 (грн)
Проект: К = 339,58 + 0,05 × 339,58 = 356,55 (грн)
Річна сума амортизаційних відрахувань становить:
Аналог: UАморт = 0,1 × 367,5 = 36,75 (грн)
Проект: UАморт = 0,1 × 356,55 = 35,65 (грн)
Витрати на поточний ремонт виробів включають вартість вузлів, мікросхем, радіодеталей, які виходять з ладу на протязі року, а також вартість монтажних та демонтажних робіт, пов’язаних з їх заміною. У дипломному проекті витрати на поточний ремонт приймаються укрупнено у розмірі 5% від суми капітальних витрат.
Аналог: Uрем = 0,05 × 367,5 = 18,37 (грн)
Проект: Uрем = 0,05 × 356,55 = 17,82 (грн)
Результати розрахунків річних витрат споживача зводимо у таблицю 8.14.
Таблиця 8.14 – Річні експлуатаційні витрати споживача.
Статті експлуатаційних витрат
Річні експлуатаційні витрати, грн
Аналог
Проект
Основна зарплата обслуговуючого персоналу
945
945
Доплати та надбавки до основної зарплати
113,4
113,4
Відрахування на соціальне забезпечення
472,5
472,5
Капітальні витрати (К)
367,5
356,55
Амортизаційні відрахування
36,75
35,65
Витрати на поточний ремонт
18,37
17,82
Витрати на матеріали та інші витрати (1% від К)
3,67
3,56
УСЬОГО: Uекс
1956,69
1943,21
Розрахуємо ціну споживача.
Ціна споживача (Цспож) – це витрати споживача за термін служби виробів, що порівнюються, які включають капітальні витрати (К) та сумарні експлуатаційні витрати (Uекс).
Ціна споживача розраховується за формулою:
Цспож = К + Uекс× Т,
де Т – передбачуваний термін служби виробів, що порівнюються, років.
Аналог: Цспож = 367,5+ 1956,69× 10 = 19934,4 (грн)
Проект: Цспож = 356,55+ 1943,21× 10 = 19778,65 (грн)
8.6 Розрахунок інтегрального показника конкурентоздатності
Кількісною мірою конкурентоздатності може виступати інтегральний показник конкурентоздатності (Qкон), який визначається груповими показниками конкурентоздатності виробів: продолжение
–PAGE_BREAK–
Qкон = Qнп × Qт / Qе ,
де Qнп – груповий показник за нормативними параметрами (жорсткими);
Qт – порівняльна конкурентоздатність виробу за його технічним рівнем (див. табл. 2.3.1);
Qе – груповий показник конкурентоздатності за економічними показниками.
Груповий показник за нормативними (жорсткими) параметрами може приймати два значення:
нуль, якщо виріб не відповідає обов’язковим для даного ринку нормам та стандартам (частота та напруга живлення, рівні вхідних та вихідних сигналів та ін.);
одиниця, якщо виріб відповідає вищезазначеним нормам.
В нашому випадку Qнп = 1.
Конкурентоздатність за економічними показниками Qе визначається відношенням ціни споживача виробу, що проектується, до ціни споживача виробу-аналога:
Qе = Цспож.пр / Цспож.ан = 19778,65 / 19934,4 = 0,984
Інтегральний показник конкурентоздатності дорівнює: Qкон = 1 × 1,688 / 0,984 = 1,715
Так як 1,715> 1, то виріб, що проектується, цілком конкурентоздатний.
8.7 Аналіз стратегії маркетингу
Стратегія маркетингу, є одним з основних розділів техніко-економічного обгрунтування виробу, що розробляється. Зміст цього розділу дозволяє визначити основні напрями діяльності при збуті товару.
8.7.1 Схема розповсюдження виробів
Даний виріб буде постачатися безпосередньо споживачам, що припускає стимулювання продажу і організацію реклами.
Стимулювання продажу виконується за допомогою таких методів:
гарантійне обслуговування на протязі двох років;
безкоштовні консультації з експлуатації виробу;
безкоштовні пуско-налагоджувальні роботи.
8.7.2 Організація реклами
Даний продукт розроблявся на замовлення окремої організації для власних потреб і первинно не призначався для масового виробництва, але після опробування його в дії була висунута пропозиція по розповсюдженню його іншим споживачам.
Враховуючи специфіку продукту, що розробляється, реклама повинна здійснюватись серед потенційних споживачів продукту. Їм демонструються основні можливості та характеристики цього виробу.
Реклама продукту буде розповсюджуватися через електронну пошту, власну Інтернет-сторінку підприємства та шляхом публікації у спеціальних інформаційних виданнях (каталогах).
Рекламна компанія буде тривати 3 роки.
Розсилка електронних листів потенційним споживачам (приблизно 30) буде здійснюватись раз на квартал. Вартість 1 Мб переданої інформації – 0,5 грн. Об’єм листа – 750 Кб.
Витрати на електронну рекламу за весь період складуть – 135 грн.
Вартість розміщення однієї сторінки у каталозі “ProSoft” – 500 грн. Каталог виходить два рази на рік.
Витрати на рекламу в каталогах за весь період складуть – 3000 грн.
Кошти, витрачені на рекламну компанію за весь період складуть – 3135 грн.
8.7.3 Прогнозування об’єму продаж
Так як підприємство зацікавлено у стабільності випуску продукту, то треба спрогнозувати мінімальний (Nmin), максимальний (Nmax) та найбільш імовірний (Nнайб.ім) об’єм продаж.
Припустимо, що:
Nmin = 100 шт.
Nmax = 140 шт.
Nнайб.ім = 120 шт.
Очікуване значення об’єму продаж можна розрахувати за формулою:
Nоч = (Nmax + 4 × Nнайб.ім + Nmin) / 6
Nоч = (140 + 4 × 120 + 100) / 6 = 120 (шт)
Дисперсія об’єму продаж розраховується за формулою:
D = (Nmax – Nmin) / 6
D = (140 – 100) / 6 = 6,66
Очікуваний об’єм продаж може бути реалізований на протязі 2-3 років.
8.8 Визначення беззбитковості виробництва
Для визначення беззбитковості виробництва слід використовувати формулу:
Nбез = С / (Ц – А),
де С – загальна сума умовно-постійних витрат, пов’язаних з маркетинговими дослідженнями, розробкою та освоєнням виробу, що проектується, та реклами, грн. (див. п. 3);
Ц – відпускна (договірна) ціна виробу, грн.;
А – сума умовно-змінних витрат у собівартості виробу, що проектується, грн. (сума п.1+…+п.10 в калькуляції собівартості виробу).
Розрахуємо точку беззбитковості:
Nбез = 6165,35 / (339,58 – 169,18) = 37,96 » 36,18 (шт.)
Тобто, треба продати 36 виробів і тільки після цього підприємство перестане бути збитковим і почне отримувати прибуток.
Виходячи з цього побудуємо графік беззбитковості, який наведений на рис. 8.1.
/>/>/>/>/>
/>/>
/>/>
/>
/>
/>
/>/>
Рисунок 8.1 – Графік беззбитковості.
Таблиця 8.15 – Аналіз впливу різних варіантів цін на досягнення беззбитковості виробництва.
Ціна, грн
Відсоток рентабельності
Сума на покриття умовно-змінних витрат
Сума на покриття умовно-постійних витрат,
гр.1 – гр.3
Кількість виробів, необхідних для відшкодування всієї суми умовно-постійних витрат,
С / гр.4
250
20
50
200
31
350
30
105
245
26
450
40
180
270
23
339,58
50
163,79
163,79
36
250
40
100
150
42
350
30
105 продолжение
–PAGE_BREAK–
245
26
450
20
90
360
18
Таблиця 8.16 – Залежність прибутку від ціни та можливого збуту.
Ціна одиниці, грн
Прибуток на виріб, грн
Можливий збут, шт
Кількість виробів при якій досягається беззбитковість, шт
Кількість виробів, які будуть приносити прибуток,
гр.3 – гр.4
Сума прибутку, грн
гр.2 ´ гр.5
250
70
140
300
84
130
339,58
95,28
120
36
120
11433,3
350
98
115
400
112
110
450
126
100
Висновки
У даній роботі був розроблений прилад прийому метеорологічних даних, який є складовою частиною метеорологічного комплексу.
Технічні рішення, що були запропоновані при розробці, повністю задовільняють вимогам, які висувалися до приладу прийому інформації та метеокомплексу вцілому.
Були розроблені та апаратно реалізовані протоколи обміну даними між окремими модулями метеорологічного комплексу. Запропоноване конструкторське виконання приладу дозволяє твердити про його зручність та надійність у використанні.
Проведений техніко-економічний аналіз розробки дозволяє зробити висновок про доцільність розробки і продажу продукту “прилад прийому та обробки метеорологічних даних” на ринку. Розрахована ємність ринку та передбачуваний обсяг продажів носять умовний характер і можуть бути розширені за рахунок модернізації і просування товару на нові сегменти ринку.
Перелік посилань
1. www.gaw.ru.
2. www.xemics.com.
3. www.microhip.ru.
4. www.adn.com.
5. www.proma.narod.ru.
6. www.pic.com.
7. www.ixbt.com
8. Скороделов В.В. «Особенности проектирования МКУ и архитектура микро-контроллеров PIC» — Харків, 1999. – 234с.
9. ДСТУ 3008-95. Документация. Отчеты в сфере науки и техники. Структура и правила оформления. К. “Госстандарт Украины”.
10. Яземський О.С. “Основи економічного аналізу” К.: 1998
МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
“ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”
Кафедра “обчислювальна техніка та програмування”
Затверджую :
Завідуючий кафедрою “ОТП”
______________ xxxxxxx.
“___”________________ 2005р
Прилад прийому та обробки метеорологічних даних
Пояснювальна записка
Лист затвердження
XXXXXX 99092-00-81 ЛЗ
Консультанти:
Науково-дослудна робота:
___________доц. xxx.Ф
Економічна частина:
___________доц. xxxxxxxx.
Охорона праці і навколишнього середовища
___________ст.викл. xxxxxx.
Розробники:
Керівник проекту:
проф. xxxxx.
“___”_________2005р
Виконавець:
xxxx.
“___”_________2005р
Харків 2005
ЗАТВЕРДЖЕНО
xxxxx 99092-00-81 ЛЗ
Прилад прийому та обробки метеорологічних даних
Пояснювальна записка
xxxxx 99092-00-81
Листів 28
Харків 2005
Зміст
Вступ
1 Призначення та галузь застосування
2 Постановка задачі
2.1 Вимоги до програмного виробу
2.2 Вибір програмних засобів для реалізації задачі
3 Об’єктно-орієнтований підхід при вирішенні задачі
3.1 Структура програми
3.2 Класи з полями та інкапсульованими методами
4 Організація обміну даними по розробленому протоколу
4.1 Структура вхідного пакету даних
4.2 Прийом даних
4.3 Структура вихідного пакету даних
4.4 Передача даних
5 Додаткові можливості програми
5.1 Збереження отриманих даних
6 Аналіз прийнятих даних
7 Охорона праці та навколишнього середовища
7.2 Аналіз небезпечних і шкідливих факторів
7.1 Характеристика виробничого середовища приміщення продолжение
–PAGE_BREAK–
7.3 Виробнича санітарія
7.4 Забезпечення виробничого освітлення
7.5 Шум
7.6 Вiпромiнювання вiд екрана
7.7 Техніка безпеки
7.8 Пожежна безпека
Висновки
Список літератури
Вступ
Сучасний розвиток комп’ютерної техніки, технологій та методів програмування передбачає появлення нових програмних комплексів, що здатні вирішувати майже будь-яку задачу. При цьому, якщо розглядати увесь обсяг програмного забезпечення, що випускається, написання спеціалізованого програмного забезпечення буде займати перше місце.
При цьому перед початком написання такої програми, в умовах наявності дуже великої кількості засобів, пакетів, мов програмування буде гостро стояти проблема вибору мови програмування, що здатна вирішувати саме конкретну спеціалізовану задачу.
Обрана мова програмування java 1.4 вирішує відразу декілька поставлених задач: можливість зручно зберігати дані, що отримані від приладу прийому метеорологічних данних для подальшого їх використання; надає користувачеві можливість зручного перегляду даних, що були отримані; дозволяє зручно керувати метеорологічним комплексом, та бути інформованим про помилки, що можуть бути викликані під час роботи; до токож java містить потужний графічний інтерфейс для відображення інформації у реальному відрізку часу. Усі ці переваги надають можливість подальшого розширення прикладної програми для її вдосконалення та надання нових можливостей. Також стандартна бібліотека javax.comm містить всі необхідні засоби для роботи в усіх режимах lpt-порту, через який відбувається надходження даних, тобто завантаження інших програмних засобів для вирішення задачі роботи з метеорологічним комплексом не знадобиться.
Значною перевагою данної програми є те, що вона є платформо-незалежною, переносимою програмою, тобто дана програма працюватиме як з операційною системою Windows, так, скажімо й з Unix.
1. Призначення та галузь застосування
Дана програма є спеціалізованим програмним виробом, що входить до складу метеорологічного комплексу.
Призначення програми – надання користувачеві можливості керування метеорологічним комплексом; отримання та оперування результатами інформації, що надходить від модулів збору метеорологічної інформації.
Програма призначена для встановлення на переносному персональному комп’ютері (ноутбуці). Також можлива інсталяція й на стаціонарній (непереносній) робочій станції.
Оскьліки даний програмний продукт є спеціалізованим програмним виробом, його призначенням є надання зручного інтерфейсу між користувачем (оператором) та модулями збору інформації, що входять до складу метеорологічного комплексу.
2. Постановка задачі
2.1 Вимоги до програмного виробу
Постановка задачі вимогала виконання кінцевим програмним продуктом наступних вимог:
приймання даних, що надходять з lpt-порту ПК;
аналіз даних які були щойно прийняті;
обчислення метеопоказників, на основі даних, отриманих від приладу збору метеорологічних даних;
надання зручної індикації оброблених даних;
можливість роботи з метеокомплексом у різних режимах;
можливість підключення нових модулів збору інформації під час роботи програми;
зручне збереження оброблених даних;
імітацію входних сигналів від модуля збору інформації;
можливість підстройки різних параметрів прийому під час роботи програми
можливість „поширення” програми – додання нових функціональ-них можливостей без зміни структури програми.
2.2 Вибір програмних засобів для реалізації задачі
Зручність роботи з прикладною програмою користувача завжди зумовлює собою зручний графічний інтерфейс програми. Тому для рішення цієї проблеми потрібно використовувати мову високого рівня з об’єктно-орієнтованим підходом, бо це відразу вирішує іншу проблему – проблему легкого масштабування програмного виробу. До того ж обраний програмний засіб мусить мати досить потужний математичний апарат для можливості обчислення та аналізу певних вхідних даних. Також слід врахувувати й вимогу до вводу вхідних даних для програми через lpt-порт, звідси виходить задача можливості керування портами вводу/виводу.
Для рішення всіх вищезгаданих задач можна запропонувати мову програмування java, яка до того ж є платформонезалежною, тобто дана програма працюватиме як з операційною системою Windows, так, скажімо й з Unix.
Серед інтегрованих сред розробки (Integrated Development Environment) можна виділити програмний продукт Borland JBuilder X, який є на сьогодняшній день є одним з найпотужніших.
3. Об’єктно-орієнтований підхід при вирішенні задачі
Оскільки обрана мова програмування, як і більшість сучасних мов програмування високого рівня є об’єктно-орієнтованою, для написання програми будемо використовувати об’єктно-орієнтований підхід. Де головними питаннями є не „що робити” та „як робити”, а кто має виконувати ту чи іншу функції.
3.1 Структура програми
Як і будь яка інша java-програма дана програма складається з класів, кожен з яких розміщується у конкретному пакеті.
За своєю функціональністю класи програми поділені на три пакети:
ui – містить класи для графічного відображення (user interface);
util – допоміжні та утилітарні класи для роботи програми;
obj – класи-структури даних для логічного та зручного оперування даними.
3.2 Класи з полями та інкапсульованими методами
Розглянемо фізичні дані, з якими ми будемо оперувати.
По-перше, інформація, що надходить. Її можна інкапсулювати у єдиний клас – WeatherData з наступними полями:
номер модуля (moduleNumber);
температура (temperature);
атмосферний тиск(preasure);
сила вітру(windPower);
напрямок вітру(windDirection);
контрольна сума(src);
Також інкапсулюємо у класі методи для оперування з цими полями.
По-друге, фізична модель модуля збору інформації може бути уособлена в класі Module. З наступними молями:
номер модуля (moduleNumber);
опис модуля (moduleDescription);
інформація про погоду, що передається (weatherData).
До того ж необхідні методи, що характеризуватимуть роботу модуля:
sendModuleNumber() – посилає поточному модулю запит на відповідь – інформацію від погодних датчиків.
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(); продолжение
–PAGE_BREAK–
return receiver;}
Скільки б раз ми не викликали метод getInstanse(), ми працюватимемо з одним й тим самим екземпляром класу.
Розробка інших утилітарних класів. При роботі програми, що проектується можливі виникнення двох умовних типів помилок:
перша група – некритична, тобто помилка, що не заважатиме нормальному ходу виконання програми. Очевидно дії при її виникнені мають носити суто інформаційний характер для користувача; наприклад «помилка рпи передачі даних».
друга група – критичні помилки, при виникненні яких подальша робота програми є неможлиивою, та необхідно робити терміновий вихід з програми; наприклад «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) – перевід тестової строки, взятої з файлу для імітації сигналів, отриманої від модуля.
Також він містить константи для підстройки програми під час роботи.
4. Організація обміну даними по розробленому протоколу
4.1 Структура пакету даних
Розробимо структуру вхідного пакету даних, згідно з набором даних, що будуть надходити від приладу збору метеорологічних даних.
Розглянемо набір даних, з яким будемо оперувати
температура;
атмосферний тиск;
сила вітру;
напрямок вітру.
Формат даних про температуту (рис. 4.1.1):
/>/>/>/>хххх хххх хххх хххх
/>/>/>/>/>/>
/>
/>/>
Рис 4.1.1. Формат даних про температуру, що надходять.
Формат даних про атмосферний тиск – 16 біт, що відображують абсолютне значення атмосферного тиска у мм. рт. ст. Інформацію про силу та напрямок вітру отримуємо у вигляді послідовності трьох шістнадцятибітних чисел, за допомогою яких будуть обчислені ці показники (рис 4.1.2):
хххх хххх хххх хххх — показання від датчику вітру (1)
хххх хххх хххх хххх — показання від датчику вітру (2)
хххх хххх хххх хххх — показання від датчику вітру (3)
Рис. 4.1.2. Інформація від датчику сили та напрямку вітру.
Також включимо до пакету даних номер модуля, від якого були отримані дані та передана контрольна сума, завдяки чому можемо перевірити відсутність помилок під час передачі даних, обчисливши власну контрольну суму від усіх погодних показників (рис 4.1.3).
/>хххх хххх хххх хххх — температура
/>хххх хххх хххх хххх — атм. тиск
/>хххх хххх хххх хххх — показання від датчику вітру (1)
/>хххх хххх хххх хххх — показання від датчику вітру (2)
/>хххх хххх хххх хххх — показання від датчику вітру (3)
хххх хххх хххх хххх — обчислена контрольна сума
Рис 4.1.3. Обчислення контрольної суми
Тобто контрольна сума обчислюється прямим сумуванням всіх показників за модулем «2», та порівняється є контрольною сумою, яка щойно була передана.
Також при організації обміну даними слід передбачити наявність бітової послідовності, що слугуватиме сигналом для початку аналізу бітової послідовності, яка надходить від зовнішнього пристрою, та формування інформаційного пакету. Для цього додамо до початку вхідної бітової послідовності (пакету даних) комбінацію з восьми логічних одиниць – „стартову” послідовність біт.
Тепер можемо представити структуру пакету, яка являє собою послідовність біт (4.1.4):
СП код модуля температура атм. тиск дані про вітер контр. сума
/>/>/>/>/>/>/>/>/>/>/>/>
Рис 4.1.4. Структура пакету, що приймається.
Де СП – стартова вхідна послідовність.
Тобто, для вхідний пакет даних буде являти собою бітову послідовність, довжиною 112 біт.
4.2 Прийом даних
Розглянемо організацію приймання данних.
Інформація надходить на контакти рознімання паралельного порту ПК (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() – тобто при необхідності приймання даних від наступного модуля збору інформації.
4.3 Структура вихідного пакету даних
Необхідність передачі даних виникає, коли керуюча програма подає запит до чергового модулю збору метеорологічних даних. При цьому інформація, що має передаватися – є код модуля, який має бути зараз опитаний.
Для задання коду модуля використаємо вісьми бітну послідовність даних, тобто максимальний номер модуля, який зможе обслуговувати програма буде дорівнювати 256.
Також необхідно передати певну стартову послідовність біт, бо метеокомплекс може працювати в умовах сторонніх перешкод. Для задання стартової послідовності (СП) використаємо послідовність з восьми біт, тоді пакет даних, що пересилатиметься матиме наступну структуру (рис. 4.3.1):
/>/>1111 1111 хххх хххх
Стартова Код модуля
послідовність
Рис. 4.3.1. Вихідний інформаційний пакет даних.
Тобто, для вхідний пакет даних буде являти собою бітову послідовність, довжиною 16 біт.
4.4 Передача даних
Для передачі даних використовуються контакти рознімання паралельного порту, що працюють на вивід інформації (DR0 для передачі логічного сигналу „0”, DR0 для передачі логічного сигналу „1”, СR2 для передачі логічного сигналу „синхронізація”).
Перед початком передаі даних у ініціюючомуметоді initData() виконується утворення класу-передавача, що відповідатиме за передачу даних: продолжение
–PAGE_BREAK–
transmitter = Transmitter.getInstance();
transmitter.setOut(out);
transmitter.setOwner(this);
Передача даних починається при виклику метода askModule(). Для передачі інформації програма виконує наступні дії:
1. Програмно встановлюється високий рівень сигналу Select Input# (CR3), тим самим переключаючи порт у режим запису даних, цей же сигнал й передається на вхід приємопередавача RX/TX, переключаючи його у режим передачі даних (метод setPrinterSelect(true)).
2. До lpt-порту програмно записується байт 00000001, що символізує передачу „0”, або 00000010, що символізує передачу „1”, тим самим з’являються відповідні сигнали на виходах DR0 або DR1 (this.getOut().write(byte01)).
3. 5. Дається програмна затримка (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)).
5. Додаткові можливості програми
5.1 Збереження отриманих даних
Для збереження результатів роботи користувача з програмою запропоновано збереження результатів опитування певного модуля у текстовий файл (метод saveResultsToFile(String fileName, WeatherData dataToSave))
При цьому, інформація, що зберігається має наступний формат:
Дата і час вимірювання
Номер модуля
Темпера-тура
Атм. тиск
Сила вітру
Напрямок вітру
Якщо користувач вирішить зберігти інформацію, отриману від щойно опитаного модулю, він обирає опцію „зберігти у файл”. Програма додасть інформацію про щойно отриманий модуль до вказаного текстового файлу.
6. Аналіз прийнятих даних
Розглянемо дані, що надійшли від модуля збору:
— температура;
— атмосферний тиск;
— сила вітру;
— напрямок вітру;
При отриманні пакету даних від модуля збору, утворюється модель даних (клас WeatherData), що інкапсулює у собі поля та методи по обробці, аналізу, обчисленню та відокремленню даних із вхідного пакету даних.
WeatherData data = createWeatherData(byte [] recivedBytes)
data.initValues();
Температура (метод calculateTemperature(byte[] temperature)).
Дані, про температуру що надійшли мають такий формат (рис 4.1).
Знак температури („+” або „–”) визначається аналізом перших чотирьох біт („0000” – „+”; „1111” – „–”). Значеня температури у градусах цельсія визначається аналізом наступних восьми біт (0..255). Дробна частина знаходиться шляхом аналізу наступних чотирьох біт.
Наприклад, проаналізувавши бітову послідовність 0000 0000 1100 1000, отримуємо +12,50С.
Атмосферний тиск (метод calculatePreasure(byte[] preasure)).
Значення атмосферного тиску у міліметрах ртутного стовпчика знаходиться шляхом аналізу шістнадцяти біт, які були виділені з вхідного інформаційного пакету.
Наприклад, проаналізувавши бітову послідовність 0000 0101 1111 0000, отримуємо 760 мм. рт. ст.
Напрямок та сила вітру (метод calculateWind(byte[] wind))
Напрямок та силу вітру отримуємо у вигляди частот, розкладених по вісям полярної системи координат від датчика сили й напрямку вітру наступним чином:
/>
/>(1)
/>
/>
(2)
де f1, f2, f3 – дані від датчику вітру (рис. 4.1.2). При цьому
/>
/>, якщо fi> 2;
(3), якщо fi
Формули, що застосовуються при роботі з комплексними числами:
/>
(4)
Застосовуючи формули 1, 4 суму />v1+v2+v3 можна представити як:
/>
(5)
Тому для знаходження сили вітру застосуємо формулу:
/>(6)
Для знаходження напрямку вітру застосуємо формулу:
/>
(7)
Для виконання всих вищезгаданих операцій у середовищі java, скористаємося статичними методами класу Math.
Після обчислення показників сили та напрямку вітру, вони заносяться до відповідних полей класу WeatherData.
7. Охорона праці та навколишнього середовища
При виконанні роботи використовується ПЕОМ, бо результатом роботи має бути пакет конструкторської документації для виготовлення апаратури, тому питання охорони праці розглядаються щодо забезпечення здорових і безпечних умов роботи оператора і науковця при проектуванні дослідження об’єкта.
7.1 Характеристика виробничого середовища приміщення, де виконується проектна робота
Приміщення міститься на третьому поверсі триповерхового будинку.
Площа приміщення повинна розраховуватись у відповідності з наступними вимогами: на одне робоче місце повинно відводитися 6 м2, об’єм 20 м3. Комп’ютери повинні розміщуватися на відстані не менше 1 м від стін. Відстань між боковими поверхнями комп’ютерів не повинна бути менше 1,2 м. Відстань між тильною поверхнею одного комп’ютера та екраном іншого – 2,5 м.
Категорія будинку за пожежонебезпекою – категорія В [1]. До цієї категорії належать приміщення, в яких знаходяться тверді пальні речовини та матеріали (при запаленні стороннім джерелом продовжують горіти після його зникнення).
Клас приміщення за пожежонебезпекою П-IІа [2].
Ступінь вогнестійкості будівельних конструкцій триповерхового будинку з категорією пожежонебезпеки В – I та II [3].
Клас приміщення за ступінем небезпеки ураження електричним струмом – приміщення з підвищеною небезпекою, тому що в ньому є можливість одночасного дотику людини до маючих з’єднання з землею металоконструкцій будинку, технологічним апаратом, механізмом та ін. з одного боку, та до металевих конструкцій – з іншого [2].
Помешкання повинно бути свiтлим, сухим i теплим. Пiдлоги роблять рiвними, без вибоїв, щiльними, мають не слизьку i зручну для чищення поверхню, i утримуються в чистотi. Радiатори i трубопроводи опалювальної i водопровiдної систем обладнуються дiелектриками (дерев’яними i т.д.) i закриваються огородженнями. Не можна застосовувати огородження з шаруватого паперового пластика i т.п.
Характеристика електричної мережі, що живить електроустаткування, приміщення: перемінний струм, частота 50 Гц, напруга 220 В, режим нейтралі – глухозаземлена нейтраль, споживча потужність комп’ютера 300 Вт.
7.2 Аналіз небезпечних і шкідливих факторів
У відповідності до ГОСТ 12.0.003–74 [4] при розробці системи, що виконується на комп’ютері, на людину впливають небезпечні та шкідливі фактори, перелік яких приведений в таблиці 4.1. продолжение
–PAGE_BREAK–
Таблиця 7.1. – Перелік небезпечних та шкідливих факторів
Найменування небез печного та шкідливого фактора
Джерело виникнення фактора
Значення фактора, що нормується
Нормативний документ
1.Підвищений рівень іонізуючих випромінювань в робочій зоні
Екрани та інші по-верхні ЕОМ
Кількість в 1см3 повітря: позитивних іонів Ф=1500..3000, легких негативних іонів Ф=3000..5000
СН 2152-80 «Санітарно-гігієнічні норми допустимих рівнів іонізації повітря виробничих та громадських приміщень»
2.Рентгенівське м’яке випроміню-вання
Монітор (ЕПТ)
На відстані 5 см від екрану рівень випрмінювання не повинен перевіщу-вати 100 мкр/г
ДНАОП 0.00 – 1.31 – 99. Правила охорони праці під час експлуатації електронно-обчислювальних машин.
3.Пряма та від-бита блискість
Невірне розташу-вання ПК
Покажчик Р=0
СНиП 11-4-79 ” Строительные нормы и правила. Естественное и искусственное освещение”-М.: Стройиздат.,1980 р.
4.Підвищений рівень статичної електрики
Діалект-рична по-верхя ком-п’ютера, джерела живлення
Е≤20 кВ/м
ГОСТ 12.1.045 «ССБТ. Электростатические поля. Допустимые уровни на рабочих местах и требования к проведению контроля»
5.Підвищена або знижена темпе-ратура повітря
Підвищена: недолік провітрю ваності приміщення, відсутн ість кондиціонерів;
Знижена: погана опалюваність приміщення
t=22..24°C
ГОСТ 12.1.005-88 «ССБТ Общие санитарно-гигиенические требования к воздуху рабочей зоны»-Введ. 01.01.89.
6.Підвищений рівень шуму на робочому місці
Друкарська техніка, вен-тиляція, ос-вітлюваль-ний прилад
L≤50 дБА
ГОСТ 12.1.003-83 «ССБТ Шум. Общие требованиябезопасности » –
Введ. 01.07.84.
7.Недолік при-роднього освіт-лення
Невірне розташу-вання моні-тору, вікон-них прорізів
КПО не нижче 1,5%
СНиП 11-4-79 ” Строительные нормы и правила. Естественное и искусственное освещение”-М.: Стройиздат.,1980 р.
8.Підвищена яскравість світла
Невірне розташу-вання моні-тору
В=100 кд/м2
ДНАОП 0.00 – 1.31 – 99. Правила охорони праці під час експлуатації електронно-обчислювальних машин.
9.Знижена контрасність
Якість монітору
/>= 0,9%
В0 – яскр-ть об’єкту, Вф– скравість фону
ДНАОП 0.00 – 1.31 – 99. Правила охорони праці під час експлуатації електронно-обчислювальних машин.
10.Підвищене значення напруги в електричному ланцюгу
Електрична, апаратура
I=0,6 мА
ГОСТ 12.1.038-82 «ССБТ Электробезо-пасность. Предельно- допустимые уровни напряжения прикосновения и токов». -Введ. 01.07.83.
11.Підвищена пульсація світла потоку
Лампи ден-ного світла, монітор ЕОМ
Кп=5%
ДНАОП 0.00 – 1.31 – 99. Правила охорони праці під час експлуатації електронно-обчислювальних машин.
12.Виробничий пил
Статична електрика, накопичена на поверхні комп’ютера
ПДК=4мг/м3
ГОСТ 12.1.005-88 «ССБТ Общие санитарно-гигиенические требования к воздуху рабочей зоны»-Введ. 01.01.89.
13.Статична напруга
Постійна поза сидін-ня
Зниження стати-чної витривалості на 40%
ДНАОП 0.00 – 1.31 – 99. Правила охорони праці під час експлуатації електронно-обчислювальних машин.
14.Розумова перенапруга
Труднощі виробничо-го завдання
Зниження витри-валості до вихід-ного 40-50%
ДНАОП 0.00 – 1.31 – 99. Правила охорони праці під час експлуатації електронно-обчислювальних машин.
15.Перенапруга зорових аналі-заторів
Монітор ЕОМ
Подовження часу реакції на світло та звук 40-50%
ДНАОП 0.00 – 1.31 – 99. Правила охорони праці під час експлуатації електронно-обчислювальних машин.
7.3 Виробнича санітарія
Працівники обчислювального центра піддаються впливові шкідливих і небезпечних факторів виробничого середовища, електромагнітних полів, статичної електрики, шумів .
Оператори зазнають психоемоційної напруги.
Метеорологічні умови на виробництві або мікроклімат визначають наступні параметри: температура (°C), рухливість (м/с), відносна вологість повітря (%) і інтенсивність теплового випромінювання.
З урахуванням параметрів мікроклімату метеоумови в приміщенні поділяються на оптимальні та допустимі.
У відповіді до ГОСТ 12.1.005–88 [6] встановлюються оптимальні умови, при виборі яких враховується пора року та категорія роботи.
За затратами енергії розробка продукту є легкою фізичною роботою (сидяча робота, не потребує фізичного напруження) – категорія 1а.
Але дипломна робота характеризується напруженою розумовою працею. Тому обрані оптимальні параметри мікроклімату, що наведені у таблиці 7.2.
Таблиця 7.2. – Оптимальні праметри мікроклімату
Категорія роботи по енергозатратам
Пора року
Температура повітря, °С
Відносна вологість повітря,%
Швидкість руху повітря, м/с
легка 1а
Холодна
22-24
40-60
0,1
Тепла
23-25
Приміщення обладнане системами опалення, кондиціювання повітря та припливно-витяжною вентиляцією відповідно до СНиП 2.04.05-91 [7].
7.4 Забезпечення виробничого освітлення
При освітленні виробничих приміщень використовується природне освітлення, створюване світлом неба (пряме та відбите), штучне, здійснюване електричними лампами, та комбіноване.
Природне освітлення підрозділяють на бічне, верхнє, комбіноване. продолжение
–PAGE_BREAK–
В приміщенні використовується бічне природне освітлення, що здійснюється крізь бічні вікна. Воно повинне забезпечувати коефіцієнт природної освітленності (КПО) не нижче 1,5% [5].
Нормовані значення КПО для будинків, розташованих у IV поясі світлового клімату визначаються за формулою:
/>
де />– значення КПО для III поясу світлового клімату складає 1,5,
m – коефіцієнт світлового клімату (для міста Харкова m=0,9%),
c – коефіцієнт сонячності клімату (с=1).
/>=1,5*0,9*1=1,35%
Загальне освітлення повинно бути рівномірним.
Штучне освітлення приміщення з робочими місцями, обладнаними відеотерміналами ЕОМ загального та персонального користування, має бути обладнане системою загального рівномірного освітлення. Даний вид штучного освітлення і використовується на моєму робочому місці.
Дані по нормах освітлення для створення умов нормальної роботи середньої точності містяться у таблиці 7.3.
Таблиця 7.3. – Характеристика виробничого освітлення
Точність зорової роботи
Міні-маль-ний розмір об’єк-ту
Розряд зорової роботи
Під-роз-ряд зоро-вої праці
Кон-раст об’єк-ту фо-ну
Харак-терис-тика фону
Нормоване значення освітлення
Природне
Штучне
,%
,%
Lmin, лк
Тип ламп
Середня точність
0,5..1
IV
В
Середній
Середня
1,5
1,35
500
Газорозрядні
Загальне освітлення має бути виконане у вигляді суцільних або переривчатих ліній світильників, що розміщуються збоку від робочих місць (переважно зліва) паралельно лінії зору працівників. Допускається застосувати світильники таких класів світлорозподілу:
— світильники прямого світла — П;
— переважно прямого світла — Н;
— переважно відбитого світла — В.
Для загального освітлення необхідно застосовувати світильники із розсіювачами та дзеркальними екранними сітками або віддзеркалювача-ми, укомплектовані високочастотними пускорегулювальними апаратами (ВЧ ПРА). Допускається застосовувати світильники без ВЧ ПРА тільки при використанні моделі з технічною назвою «Кососвет». Застосування світильників без розсіювачів та екранних сіток забороняється.
Як джерело світла при штучному освітленні повинні застосовуватися, як правило, люмінесцентні лампи типу ЛБ. При обладнанні відбивного освітлення у виробничих та адміністративно-громадських приміщеннях можуть застосовуватися метало галогенові лампи потужністю до 250 Вт. Допускається у світильниках місцевого освітлення застосовувати лампи розжарювання.
Яскравість світильників загального освітлення в зоні кутів промінювання від 50 до 90 відносно вертикалі в подовжній і поперечній площинах повинна складати не більше 200кд/м, а захисний кут світильників повинен бути не бiльшим за 40.
Коефіцієнт запасу (Кз) відповідно до СНиП 11-4-79 для світлювальної установки загального освітленняслід приймати рівним 1.4.
Коефіцієнт пульсації повинен не перевищувати 5% і забезпечуватися застосуванням газорозрядних ламп у світильниках загального і місцевого освітлення. При відсутності світильників з ВЧ ПРА лампи багатолампових світильників або розташовані поруч світильники загального освітлення необхідно підключати до різних фаз трифазної мережі.
Рівень освітленості на робочому столі в зоні розташування документів має бути в межах 300-500 лк. У разі неможливості забезпечити даний рівень освітленості забезпечити даний рівень освітленості системою загального освітлення допускається застосування світильників місцевого освітлення, але при цьому не повинно бути відблисків на поверхні та збільшення освітленості екрану більше ніж 300 лк.
Світильники місцевого освітлення повинні мати напівпрозорий відбивач світла з захисним кутом не меншим за 40 .
Необхідно передбачити обмеження прямої блискості від джерела природного та штучного освітлення, при цьому яскравість поверхонь, що світяться (вікна, джерела штучного світла) і перебувають у полі зору,
повинна бути не більшою за 200 кд/м.
Необхідно обмежувати відбиту блискість шляхом правильного вибору типів світильників та розміщенням робочих місць відносно джерел природного та штучного освітлення. При цьому яскравість відблисків на екрані відеотермінала на повинна перевищувати 40 кд/м, яскравість стелі при застосуванні системи відбивного освітлення не повинна перевищувати 200 кд/м.
Необхідно передбачити нерівномірність розподілу яскравості в полі зору осіб, що працюють з відеотерміналом, при цьому відношення значень яскравості робочих поверхонь не повинно перевищувати 3:1, а робочих поверхонь і навколишніх предметів (стіни, обладнання) — 5:1.
Необхідно використовувати систему вимикачів, що дозволяє регулювати інтенсивність штучного освітлення залежно від інтенсивності природного, а також дозволяє освітлювати тільки потрібні для роботи зони приміщення.
Для забезпечення нормованих значень освітлення в приміщеннях з відеотерміналами ЕОМ загально та персонального користування необхідно очищати віконне скло та світильники не рідше ніж 2 рази на рік, та своєчасно проводити заміну ламп, що перегоріли.
Виробничі приміщення, в яких розташовані ЕОМ, не повинні межувати з приміщеннями, де рівні шуму та вібрації перевищують норму (механічні цехи, майстерні тощо).
За допомогою “Методических указаний к лабораторной работе по охране труда ”Исследование освещённости производственных помещений естественным светом” для студентов всех специальностей” [12] розрахуємо сумарну площу, що потрібна для забезпечення нормованих значень коефіцієнта природної освітленості. Сумарна площа визначається за формулою:
/> (1)
Де />– світлова характеристика вікна;
/> – коефіцієнт запасу, що враховує зниження освітленості в процесі експлуатації засклення;
/>– площа підлоги приміщення;
/>– коефіцієнт, враховуючий затемнення вікон будинками, що розміщені навпроти;
/>–загальний коефіцієнт світлоперепускання.
/> продолжение
–PAGE_BREAK–
Де />– коефіцієнт, враховуючий вид світлоперепускного матеріалу;
/>– коефіцієнт, враховуючий вид рами;
/>– коефіцієнт, враховуючий вид несучих конструкцій покриттів;
/>– коефіцієнт, враховуючий втрати світла в сонцезахисних пристроях;
/>– коефіцієнт, враховуючий вплив відбитого світла при боковому освітленні;
/>– нормоване значення КПО у відсотках з урахуванням зорової роботи, виду освітлення та світлового клімату в районі розташування будинку, />було обчислено в цьому ж розділі раніше та дорівнює 1,35%.
Визначимо світлову характеристику />. Довжина приміщення />, його глибина />. Відношення />. Висота приміщення від рівня умовної робочої поверхні (дорівнює 0,8м [12]) до верху вікна (верх вікна знаходиться в 0,4 м від стелі приміщення) />. Відношення />. Тому />за додатком 8 [12].
Коефіцієнт запасу />. Дипломна робота виконувалася в приміщенні житлового будинку. Світлоперепускний матеріал розташований вертикально. За таких умов />(додаток 10 [12]).
Площа підлоги приміщення />.
Визначимо загальний коефіцієнт світло перепускання />.
Вид світлоперепускного матеріалу – скло двійне віконне листове, а тому />=0,8 (додаток 5 [12]).
Вид рам – дерев‘яні двійні розділені у вікнах житлового будинку, через це />=0,65 (додаток 5 [12]).
Вид несучих конструкцій – залізобетонні арки. />=0,8 (додаток 5 [12]).
На вікнах приміщення є вертикальні стаціонарні жалюзі з захисним кутом 45°при розташуванні пластин жалюзі під кутом 90°до площі вікна. />=0,75 (додаток 6 [12]).
Тому загальний коефіцієнт світло перепускання:
/>
Розрахуємо коефіцієнт />, враховуючий вплив відбитого світла при боковому освітленні. Як обчислили раніше />. Умовна точка знаходиться в 1м від зовнішньої стіни [12]. Тому відстань умовної точки від зовнішньої стіни />. Відношення />. Враховуючи світлову гаму офарблення стін, підлоги та стелі середньозважений коефіцієнт відбиття стелі, стін та підлоги />. Відношення />. />за додатком 7 [12].
/>, через те що відсутні будинки, розташовані навпроти вікон (додаток 9 [12]). продолжение
–PAGE_BREAK–
Обчислимо сумарну площу:
/>
7.5 Шум
У приміщеннях з ЕОМ рівні звукового тиску, рівні звуку та еквівалентні рівні звуку на робочих місцях повинні відповідати вимогам
ГОСТ 12.1.003-83 «ССБТ Шум. Общие требования безопасности», СН 3223-85 «Санітарні норми допустимих рівнів шуму на робочих місцях з урахуванням напруженості та тяжкості праці», затверджених Міністерством охорони здоров’я України. Рівні шуму на робочих місцях осіб, що працюють з відеотермі- налами та ЕОМ, визначені ДСанПІН 3.3.2-007-98.
Для забезпечення нормативних рівнів шуму у виробничих приміщеннях та на робочих місцях застосовуються шумопоглинальні засоби, вибір яких обґрунтовується спеціальними інженерно-акустичними розрахунками.
Як засоби шумопоглинання повинні застосовуватися негорючі або важкогорючі спеціальні перфоровані плити, панелі, мінеральна вата з максимальним коефіцієнтом звукопоглинання в межах частот 31.-8000 Гц, або інші матеріали аналогічного призначення, дозволені для оздоблення приміщень органами державного санітарно-епідеміологічного нагляду. Крім того, необхідно застосовувати підвісні стелі з аналогічними властивостями.
7.6 Вiпромiнювання вiд екрана
ВДТ генерує декілька типів випромінювання, у тому числі: гамма тормозне, рентгенівське, радіочастотне, мікроволнове, видиме, ультрафіолетове й інфрачервоне випромінювання. Рівні цих випромінювань не перевищують діючих норм.
Вимоги щодо допустимих значень неіонізуючого електромагнітного випромінювання: напруженість електромагнітного поляна відстані 50 см. Навкруги ВДТ за електричною складовою не повинна перевищувати:
у діапазоні частот 5 Гц — 2 кГц – 25 В/м,
у діапазоні частот 2 кГц — 400 кГц – 2,5 В/м,
– щільність магнітного потоку не повинна перевищувати:
у діапазоні частот 5 Гц — 2 кГц – 250 нТл,
у діапазоні частот 2 кГц — 400 кГц – 25 нТл,
– поверхневий електростатичний потенціал не повинен перевищувати 500 В.
Конструктивне рішення екрана дисплея таке, що рентгенівське випромінювання від екрана на відстані 10 см не перевищує 100 мкР/годину [8].
У помешканнях із дисплеями необхідно контролювати аероіонізацію. У таблиці 4 наведені рівні іонізації повітря робочої зони обчислювального центру (ОЦ).
Таблиця 4.4 –Рівні іонізації повітря робочої зони ОЦ
Рівні
Кількість іонів в 1 см повітря
n+
n-
Мінімально необхідні
400
600
Оптимальні
1500-3000
3000-5000
Максимально допустимі
50000
50000
Варто враховувати, що м’яке рентгенівське випромінювання, що виникає при напрузі на аноді 20-22 кВ, а також напруга на струмоведучих ділянках схеми викликає іонізацію повітря з утворенням позитивних іонів, що вважаються несприятливими для людини.
7.7 Техніка безпеки
Тому що лабораторія, де знаходяться ЕОМ, не є помешканням із підвищеним утриманням механічних, теплових або радіаційних небезпек, але є споживачем електричної енергії (трифазна мережа перемінного струму напругою 220 В та частотою 50 Гц), то в даному помешканні є небезпека поразки людини електричним струмом. Тому при розгляді питань техніки безпеки обмежимося розглядом електробезпеки.
Передбачено такі міри електробезпеки:
– конструктивні заходи електробезпеки;
– схемно-конструктивні заходи електробезпеки;
– експлуатаційні заходи електробезпеки.
Конструктивні заходи безпеки спрямовані на запобігання можливості дотику людини до струмоведучих частин.
Для усунення можливості дотику оператора до струмоведучих частин, усі рубильники встановлені в закритих корпусах, усі струмоведучі частини поміщені в захисний корпус або мають захисний прошарок ізоляції, що виключає можливість дотику до них, застосовується блоковий монтаж. Живлячий електричний ланцюг має ізоляцію, виконану відповідно до ГОСТ 14254-80 [9]. Ступінь захисту устаткування відповідає IР44 (де 4 захист від твердих тіл розміром більш 1 мм; 4 – захист від бризок) відповідно до ПУЭ-87 [2].
Відповідно до ГОСТ 12.2.007.0-75* [10] приймаємо I клас захисту від поразки електричним струмом обслуговуючого персоналу тому, що комп’ютер має робочу ізоляцію й елементи занулення.
Схемно-конструктивні заходи електробезпеки забезпечують безпеку дотику людини до металевих не струмоведучих частин електричних апаратів при випадковому пробої їхньої ізоляції і виникнення електричного потенціалу на них.
Живлення здійснюється від трьох провідної мережі: фазовий дріт, нульовий робочий дріт, нульовий захисний дріт.
Напруга менше 1000 В, але більше 42 В, то відповідно до ГОСТ 12.1.030-81* [11] із метою захисту від поразки електричним струмом застосовуємо занулення, тому що лабораторія – це помешкання із підвищеною небезпекою поразки людини електричним струмом, так як можливий одночасний дотик людини до металоконструкцій будинків і т.п., що мають з’єднання з землею з одного боку, і до металевих корпусів електронного устаткування – з іншого.
Занулення – навмисне електричне з’єднання з нульовим захисним провідником металевих не струмоведучих частин, що можуть виявитися під напругою.
Принцип дії занулення – перетворення пробою на корпус в однофазне коротке замикання з метою викликати великий струм, здатний забезпечити спрацьовування захисту і тим самим автоматично відключити ушкоджену установку від живлячої мережі. Таким захистом є: плавкі запобіжники, що здійснюють захист одночасно від струмів короткого замикання і перевантаження.
Занулення потребує наявності в мережі нульового дроту, глухого заземлення нейтралі джерела струму і повторного заземлення нульового дроту (рис. 7.1).
/>/>/>/>/>/>/>/>UФIКЗIКЗ
/>/>
/>/>/>/>/>/>/>/>
/>/>
/>/>/>
/>IЗ
/>/>
/>/>/>
/>
Рис. 7.1. Принципова схема занулення
Умовні позначення:
1 – корпус електроустановки;
2 – апарати захисту від струмів КЗ (запобіжники);
Ro– опір заземлення середньої точки обмотки джерела струму;
Rп– опір повторного заземлювача нульового захисного провідника;
IКЗ – струм короткого замикання;
Iн – частина струму короткого замикання, що протікає через нульовий захисний провідник;
Iз – частина струму короткого замикання, що протікає через землю.
По засобу захисту від поразки електричним струмом проектована система відноситься до I класу відповідно до ГОСТ 12.2.007.0-75* [10].
Призначення елементів занулення:
– призначення нульового захисного провідника – забезпечити необхідне для відключення установки значення струму однофазного короткого замикання шляхом створення для цього струму ланцюга з малим опором;
– призначення заземлення середньої точки – зниження напруги занулених корпусів (а отже, нульового захисного провідника) щодо землі до безпечного значення при замиканні фази на землю; продолжение
–PAGE_BREAK–
–призначення повторного заземлення захисного провідника – зниження напруги щодо землі занулених конструкцій у період замикання фази на корпус як при справній схемі занулення, так і у випадку обриву нульового захисного дроту.
Таким чином, занулення здійснює дві захисних дії – швидке автоматичне відключення ушкодженої установки від живлячої мережі і зниження напруги занулених металевих не струмоведучих частин, що виявилися під напругою, щодо землі.
Первинним джерелом живлення ПЕОМ є трьохпровідна мережа: фазовий дріт, нульовий робочий дріт, нульовий захисний дріт. Електроживлення здійснюється від електроустановки (трансформатора) із регульованою напругою під навантаженням. Напруга мережі подається в розподільну шафу.
У помешканні лабораторії прокладена шина повторного захисного заземлення (заземлюєчий провідник) виконана відповідно до ГОСТ 12.1.030 81* [11], що металево з’єднується з заземленою нейтраллю електроустаткування.
Опір заземлюючого пристрою, до якого приєднана нейтраль, не більш 0,6 Ом. Шина повторного захисного заземлювача доступна для огляду.
Для роботи з пристроями під високою напругою необхідні наступні запобіжні заходи:
– не підключати і не відключати рознімання кабелів при напрузі мережі;
– технічне обслуговування і ремонтні роботи допускається виробляти тільки при виключеному живленні мережі;
– до роботи допускаються особи, які навчені і які мають групи допуску до роботи на машинах відповідно до ПУЭ-87 [2].
7.8 Пожежна безпека
Пожежна безпека – стан об’єкта при якому із установленою ймовірністю виключається можливість виникнення і розвитку пожежі, а також забезпечується захист матеріальних цінностей.
Причинами, що можуть викликати пожежу у цьому помешканні, є:
– несправність електропроводки і приладів;
– коротке замикання електричних ланцюгів;
– перегрів апаратури;
– блискавка.
Помешкання обчислювального центру по пожежній безпеці відноситься до категорії В відповідно до ОНТП-24-86 [1], тому що в обігу знаходяться тверді спалимі речовини і матеріали. Ступінь вогнестійкості будинку – II відповідно до СНиП 2.01.02-85 [3], клас помешкання по пожежній небезпеці П-IIа, відповідно до ПУЭ-87 [2].
Пожежна безпека відповідно до ГОСТ 12.1.004-91 [13] забезпечується системами запобігання пожежі, пожежного захисту, організаційно-технічними заходами.
Система запобігання пожежі:
– контроль і профілактика ізоляції;
– наявність плавких вставок і запобіжників в електронному устаткуванні;
– для захисту від статичної напруги використовується заземлення;
– захист від блискавок будівель і устаткування.
Для даного класу будівель і місцевості із середньою грозовою діяльністю 10 і більш грозових годин у рік, тобто для умов м. Харкова встановлена III категорія захисту від блискавок.
Ступінь захисту відповідному класу помешкання П II-а IР44 для устаткування і IР2Х для світильників. Система пожежного захисту:
– аварійне відключення і переключення апаратури;
– наявність первинних засобів пожежегасіння, вогнегасників ОП-5, тому що вуглекислота має погану електропровідність, або порошкових вогнегасників;
– система оповіщення, світлова і звукова сигналізація;
– захист легкозаймистих частин устаткування, конструкцій захисними матеріалами;
– використання негорючих матеріалів для акустичної обробки стін і стель;
– у помешканнях, де немає робочого персоналу, встановлена автоматична система пожежного захисту.
Для успішної евакуації персоналу при пожежі розміри дверей робочого помешкання повинні бути наступними: ширина дверей не менше 1,5 м., висота дверей не менше 2,0 м., ширина коридору 1,8 м.; робоче помешкання повинно мати два виходи; відстань від найбільше віддаленого робочого місця не повинне перевищувати 100 м.
Організаційні заходи пожежної профілактики:
– навчання персоналу правилам пожежної безпеки;
– видання необхідних інструкцій і плакатів, плану евакуації персоналу у випадку пожежі.
Будівля обчислювального центру відповідає вимогам пожежної безпеки.
Висновки
У пояснювальній записці представлена розробка спеціалізованої програми для можливості легкого „спілкування” користувача з окремими модулями збору інформації та роботи користувача з метеорологічним комплексом вцілому.
Розглянуті спеціальні алгоритми для обчислення метеопоказників, що надходять від модулю збору інформації
Перевагами програми насамперед є простота та зручність у користуванні, можливість змінювати деяки настройки під час проботи програми, можливість зручного збереження даних, що отримані.
Також слід ви ділити те, що мова програмування, на якій написана програма є java, що дозволяє їй бути платформо-незалежною, переносимою програмою; використання стандартної бібліотеки javacomm дає можливість роботи з паралельним портом без використання додаткових програмних модулей; також можна зазначити широкі можливості вдосконалення програми для виходу нових версій та розширення її функціональності.
Список літератури
1. Кей С. Хорстман, Г. Корнел “Java 2. Основи” М.: Вид. Будинок “Вільямс”, 2003.
2. Кей С. Хорстман, Г. Корнел “Java 2. Тонкості програмування” М.: Вид. Будинок “Вільямс”, 2003.
3. Стівен стелінг, Олав Маасен “Використання шаблонів Java” М.: Вид. Будинок “Вільямс”, 2002.
4. Крег Ларман “Використання UML та шаблонів проектування” М.: Вид. Будинок “Вільямс”, 2001.
5. ОНТП 24-86 «Определение категорий помещений и зданий по взрыво-пожарной и пожарной опасности», затверджене МВС СРСР 27.02.86
6. ПВЕ «Правила устройства электроустановок», затверджених Голов-держенергонаглядом СРСР 1984 р.
7. СНиП 2.01.02-85. ” Строительные нормы и правила. Противопожарные нормы проектирования зданий и сооружений” -М.: Стройиздат.,1986 р.
8. 12.0.003–74* “ССБТ. Опасные и вредные производственные факторы. Классификация.” 1978 (с 01.01.76).Переиздание (сентябрь 1999 г.) с Изменением № 1, утвержденным в октябре 1978 г. (ИУС 11-78).
9. СНиП 11-4-79 ” Строительные нормы и правила. Естественное и искусственное освещение”-М.: Стройиздат.,1980 р.
10. ГОСТ 12.1.005-88 «ССБТ Общие санитарно-гигиенические требования к воздуху рабочей зоны»-Введ. 01.01.89.
11. СНиП 2.04.05-91 ” Строительные нормы и правила. Отопление, вен-тиляция и кондиционирование воздуха”-М.: Стройиздат.,1987 р.
12. ДСанПіН З.З.2. 007 1998. Державні санітарні правила і норми роботи з візуальними дисплейним терміналами електронно-обчислювальних машин.
13. ГОСТ 14254-80. Электрооборудование напряжением до 1000 В. Оболочки. Степени защиты. Введ. 01.01.81.
14. ГОСТ 12.2.007.0-75*. ССБТ. Изделия электротехнические. Общие требования безопасности. Введ. 01.01.78.
15. ГОСТ 12.1.030-81*. ССБТ. Электробезопасность. Защитное заземление. Зануление. Введ. 01.07.82.
16. Методические указания к лабораторной работе по охране труда “Исследование освещённости производственных омещений естественным светом” для студентов всех специальностей / Сост. Л.Г. Касаткина.- Харьков: ХПИ, 1986.-20с.
17. ГОСТ 12.1.004-91.” ССБТ. Пожарная безопасность. Общие требо-вания”. Введ. 01.07.92.
18. www.java.sun.com
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ “ХПІ”
Кафедра “ОБЧИСЛЮВАЛЬНА ТЕХНІКА та ПРОГРАМУВАННЯ”
ЗАТВЕРДЖЕНО
Завідуючий кафедрою ОТП
______________ (xxxxxxx.)
“____” ______________ 2004 р.
ПРИЛАД ПРИЙОМУ ТА ОБРОБКИ МЕТЕОРОЛОГІЧНИХ ДАНИХ
Технічне завдання
КІТ19Б.099092.00 ТЗ
Консультанти:
Науково-дослудна робота:
___________доц. xxxxx
Економічна частина:
___________доц. xxxxxxxx.
Охорона праці і навколишнього середовища
___________ст.викл. xxxx.
Розробники:
Керівник проекту
____________ (xxxxxx.)
“____” ______________ 2004 р. продолжение
–PAGE_BREAK–
Виконавець
___________ (xxxxx.)
“____” ______________ 2004 р.
Харків 2004
1 НАЙМЕНУВАННЯ І ОБЛАСТЬ ЗАСТОСУВАННЯ
1.1 Найменування – прилад прийому та обробки метеорологічних даних (далі – прилад).
1.2 Область застосування – прийом спеціалізованих даних для подальшої обробки від приладів автономного збирання метеорологічних даних.
2 ОСНОВА ДЛЯ РОЗРОБКИ
2.1 Основа для розробки – технічне завдання на дипломний проект, видане 27.09.2004 професором кафедри ОТП Калашніковим В. І.
Затверджено протоколом №_________ від “_____”____________ 2004р.
Наказ по НТУ „ХПІ” №____________ від “_____”_____________ 2004р.
3 МЕТА І ПРИЗНАЧЕННЯ РОЗРОБКИ
3.1 Мета розробки – розробка спеціалізованого приладу, що забезпечує прийом метеорологічних даних для їх подальшої обробки у ПК на певній, відносно невеликій ділянці місцевості.
3.2 Призначення розробки – створення комплексу технічної документації для приладу прийому та обробки метеорологічних даних.
4 ТЕХНІЧНІ ВИМОГИ
4.1 Конструктивні і технічні характеристики виробу
4.1.1 Даний прилад повинен бути виконаний у вигляді конструктивно закінченого виробу що підключається через паралельний порт ПК.
4.1.2 Прилад має бути виконаний у вигляді двох нероз’ємних модулей – приємопередатчика та мікроконтролера, що забезпечує попередню обробку прийнятого сигналу.
4.1.3 Прилад прийому даних повинен забезпечувати одержання спеціалізованих даних від системи збору метеорологічних даних (далі – системи), шляхом почергового опиту окремих модулів збирання інформації цього комплексу.
4.1.4 Функціональність приладу не повинна накладати обмеження на кількість модулів системи.
4.1.5 Прилад повинен здійснювати попередню обробку та передачу прийнятих даних через паралельний порт ПК.
4.1.6 Прийом та передача данних повинна відбуватися за допомогою радіоканального зв’язоку.
4.1.6 Радіо прийом та передача даних повинна виконуватись на частоті близько 700 МГц.
4.1.7 Кількість робочих радіоканалів пристрою – 1.
4.1.8 Максимальний радіус дії приємопередатчика пристрою не менше 5 км.
4.2 Вимоги до функціональності
4.2.1 Прилад повинен мати можливість опиту як усіх модулів, так й окремого модулю системи збору метеорологічних даних.
4.3 Вимоги до програмного забезпечення приладу
4.3.1 Програма повинна реалізовувати наступні функції:
— посилання сигналу на запит до певного модулю системи збору метеорологічних даних – посилання сигналу з конкретним цифровим унікальним кодом модулю;
— прийом сигналу-відповіді від конкретного модулю системи;
— внутнішня обробка сигналу, що був прийнятий від модулю для його подальшої обробки у ПК.
— пересилання обробленого сигналу перез паралельний порт ПК.
4.4 Вимоги до програмного забезпечення ПК
4.4.1 Програма повинна реалізовувати наступні функції:
— зручне збереження отриманих даних для подальшого використання іншими програмними пакетами;
— посилання запитів до приладу для отримання інформації від датчиків певного модулю системи.
4.5 Вимоги до надійності
4.5.1 Середня наработка на відмову — не менше 8 000 годин.
4.5.2 Прилад повинен мати ударостійкість не менше, ніж 1000g.
4.5.3 Прилад повинен забезпечувати невідмовне функціонування при температурі навколишнього середовища від -20 до +300С.
4.6 Вимоги до безпеки
4.6.1 Робота з приладом та його утилізація не повинні мати вплив на здоров’я людини.
4.6.1 Робота з приладом та його утилізація не повинні мати вплив на стан навколишнього середовища.
4.7 Умови експлуатації
4.7.1 Робота з приладом під час несприйнятливих погодних умов (атмосферні осадки, пряме сонячне випромінювання) повинні проводитись при наявності захисного тенту.
4.8 Вимоги до сумісності
4.8.1 Сумісність з кожним окремим модулем комплексу збору метео-рологічних даних.
4.9 Додаткові вимоги
4.9.1 Прилад повинен мати габаритні розміри менше, ніж 10х15х10 сантиметрів.
4.9.2 Кінцева ціна промислового виробництва приладу буде уточнена у процесі розробки, яле не має перевищувати 600 гривень.
5 ВИМОГИ ДО КОНСТРУКТОРСЬКОЇ ДОКУМЕНТАЦІЇ
При виконанні роботи випускається наступний комплект документів:
5.1 Технічне завдання.
5.2 Пояснювальна записка.
5.3 Текст програми.
5.4 Опис програми.
5.5 Посібник користувача.
5.6 Схеми структурна, функціональна та принципова
6 ТЕХНІКО-ЕКОНОМІЧНІ ПОКАЗНИКИ
Капітальні витрати, тимчасові витрати та економічна ефективність повинні бути визначені в ході розробки і представлені в документації.
7 СТАДІЇ ТА ЕТАПИ РОЗРОБКИ
Розробка повинна виконуватись на етапах ескізного і технічного проекту.
Розробка повинна проходити за наступним планом:
— розробка технічного завдання;
— техніко-економічне обгрунтування розробки;
— розробка розділу охорони праці;
— розробка комплекту конструкторської документації.
8 ПОРЯДОК КОНТРОЛЮ І ПРИЙМАННЯ
При прийманні перевіряється:
— відповідність розробки технічному завданню;
— комплектність, зміст і оформлення документації.
МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
“ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”
Кафедра “обчислювальна техніка та програмування”
Затверджую :
Завідуючий кафедрою “ОТП”
______________ xxxxxxxx.
“___”________________ 2005р
Прилад прийому та обробки метеорологічних даних
Керівництво оператора
Лист затвердження
xxxxx 99092-00-34 ЛЗ
Розробники:
Керівник проекту:
проф. xxxxx.
“___”_________2005р
Виконавець:
Студент групи КІТ-19б
xxxxxxx.
“___”_________2005р
Харків 2005
ЗАТВЕРДЖЕНО
xxxxxxxx 99092-00-34 ЛЗ продолжение
–PAGE_BREAK–
Прилад прийому та обробки метеорологічних даних
Керівництво оператора
xxxx 99092-00-34
Листів 5
Харків 2005
1. Загальні відомості про програмний вироб
1.1 Вимоги до програмного забезпечення
Функціонування програми на персональному комп’ютері повина бути встановлена java-машина, версії 1.4_02 або вища.
1.2 Склад програмного виробу
Дана робоча програма складається з двох каталогів:
— каталогу classes (містить набор відтрансльованих java-класів, файл Modules.properties – задання інформації про модулі збору, та TestValues. properties – задання тестових послідовностей для роботи програми у тестовомо режимі.
— каталогу lib, який містить бібліотеку comm.jar для роботи з портами вводу/виводу.
1.3 Вхідні дані для програми
Перед початком роботи з програмою необхідно внести у текстовий файл Modules.properties дані про наявні модулі збору інформації.
Формат строки текстового файлу:
Номер_модуля Додаткова інформація про модуль (наприклад місце розташування)
Наприклад перед початком роботи з програмою необхідно відредагувати текстовий файл Modules.properties, вказавши в ньому всі наявні модулі, з якими вистиметься робота, наприклад:
1=поле (северный край)
2=поле (южный край)
3=просека
5=телевышка
8=лес
10=лес(опушка)
47=автостанция
56=ж/д станция
67=берег реки
78=пристань
79=сельсовет
80=электростанция
95=шоссе
124=лесополоса
250=турбаза
2. Робота з програмою
2.1 Запуск програми
Перед запуском програми треба скопіювати каталоги classes та lib у будь-яку робочу директорію на жорсткому диску персонального комп’тера, наприклад e:\meteo.
Для запуску програми необхідно вказати у командній строці наступну інформацію:
шлях до java-машини;
шлях до каталогу classes;
шлях до бібліотеки comm..jar
головний клас з методом main
Наприклад:
E:\jre\bin\javaw -classpath «E:\meteo\classes;E:\meteo\lib\comm.jar” dip.ui. MainFrame
Якщо операційна система, з якою працює користувач є Windows, можна утворити відповідний bat-файл, задавши йому всю необхідну інформацію.
2.2 Приклад функціонування програми
Після запуску програми на екрані з’являється головне вікно яке містить всі необхідні компоненти для роботи з програмою.
Після натиснення кнопки „Список активних модулів”, з файлу Modules.properties завантажується список модулів, з якими програма вестиме роботу. При цьому слід зауважити, що завантажувати нові модулі для роботи можна й під час роботи програми, варто знову натиснути кнопку “Список активних модулів”, програма зробить перечитку файлу та відображення нових (якщо відбулися певні зміни) модулів.
Список модулів являє собою особистий номер (код модуля), який співпадає з внутрішнім кодом самого модуля збору метеорологічних даних, та опис самого модуля (будь-яка текстова інформація); у данному випадку – місце розташування модуля, для більш зругного його використання.
Далі користувач тисне „Опитати модуль”, попередньо вказавши номер модуля, у правому полі, який він бажає опитати.
Далі програма робить опит вказаного модуля, при цьому можливі наступні види помилок:
модуль, що опитується не існує в списку модулів;
вказаний модуль не дає відповіді;
не співпадає номер модуля (номер модуля що був відправлений, не співпадає з прийнятим номером модуля);
помилка у контрольній сумі (виникла помилка при передачі).
Якщо все гаразд – (не виникло жодної помилки) – отримуємо на екрані результат опитування модуля).
Також можна опитати усі активні модулі натиснувши на кнопку “Опитати всі модулі”, при цьому отримаємо інформаціюпо всіх модулях, зазначених у списку, якщо результати опитування певного модуля не присутні на інформаційній панелі – треба дивитися список помилок.
2.3 Робота з програмою у тестовому режимі
Для роботи програми у тестовому режимі необхіден файл TestValues.properties, що входить до складу програмного виробу.
Для запуску програми у тестовому режим інеобхідно виконати наступні дії:
запустити програму (див. пункт 2.1);
обрами меню «Настройки», встановити галочку «Робота програми у тестовому режимі» (рис. 1).
/>
Риунок 1. Встановлення тестового режиму роботи програми.
При встановлені тестового режиму програма буде імітувати сигнали-відповіді від конкретних модулів, вказаних у файлі Modules.properties.
Якщо запустити на виконання програму із запропонованим набором даних, загрузити набір модулей, з якими вестиметься робота, попередньо встановивши тестовий режим роботи програми, тоді у режимі опиту всіх модулей програма має надати наступну інформацію (рис.2)
Також можливий й опит окремих модулів із отриманням у якості інфорамції-відповіді тестову послідовність з файлу.
/>
Рисунок 2. Опит всіх модулей із запропонованим набором даних у тестовому режимі.
МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ
“ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”
Кафедра “обчислювальна техніка та програмування”
Затверджую :
Завідуючий кафедрою “ОТП”
______________ Xxxxxxxx.
“___”________________ 2005р
Прилад прийому та обробки метеорологічних даних
Текст програми
Лист затвердження
xxxxxxxx 99092-00-12 ЛЗ
Розробники:
Керівник проекту:
проф. xxxxxx.
“___”_________2005р
Виконавець:
Студент групи xxxxxx
xxxxxxxx.
“___”_________2005р
Харків 2005
ЗАТВЕРДЖЕНО
КІТ19Б 99092-00-12 ЛЗ
Прилад прийому та обробки метеорологічних даних
Текст програми
КІТ19Б 99092-00-12
Листів 17
Харків 2005
Клас ui.MainFrame продолжение
–PAGE_BREAK–
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;
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.createEtchedBorder(Color.green,Color.blue),”Інформаційна панель”));
split.add(rightPanel, JSplitPane.RIGHT);
split.setDividerLocation(200);
leftPanel.add(scrollTable);
scrollTable.getViewport().add(table);
rightPanel.add(scrollList, new GridBagConstraints(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.createEtchedBorder(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();} продолжение
–PAGE_BREAK–
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
{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
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() {
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
{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)
{errStr += “Модуль № „+currentModule.getModuleNumber()+“ не даёт ответ\n»;
continue;//якщо помилка – перериваємо обробку модуля}
try { Thread.sleep(Helper.WaitForResponceInMilis); } catch (InterruptedException ex) { } продолжение
–PAGE_BREAK–
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
{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);
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);
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(); продолжение
–PAGE_BREAK–
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
str01=«0»+str01;//дописуємо (якщо необхідно) послідовність нулів}
for (int i = 0; i
{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
{// 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
// 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];//вхідний буфер даних
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;
import java.io.*;
import javax.swing.JOptionPane;
import javax.swing.JFrame;
public class Transmitter { продолжение
–PAGE_BREAK–
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
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
sendByte((byte)0);
for (int i = 0; i
sendByte((byte)1);}
private void writeTestQuery(byte [] testBytes)
{if (testBytes.length != Receiver.PACKAGE_SIZE + 8)
{ System.err.println(«Неспівпадння довжини пакету»);
return;}
for (int i = 0; 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)
{this.receivedBytes = receivedBytes;
initValues();}
private void initValues()//аналіз прийнятої послідовності
{for (int i = 0; i
{receivedBytes[i]+=Receiver.PACKAGE_SIZE;
if (i>=0 && i
if (i>=8 && i
if (i>=24 && i
if (i>=40 && i
if (i>=56 && i
if (i>=72 && i
if (i>=88 && 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
temperature = 0 — temperature;} продолжение
–PAGE_BREAK–
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()
{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;//показники з модуля
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()+” )”;//для відображення модуля}}