Конструкція 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 Вихідні дані
Вихідні дані програми – інформація, отримана від модуля збору метеорологічних даних, при наявності помилок – повідомлення з інформацією про помилку. Вихідні дані можуть бути представлені у вигляді текстового файлу, або графічним відображенням.
Вихідні дані також можуть бути представлені у вигляді серіалізованих об’єктів, для їх подальшої обробки та використання.
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.
Охорона праці і навколишнього середовища