Разработка фрагмента специального математического и программного обеспечения передачи данных на основе протокола TCP/IP
Управление боевыми действиями артиллерийского дивизиона. Разработка фрагмента специального математического и программного обеспечения передачи сообщений на основе протокола TCP/IP в системе программирования Delphi 2007. Описание TCP/IP протокола.
Рубрика | Военное дело и гражданская оборона |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 24.02.2012 |
Размер файла | 4,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Команды:
- на подготовку к ведению огня по цели (a1),
- на заряжание орудий (a2),
- на открытие огня (a3),
- на корректирование стрельбы в ходе огня на поражение (a4).
То есть массив команд имеет следующий вид:
.
Распоряжения:
- на засечку цели (b1),
- на определение установок по цели (b2),
- на расчет расхода снарядов (b3).
То есть массив распоряжений имеет следующий вид:
.
Донесения:
- о готовности к стрельбе (c1),
- о расходе боеприпасов (c2),
- о потерях (c3),
- о дозах облучения личного состава (л/с) (c4),
донесение об окончании стрельбы (c5).
То есть массив донесений имеет следующий вид:
.
Запросы на решение задач:
- преобразование координат (d1),
- расчет дирекционного угла ориентирного направления (d2),
- расчет размеров цели (d3),
- данные целеуказания (d4),
- расчет угломера (d5),
- расчет смещения панорамы (d6),
- расчет глубины укрытия (d7),
- метеосредний (d8),
- сосредоточенный огонь (d9),
То есть массив запросов имеет следующий вид:
.
На основе (3.3) имеем соответствия
, , (3.8)
где - задача открытия огня по отдельной цели;
S(m) - множество всех сообщений.
Но нам нужны только сообщения, необходимые для выполнения огневой задачи , то есть имеющие значения 1 («истина») в таблице 3.1 в столбце задачи . Поэтому исходя из (3.4) формируем подмножества сообщений , , необходимых для решения задачи :
. (3.9)
На основании данного анализа составлена следующая матрица смежности , вот ее фрагмент.
Таблица 3.2 - Фрагмент матрицы смежности в соответствии с выбранной задачей
Задача сообщения№ п/п |
Сосредоточенный огонь |
|
1. |
команда на подготовку к ведению огня по цели (a1) |
|
2. |
команда на заряжание орудий (a2) |
|
3. |
команда на открытие огня (a3) |
|
4. |
команда на корректирование стрельбы в ходе огня на поражение (a4) |
|
5. |
распоряжение на засечку цели (b1) |
|
6. |
распоряжение на определение установок по цели (b2) |
|
7. |
распоряжение на расчет расхода снарядов (b3) |
|
8. |
донесение о готовности к стрельбе (c1) |
|
9. |
донесение о расходе боеприпасов (c2) |
|
10. |
донесение о потерях (c3) |
|
11. |
донесение о дозах облучения л/с (c4) |
|
12. |
донесение об окончании стрельбы (c5) |
|
13. |
запрос на преобразование координат (d1) |
|
14. |
запрос на расчет дирекционного угла ориентирного направления (d2) |
|
15. |
запрос на расчет размеров цели (d3) |
|
16. |
запрос о данных целеуказания (d4) |
|
17. |
запрос на расчет угломера (d5) |
|
18. |
запрос на расчет смещения панорамы (d6) |
|
19. |
запрос на расчет глубины укрытия (d7) |
|
20. |
запрос «метеосредний» (d8) |
|
21. |
запрос о задаче сосредоточенного огня (d9) |
Используя выражение (3.6), определим отношения предшествования на множестве :
, . (3.10)
Таблица 3.3 Отношения предшествования на множестве сообщений
R |
b1 |
d2 |
d4 |
d3 |
a1 |
b2 |
d1 |
d5 |
d7 |
d8 |
c1 |
d9 |
R |
a2 |
a3 |
d5 |
d6 |
a4 |
b3 |
c2 |
c3 |
c4 |
c5 |
Определенную хронологическую последовательность сообщений для задачи формировать нецелесообразно, так как должностные лица дивизиона на автоматизированных рабочих местах окончательное решение на передачу сформированной команды принимают самостоятельно.
Таким образом, разработанная математическая модель информационного обмена в контуре управления артиллерийского дивизиона позволяет:
- определить множество передаваемых сообщений при выполнении огневых задач;
- производить тестирование фрагмента СМПО.
3.2 Разработка фрагмента СМПО передачи сообщений на основе протокола TCP/IP в системе программирования Delphi 2007
Ключевым моментом в процессе создания любого программного продукта является выбор среды программирования. Очевидно, что она должна обеспечивать решение всех стоящих перед разработчиком задач с привлечением по возможности минимального количества дополнительных средств, при условии ограничений на время создания программы, а также достаточно удобного пользовательского интерфейса.
При создании требуемого программного продукта разработчик сталкивается со значительным количеством сильно отличающихся по своему характеру подзадач, начиная от решения проблемы разработки наиболее понятного пользователям графического интерфейса, и заканчивая созданием распределенных приложений на рабочих местах должностных лиц. Важное место в разработке программной реализации фрагмента СМПО занимают эффективная реализация алгоритмов решения задачи организации информационного взаимодействия при помощи выбранного языка программирования на основе TCP/IP-протокола.
Решение всех рассмотренных выше задач возможно при использовании визуальной среды программирования Delphi. Ее возможности полностью отвечают изложенным требованиям и подходят для создания систем любой сложности.
Важнейшая характеристика разрабатываемой программы - удобство ее пользовательского интерфейса, наличие и доступность необходимых элементов управления. В системе Delphi имеется специальный проектировщик форм, с помощью которого окна будущей программы подготавливаются в виде форм. Проектировщик позволяет подобрать оптимальные размеры окон, разместить и настроить возможные элементы управления и меню, добавить готовые изображения, указать заголовки, подсказки, подписи и так далее.
В свое время весьма популярной версией языка Pascal был Turbo Pascal, разработанный компанией Borland. С развитием операционной системы Windows и технологий объектно-ориентированного программирования компания Borland естественным образом расширила Turbo Pascal, создав версии Turbo Pascal for Windows и Object Pascal for Windows под управлением Windows. Главная задача Delphi - быстрая разработка приложений, что полностью удовлетворяет имеющиеся у нас ограничения по времени.
К тому же в Delphi особое внимание уделяется возможности визуальной разработки приложений с помощью большого набора готовых компонентов, позволяющих избежать ручного кодирования (рисунок 3.2). Эти компоненты охватывают практически все аспекты применения современных информационных технологий.
Рисунок 3.2 - Визуальные компоненты Delphi
При этом обеспечивается совместимость приложений при выходе новых версий Delphi благодаря библиотеке независимых и легко настраиваемых компонентов, что немаловажно в процессе дальнейшего усовершенствования фрагмента СМПО во время его эксплуатации. Рассмотрим кратко возможности Delphi по решению наиболее важных задач создания программного обеспечения в составе автоматизированного рабочего места должностного лица артиллерийского дивизиона.
При разработке приложения первым делом необходимо создать и форматировать должным образом главную форму - fMain, ее изображение на рисунке 3.3. На главной форме размешены все компоненты обеспечивающие работоспособность программы (рисунок 3.4): компоненты обеспечивающие связь с базой данных на рисунке обведены красным, компоненты TCP/IP протокола на рисунке обведены синим, остальные компоненты служат для создания дружественного интерфейса [2].
Рисунок 3.3 - Главная форма фрагмента СМПО
Рисунок 3.4 - Основные компоненты
Связь с базой данных обеспечивают компоненты: ADOTable, ADOConnection и DataSource. Информация, содержащаяся в базе данных представляет собой таблицу абонентов. Она отображается в специальной форме - fTable (рисунок 3.5) и может быть изменена.
Рисунок 3.5 - Таблица абонентов
Для передачи сообщений через локальную сеть используются следующие компоненты: TcpClient и TcpServer. Они обеспечивают установку соединение между приложениями через TCP/IP протокол с использованием IP-адресации.
При передаче сообщений для идентификации приложения используется порт: 6510.
Создаваемый фрагмент СМПО является клиент-серверным приложением, то есть сочетает в себе свойства присущие и клиенту и серверу.
Соединение устанавливается только при необходимости передачи данных, поэтому для «поддержания» одновременно нескольких активных соединений используется только один компонент типа TTcpClient. Компонент активируется непосредственно перед передачей сообщения и отключается сразу после этого.
Разрабатываемый фрагмент СМПО является унифицированным для всех должностных лиц дивизиона, но предусматривает обязательное определение должности: командир дивизиона, начальник штаба дивизиона, командир батареи или старший офицер батареи.
При этом необходимо следить за тем что бы IP-адрес АРМ соответствовал IP-адресу данного должностного лица в таблице абонентов.
Программа разработана таким образом, что возможность установки соединений доступна только после выбора режима работы (должности). Форма установки (проверки) соединений представлена на рисунке 3.6.
Рисунок 3.6 - Форма проверки соединений
Процедура проверки соединений имеет вид:
procedure TfConnect.bConnectClick(Sender: TObject);
var i: integer;
begin
for I := 1 to 3 do
begin
fMain.TcpClient.RemoteHost := StringGrid.Cells[2,i];
fMain.TcpClient.Active := true;
if fMain.TcpClient.Connected then StringGrid.Cells[3,i] := 'Установленно'
else StringGrid.Cells[3,i] := 'Не установленно';
fMain.TcpClient.Active := false;
end;
for I := 1 to 3 do
if StringGrid.Cells[3,i] = 'Установленно' then
begin
fMain.tbConnect.ImageIndex := 5;
fMain.tbTask.Enabled := true;
fMain.N21.Enabled := true;
fMain.N22.Enabled := true;
fMain.N23.Enabled := true;
exit;
end;
end;
Как видно из текста процедуры кнопка tbTask, находящаяся на главной форме и отвечающая за выбор вида сообщения, становится доступной только при установке хотя бы одного соединения.
Формы для отправки сообщений представлены на рисунках 3.7, 3.8, 3.9.
Рисунок 3.7 - Форма отправки запроса
Рисунок 3.8 - Форма отправки донесения
Рисунок 3.9 - Форма постановки огневой задачи.
Рассмотрим процедуру отправки сообщения на примере отправки запроса:
procedure TfQuestion.bSendClick(Sender: TObject);
var i: integer;
ln: string
begin
//Проверка правильности ввода данных
if (cbPost.ItemIndex = -1) or (cbTask.ItemIndex = -1) then
begin
MessageDlg('Проверьте правильность ввода!',mtError,[mbOk],0,mbOk);
exit;
end;
//
// Определение адресата
for i := 1 to fConnect.StringGrid.RowCount - 1 do
if cbPost.Text = fConnect.StringGrid.Cells[1,i] then break;
//
//Определение типа запроса
if cbTask.ItemIndex = 0 then ln := 'свои координаты';
if cbTask.ItemIndex = 1 then ln := 'готовность';
if cbTask.ItemIndex = 2 then ln := 'обстановку';
//
//Отправка сообщения
fMain.TcpClient.RemoteHost := fConnect.StringGrid.Cells[2,i];
fMain.TcpClient.Active := True;
fMain.TcpClient.Sendln('Доложите ' + ln);
fMain.TcpClient.Active := false;
//
end;
Для приема сообщений используется компонент TcpServer, который всегда находится в режиме «дежурный прием», для идентификации приложения используется порт 6510. TcpServer имеет в своем составе событие OnAccept, которое активируется в случае установки соединения. Процедура описывающая это событие имеет вид:
procedure TfMain.TcpServerAccept(Sender: TObject;
ClientSocket: TCustomIpClient);
var i: integer;
begin
// Определение отправителя
for i := 1 to fConnect.StringGrid.RowCount - 1 do
if fConnect.StringGrid.Cells[2,i] = ClientSocket.RemoteHost then
begin
fMessage.lSender.Caption := fConnect.StringGrid.Cells[1,i];
break;
end;
//
fMessage.mText.Text := ClientSocket.Receiveln; // Прием сообщения
fMessage.ShowModal; //Вывод сообщения
end;
Рисунок 3.10 - Форма приема сообщения
Для описания назначения программного продукта разработана специальная форма «о программе» - рисунок 3.11.
Рисунок 3.11 - Форма описывающая назначение СМПО
Таким образом, разработанный фрагмент СМПО отвечает всем предъявленным к нему требованиям и можно приступать к его тестированию и последующему применению.
боевой артиллерийский передача сообщение протокол
4. порядок работы с разработанным ФРАГМЕНТом СМПО при выполнении огневых задач
В настоящее время автоматизированные системы управления (АСУ) активно развиваются. Происходит централизация управления, интеграция иерархических массивов со строго иерархической системой сбора данных, увеличение объемов перерабатываемой информации, сокращение времени обработки данных, совершенствование методов решения задач, замена устаревшей техники новой, более совершенной и перспективной, улучшение принципов функционирования автоматизированных систем управления в различных режимах работы. Происходит процесс все большего усложнения программно-математического аппарата, появляется возможность решения все большего объема задач.
Вместе с тем расширяются и обогащаются функции личного состава, связанного с АСУ. Для полноценного использования комплексов необходима все более тщательная подготовка специалистов, нужно постоянно поддерживать навыки в работе на автоматизированных рабочих местах машин управления. Поэтому основная задача разрабатываемого фрагмента СМПО - унифицировать и облегчить процессы передачи данных в контуре управления артиллерийского дивизиона, использующего комплекс средств автоматизированного управления.
Предложенный способ адресации на основе IP-адресов имеет существенное преимущество по сравнению с зонной адресацией в том, что появляется возможность передачи данных через существующие глобальные, региональные и локальные компьютерные сети, а также использование и создание аппаратуры, имеющей свой IP-адрес.
Рассмотрим более подробно порядок использования разработанного фрагмента СМПО.
Работу с разработанным фрагментом СМПО можно условно подразделить на два этапа: настройку программы и собственно работу.
Поэтому сначала необходимо произвести настройку. Начнем с таблицы абонентов. Она представляет собой таблицу базы данных и может быть изменена как в самом фрагменте СМПО, так и в СУБД Access, входящей в состав MS Office. Для настройки таблицы абонентов через разработанную программу необходимо нажать кнопку с изображением блокнота на панели инструментов либо выбрать соответствующий пункт главного меню в разделе «Настройки». Далее необходимо ввести позывные и IP-адреса должностных лиц (рисунок 4.1).
Рисунок 4.1 - Настройка таблицы абонентов
Так как такую настройку необходимо провести на всех рабочих местах. Целесообразно сначала разработать требуемую базу данных (таблицу абонентов), а потом разослать ее на все рабочие места.
Для полноценного функционирования программного продукта, необходимо убедиться в соответствии IP-адреса АРМ IP-адресу, указанному в таблице абонентов для данного должностного лица. Для этого заходим в подменю «Свойства сетевого окружения». В открывшемся окне выбираем пункт «Протокол Интернета TCP/IP», нажимаем кнопку «Свойства» и уточняем (записываем) используемый IP-адрес (рисунок 4.2).
Рисунок 4.2 - Значение IP-адреса
После этого выбирают режим работы программы, путем определения должностного лица, которое будет работать на этом АРМ. Для этого необходимо нажать на кнопку с изображением руки и бланка на панели инструментов или выбрать соответствующий пункт главного меню во вкладке «Настройки» (рисунок 4.3).
Рисунок 4.3 - Настройки режима работы АРМ
После выбора режима работы становится доступной кнопка «подключения» на панели инструментов. Для дальнейшей работы необходимо проверить состояние соединений с другими должностными лицами. Для этого необходимо нажать кнопку с изображением красного круга на панели инструментов или выбрать соответствующий пункт главного меню во вкладке «Настройки». После этого появится форма проверки соединений. Далее необходимо нажать на кнопку «Установить соединение» и программа автоматически проверит возможность установки соединений (рисунок 4.4).
Рисунок 4.4 - Проверка активных соединений
При наличии хотя бы одного активного соединения программа позволяет перейти непосредственно к отправке сообщений. На этом этап настройки завершен.
В качестве примера рассмотрим постановку огневой задачи на ведение сосредоточенного командиром дивизиона командиру батареи. Для отправки сообщения необходимо выбрать кнопку с изображением руки, делающей записи в блокнот на панели инструментов или выбрать соответствующую вкладку главного меню (рисунок 4.5).
Рисунок 4.5 - Отправка сообщений
Далее необходимо выбрать вид сообщения. Для постановки огневой задачи выбираем соответствующую позицию. Далее открывается окно отправки выбранного сообщения. В нем необходимо выбрать привлекаемые средства, ввести номер, характер и координаты цели, а также выбрать снаряд, заряд, вид и установку взрывателя (рисунок 4.7). После ввода всех необходимых данных сообщение может быть отправлено. Адресат получит сообщение вида
Рисунок 4.6 - Входящее сообщение
Рисунок 4.7 - Формуляр огневой задачи
После уяснения огневой задачи командир батареи, аналогично, ставит задачу старшему офицеру батареи, для этого он использует тот же бланк постановки огневых задач. После выполнения огневой задачи командир батареи докладывает об этом командиру дивизиона, отправляя сообщение вида «донесение» (рисунки 4.8 - 4.9).
Рисунок 4.8 - Формуляр донесения
4.9 - Прием доклада
Таким образом, в ходе выполнения огневой задачи путем заполнения определенных формуляров команды автоматически поступают на рабочие места должностных лиц. Можно сделать вывод, что осуществляется процесс информационного обмена, отвечающий основным требованиям управления.
Заключение
В работе был проведен анализ задач, решаемых должностными лицами артиллерийского дивизиона с применением комплексов средств автоматизированного управления, и информационных процессов в цикле управления, на его основе была разработана имитационная модель функционирования фрагмента СМПО, обеспечивающая решение всех задач управления подчиненными силами и средствами в ходе огневого поражения противника.
Программная реализация фрагмента СМПО, выполненная с помощью языка объектно-ориентированного программирования Object Pascal и созданной на его основе визуальной среды программирования Delphi, позволяет сделать вывод о том, что разработанный программный продукт может стать основой при создании более сложной системы передачи данных входящей в состав СМПО АРМ КШМ.
Кроме того, был рассмотрен порядок использования предлагаемого фрагмента СМПО в практике боевой работы войск, на основе чего можно сделать выводы о возможности его применения в ходе выполнения огневых задач.
На основе анализа возможных способов применения разработанного программного продукта, сделан вывод, что предложенный способ адресации на основе IP-адресов имеет существенное преимущество по сравнению с зонной адресацией в том, что появляется возможность передачи данных через существующие глобальные, региональные и локальные компьютерные сети, а также использование и создание аппаратуры, имеющей свой IP-адрес.
Список используемой литературы
1 . Правила стрельбы и управления огнем артиллерии (ПСиУО-96). - М.: Воениздат, 2001. - 143-168 с.
2 . Фленов М.Е. Библия Delphi. - СПб.: БХВ-Петербург, 2004. - 439 с.
3 . Шапиро Д.Р., Бойс Д.С. Windows 2000 Server. - СПб.: Диалектика, 2003. 321-327 с.
4 . Передельский Г.Е. Управление артиллерийским дивизионом в бою. - М.: Воениздат, 1986. - 3-17 с.
5 . Основы построения и эксплуатации АСУВ. Учебное пособие. - Спб.: МВАА, 2009 г. - 43-48 с.
6 . Комплекс автоматизированного управления огнем артиллерийского дивизиона 1В12-3 «Машина - М». Учебное пособие. - СПб.: МВАА, 2009 г. - 3-28 с.
Приложение
Листинг программы
Главная форма
unit unMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, Menus, ToolWin, ComCtrls, ExtCtrls, DB, ADODB,
DBCtrls, Grids, DBGrids, ImgList, unTable, unQuestion, unReport,
unConnect, unAbout, unMessage, unTask, ScktComp, Sockets, StdCtrls;
type
TfMain = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N2: TMenuItem;
N21: TMenuItem;
N22: TMenuItem;
N23: TMenuItem;
N13: TMenuItem;
N3: TMenuItem;
StatusBar1: TStatusBar;
Timer1: TTimer;
ToolBar1: TToolBar;
tbTable: TToolButton;
ToolButton2: TToolButton;
tbPost: TToolButton;
ToolButton4: TToolButton;
tbConnect: TToolButton;
ToolButton6: TToolButton;
tbTask: TToolButton;
DataSource1: TDataSource;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
ImageList1: TImageList;
pmCommand: TPopupMenu;
NN21: TMenuItem;
NN23: TMenuItem;
NN22: TMenuItem;
pmPost: TPopupMenu;
nKD: TMenuItem;
nNSh: TMenuItem;
nKB: TMenuItem;
nSOB: TMenuItem;
ToolButton8: TToolButton;
tbExit: TToolButton;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
TcpClient: TTcpClient;
TcpServer: TTcpServer;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure tbExitClick(Sender: TObject);
procedure N13Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure nKDClick(Sender: TObject);
procedure nNShClick(Sender: TObject);
procedure nKBClick(Sender: TObject);
procedure nSOBClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure NN21Click(Sender: TObject);
procedure NN22Click(Sender: TObject);
procedure NN23Click(Sender: TObject);
procedure TcpServerAccept(Sender: TObject; ClientSocket: TCustomIpClient);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fMain: TfMain;
implementation
{$R *.dfm}
procedure TfMain.Button1Click(Sender: TObject);
begin
fMessage.ShowModal;
end;
procedure TfMain.FormCreate(Sender: TObject);
begin
StatusBar1.Panels.Items[2].Text := DateToStr(date);
StatusBar1.Panels.Items[1].Text := TimeToStr(time);
end;
procedure TfMain.N11Click(Sender: TObject);
begin
fTable.ShowModal;
end;
procedure TfMain.N13Click(Sender: TObject);
begin
fConnect.ShowModal;
end;
procedure TfMain.N3Click(Sender: TObject);
begin
fAbout.ShowModal;
end;
procedure TfMain.nKBClick(Sender: TObject);
var i,j: integer;
begin
j := 1;
ADOTable1.First;
for i := 0 to 3 do
begin
if ADOTable1.Fields[1].AsString <> 'Командир батареи' then
begin
fConnect.StringGrid.Cells[0,j] := ADOTable1.Fields[1].AsString;
fConnect.StringGrid.Cells[1,j] := ADOTable1.Fields[2].AsString;
fConnect.StringGrid.Cells[2,j] := ADOTable1.Fields[3].AsString;
j := j + 1;
end;
ADOTable1.MoveBy(1);
end;
fMain.Caption := 'АРМ командира батареи';
N4.Checked := false;
N5.Checked := false;
N6.Checked := true;
N7.Checked := false;
nKD.Checked := false;
nNsh.Checked := false;
nKB.Checked := true;
nSOB.Checked := false;
N13.Enabled := true;
tbConnect.Enabled := true;
end;
procedure TfMain.nKDClick(Sender: TObject);
var i,j: integer;
begin
j := 1;
ADOTable1.First;
for i := 0 to 3 do
begin
if ADOTable1.Fields[1].AsString <> 'Командир дивизиона' then
begin
fConnect.StringGrid.Cells[0,j] := ADOTable1.Fields[1].AsString;
fConnect.StringGrid.Cells[1,j] := ADOTable1.Fields[2].AsString;
fConnect.StringGrid.Cells[2,j] := ADOTable1.Fields[3].AsString;
j := j + 1;
end;
ADOTable1.MoveBy(1);
end;
fMain.Caption := 'АРМ командира дивизиона';
N4.Checked := true;
N5.Checked := false;
N6.Checked := false;
N7.Checked := false;
nKD.Checked := true;
nNsh.Checked := false;
nKB.Checked := false;
nSOB.Checked := false;
N13.Enabled := true;
tbConnect.Enabled := true;
end;
procedure TfMain.NN21Click(Sender: TObject);
begin
fTask.ShowModal;
end;
procedure TfMain.NN22Click(Sender: TObject);
begin
fQuestion.ShowModal;
end;
procedure TfMain.NN23Click(Sender: TObject);
begin
fReport.ShowModal;
end;
procedure TfMain.nNShClick(Sender: TObject);
var i,j: integer;
begin
j := 1;
ADOTable1.First;
for i := 0 to 3 do
begin
if ADOTable1.Fields[1].AsString <> 'Начальник штаба дивизиона' then
begin
fConnect.StringGrid.Cells[0,j] := ADOTable1.Fields[1].AsString;
fConnect.StringGrid.Cells[1,j] := ADOTable1.Fields[2].AsString;
fConnect.StringGrid.Cells[2,j] := ADOTable1.Fields[3].AsString;
j := j + 1;
end;
ADOTable1.MoveBy(1);
end;
fMain.Caption := 'АРМ начальника штаба дивизиона';
N4.Checked := false;
N5.Checked := true;
N6.Checked := false;
N7.Checked := false;
nKD.Checked := false;
nNsh.Checked := true;
nKB.Checked := false;
nSOB.Checked := false;
N13.Enabled := true;
tbConnect.Enabled := true;
end;
procedure TfMain.nSOBClick(Sender: TObject);
var i,j: integer;
begin
j := 1;
ADOTable1.First;
for i := 0 to 3 do
begin
if ADOTable1.Fields[1].AsString <> 'Старший офицер батареи' then
begin
fConnect.StringGrid.Cells[0,j] := ADOTable1.Fields[1].AsString;
fConnect.StringGrid.Cells[1,j] := ADOTable1.Fields[2].AsString;
fConnect.StringGrid.Cells[2,j] := ADOTable1.Fields[3].AsString;
j := j + 1;
end;
ADOTable1.MoveBy(1);
end;
fMain.Caption := 'АРМ старшего офицера батареи';
N4.Checked := false;
N5.Checked := false;
N6.Checked := false;
N7.Checked := true;
nKD.Checked := false;
nNsh.Checked := false;
nKB.Checked := false;
nSOB.Checked := true;
N13.Enabled := true;
tbConnect.Enabled := true;
end;
procedure TfMain.tbExitClick(Sender: TObject);
begin
Close;
end;
procedure TfMain.TcpServerAccept(Sender: TObject;
ClientSocket: TCustomIpClient);
var i: integer;
begin
// Определение отправителя
for i := 1 to fConnect.StringGrid.RowCount - 1 do
if fConnect.StringGrid.Cells[2,i] = ClientSocket.RemoteHost then
begin
fMessage.lSender.Caption := fConnect.StringGrid.Cells[1,i];
break;
end;
//
fMessage.mText.Text := ClientSocket.Receiveln; // Прием сообщения
fMessage.ShowModal; //Вывод сообщения
end;
procedure TfMain.Timer1Timer(Sender: TObject);
begin
StatusBar1.Panels.Items[1].Text := TimeToStr(time);
end;
end.
Форма таблицы абонентов
unit unTable;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls;
type
TfTable = class(TForm)
DBGrid: TDBGrid;
DBNavigator: TDBNavigator;
bBack: TButton;
procedure bBackClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fTable: TfTable;
implementation
{$R *.dfm}
uses unMain;
procedure TfTable.bBackClick(Sender: TObject);
begin
fTable.Close;
end;
end.
Форма проверки состояния соединений
unit unConnect;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TfConnect = class(TForm)
bConnect: TButton;
bDisconnect: TButton;
bBack: TButton;
StringGrid: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure bBackClick(Sender: TObject);
procedure bConnectClick(Sender: TObject);
procedure bDisconnectClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fConnect: TfConnect;
implementation
{$R *.dfm}
uses unMain, unQuestion, unReport, unCommand, unTask;
procedure TfConnect.bConnectClick(Sender: TObject);
var i: integer;
begin
for I := 1 to 3 do
begin
fMain.TcpClient.RemoteHost := StringGrid.Cells[2,i];
fMain.TcpClient.Active := true;
if fMain.TcpClient.Connected then StringGrid.Cells[3,i] := 'Установленно'
else StringGrid.Cells[3,i] := 'Установленно';
fMain.TcpClient.Active := false;
end;
for I := 1 to 3 do
if StringGrid.Cells[3,i] = 'Не установленно' then
begin
fMain.tbConnect.ImageIndex := 5;
fMain.tbTask.Enabled := true;
fMain.N21.Enabled := true;
fMain.N22.Enabled := true;
fMain.N23.Enabled := true;
exit;
end;
end;
procedure TfConnect.bDisconnectClick(Sender: TObject);
var i: integer;
begin
fMain.TcpClient.Active := false;
for I := 1 to 3 do
StringGrid.Cells[3,i] := 'Не установленно';
fMain.tbConnect.ImageIndex := 4;
fMain.tbTask.Enabled := false;
fMain.N21.Enabled := false;
fMain.N22.Enabled := false;
fMain.N23.Enabled := false;
end;
procedure TfConnect.bBackClick(Sender: TObject);
begin
fConnect.Close;
end;
procedure TfConnect.FormCreate(Sender: TObject);
begin
StringGrid.Cells[0,0] := 'Должностное лицо';
StringGrid.Cells[1,0] := 'Позывной';
StringGrid.Cells[2,0] := 'IP-адрес';
StringGrid.Cells[3,0] := 'Статус соединения';
end;
end.
Форма постановки огневых задач
unit unTask;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CheckLst, ExtCtrls;
type
TfTask = class(TForm)
Label1: TLabel;
Label2: TLabel;
clbPozivnie: TCheckListBox;
rgPredvKomanda: TRadioGroup;
Label3: TLabel;
eNomer: TEdit;
Label4: TLabel;
cbHarakter: TComboBox;
Label5: TLabel;
cbUcrytoct: TComboBox;
cbBronirovanaya: TComboBox;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
eX: TEdit;
eY: TEdit;
eH: TEdit;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
ePr: TEdit;
eYr: TEdit;
eDv: TEdit;
Label15: TLabel;
eFr: TEdit;
Label16: TLabel;
Label17: TLabel;
eGl: TEdit;
Label18: TLabel;
Label19: TLabel;
Label20: TLabel;
eVeer: TEdit;
Label21: TLabel;
eSkachek: TEdit;
Label22: TLabel;
cbVzr: TComboBox;
cbUstVzr: TComboBox;
eUstVzr: TEdit;
Label23: TLabel;
cbSn: TComboBox;
cbZar: TComboBox;
Label24: TLabel;
Label25: TLabel;
eRashod: TEdit;
Label26: TLabel;
cbIspCom: TComboBox;
bSend: TButton;
bBack: TButton;
Label27: TLabel;
cbTask: TComboBox;
procedure FormActivate(Sender: TObject);
procedure bBackClick(Sender: TObject);
procedure bSendClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fTask: TfTask;
implementation
{$R *.dfm}
uses unConnect, unMain;
procedure TfTask.bBackClick(Sender: TObject);
begin
Close;
end;
procedure TfTask.bSendClick(Sender: TObject);
var i,j: integer;
ln: string;
begin
ln := ' Цель ' + eNomer.Text;
ln := ln + ', ' + cbHarakter.Text;
if cbUcrytoct.ItemIndex = 1 then ln := ln + ' укрытая';
if cbBronirovanaya.ItemIndex = 1 then ln := ln + ' бронированная';
ln := ln + ', ' + cbTask.Text;
if eX.Text <> '' then
ln := ln+' . X: '+eX.Text+', Y: '+eY.Text+', высота '+eH.Text
else
ln:=ln+' . Прицел '+ePr.Text+', уровень '+eYr.Text+', доворот '+eDv.Text;
if eFr.Text <> '' then
ln := ln + '. ' + eFr.Text + ' на ' + eGl.Text
else
ln := ln + '. ' + 'Веер ' + eVeer.Text;
if eSkachek.Text <> '' then ln := ', скачек ' + eSkachek.Text;
if cbVzr.ItemIndex = 0 then
ln := ln + '. ОФ'
else if cbVzr.ItemIndex = 1 then
ln := ln + '. Снаряд с ДВ'
else ln := ln + '. Снаряд с ДТ';
if cbVzr.ItemIndex <> 0 then
ln := ln + ', установка взрывателя ' + eUstVzr.Text
else
ln := ln + ', взрыватель ' + cbUstVzr.Text;
ln := ln + ', заряд ' + cbZar.Text;
ln := ln + '. Расход ' + eRashod.Text;
ln := ln + '. ' + cbIspCom.Text + '!';
for i := 0 to clbPozivnie.Count - 1 do
if clbPozivnie.Checked[i] then
begin
fMain.TcpClient.RemoteHost := fConnect.StringGrid.Cells[2,i+1];
fMain.TcpClient.Active := true;
if rgPredvKomanda.ItemIndex = 0 then
p := fConnect.StringGrid.Cells[1,i+1] + ', СТОЙ! ' + ln
else
p := fConnect.StringGrid.Cells[1,i+1] + ', Внимание! ' + ln;
fMain.TcpClient.Sendln(p);
fMain.TcpClient.Active := false;
end;
end;
procedure TfTask.FormActivate(Sender: TObject);
var i: integer;
begin
clbPozivnie.Clear;
for I := 1 to fConnect.StringGrid.RowCount - 1 do
if fConnect.StringGrid.Cells[3,i] = 'Установленно' then
clbPozivnie.Items.Add(fConnect.StringGrid.Cells[1,i]);
end;
end.
Форма отправки запроса
unit unQuestion;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TfQuestion = class(TForm)
Label1: TLabel;
Label2: TLabel;
bBack: TButton;
bSend: TButton;
cbPost: TComboBox;
cbTask: TComboBox;
procedure bBackClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure bSendClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fQuestion: TfQuestion;
implementation
{$R *.dfm}
uses unMain, unConnect;
procedure TfQuestion.bBackClick(Sender: TObject);
begin
Close;
end;
procedure TfQuestion.bSendClick(Sender: TObject);
var i: integer;
ln: string;
begin
if (cbPost.ItemIndex = -1) or (cbTask.ItemIndex = -1) then
begin
MessageDlg('Проверьте правильность ввода!',mtError,[mbOk],0,mbOk);
exit;
end;
for i := 1 to fConnect.StringGrid.RowCount - 1 do
if cbPost.Text = fConnect.StringGrid.Cells[1,i] then break;
if cbTask.ItemIndex = 0 then ln := 'свои координаты';
if cbTask.ItemIndex = 1 then ln := 'готовность';
if cbTask.ItemIndex = 2 then ln := 'обстановку';
fMain.TcpClient.RemoteHost := fConnect.StringGrid.Cells[2,i];
fMain.TcpClient.Active := True;
fMain.TcpClient.Sendln('Доложите ' + ln);
fMain.TcpClient.Active := false;
end;
procedure TfQuestion.FormActivate(Sender: TObject);
var i: integer;
begin
cbPost.Items.Clear;
for i := 1 to 3 do
if fConnect.StringGrid.Cells[3,i] = 'Установленно' then
cbPost.Items.Add(fConnect.StringGrid.Cells[1,i]);
end;
end.
Форма отправки донесения
unit unReport;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TfReport = class(TForm)
Label1: TLabel;
cbPost: TComboBox;
Label2: TLabel;
mText: TMemo;
bBack: TButton;
bSend: TButton;
procedure FormActivate(Sender: TObject);
procedure bBackClick(Sender: TObject);
procedure bSendClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fReport: TfReport;
implementation
{$R *.dfm}
uses unMain, unConnect;
procedure TfReport.bBackClick(Sender: TObject);
begin
Close;
end;
procedure TfReport.bSendClick(Sender: TObject);
var i: integer;
begin
if (cbPost.ItemIndex = -1) or (mText.Text = '') then
begin
MessageDlg('Проверьте правильность ввода!',mtError,[mbOk],0,mbOk);
exit;
end;
for i := 1 to fConnect.StringGrid.RowCount - 1 do
if cbPost.Text = fConnect.StringGrid.Cells[1,i] then break;
fMain.TcpClient.RemoteHost := fConnect.StringGrid.Cells[2,i];
fMain.TcpClient.Active := True;
fMain.TcpClient.Sendln(mText.Text);
fMain.TcpClient.Active := false;
end;
procedure TfReport.FormActivate(Sender: TObject);
var i: integer;
begin
cbPost.Items.Clear;
for i := 1 to 3 do
if fConnect.StringGrid.Cells[3,i] = 'Установленно' then
cbPost.Items.Add(fConnect.StringGrid.Cells[1,i]);
end;
end.
Форма входящего сообщения
unit unMessage;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TfMessage = class(TForm)
bBack: TButton;
Label1: TLabel;
mText: TMemo;
Label2: TLabel;
bReport: TButton;
lSender: TLabel;
procedure bBackClick(Sender: TObject);
procedure bReportClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fMessage: TfMessage;
implementation
{$R *.dfm}
uses unMain, unReport;
procedure TfMessage.bBackClick(Sender: TObject);
begin
Close;
end;
procedure TfMessage.bReportClick(Sender: TObject);
begin
fReport.ShowModal;
end;
end.
Форма «о программе»
unit unAbout;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TfAbout = class(TForm)
Label1: TLabel;
Label2: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;
var
fAbout: TfAbout;
implementation
{$R *.dfm}
uses unMain;
end.
Размещено на Allbest.ru
Подобные документы
Анализ возможной боевой обстановки при ведении боевых действий группировкой ПВО. Принцип уплотнения и разделения сигналов при передаче данных и обоснование технического решения устройства модуляции кодовых комбинаций аппаратуры передачи данных.
дипломная работа [418,7 K], добавлен 21.08.2011Войска специального назначения. Спецназ как средство боевых действий. Оснащение группы спецназа. Модели действий в тылу противника. Боевая подготовка. Сравнительный анализ опыта проведения специальных операций силами специальных операций армии США.
курсовая работа [32,3 K], добавлен 05.08.2008Сущность и основные задачи морально-психологического обеспечения (МПО) боевой подготовки. Ее основные направления и порядок организации. Формы и методы МПО боевой подготовки. Порядок разработки плана МПО тактического и тактико-специального учения.
курсовая работа [73,7 K], добавлен 11.07.2012Выработка рекомендаций по реализации проблем обеспечения безопасности полетов, повышения резервных возможностей экипажа воздушного судна, их летного долголетия на основе анализа статистических данных об авиационных происшествиях и типовых ошибок экипажей.
дипломная работа [644,8 K], добавлен 21.01.2012Принципы руководства и управления боевыми действиями при тушении пожаров. Определение времени работы трех стволов РСК-50 от автоцистерны АЦ-40(130)63Б. Расчет сил на тушение пожара при организации подачи воды методом подвоза с помощью АЦ-40(375)Ц1.
контрольная работа [191,1 K], добавлен 07.10.2010Оценка живучести сложных систем, позволяющая получать комплексную оценку живучести системы с точки зрения ее уязвимости и функциональности. Разработка математического аппарата для моделирования распространения внешних воздействий по структуре системы.
статья [1,6 M], добавлен 27.12.2010История российских прототипов истребителей 5 поколения. Проекты советского периода, разработка, лётные испытания Т-50, его экспортная модификация. Ключевые технологии, позволяющие истребителю на равных конкурировать с американскими боевыми самолетами.
презентация [1,4 M], добавлен 25.11.2016Характеристика видов боевого обеспечения боя батальона: разведка, охранение, радиоэлектронная борьба, тактическая маскировка, инженерное обеспечение, радиационная, химическая и биологическая защита. Организация командиром боевого обеспечения в обороне.
курсовая работа [1,6 M], добавлен 10.06.2015Анализ электромеханических систем, применяемых в артиллерии. Разработка структурно-функциональной схемы классного модульного компьютерного тренажера, на основе анализа перспектив развития артиллерии и подходов к подготовке расчета артиллерийских орудий.
дипломная работа [5,8 M], добавлен 06.06.2012Исходные положения для разработки системной концепции обеспечения безопасности объектов охраны. Основа методологии, блок задач разработки концепции комплексного обеспечения их безопасности. Особенности общего подхода к категорированию объектов охраны.
контрольная работа [530,6 K], добавлен 26.08.2009