Смекни!
smekni.com

Прилад прийому та обробки метеорологічних даних (стр. 16 из 18)

помилка у контрольній сумі (виникла помилка при передачі).

Якщо все гаразд – (не виникло жодної помилки) – отримуємо на екрані результат опитування модуля).

Також можна опитати усі активні модулі натиснувши на кнопку “Опитати всі модулі”, при цьому отримаємо інформаціюпо всіх модулях, зазначених у списку, якщо результати опитування певного модуля не присутні на інформаційній панелі – треба дивитися список помилок.

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()+" не даёт ответ&bsol;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()+" Несовпадение номера модуля&bsol;n";

continue;}

WeatherData wethData = currentModule.getWeatherData();

if (wethData.checkSrc() == true)

{modulesToDraw.add(currentModule);//додаємо до списку відних модулів}

else

{errStr += "Модуль № "+currentModule.getModuleNumber()+" Ошибка контрольной суммы&bsol;n";