Прилад прийому та обробки метеорологічних даних
Функціонально-логічні та технічно-функціональні аспекти програми. Структурна схема приладу. Обмін інформацією між вузлами метеорологічного комплексу. Розробка протоколу передачі даних. Розрахунок антенного модуля для прийомо-передавального пристрою.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | украинский |
Дата добавления | 21.06.2009 |
Размер файла | 467,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Необхідно передбачити нерівномірність розподілу яскравості в полі зору осіб, що працюють з відеотерміналом, при цьому відношення значень яскравості робочих поверхонь не повинно перевищувати 3:1, а робочих поверхонь і навколишніх предметів (стіни, обладнання) - 5:1.
Необхідно використовувати систему вимикачів, що дозволяє регулювати інтенсивність штучного освітлення залежно від інтенсивності природного, а також дозволяє освітлювати тільки потрібні для роботи зони приміщення.
Для забезпечення нормованих значень освітлення в приміщеннях з відеотерміналами ЕОМ загально та персонального користування необхідно очищати віконне скло та світильники не рідше ніж 2 рази на рік, та своєчасно проводити заміну ламп, що перегоріли.
Виробничі приміщення, в яких розташовані ЕОМ, не повинні межувати з приміщеннями, де рівні шуму та вібрації перевищують норму (механічні цехи, майстерні тощо).
За допомогою “Методических указаний к лабораторной работе по охране труда ”Исследование освещённости производственных помещений естественным светом” для студентов всех специальностей” [12] розрахуємо сумарну площу, що потрібна для забезпечення нормованих значень коефіцієнта природної освітленості. Сумарна площа визначається за формулою:
(1)
Де - світлова характеристика вікна;
- коефіцієнт запасу, що враховує зниження освітленості в процесі експлуатації засклення;
- площа підлоги приміщення;
- коефіцієнт, враховуючий затемнення вікон будинками, що розміщені навпроти;
-загальний коефіцієнт світлоперепускання.
Де - коефіцієнт, враховуючий вид світлоперепускного матеріалу;
- коефіцієнт, враховуючий вид рами;
- коефіцієнт, враховуючий вид несучих конструкцій покриттів;
- коефіцієнт, враховуючий втрати світла в сонцезахисних пристроях;
- коефіцієнт, враховуючий вплив відбитого світла при боковому освітленні;
- нормоване значення КПО у відсотках з урахуванням зорової роботи, виду освітлення та світлового клімату в районі розташування будинку, було обчислено в цьому ж розділі раніше та дорівнює 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]).
Обчислимо сумарну площу:
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].
Призначення елементів занулення:
- призначення нульового захисного провідника - забезпечити необхідне для відключення установки значення струму однофазного короткого замикання шляхом створення для цього струму ланцюга з малим опором;
- призначення заземлення середньої точки - зниження напруги занулених корпусів (а отже, нульового захисного провідника) щодо землі до безпечного значення при замиканні фази на землю;
-призначення повторного заземлення захисного провідника - зниження напруги щодо землі занулених конструкцій у період замикання фази на корпус як при справній схемі занулення, так і у випадку обриву нульового захисного дроту.
Таким чином, занулення здійснює дві захисних дії - швидке автоматичне відключення ушкодженої установки від живлячої мережі і зниження напруги занулених металевих не струмоведучих частин, що виявилися під напругою, щодо землі.
Первинним джерелом живлення ПЕОМ є трьохпровідна мережа: фазовий дріт, нульовий робочий дріт, нульовий захисний дріт. Електроживлення здійснюється від електроустановки (трансформатора) із регульованою напругою під навантаженням. Напруга мережі подається в розподільну шафу.
У помешканні лабораторії прокладена шина повторного захисного заземлення (заземлюєчий провідник) виконана відповідно до ГОСТ 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 р.
Виконавець
___________ (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 ЛЗ
Прилад прийому та обробки метеорологічних даних
Керівництво оператора
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
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();}
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 < activeModules.size(); i++) {
Module m = (Module)activeModules.get(i);
if (m.getModuleNumber().intValue() == moduleNumber.intValue())
{show = true; break;}}}
if (show) askModule(moduleNumber); else
{JOptionPane.showMessageDialog(MainFrame.this, "Модуля с таким номером не существует ");}}});
askAllModulesButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
askAllModules();}});
activeModulesListButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
readModulesFromFile();}});}
public void parallelEvent(ParallelPortEvent parallelPortEvent)
{}
public void ownershipChange(int type)
{}
void askModule(Integer moduleNumber)
{Module module = new Module(moduleNumber);
module.sendModuleNumber();
if (Helper.TEST_MODE)//якщо режим тестовий, засилаємо у порт певну послідовність
{byte[] bb = Helper.testStringIntoBytes(moduleNumber.intValue());
Transmitter t = Transmitter.getInstance();
t.writeTestQuerysendBytes(Helper.integerToBytes(bb);}
try { Thread.sleep(Helper.WaitForResponceInMilis); } catch (InterruptedException ex) { }
//відправили повідомлення. Тепер чекаємо
byte[] answer = receiver.getBuffer();//отримуємо буфер через певний проміжок часу.
try
{module.createWeatherData(answer);//утворюємо дані пропогоду}
catch (Exception ex)
{JOptionPane.showMessageDialog(this, ex.getMessage());
return;}
WeatherData wethData = module.getWeatherData();
if (wethData.checkSrc() == true)
{drowOneModule(module);//якщо контрольна сума збіглася - рисуємо.}
else
{JOptionPane.showMessageDialog(this, "Ошибка контрольной суммы");}}
private void askAllModules()
{ArrayList modulesToDraw = new ArrayList();
String errStr = "";
if (activeModules == null || activeModules.size() == 0)//якщо список модулів порожній
{JOptionPane.showMessageDialog(this, "Список активных модулей пуст");
return;}
System.err.println("Всего модулей: "+activeModules.size());
for (int i = 0; i < activeModules.size(); i++)//опитуємо всі модулі
{Module currentModule = (Module)activeModules.get(i);//звернення до поточного
currentModule.sendModuleNumber();//запитуємо певний модуль
try { Thread.sleep(Helper.WaitForResponceInMilis); } catch (InterruptedException ex) { }
if (Helper.TEST_MODE)//якщо режим тестовий, засилаємо у порт певну послідовність
{byte[] bb = Helper.testStringIntoBytes(moduleNumber.intValue());
Transmitter t = Transmitter.getInstance();
t.writeTestQuery(Helper.integerToBytes(bb);}
if (bb == null)
{errStr += "Модуль № "+currentModule.getModuleNumber()+" не даёт ответ\n";
continue;//якщо помилка - перериваємо обробку модуля}
try { Thread.sleep(Helper.WaitForResponceInMilis); } catch (InterruptedException ex) { }
byte[] answer = receiver.buffer;//отримуємо буфер через певний проміжок часу
try
{currentModule.createWeatherData(answer);}
catch (Exception ex) {
System.err.println("Несовпадение");
errStr += "Модуль № "+currentModule.getModuleNumber()+" Несовпадение номера модуля\n";
continue;}
WeatherData wethData = currentModule.getWeatherData();
if (wethData.checkSrc() == true)
{modulesToDraw.add(currentModule);//додаємо до списку відних модулів}
else
{errStr += "Модуль № "+currentModule.getModuleNumber()+" Ошибка контрольной суммы\n";
continue;// якщо помилка - перериваємо обробку модуля}}
drowModules(modulesToDraw);
if (errStr.length() > 0) JOptionPane.showMessageDialog(this, errStr);}
private void drowOneModule(Module module)// прорисовка даних про один модуль
{System.err.println(""+module.getWeatherData().getRealTemperature());
System.err.println(""+module.getWeatherData().getRealPresure());
Object[][] objectData = new Object [][]{
{module.getModuleNumber(),
module.getWeatherData().getRealTemperature(),
module.getWeatherData().getRealPresure(),
module.getWeatherData().getRealWindDirection(),
module.getWeatherData().getRealWindPower()}};
tableModel = new DefaultTableModel(objectData, tableColumnNames);
table.setModel(tableModel);}
//рисуємо відразудекілька модулів
private void drowModules(ArrayList modules)
{Object [][] objectData = new Object[modules.size()][5];
for (int i = 0; i < modules.size(); i++)
{Module m = (Module)modules.get(i);
objectData[i][0] = m.getModuleNumber();
objectData[i][1] = m.getWeatherData().getRealTemperature();
objectData[i][2] = m.getWeatherData().getRealPresure();
objectData[i][3] = m.getWeatherData().getRealWindDirection();
objectData[i][4] = m.getWeatherData().getRealWindPower();}
tableModel = new DefaultTableModel(objectData, tableColumnNames);
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();
JOptionPane.showMessageDialog(sourse, message);//у разі помилки видаємо повідомлення}}
Клас util.Helper
package dip.util;
import java.util.ResourceBundle;
import java.util.StringTokenizer;
public class Helper {
public static int WaitForResponceInMilis = 10;//очикування відповіді
public static int syncroTime = 10000;//тривалість синхроімпульсу
public static int dataTime = 40000;//тривалість інформаційного рівня сигналу
public static boolean TEST_MODE = false;//наявність тестового режиму
public static byte[] integerToBytes(int number)
{byte [] bytes = new byte [16];
String str01 = Integer.toBinaryString(number);
int length = 16-str01.length();
for (int i = 0; i < length; i++) {
str01="0"+str01;//дописуємо (якщо необхідно) послідовність нулів}
for (int i = 0; i < str01.length(); i++)
{bytes[i] = Byte.parseByte(str01.substring(i, i+1));
System.err.print(""+bytes[i]);}
System.err.println("");
return bytes;}
public static byte [] testStringIntoBytes(int moduleNumber)
{ResourceBundle bundle = ResourceBundle.getBundle("TestValues");
byte [] bytes = new byte[Receiver.PACKAGE_SIZE];
String valueDigits = "";
try
{valueDigits = bundle.getString(moduleNumber + "");}
catch (Exception ex) {return null;}
StringTokenizer token = new StringTokenizer(valueDigits);
int k = 0;
int tokenCount = 0;
while (token.hasMoreTokens()){
Integer value = new Integer(token.nextToken());//розбір тестової строки
byte [] b = integerToBytes(value.intValue());
for (int i = 0; i < b.length ; i++)
{// System.err.println("i+k="+(i+k)+" i="+i+" k="+k+" moduleNumber="+moduleNumber);
bytes[i+k] = b[i+1];//для подачі відповідних сигналів на DR0, DR1}
k = k+16;
tokenCount++;
if (tokenCount > 7) break;//перевірка, якщо проаналізували тестову строку}
// for (int i = 0; i < bytes.length; i++) {
// System.err.print(bytes[i]);
//}
return bytes;}
public static void main(String[] args) {
// integerToBytes(255);
testStringIntoBytes((byte)2);}}
Клас util.Receiver
package dip.util;
import java.io.*;
import javax.swing.JFrame;
import javax.comm.ParallelPort;
public class Receiver extends Thread{//даний клас є потоком
public static final int PACKAGE_SIZE = 1;//размер читаемого пакета
private InputStream in = null;
private ParallelPort parallelPort = null;
private JFrame owner = null;
private static Receiver receiver = null;
public byte [] buffer = new byte [PACKAGE_SIZE];//вхідний буфер даних
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 {
private static Transmitter transmitter = null;
private JFrame owner = null;
private OutputStream out = null;
private ParallelPort parallelPort = null;
public static final int PACKAGE_SIZE = 8;//довжина пакету, що посилається
public static final int SYNCROCOUNT = 8;//кількість підзаряжувальних синхроімпульсів
public static Transmitter getInstance()//маємо лише один екземпляр класу
{if (transmitter != null) return transmitter;
transmitter = new Transmitter();
return transmitter;}
private Transmitter()
{}
public OutputStream getOut() {
return out;}
public void setOut(OutputStream out) {
this.out = out;}
public void sendBytes (byte [] byte01)
{doStartQuery();//спочатку передаємо стартову послідовність
for (int i = 0; i < byte01.length ; i++)
sendByte(byte01[i]);}
private void sendByte(byte b)
{try
{this.getOut().write(b);//запис до відповідного регістру
try { Thread.sleep(0, Helper.dataTime); } catch (InterruptedException ex) { }//встановлюємо затримку
sendSyncro();//посилаємо синхроімпульс}
catch (IOException ex)
{ex.printStackTrace();
System.err.println("Не могу записать в параллельный порт!");}}
private void sendSyncro()
{this.parallelPort.setInputSelect(true);//встановлюємо сигнал
try { Thread.sleep(0, Helper.syncroTime); } catch (InterruptedException ex) { }//затримка
this.parallelPort.setInputSelect(false);//скидаємо сигнал}
private void doStartQuery()
{for (int i = 0; i < 8; i++)//спочатку синхроімпульси
sendByte((byte)0);
for (int i = 0; i < 8; i++)//потім - послідовність «одиниць»
sendByte((byte)1);}
private void writeTestQuery(byte [] testBytes)
{if (testBytes.length != Receiver.PACKAGE_SIZE + 8)
{ System.err.println("Неспівпадння довжини пакету");
return;}
for (int i = 0; i < testBytes.length; i++)
{parallelPort.setPaperOut(testBytes[i]==2);//пишемо «1» якщо 2, інакше - «0»
try { Thread.sleep(0, Helper.dataTime); } catch (InterruptedException ex) { }
parallelPort.setPaperOut(false);
//задання синхронмульсу
parallelPort.setPaperOut(true);
try { Thread.sleep(0, Helper.syncroTime); } catch (InterruptedException ex) { }
parallelPort.setPaperOut(false);}}
public JFrame getOwner() {
return owner;}
public void setOwner(JFrame owner) {
this.owner = owner;}
public void setParallelPort(ParallelPort parallelPort) {
this.parallelPort = parallelPort;}}
Клас obj.WeatherData
package dip.obj;
import dip.util.Helper;
public class WeatherData
{private int temperature = 0;
private int presure = 0;
private int wind1 = 0;
private int wind2 = 0;
private int wind3 = 0;
Double realTemperature ;//температура
Integer realPresure ;//тиск
Double realWindDirection ;//напрямок вітру
Double realWindPower ;//сила вітру
int src = 0;
public int moduleNumber = 0;
byte [] bTemperature = new byte[16];
byte [] bPresure = new byte[16];
byte [] bWind1 = new byte[16];
byte [] bWind2 = new byte[16];
byte [] bWind3 = new byte[16];
byte [] bSrc = new byte[16];
byte [] bModuleNumber = new byte[8];
byte [] receivedBytes ;
public WeatherData(byte [] receivedBytes)
{this.receivedBytes = receivedBytes;
initValues();}
private void initValues()//аналіз прийнятої послідовності
{for (int i = 0; i < receivedBytes.length; i++)
{receivedBytes[i]+=Receiver.PACKAGE_SIZE;
if (i>=0 && i<=7) bModuleNumber[i] = receivedBytes[i];
if (i>=8 && i<=23) bTemperature[i-8] = receivedBytes[i];
if (i>=24 && i<=39) bPresure[i-24] = receivedBytes[i];
if (i>=40 && i<=55) bWind1[i-56] = receivedBytes[i];
if (i>=56 && i<=71) bWind2[i-72] = receivedBytes[i];
if (i>=72 && i<=87) bWind3[i-72] = receivedBytes[i];
if (i>=88 && i<=103) bSrc[i-104] = receivedBytes[i];}
moduleNumber = Integer.parseInt(new String(bModuleNumber), 2);
temperature = Integer.parseInt(new String(bTemperature), 2);
presure = Integer.parseInt(new String(bPresure), 2);
wind1= Integer.parseInt(new String(bWind1), 2);
wind2 = Integer.parseInt(new String(bWind2), 2);
wind3 = Integer.parseInt(new String(bWind3), 2);
src = Integer.parseInt(new String(bSrc), 2);
reliveValues();}
public void reliveValues()
{if (checkSrc())
{if (temperature > 61440)//1111 0000 0000 0000 якщо мінусова температура
{temperature = temperature << 4;
temperature = 0 - temperature;}
realTemperature = new Double(temperature/16);
realPresure = new Integer(presure);
double w1, w2,w3, s1,s2;
w1 = windFunction(wind1);
w2 = windFunction(wind2);
w3 = windFunction(wind3);//обчислення показників за формулою
s1 = w1*Math.cos(Math.pi*0)+w2*Math.cos(Math.pi*(-2/3))+w2*Math.cos(Math.pi*(2/3));//a1+a2+a3
s2 = w1*Math.sin(Math.pi*0)+w2*Math.sin(Math.pi*(-2/3))+w2*Math.sin(Math.pi*(2/3));//b1+b2+b3
realWindPower = new Double(Math.sqrt(s1*s1+s2*s2));//знаходимо силу вітру
realWindDirection = new Double(Math.arctg(s2/s1));// та напрямок}}
private double windFunction(double chastota)
{if (chastota > 2) /обчислення показників за формулою
Подобные документы
Процес послідовної передачі даних, режим її здійснення. Типова схема інтерфейсу. Структурна схема модуля шифрування. Розробка генератора псевдовипадкових чисел на основі регістра зсуву з оберненими зв’язками. Симуляція роботи розробленої моделі пристрою.
курсовая работа [594,1 K], добавлен 09.04.2013Розрахунок часових затримок для формування імпульсів у програмі передачі даних через послідовний порт мікроконтролера, а також розрахунок швидкості передачі даних через послідовний порт. Алгоритм підпрограми обробки переривань від послідовного порту.
курсовая работа [29,9 K], добавлен 07.06.2010Створення спеціалізованої програми на мові програмування Турбо Паскаль для обробки інформації, що вноситься в бази даних по приватних підприємствах. Постановка задачі і структура зберігаючих даних. Розробка алгоритмів основної програми та процедури Is.
курсовая работа [27,0 K], добавлен 07.10.2010Вибір технологічного інструментарію для реалізації проекту. Розробка сценаріїв для створення бази даних і базових таблиць. Аналіз забезпечення декларативної цілісності реляційних даних. Особливість створення об'єктів для маніпулювання інформацією.
курсовая работа [275,7 K], добавлен 17.05.2019Розробка компонентів технічного і програмного забезпечення мікропроцесорного пристрою, аналогово-цифровий і цифро-аналоговий перетворювачі. Синтез структурної схеми фільтру. Структурна схема та алгоритм функціонування пристрою. Програми вводу, виводу.
курсовая работа [869,6 K], добавлен 15.02.2011Узагальнена структурна схема інформаційної системи та алгоритми її роботи. Проект бази даних. Інфологічне проектування і дослідження предметної області. Розробка інфологічної моделі предметної області. Розробка композиційної, логічної системи бази даних.
курсовая работа [861,7 K], добавлен 21.02.2010Проектування і реалізація реляційної бази даних для централізованого зберігання інформації з метою полегшення і систематизації даних замовлень клієнтів готельного комплексу. Розробка сценаріїв для створення бази даних і базових таблиць проекту.
курсовая работа [147,2 K], добавлен 02.06.2019Вибір архітектури та інструментальних засобів розробки. Розробка модуля для перегляду сторінок сайту, доступного, зручного інтерфейсу системи адміністрування. Створення бази даних. Опис механізмів передачі даних між сторінками. Реалізація форуму на сайті.
дипломная работа [7,1 M], добавлен 24.09.2012Розробка програми для автоматизованого розрахунку продажів у крамниці спорттоварів. Розробка концептуальної та логічної моделей бази даних. Автоматизація обробки інформації. Ядро програмного прикладного забезпечення. Розробка візуального інтерфейсу.
курсовая работа [2,3 M], добавлен 26.12.2014Проблема інформаційної обробки геологічних даних. Методи побудови розрізу з відомих елементів залягання. Підготовка даних для аналізу. Ієрархія об'єктів, що беруть участь в побудовах. Розрахунок витрат на розробку та впровадження проектного рішення.
магистерская работа [4,2 M], добавлен 17.12.2014