Робота з програмою у тестовому режимі

 

Для роботи програми у тестовому режимі необхіден файл 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) /обчислення показників за формулою

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()+")";//для відображення модуля}}



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: