Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ІКІТ_2015_8.05010201_Шевченко.doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
3.37 Mб
Скачать

Додаток б Опис змінних

Опис

змінної

Одиниці

виміру

Позначення

у VisSim

Призначення

[радіан]

alpha

Кут атаки

[радіан /c]

dotalpha

Похідна по куту атаки

[радіан]

beta

Кут ковзання

[радіан /c]

dotbeta

Похідна по куту ковзання

[радіан]

gamma

Кут крену

[радіан]

da

Відхилення елеронів

[радіан]

de

Відхилення керма висоти

[радіан]

df

Відхилення закрилок

[радіан]

dr

Відхилення керма напряму

-

dthr

Нормований показник відхилення ручки управління тягою двигуна

-

e

Перша ексцентричність

-

pi

Число пі

[кг/м3]

rho

Щільність повітря

[радіан]

psi

Кут рискання

[радіан]

-

Кут нахилу траєкторії

[радіан]

theta

Кут тангажа

[з]

-

Постійна часу приводу

[радіан /c]

-

Вектор кутових швидкостей

[радіан /c]

wx

Кутова швидкість крену

[радіан /c]

wy

Кутова швидкість рискання

[радіан /c]

wz

Кутова швидкість тангажа

Опис змінної

Одиниці виміру

Позначення

у VisSim

Призначення

[радіан /c]

wy _ wind

Кутова швидкість БПЛА обумовлена турбулентністю

[радіан/c]

wz _ wind

Кутова швидкість БПЛА обумовлена турбулентністю

-

-

Випадковий сигнал з нормальним розподілом

-

-

Вектор інтенсивності фільтрів турбулентності

[радіан/c]

Omega

Кутова швидкість обертання пропелера

[об/c]

-

Кутова швидкість обертання пропелера

[радіан/c2]

-

Кутове прискорення обертання пропелера

A

[м/c2]

-

Вектор прискорень в пов'язаній СК

[м/c2]

aturb

Вектор вітрових турбулентних прискорень в пов'язаній СК

[м/c2]

-

Вектор вітрових прискорень в пов'язаній СК

[м/c2]

-

Вектор вітрових фонових прискорень в пов'язаній СК

ba

[м]

ba

Середня аеродинамічна хорда крила

-

Cx0

Мінімальний лобовий опір

-

cxda

Похідна по управлінню креном(елерони)

-

cxde

Похідна по управлінню тангажем(кермо висоти)

-

cxdf

Похідна по управлінню підйомом(закрилки)

-

cxdr

Похідна по управлінню рисканням(кермо напряму)

-

cxM

Похідна по числу Маха

-

cy0

Коефіцієнт підйому при нульовому куті

Тангажа

-

cyalpha

Похідна першого порядку по куту атаки

Опис змінної

Одиниці виміру

Позначення

у VisSim

Призначення

-

cyDalpha

Похідна другого порядку по куту атаки

-

cyde

Похідна по управлінню тангажем(кермо висоти)

-

cydf

Похідна по управлінню підйомом(закрилки)

-

cywz

Похідна по кутовій швидкості тангажа

-

cyM

Похідна по числу Маха

-

czbeta

Похідна по куту ковзання

-

czda

Похідна по управлінню креном(елерони)

-

czdr

Похідна по управлінню рисканням(кермо напряму)

-

czwx

Похідна по кутовій швидкості крену

-

czwy

Похідна по кутовій швидкості рискання

-

czM

Похідна по числу Маха

E

-

osw

Коефіцієнт Освальда

Fl

[кг]

FuelLoad

Початкове завантаження палива

G

[м/с2]

g

Прискорення вільного падіння

[м/с2]

gWGS0

Прискорення вільного падіння на екваторі

-

gWGS1

Гравітаційна постійна

ign

-

ignition

Запалення

m

[кг]

m

Маса БПЛА

mempty

[кг]

mempty

Маса БПЛА при порожніх баках

mempty

[кг]

mgross

Маса БПЛА при повних баках

-

mxbeta

Похідна першого порядку по куту ковзання

-

mxda

Похідна по управлінню креном(елерони)

-

mxdr

Похідна по управлінню рисканням(кермо напряму)

-

mxwx

Похідна по кутовій швидкості крену

-

mxwy

Похідна по кутовій швидкості рискання

Опис змінної

Одиниці виміру

Позначення

у VisSim

Призначення

-

mxM

Похідна по числу Маха

-

mybeta

Похідна першого порядку по куту ковзання

-

myda

Похідна по управлінню креном(елерони)

-

mydr

Похідна по управлінню рисканням(кермо напряму)

-

mywx

Похідна по кутовій швидкості крену

-

mywy

Похідна по кутовій швидкості рискання

-

myM

Похідна по числу Маха

-

mz0

Коефіцієнт підйому при нульовому куті

Тангажа

-

mzalpha

Похідна першого порядку по куту атаки

-

mzDalpha

Похідна другого порядку по куту атаки

-

mzdf

Похідна по управлінню підйомом(закрилки)

-

mzde

Похідна по управлінню тангажем(кермо висоти)

-

mzwz

Похідна по кутовій швидкості тангажа

-

mzM

Похідна по числу Маха

L

[м]

l

Розмах крила

P

[Па]

p

Тиск на поточній висоті

[Па]

psl

Тиск на рівні моря

Pd

[грам/годину]

FuelFlow

Витрата палива на рівні моря

power

[Вт]

-

Потужність двигуна на рівні моря

Q

[кг/м с2]

q

Швидкісний натиск

rAC

[м]

rAC

Точка прикладення аеродинамічної сили

rCG

[м]

rCG

Центр тяжіння БПЛА

rPC

[м]

rHub

Точка прикладення сили тяги двигуна

xg

[м]

x

Поточне положення ЛА в нормальній СК по Oxg

Опис змінної

Одиниці виміру

Позначення

у VisSim

Призначення

zg

[м]

z

Поточне положення ЛА в нормальній СК по Ozg

CP

-

Cp

Коефіцієнт тяги

CT

-

Ct

Коефіцієнт потужності

CGempy

[м]

CGempty

Положення центру мас при порожніх баках

CGgross

[м]

CGgross

Положення центру мас при повних баках

-

-

Матриця переходу від нормальної до пов'язаної СК

-

Dcb

Матриця переходу від пов'язаної до нормальної СК

-

Dck

Матриця переходу від нормальної до швидкісної СК

-

-

Матриця переходу від нормальної до траєкторної СК

[Н]

F

Рівнодійний вектор сил в пов'язаній СК

[Н]

-

Вектор сили тяжіння в пов'язаній СК

[Н]

G

Вектор сили тяжіння в нормальній СК

Hg

[м]

y

Поточне положення ЛА в нормальній СК по Oyg

[кг м2]

J

Матриця моментів інерції

-

-

Коефіцієнт, що характеризує режим роботи гвинта

Jempy

[кг м2]

Jempty

Моменти інерції при порожніх баках

Jeng

[кг м2]

Jeng

Момент інерції двигуна

Jgross

[кг м2]

Jgross

Моменти інерції при порожніх баках

Jprop

[кг м2]

Jprop

Момент інерції пропелера

Jx

[кг м2]

Jx

Момент інерції по OX

Jxy

[кг м2]

Jxy

Момент інерції по OXY

Jy

[кг м2]

Jy

Момент інерції по OY

Jz

[кг м2]

Jz

Момент інерції по OZ

Опис змінної

Одиниці виміру

Позначення

у VisSim

Призначення

[м]

Lf

Вектор опорної відстані до фільтру

Lat

[град]

Lat

Поточна широта

Lon

[град]

Lon

Поточна довгота

M

[Н м]

-

Рівнодійний вектор моментів в пов'язаній СК

M

-

M

Число маху

Maero

[Н м]

Maero

Вектор аеродинамічних моментів

Mprop

[Н м]

Mprop

Вектор гіроскопічних моментів двигуна

P

[Н]

P

Вектор сили тяги двигуна

[грам/годину]

-

Всмоктування палива

[грам/годину]

FuelFlow

Витрата палива

R

[Н]

-

Вектор аеродинамічних сил

[м]

Requiv

Еквівалентний радіус Землі

[м]

-

Радіус меридіана;

[м]

-

Нормальний радіус Землі

S

[м2]

S

Площа крила

T

[До]

T

Температура на поточній висоті

TSL

[До]

Tsl

Температура на рівні моря висоті

V

[м/c]

V

Вектор швидкостей в пов'язаній СК

V

[м/c]

absV

Модуль вектору швидкостей в швидкісній СК

VLat

[м/c]

-

Швидкість по широті

VLon

[м/c]

-

Швидкість по довготі

Vsnd

[м/c]

Vsnd

Швидкість звуку на поточній висоті

[м/c]

Vturb

Швидкість турбулентності

[м/c]

Vwind

Швидкість вітру

[м/c]

Vwind0

Швидкість постійного фонового вітру

Vx

[м/c]

Vx

Швидкість по осі OX в пов'язаній СК

Vy

[м/c]

Vy

Швидкість по осі OY в пов'язаній СК

Vz

[м/c]

Vz

Швидкість по осі OZ в пов'язаній СК

Додаток В

Файл підтримки зв’язку

<input>

<line_separator>newline</line_separator>

<var_separator>;</var_separator>

<chunk>

<name>z-offset-m</name>

<type>float</type>

<node>/sim/current-view/z-offset-m</node>

</chunk>

<chunk>

<name>y-offset-m</name>

<type>float</type>

<node>/sim/current-view/y-offset-m</node>

</chunk>

<chunk>

<name>x-offset-m</name>

<type>float</type>

<node>/sim/current-view/x-offset-m</node>

</chunk>

<chunk>

<name>goal-heading-offset-deg</name>

<type>float</type>

<node>/sim/current-view/goal-heading-offset-deg</node>

</chunk>

<chunk>

<name>goal-pitch-offset-deg</name>

<type>float</type>

<node>/sim/current-view/goal-pitch-offset-deg</node>

</chunk>

<chunk>

<name>goal-roll-offset-deg</name>

<type>float</type>

<node>/sim/current-view/goal-roll-offset-deg</node>

</chunk>

</input>

Додаток Г

Програмна реалізація системи управління

import javax.swing.*;

import javax.swing.event.TableModelListener;

import javax.swing.table.AbstractTableModel;

import javax.swing.table.DefaultTableCellRenderer;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

public class DronePanel extends WindowPanel {

private Drone drone;

private JLabel title;

private JTable stateTable;

private DroneStatesModel stateModel;

private JScrollPane scrollPane;

private JScrollBar vertical;

private JPanel mainPanel;

private JPanel sendPanel;

private MainWindow mainWindow;

public DronePanel(final Manager manager, JFrame frame, final Drone drone, final MainWindow mainWindow) {

super(manager, frame);

this.drone = drone;

this.mainWindow = mainWindow;

setLayout(new BorderLayout());

JButton back = new JButton("Назад");

back.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

mainWindow.setDronesTablePanel();

}

});

title = new JLabel("Мониторинг БПЛА#" + drone.getId(), SwingConstants.CENTER);

title.setFont(new Font("Arial", Font.BOLD, 14));

add(BorderLayout.NORTH, title);

add(BorderLayout.SOUTH, back);

stateModel = new DroneStatesModel(this.drone.getDroneStates());

stateTable = new JTable(stateModel);

stateTable.setRowHeight(25);

DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();

centerRenderer.setHorizontalAlignment(SwingConstants.CENTER);

stateTable.getColumnModel().getColumn(0).setCellRenderer(centerRenderer);

stateTable.getColumnModel().getColumn(1).setCellRenderer(centerRenderer);

stateTable.getColumnModel().getColumn(2).setCellRenderer(centerRenderer);

stateTable.getColumnModel().getColumn(3).setCellRenderer(centerRenderer);

stateTable.getColumnModel().getColumn(4).setCellRenderer(centerRenderer);

scrollPane = new JScrollPane(stateTable);

vertical = scrollPane.getVerticalScrollBar();

vertical.setValue(vertical.getMaximum());

mainPanel = new JPanel(new BorderLayout());

mainPanel.add(BorderLayout.CENTER, scrollPane);

sendPanel = new JPanel();

JLabel sendCmdLabel = new JLabel("CMD: ");

final JTextField sendCmdField = new JTextField(10);

JLabel sendValueLabel = new JLabel("VAL: ");

final JTextField sendValueField = new JTextField(10);

JButton sendButton = new JButton("Отправить");

sendButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// DID=1;CMD=1;VAL=0

String sendStr = "DID=" + drone.getId() + ";CMD=" + sendCmdField.getText() + ";VAL=" + sendValueField.getText();

sendCmdField.setText("");

sendValueField.setText("");

try {

manager.getBs().getPort().write(sendStr);

System.out.println(sendStr);

} catch (NullPointerException ex) {

}

}

});

sendPanel.add(sendCmdLabel);

sendPanel.add(sendCmdField);

sendPanel.add(sendValueLabel);

sendPanel.add(sendValueField);

sendPanel.add(sendButton);

add(BorderLayout.CENTER, mainPanel);

mainPanel.add(BorderLayout.SOUTH, sendPanel);

}

@Override

public void redraw() {

stateTable.repaint();

scrollPane.getViewport().revalidate();

vertical.setValue(vertical.getMaximum());

}

private class DroneStatesModel extends AbstractTableModel {

private ArrayList<DroneState> droneStates;

public DroneStatesModel(ArrayList<DroneState> droneStates) {

this.droneStates = droneStates;

}

@Override

public int getRowCount() {

return droneStates.size();

}

@Override

public int getColumnCount() {

return 5;

}

@Override

public String getColumnName(int columnIndex) {

switch (columnIndex) {

case 0:

return "Time";

case 1:

return "Latitude";

case 2:

return "Longitude";

case 3:

return "Состояние";

case 4:

return "Задание";

}

return null;

}

@Override

public Class<?> getColumnClass(int columnIndex) {

return String.class;

}

@Override

public boolean isCellEditable(int rowIndex, int columnIndex) {

return false;

}

@Override

public Object getValueAt(int rowIndex, int columnIndex) {

DroneState droneState = droneStates.get(rowIndex);

switch (columnIndex) {

case 0:

SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM HH:mm:ss");

return dateFormat.format(droneState.getDate());

case 1:

return droneState.getLatitude();

case 2:

return droneState.getLongitude();

case 3:

return droneState.getState();

case 4:

return droneState.getJob();

}

return null;

}

@Override

public void setValueAt(Object aValue, int rowIndex, int columnIndex) {

}

@Override

public void addTableModelListener(TableModelListener l) {

}

@Override

public void removeTableModelListener(TableModelListener l) {

}

}

}

public class ManagerGUI extends JFrame implements DronesUpdateObserver {

private Manager manager;

private MainWindow mainWindow;

private JLabel statusLabel;

public final static String TITLE = "Manager";

public final static int WIDTH = 930;

public final static int HEIGHT = 600;

public ManagerGUI() {

manager = new Manager();

manager.getBs().addDronesUpdateListener(this);

statusLabel = new JLabel(" Последнее обновление:");

Font font = new Font("Arial", Font.BOLD, 14);

statusLabel.setFont(font);

setMenu();

setTitle(TITLE);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setMinimumSize(new Dimension(WIDTH, HEIGHT));

setBounds(300, 300, WIDTH, HEIGHT);

setVisible(true);

mainWindow = new MainWindow(manager, this);

add(BorderLayout.CENTER, mainWindow);

add(BorderLayout.SOUTH, statusLabel);

}

private void setMenu() {

JMenuBar menuBar = new JMenuBar();

JMenu menuSettings = new JMenu("Настройка");

JMenu menuCom = new JMenu("COM порт");

JMenuItem menuComClose = new JMenuItem("Закрыть порт");

menuSettings.add(menuCom);

menuSettings.add(menuComClose);

menuBar.add(menuSettings);

menuComClose.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

try {

manager.getBs().closeComPort();

System.out.println("Close connection.");

} catch (NullPointerException ex) {

// TODO диалоговое окно

System.out.println("Сначала откройте соединение");

}

}

});

final String[] allPorts = SerialPortList.getPortNames();

for (int i = 0; i < allPorts.length; i++) {

JMenuItem menuPort = new JMenuItem(allPorts[i]);

menuCom.add(menuPort);

menuPort.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

manager.getBs().setComPort(e.getActionCommand());

manager.getBs().getPort().addComListener(mainWindow.getTerminalPanel());

}

});

}

this.setJMenuBar(menuBar);

}

@Override

public void onDronesUpdate() {

mainWindow.redraw();

SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.ms");

statusLabel.setText(" Последнее обновление: " + dateFormat.format(new Date()));

}

}

private JTextArea textArea;

private JScrollPane scrollPane;

private JScrollBar vertical;

private JTextField sendText;

public TerminalPanel(final Manager manager, JFrame frame) {

super(manager, frame);

setLayout(new BorderLayout());

textArea = new JTextArea();

textArea.setEditable(false);

Font font = new Font("Verdana", Font.PLAIN, 14);

textArea.setFont(font);

scrollPane = new JScrollPane(textArea);

vertical = scrollPane.getVerticalScrollBar();

add(BorderLayout.CENTER, scrollPane);

JPanel sendPanel = new JPanel();

sendText = new JTextField(40);

JButton sendButton = new JButton("Отправить");

sendButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

String sendStr = sendText.getText();

sendText.setText("");

try {

manager.getBs().getPort().write(sendStr);

textArea.append("[OUT] " + sendStr + "\n");

vertical.setValue(vertical.getMaximum());

} catch (NullPointerException ex) {

System.out.println("Сначала откройте соединение");

}

}

});

sendPanel.add(sendText);

sendPanel.add(sendButton);

add(BorderLayout.SOUTH, sendPanel);

}

@Override

public void redraw() {

}

@Override

public void onComReceive(String receiveString) {

textArea.append("[IN] " + receiveString);

vertical.setValue(vertical.getMaximum());

}

}