- •Завдання на виконання дипломної роботи
- •6. Календарний план-графік
- •7. Консультанти з окремих розділів роботи:
- •Реферат
- •Перелік скорочень
- •Розділ 1 класифікація бпла
- •Класифікація бпла за способами управління
- •1.2. Класифікація бпла по використаних в них навігаційних системам
- •1.3. Перспективи застосування інерціальної навігаційної системи та її програмне забезпечення
- •1.4. Інерціальна та супутникова навігаційні системи
- •Розділ 2 бортове устаткування сучасних бпла
- •2.1. Склад бортового устаткування бпла
- •2.2. Пілотажно-навігаційні комплекси
- •2.3. Функції тактично-навігаційного комплексу
- •2.4. Елементи тактичної навігаційної системи
- •2.5. Наземна апаратура управління бпла
- •Розділ 3 математична модель бпла
- •3.1. Опис математичної моделі літального апарату
- •3.2. Рульові органи літального апарату і системи координат
- •3.3. Повна нелінійна модель просторового руху літака
- •3.4. Модель двигуна
- •3.5.Модель атмосфери і повітряних обурень
- •3.6. Модель Землі
- •3.7. Модель рульових органів
- •Розділ 4 Розробка алгоритмів управління бпла
- •4.1. Методи декомпозиції управління бпла
- •4.2. Математичний опис польотного завдання
- •4.2.1. Загальні положення
- •4.2.2. Петля Нестерова
- •4.3. Синтез управління на траєкторному рівні
- •4.3.1. Управління рухом літального апарату
- •4.3.2. Управління орієнтацією літального апарату
- •4.4. Розробка алгоритму управління літального апарату у вертикальній площині
- •4.5. Прокладка маршруту в географічних координатах
- •4.6. Програмна реалізація алгоритмів управління
- •4.7. Розробка блоку візуалізації польоту бпла по результатам вище наведених розрахунків.
- •Розділ 5 Розвиток систем з бпла
- •5.1. Проблеми розвитку систем з бпла
- •5.2. Шляхи вирішення проблеми створення систем з бпла
- •Висновки
- •Список використаних джерел
- •Додаток а Опис параметрів моделі
- •Додаток б Опис змінних
Додаток б Опис змінних
Опис змінної |
Одиниці виміру |
Позначення у 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()); |
|
} |
|
} |
