Обеспечение подсистемы имитаторов средств обнаружения и противодействия беспилотным летательным аппаратам
Разработка программного обеспечения подсистемы имитаторов, входящей в состав комплекса средств обнаружения и противодействия беспилотным летательным аппаратам. Сравнительный анализ существующих аналогов. Требования к аппаратно-программному обеспечению.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 16.01.2015 |
Размер файла | 3,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Ipacet [2]: = inttostr (PRG_ISP);
Ipacet [3]: = Main. sARM_Name;
Ipacet [4]: = Main. sSRV_Name;
Ipacet [5]: = Main. sPRG_Path;
Ipacet [6]: = Main. sPRG_Rem;
Ipacet [7]: = inttostr (Header. bType);
Ipacet [8]: = inttostr (Header. wSID);
Ipacet [9]: = '' + inttostr (Header. rDTM. Day);
Ipacet [10]: = '' + inttostr (Header. rDTM. Month);
Ipacet [11]: = '' + inttostr (Header. rDTM. Yer);
Ipacet [12]: = '' + inttostr (Header. rDTM. Hour);
Ipacet [13]: = '' + inttostr (Header. rDTM. Minut);
Ipacet [14]: = '' + inttostr (Header. rDTM. Second);
Ipacet [15]: ='' + inttostr (Header. rDTM. mSec);
Ipacet [16]: = inttostr (Header. wAID);
Ipacet [17]: = inttostr (Header. nLength);
Ipacet [18]: = inttostr (Header. wBC);
showpacet (Ipacet);
{
// Вывод параметров отправляемого серверу сообщения в окно протокола
PProtocol. Text: = PProtocol. Text
+ '==================================' + #13#10
+ 'Main. wCnlID = '
+ inttostr (PRG_ISP) + #13#10
+ 'Main. sARM_Name = '
+ Main. sARM_Name + #13#10
+ 'Main. sSRV_Name = '
+ Main. sSRV_Name + #13#10
+ 'Main. sPRG_Path = '
+ Main. sPRG_Path + #13#10
+ 'Main. sPRG_Rem = '
+ Main. sPRG_Rem + #13#10
+ 'Header. bType = '
+ inttostr (Header. bType) + #13#10
+ 'Header. wSID = '
+ inttostr (Header. wSID) + #13#10
+ 'Header. rDTM. Day = '
+ '' + inttostr (Header. rDTM. Day) + #13#10
+ 'Header. rDTM. Month = '
+ '' + inttostr (Header. rDTM. Month) + #13#10
+ 'Header. rDTM. Year = '
+ '' + inttostr (Header. rDTM. Yer) + #13#10
+ 'Header. rDTM. Hour = '
+ '' + inttostr (Header. rDTM. Hour) + #13#10
+ 'Header. rDTM. Minut = '
+ '' + inttostr (Header. rDTM. Minut) + #13#10
+ 'Header. rDTM. Second = '
+ '' + inttostr (Header. rDTM. Second) + #13#10
+ 'Header. rDTM. mSec = '
+ '' + inttostr (Header. rDTM. mSec) + #13#10
+ 'Header. wAID = '
+ inttostr (Header. wAID) + #13#10
+ 'Header. nLength = '
+ inttostr (Header. nLength) + #13#10
+ 'Header. wBC = '
+ inttostr (Header. wBC) + #13#10
+ '==================================' + #13#10;
}
end;
end;
// Отправка сообщения
IdTCPCFN. WriteBuffer (Ident, sizeof (Ident));
{
with IdTCPCFN do
begin
SetLength (tmp_dyn, sizeof (Ident));
move (Ident, tmp_dyn [0], sizeof (Ident));
SendMessage (tmp_dyn);
end;
}
end;
// Обработка отключения (остановка потока)
procedure TFDefeat. IdTCPCFNDisconnected (Sender: TObject);
begin
IdThreadCFN. Stop;
end;
// ===================================================
// РЕЗУЛЬТАТЫ ВЗАИМОДЕЙСТВИЯ-----------------------------------------
// ====================================================
// Анализ результатов применения СП
procedure TFDefeat. AnalizDefeat (ParDefeat: TParDefeat);
const
MaxLine = 160; // максимальное число строк отображения в окне протокола
var
i, j: Integer;
Res: Word;
tmp_dyn: TIdBytes;
ISPToBLAPack: TISPToBLAPack;
CurrentTime: TDateTime;
Distance: String;
// Работа с протоколом (анализ взаимодействия)
procedure IssueProtocol;
var
ii: Integer;
begin
with MProtocol. Lines do
begin
if Count > MaxLine then
Clear;
Add ('=======================================================');
CurrentTime: = NowSync;
Add (DateTimeToStr (CurrentTime));
// Add ('Код БПЛА = ')
Add ('Координаты БЛА: X=' + FloatToStr (TAnalizBPLA (ListAllBLA. Objects [i]). X) +
'°; Y=' + FloatToStr (TAnalizBPLA (ListAllBLA. Objects [i]). Y) +
'°; Z=' + FloatToStr (TAnalizBPLA (ListAllBLA. Objects [i]). Z) + 'м');
Add ('Класс БЛА - "' + TAnalizBPLA (ListAllBLA. Objects [i]). ClassBLA + '"');
Add ('---------------------------------------------------');
Add ('Код СП = ' + ParDefeat. IdentObj);
with DefeatFeature do
begin
for ii: = 0 to ListFeature. Count - 1 do
begin
if ListFeature [ii] = ParDefeat. IdentObj then
begin
j: = ii;
Add ('Тип СП - "' +TBaseDefeat (ListFeature. Objects [ii]). NameFeature + '"');
end;
end;
end;
Add ('Коорд от КПБПЛА: X=' + FloatToStr (ParDefeat. X) +
'°; Y=' + FloatToStr (ParDefeat. Y) +
'°; Z=' + FloatToStr (ParDefeat. Z) + ' м');
Add ('---------------------------------------------------');
Distance: = FloatToStrF (TAnalizBPLA (ListAllBLA. Objects [i]). CurrentDistance,
ffFixed, 15, 0);
Add ('Расстояние между точкой поражения и целью = ' + Distance + ' м');
// Анализ взаимодействия с БПЛА
if Res = 1 then
if ParDefeat. TypeObj = REB then
Add ('Результат - "Начат увод цели"')
else
Add ('Результат - "Цель поражена"')
else
Add ('Результат - "Промах"');
end;
end;
begin
// Список БПЛА пуст
if ListAllBLA. Count = 0 then
begin
with MProtocol. Lines do
begin
// Очистка при переполнении поля протокола
if Count > MaxLine then
Clear;
Add ('----В "воздухе" нет целей - -----')
end;
end;
// Просмотр списка целей
for I: = 0 to ListAllBLA. Count - 1 do
begin
// Анализ поражения
// sb: = sb + 1;
if runstop <> true then
RMOutput (5);
{
If RBPLA. Checked = true then
begin
// StatusBar1. Panels [5]. Text: = 'Система: Отправлено сообщение№' + inttostr (sb) + ' цели. ';
end;
StatusBar1. Panels [7]. Text: = 'Б: ' + inttostr (sb); }
Res: = TAnalizBPLA (ListAllBLA. Objects [i]). AnalizDefeat (ParDefeat); // (0 - мимо, 1 - уничтожен)
// Протоколирование
IssueProtocol;
// В случае попадания
ifRes = 1 then
begin
// Информация о сбитом БПЛА
LETimeExution. Text: = DateTimeToStr (CurrentTime);
LEAAdressBLA. Text: = ListAllBLA [i];
LEAClassBLA. Text: = TAnalizBPLA (ListAllBLA. Objects [i]). ClassBLA;
LEAKodFeature. Text: = ParDefeat. IdentObj;
// Информация о поразившем цель СП и параметрах поражения
// Тип СП
LEATypeFeature. Text: =
TBaseDefeat (DefeatFeature. ListFeature. Objects [j]). NameTypeFeature;
// Наименование СП
LEANameFeature. Text: =
TBaseDefeat (DefeatFeature. ListFeature. Objects [j]). NameFeature;
// Дальность
LEARange. Text: = Distance + ' м';
ISPToBLAPack. Main. KodComm: = SP_Damaged;
end
else
Continue;
// Формирование информации о результатах воздействия
withISPToBLAPack. Maindo
begin
// В случае использования СП РЭБ
if ParDefeat. TypeObj = REB then
begin
// Передача координат точки увода
KodComm: = SP_Withdrawal;
CoordPointX: = ParDefeat. PointWithdrawal. X;
CoordPointY: = ParDefeat. PointWithdrawal. Y;
end
else
// Код поражения цели
KodComm: = SP_Damaged;
end;
// Запись сообщения
with ISPToBLAPack do
begin
// Параметры сообщения
Main. TimeMark: = SysTime;
Header. bType: = SMT_ISPBPLA;
Header. wSID: = PRG_ISP;
// Header. wAID: = PRG_SERVER;
Header. wAID: = TAnalizBPLA (ListAllBLA. Objects [i]). AddressBPLA;
Header. rDTM: = GetPacketTime (NowSync);
Header. nLength: = Sizeof (TISPToBLA);
Header. wBC: = 0;
end;
// Отправка сообщения
// sk: = sk + 1;
IdTCPCFN. WriteBuffer (ISPToBLAPack, SizeOf (ISPToBLAPack));
if runstop <> true then
RMOutput (6);
{
if RKPBPLA. Checked = true then
begin
StatusBar1. Panels [5]. Text: = 'Система: Отправка сообщения с анализом результатов поражения цели';
end;
}
// StatusBar1. Panels [8]. Text: = 'K: ' + inttostr (sk);
end;
end;
// =====================================================
// ПОТОКИ------------------------------------------------------------------------
// =====================================================
// Обработка работы потока (получение сообщений)
procedure TFDefeat. IdThreadCFNRun (Sender: TIdCustomThreadComponent);
var
Mpacet: TPacetStruct;
tmp_res: R_MSGHEADER; // пакет сообщения
// tmp_dyn: TIdBytes;
tmp_dyn: PChar; // указатель на разделяемую память (?)
NameSID: Word; // код канала-отправителя
s: integer;
begin
NameSID: = 0;
// В случае активного потока и существования соединения
if IdThreadCFN. Active and IdTCPCFN. Connected then
try
// Получение сообщения
IdTCPCFN. ReadBuffer (tmp_res,sizeof (R_MSGHEADER));
NameSID: = tmp_res. wSID; // код канала-отправителя
except
end;
with IdTCPCFN do
begin
// Анализируем тип сообщения
casetmp_res. bTypeof
// Погода
SMT_WEATHER:
begin
// rw: = rw + 1;
if runstop <> true then
RMOutput (2);
// Получение параметров погодных условий
ReadBuffer (Weather_Reseived, tmp_res. nLength);
// Синхронизация времени
Weather_MyNow: = now;
SysTime: = NowSync;
// Установка погоды
IdThreadCFN. Synchronize (SetWeather);
with Weather_Reseived do
begin
Mpacet [1]: = '3';
Mpacet [2]: = inttostr (Temp);
Mpacet [3]: = inttostr (course) + '°';
Mpacet [4]: = FloatToStr (wind) + 'м/сек';
Mpacet [5]: = '' + IntToStr (cloud) + '%';
if Weather_Reseived. Mist =0then
Mpacet [6]: = '0'
else
Mpacet [6]: = '1';
Mpacet [7]: = '' + IntToStr (hydro) + '%';
Mpacet [8]: = '' + DateTimeToStr (time);
Mpacet [9]: = '' + FloatToStr (Multiplier);
end;
showpacet (Mpacet);
// StatusBar1. Panels [2]. Text: = 'П: ' + inttostr (rw);
{
if SWeather. Checked = true then
begin
StatusBar1. Panels [5]. Text: = 'Система: Принято сообщение№' + StatusBar1. Panels [2]. Text + ' от синоптиков! ';
end;
}
end;
// БПЛА
SMT_BPLA:
begin
// rb: = rb +1;
if runstop <> true then
RMOutput (3);
// Получение данных о засечённой БПЛА
AddressBPLA: = NameSID;
ReadBuffer (BPLA, tmp_res. nLength);
// Отслеживание БПЛА (обновление списка и координат)
IdThreadCFN. Synchronize (BLAProcessing);
// StatusBar1. Panels [3]. Text: = 'Б: ' + inttostr (rb);
{
if SBPLA. Checked = true then
StatusBar1. Panels [5]. Text: = 'Система: Принято сообщение№' + StatusBar1. Panels [3]. Text [4] + ' от БПЛА! ';
}
end;
// КП
SMT_ISP:
begin
// rk: = rk + 1;
if runstop <> true then
RMOutput (4);
// Получение команды
ReadBuffer (DataToISP, tmp_res. nLength);
// Выполение команды
IdThreadCFN. Synchronize (CommandProcessing);
// StatusBar1. Panels [4]. Text: = 'K: ' + inttostr (rk);
{
if SKPBPLA. Checked = true then
StatusBar1. Panels [5]. Text: = 'Система: Принято сообщение№' + StatusBar1. Panels [4]. Text [4] + ' от командного пункта! ';
}
end;
// Сервер (?)
else
begin
if runstop <> true then
RMOutput (1);
// StatusBar1. Panels [5]. Text: = 'Система: Принято сообщение№' + StatusBar1. Panels [1]. Text [4] + ' от сервера! ';
// Выделение памяти
GetMem (tmp_dyn,tmp_res. nLength);
// Чтение сообщения
ReadBuffer (tmp_dyn^,tmp_res. nLength);
Mpacet [1]: = '2';
Mpacet [2]: = inttostr (PRG_ISP);
Mpacet [3]: = inttostr (tmp_res. bType);
Mpacet [4]: = inttostr (tmp_res. wSID);
Mpacet [5]: = '' + inttostr (tmp_res. rDTM. Day);
Mpacet [6]: = '' + inttostr (tmp_res. rDTM. Month);
Mpacet [7]: = '' + inttostr (tmp_res. rDTM. Yer);
Mpacet [8]: = '' + inttostr (tmp_res. rDTM. Hour);
Mpacet [9]: = '' + inttostr (tmp_res. rDTM. Minut);
Mpacet [10]: = '' + inttostr (tmp_res. rDTM. Second);
Mpacet [11]: ='' + inttostr (tmp_res. rDTM. mSec);
Mpacet [12]: = inttostr (tmp_res. wAID);
Mpacet [13]: = inttostr (tmp_res. nLength);
Mpacet [14]: = inttostr (tmp_res. wBC);
showpacet (Mpacet);
// Освобождение памяти
FreeMem (tmp_dyn);
// StatusBar1. Panels [1]. Text: = 'С: ' + inttostr (rs);
// if (SServer. Checked = true) and (runstop <> true) then
{
if SServer. Checked = true then
begin
StatusBar1. Panels [5]. Text: = 'Система: Принято сообщение№' + StatusBar1. Panels [1]. Text + ' от сервера! ';
// StatusBar1. Panels [5]. Text: = 'Система: Принято сообщение от сервера! ';
// StatusBar1. Panels [5]. Text: = inttostr (1);
end;
}
if conn = false then
begin
StatusBar1. Panels [5]. Text: = 'Система: Соединение с сервером установлено. ';
LProtocol. Text: = LProtocol. Text + 'Система: Соединение с сервером установлено. ' + #13#10;
conn: = true;
end;
end;
end;
end;
end;
// ===================================================
// УПРАВЛЕНИЕ ИНТЕРФЕЙСОМ ПОЛЬЗОВАТЕЛЯ----------------------
// ====================================================
// Корректировка размеров основной и дополнительной панелей
procedure TFDefeat. interfacing (size, number: integer);
var i: integer;
begin
FDefeat. AutoSize: = False;
case number of
1:
begin
// FDefeat. Height: = FDefeat. Height - Nbdefeat. Height;
FDefeat. Height: = FDefeat. Height + size;
Nbdefeat. Height: = size;
end;
1:
begin
FDefeat. Height: = FDefeat. Height - Nbdefeat. Height;
Nbdefeat. Height: = size;
end;
end;
FDefeat. AutoSize: = True;
end;
// Работа с системной строкой
procedure TFDefeat. RMOutput (number: integer);
var i,j: integer;
str: string;
begin
// str: = StatusBar1. Panels [1]. Text;
case number of
1:
begin
// i: = strtoint (StatusBar1. Panels [1]. Text [4]) + 1;
for j: = 3 to length (StatusBar1. Panels [1]. Text) do
begin
str: = str + StatusBar1. Panels [1]. Text [j];
end;
i: = strtoint (str) +1;
StatusBar1. Panels [1]. Text: = 'C: ' + inttostr (i);
if SServer. Checked = true then
begin
StatusBar1. Panels [5]. Text: = 'Система: Принято сообщение№' + inttostr (i) + ' от сервера! ';
LProtocol. Text: = LProtocol. Text + 'Система: Принято сообщение№' + inttostr (i) + ' от сервера! ' + #13#10;
end;
end;
2:
begin
// i: = strtoint (StatusBar1. Panels [2]. Text [4]) + 1;
for j: = 3 to length (StatusBar1. Panels [2]. Text) do
begin
str: = str + StatusBar1. Panels [2]. Text [j];
end;
i: = strtoint (str) +1;
StatusBar1. Panels [2]. Text: = 'П: ' + inttostr (i);
if SWeather. Checked = true then
begin
StatusBar1. Panels [5]. Text: = 'Система: Принято сообщение№' + inttostr (i) + ' от синоптиков! ';
end;
end;
3:
begin
// i: = strtoint (StatusBar1. Panels [3]. Text [4]) + 1;
for j: = 3 to length (StatusBar1. Panels [3]. Text) do
begin
str: = str + StatusBar1. Panels [3]. Text [j];
end;
i: = strtoint (str) +1;
StatusBar1. Panels [3]. Text: = 'Б: ' + inttostr (i);
if SBPLA. Checked = true then
StatusBar1. Panels [5]. Text: = 'Система: Принято сообщение№' + inttostr (i) + ' от БПЛА! ';
end;
4:
begin
// i: = strtoint (StatusBar1. Panels [4]. Text [4]) + 1;
for j: = 3 to length (StatusBar1. Panels [4]. Text) do
begin
str: = str + StatusBar1. Panels [4]. Text [j];
end;
i: = strtoint (str) +1;
StatusBar1. Panels [4]. Text: = 'К: ' + inttostr (i);
if SKPBPLA. Checked = true then
StatusBar1. Panels [5]. Text: = 'Система: Принято сообщение№' + inttostr (i) + ' от командного пункта! ';
end;
5:
begin
for j: = 3 to length (StatusBar1. Panels [7]. Text) do
begin
str: = str + StatusBar1. Panels [7]. Text [j];
end;
i: = strtoint (str) +1;
StatusBar1. Panels [7]. Text: = 'Б: ' + inttostr (i);
if RBPLA. Checked = true then
begin
StatusBar1. Panels [5]. Text: = 'Система: Отправлено сообщение№' + inttostr (i) + ' цели. ';
end;
end;
6:
begin
for j: = 3 to length (StatusBar1. Panels [8]. Text) do
begin
str: = str + StatusBar1. Panels [8]. Text [j];
end;
i: = strtoint (str) +1;
StatusBar1. Panels [8]. Text: = 'К: ' + inttostr (i);
if RKPBPLA. Checked = true then
begin
StatusBar1. Panels [5]. Text: = 'Система: Отправлено сообщение№' + inttostr (i) + ' командному пункту';
end;
end;
end;
end;
// =====================================================
// Управление видимостью окнами отображений протоколов
// Выбор отображения анализа взаимодействия
procedureTFDefeat. AnalizClick (Sender: TObject);
begin
PProtocol. Visible: = false;
LProtocol. Visible: = false;
MProtocol. Visible: = true;
Analiz. Checked: = true;
Pacet. Checked: = false;
MessLog. Checked: = false;
end;
// Выбор отображения содержимого пакетов
procedure TFDefeat. PacetClick (Sender: TObject);
begin
MProtocol. Visible: = false;
LProtocol. Visible: = false;
PProtocol. Visible: = true;
Analiz. Checked: = false;
Pacet. Checked: = true;
MessLog. Checked: = false;
end;
// Выбор отображения системных, принятых, отправленных сообщений
procedure TFDefeat. MessLogClick (Sender: TObject);
begin
MProtocol. Visible: = false;
PProtocol. Visible: = false;
LProtocol. Visible: = true;
Analiz. Checked: = false;
Pacet. Checked: = false;
MessLog. Checked: = true;
end;
// Отображение пакетов
procedure TFDefeat. showpacet (pacet: TPacetStruct);
// var
// Ident: R_Ident;
begin
// if pacet [1] = '1' then
case strtoint (pacet [1]) of
1: PProtocol. Text: = PProtocol. Text
+ '==================================' + #13#10
+ 'Отправлено серверу: ' + #13#10
+ 'Main. wCnlID = '
+ pacet [2] + #13#10
+ 'Main. sARM_Name = '
+ pacet [3] + #13#10
+ 'Main. sSRV_Name = '
+ pacet [4] + #13#10
+ 'Main. sPRG_Path = '
+ pacet [5] + #13#10
+ 'Main. sPRG_Rem = '
+ pacet [6] + #13#10
+ 'Header. bType = '
+ pacet [7] + #13#10
+ 'Header. wSID = '
+ pacet [8] + #13#10
+ 'Header. rDTM. Day = '
+ '' + pacet [9] + #13#10
+ 'Header. rDTM. Month = '
+ '' + pacet [10] + #13#10
+ 'Header. rDTM. Year = '
+ '' + pacet [11] + #13#10
+ 'Header. rDTM. Hour = '
+ '' + pacet [12] + #13#10
+ 'Header. rDTM. Minut = '
+ '' + pacet [13] + #13#10
+ 'Header. rDTM. Second = '
+ '' + pacet [14] + #13#10
+ 'Header. rDTM. mSec = '
+ '' + pacet [15] + #13#10
+ 'Header. wAID = '
+ pacet [16] + #13#10
+ 'Header. nLength = '
+ pacet [17] + #13#10
+ 'Header. wBC = '
+ pacet [18] + #13#10
+ '==================================' + #13#10;
2:
if SServer. Checked = true then
PProtocol. Text: = PProtocol. Text
+ '==================================' + #13#10
+ 'Принято от сервера: ' + #13#10
+ 'Main. wCnlID = '
+ pacet [2] + #13#10
+ 'Header. bType = '
+ pacet [3] + #13#10
+ 'Header. wSID = '
+ pacet [4] + #13#10
+ 'Header. rDTM. Day = '
+ '' + pacet [5] + #13#10
+ 'Header. rDTM. Month = '
+ '' + pacet [6] + #13#10
+ 'Header. rDTM. Year = '
+ '' + pacet [7] + #13#10
+ 'Header. rDTM. Hour = '
+ '' + pacet [8] + #13#10
+ 'Header. rDTM. Minut = '
+ '' + pacet [9] + #13#10
+ 'Header. rDTM. Second = '
+ '' + pacet [10] + #13#10
+ 'Header. rDTM. mSec = '
+ '' + pacet [11] + #13#10
+ 'Header. wAID = '
+ pacet [12] + #13#10
+ 'Header. nLength = '
+ pacet [13] + #13#10
+ 'Header. wBC = '
+ pacet [14] + #13#10
+ '==================================' + #13#10;
3:
if SWeather. Checked = true then
PProtocol. Text: = PProtocol. Text
+ '==================================' + #13#10
+ 'Принято от приложения имитации погодных условий: ' + #13#10
+ 'Weather_Reseived. Temp = '
+ pacet [2] + #13#10
+ 'Weather_Reseived. course = '
+ pacet [3] + #13#10
+ 'Weather_Reseived. wind = '
+ pacet [4] + #13#10
+ 'Weather_Reseived. cloud = '
+ '' + pacet [5] + #13#10
+ 'Weather_Reseived. mist = '
+ '' + pacet [6] + #13#10
+ 'Weather_Reseived. hydro = '
+ '' + pacet [7] + #13#10
+ 'Weather_Reseived. time = '
+ '' + pacet [8] + #13#10
+ 'Weather_Reseived. Multiplier = '
+ '' + pacet [9] + #13#10
+ '==================================' + #13#10;
4:
if SBPLA. Checked = true then
PProtocol. Text: = PProtocol. Text;
5:
if SKPBPLA. Checked = true then
PProtocol. Text: = PProtocol. Text;
end;
end;
/observation/UDefeat. pas
unit UObservation;
interface
uses
Windows, Math, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons, Grids, Sockets,
MainDBModul, C_Layers, C_Libraries, C_Semantics, C_Primitives, Get_Enabled,
ConnectWithDB, C_SemanticsConst, ComCtrls, IdAntiFreezeBase,
IdAntiFreeze, IdThreadComponent, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IOMesVar, Synchro, SetQuery, UCommon,
UObserver, C_Maps, All_Use, gIntegracia;
const
NameIniFile = 'Observation. ini';
type
TFObservation = class (TForm)
Panel2: TPanel;
Panel1: TPanel;
LETemperature: TLabeledEdit;
LECloud: TLabeledEdit;
LEFog: TLabeledEdit;
LEPrecipitation: TLabeledEdit;
GroupBox1: TGroupBox;
LEWindDirection: TLabeledEdit;
LEWindSpeed: TLabeledEdit;
LEModeTime: TLabeledEdit;
Panel3: TPanel;
BBLoadFeature: TBitBtn;
BBAdjustment: TBitBtn;
BBClose: TBitBtn;
ODMap: TOpenDialog;
TimerLoad: TTimer;
IdTCPClient1: TIdTCPClient;
IdThreadComponent1: TIdThreadComponent;
IdAntiFreeze1: TIdAntiFreeze;
BBStart: TBitBtn;
TimerSysTime: TTimer;
NbObservation: TNotebook;
GroupBox2: TGroupBox;
LEObject: TLabeledEdit;
GroupBox3: TGroupBox;
LEObjectX: TLabeledEdit;
LEObjectY: TLabeledEdit;
LEObjectZ: TLabeledEdit;
LEObjectTime: TLabeledEdit;
LEQuanFeatures: TLabeledEdit;
LEQuanObjects: TLabeledEdit;
GroupBox4: TGroupBox;
SGListFeatures: TStringGrid;
BBTechnicalBehavior: TBitBtn;
GroupBox5: TGroupBox;
SGListTrackingObj: TStringGrid;
PBLoad: TProgressBar;
GroupBox6: TGroupBox;
EParDB: TEdit;
GroupBox9: TGroupBox;
CBTypeDB: TComboBox;
GroupBox7: TGroupBox;
LEHost: TLabeledEdit;
LEPort: TLabeledEdit;
BBSaveIni: TBitBtn;
GroupBox8: TGroupBox;
SBSelectMap: TSpeedButton;
EMap: TEdit;
BBApply: TBitBtn;
LEModeDate: TLabeledEdit;
BRemoveTracing: TButton;
PanelMap: TPanel;
BBZoomIn: TBitBtn;
BBZoomOut: TBitBtn;
GroupBox10: TGroupBox;
LEDisabledSO1: TLabeledEdit;
procedure TimerLoadTimer (Sender: TObject);
procedure BBTechnicalBehaviorClick (Sender: TObject);
procedure SGListFeaturesSelectCell (Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure FormCreate (Sender: TObject);
procedure BBAdjustmentClick (Sender: TObject);
procedure BBSaveIniClick (Sender: TObject);
procedure BBLoadFeatureClick (Sender: TObject);
procedure IdTCPClient1Connected (Sender: TObject);
procedure IdThreadComponent1Run (Sender: TIdCustomThreadComponent);
procedure SetWeather;
procedure SetBPLAParam;
procedure BBApplyClick (Sender: TObject);
procedure BBStartClick (Sender: TObject);
procedure TimerSysTimeTimer (Sender: TObject);
procedure FormClose (Sender: TObject; var Action: TCloseAction);
procedure SBSelectMapClick (Sender: TObject);
procedure IdTCPClient1Disconnected (Sender: TObject);
procedure BBCloseClick (Sender: TObject);
procedure BRemoveTracingClick (Sender: TObject);
procedure BBZoomInClick (Sender: TObject);
procedure BBZoomOutClick (Sender: TObject);
procedure GroupBox5DblClick (Sender: TObject);
private
{ Private declarations }
Observer: TObserver;
CurrentLine: SmallInt;
LoadFeature: Boolean;
public
{ Public declarations }
Map: TMMap_ALL;
BPLA: TDataFromIBPLA;
ParDB: String;
ISO: TISOPack;
Host: String;
Port: Integer;
DisabledSO: Integer;
PathMap: String;
SysTime: TDateTime;
work: boolean;
Mlayers: TMLayer_ALL;
procedure Polling;
procedure DetectLostAim (Time: TDateTime);
end;
var FObservation: TFObservation;
implementation
uses UInitFile;
{$R *. dfm}
procedure TFObservation. BBAdjustmentClick (Sender: TObject);
begin
case NbObservation. PageIndex of
0:
begin
BBLoadFeature. Enabled: = False;
BBStart. Enabled: = False;
NbObservation. PageIndex: = 1;
BBAdjustment. Caption: = '&Работа'
end;
1:
begin
BBLoadFeature. Enabled: = True;
BBStart. Enabled: = True;
NbObservation. PageIndex: = 0;
BBAdjustment. Caption: = '&Настройка'
end;
end;
end;
procedure TFObservation. BBLoadFeatureClick (Sender: TObject);
var
dbConnect: TObject; // Текущее соединение с БД
MKLSemantics: TMKL_Semantic_All;
LayerSO: TMLayer;
MLibraries: TMLibrary_All;
begin
BBLoadFeature. Enabled: = False;
BBAdjustment. Enabled: = False;
BBClose. Enabled: = False;
BBStart. Enabled: = False;
PBLoad. Position: = 0;
TimerLoad. Enabled: = True;
BBTechnicalBehavior. Enabled: = False;
// Цепляемся к БД
{
if not Initialize_Enabled (1, MainDB. dbADM, nil, nil, MainDB. AdbADM,
nil, nil, MainDB. AdbADM_Bl) then
begin
MainDB. Free;
Exit
end;
}
DefRep_WDB: =NameIniFile;
FConnectWithDB (MainDB. dbMain, nil, nil, MainDB. AdbMain, DefRep_WDB,
'Base','DB','Objects. gdb', 'Нет БД');
if MainDB. dbMain. Connected then
dbConnect: = MainDB. dbMain
else
if MainDB. AdbMain. Connected then
dbConnect: = MainDB. AdbMain
else
begin
ShowMessage ('Нет БД, работать не могу');
Exit
end;
MainBD_All_Use: =dbConnect;
Is_User_En_Check: =FGetParFromVV ('Is_User_En_Check',false);
Application. ProcessMessages;
// Загружаем слой СО
MLayers: = TMLayer_ALL. Create (dbConnect);
MLayers. Add (TMLayer. Create (KodLaySO,MaxLayerEnableLevel,dbConnect));
MLayers. Lays [0]. LoadFromDB_LastVer;
Application. ProcessMessages;
// Семантики
MKLSemantics: = TMKL_Semantic_All. Create (nil, nil);
MKLSemantics. LoadKlSemBD;
Application. ProcessMessages;
// Библиотеки
MLibraries: = TMLibrary_All. Create (dbConnect);
MLibraries. LoadFromDB;
Application. ProcessMessages;
LayerSO: = MLayers. Lays [0];
ifLayerSO = nilthen
begin
ShowMessage ('Не найден слой со средствами обнаружения. '+ #13#10 +
'В ПВПКС занесите средства обнаружения и перезапустите программу');
Exit
end
else
Observer: = TObserver. Create ({self, }dbConnect);
Application. ProcessMessages;
// Открываем карту
Map: =TMMap_All. Create (PanelMap, nil);
Mlayers. Map: =Map;
Map_Obj: = Map;
Observer. LoadMap (EMap. Text);
// Загружаем объекты
Application. ProcessMessages;
Mlayers. Lays [0]. Visible: =true;
Map. Map. CenterMap (Mlayers. Lays [0]. Objs [0]. FPriv);
Map. Map. DrawIt;
if LayerSO. Count > 0 then
Observer. LoadFeature (LayerSO, MKLSemantics, MLibraries)
else
begin
ShowMessage ('На карту не нанесены средства обнаружения. ' + #13#10 +
'В ПВПКС нанесите средства обнаружения и перезапустите программу');
Exit
end;
LEQuanFeatures. Text: = IntToStr (SGListFeatures. RowCount - 1);
CurrentLine: = 1;
TimerLoad. Enabled: = False;
PBLoad. Position: = 100;
BBTechnicalBehavior. Enabled: = True;
BBAdjustment. Enabled: = True;
BBClose. Enabled: = True;
BBStart. Enabled: = True;
// BBLoadFeature. Enabled: = False;
end;
procedure TFObservation. BBSaveIniClick (Sender: TObject);
begin
ParDB: = EParDB. Text;
Host: = LEHost. Text;
Port: = StrToInt (LEPort. Text);
PathMap: = EMap. Text;
DisabledSO: = StrToInt (LEDisabledSO1. Text);
MakeParametr
end;
procedure TFObservation. BBTechnicalBehaviorClick (Sender: TObject);
begin
Observer. ShowTechnicalBehavior (CurrentLine - 1)
end;
procedure TFObservation. FormCreate (Sender: TObject);
begin
work: =false;
NbObservation. PageIndex: = 0;
LoadFeature: = False;
BBStart. Enabled: = False;
with SGListFeatures do
begin
RowCount: = 2;
Cells [0, 0]: = 'Идентификатор';
ColWidths [1]: = 350;
Cells [1, 0]: = 'Тип';
ColWidths [2]: = 160;
Cells [2, 0]: = 'Расположение';
end;
with SGListTrackingObj do
begin
RowCount: = 2;
Cells [0, 0]: = 'Идентификатор';
Cells [1, 0]: = 'Тип';
Cells [2, 0]: = 'Координаты';
Cells [3, 0]: = 'Последняя засечка';
end;
ShapingParametr;
EParDB. Text: = ParDB;
LEHost. Text: = Host;
LEPort. Text: = IntToStr (Port);
EMap. Text: = PathMap;
LEDisabledSO1. Text: = IntToStr (DisabledSO);
end;
procedure TFObservation. SGListFeaturesSelectCell (Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
begin
CurrentLine: = ARow;
Observer. SGListChange (ARow);
end;
procedure TFObservation. TimerLoadTimer (Sender: TObject);
begin
if PBLoad. Position < PBLoad. Max then
PBLoad. StepIt
else
PBLoad. Position: = PBLoad. Min
end;
procedure TFObservation. IdTCPClient1Connected (Sender: TObject);
var Ident: R_Ident;
begin
IdThreadComponent1. Start;
if IdTCPClient1. Connected then
begin
Ident. Main. wCnlID: = PRG_ISO;
Ident. Main. sARM_Name: = FGet_ARMName;
Ident. Main. sSRV_Name: = Host;
Ident. Main. sPRG_Path: = Application. ExeName;
Ident. Main. sPRG_Rem: = 'Имитатор ср-в обнаружения';
Ident. Header. bType: = SMT_SCQ;
Ident. Header. wSID: = PRG_ISO;
Ident. Header. nLength: = SizeOf (Ident. Main);
IdTCPClient1. WriteBuffer (Ident, sizeof (Ident));
end;
end;
procedure TFObservation. IdThreadComponent1Run (
Sender: TIdCustomThreadComponent);
var tmp_res: R_MSGHEADER;
Weather: R_MSGHEADER;
tmp_dyn: PChar;
begin
if IdThreadComponent1. Active and IdTCPClient1. Connected then
try
IdTCPClient1. ReadBuffer (tmp_res,sizeof (R_MSGHEADER))
except
end;
casetmp_res. bType of
SMT_WEATHER:
if tmp_res. nLength>0 then
begin
IdTCPClient1. ReadBuffer (Weather_Reseived,tmp_res. nLength);
Weather_MyNow: = now;
SysTime: = NowSync;
IdThreadComponent1. Synchronize (SetWeather);
DetectLostAim (SysTime);
end;
SMT_BPLA:
begin
IdTCPClient1. ReadBuffer (BPLA,tmp_res. nLength);
IdThreadComponent1. Synchronize (Polling)
end;
SMT_SCQ:
begin
GetMem (tmp_dyn,tmp_res. nLength);
IdTCPClient1. ReadBuffer (tmp_dyn^,tmp_res. nLength);
FreeMem (tmp_dyn);
Weather. wAID: = PRG_WEATHER;
Weather. bType: = SMT_WEATHER;
Weather. nLength: =0;
IdTCPClient1. WriteBuffer (Weather, SizeOf (Weather));
end
else
begin
GetMem (tmp_dyn,tmp_res. nLength);
IdTCPClient1. ReadBuffer (tmp_dyn^,tmp_res. nLength);
FreeMem (tmp_dyn)
end;
end;
end;
procedure TFObservation. SetWeather;
begin
LETemperature. Text: = IntToStr (Weather_Reseived. Temp);
LECloud. Text: = IntToStr (Weather_Reseived. cloud);
LEFog. Text: = FloatToStr (Weather_Reseived. Mist);
LEPrecipitation. Text: = IntToStr (Weather_Reseived. hydro);
LEWindDirection. Text: = IntToStr (Weather_Reseived. course);
LEWindSpeed. Text: = FloatToStr (Weather_Reseived. wind);
LEModeTime. Text: = TimeToStr (SysTime);
LEModeDate. Text: = DateToStr (SysTime);
end;
procedure TFObservation. SetBPLAParam;
begin
LEObject. Text: = IntToStr (BPLA. TypBLA);
LEObjectX. Text: = FloatToStr (RoundTo (BPLA. X,-4));
LEObjectY. Text: = FloatToStr (RoundTo (BPLA. Y,-4));
LEObjectZ. Text: = FloatToStr (RoundTo (BPLA. Z,-4));
LEObjectTime. Text: = TimeToStr (SysTime);
end;
procedure TFObservation. BBApplyClick (Sender: TObject);
begin
IdTCPClient1. Port: = Port;
IdTCPClient1. Host: = Host
end;
procedure TFObservation. BBStartClick (Sender: TObject);
begin
if Work then
begin
BBAdjustment. Enabled: = True;
BBLoadFeature. Enabled: = True;
BBStart. Caption: ='Старт';
TimerSysTime. Enabled: = false;
work: =false;
DetectLostAim (SysTime);
if IdThreadComponent1. Active and IdTCPClient1. Connected then
try
IdThreadComponent1. Stop;
IdTCPClient1. Disconnect
except
end
end
else
begin
BBAdjustment. Enabled: = False;
BBLoadFeature. Enabled: = False;
BBStart. Caption: ='Стоп';
IdTCPClient1. Port: = Port;
IdTCPClient1. Host: = Host;
// пробуем соединиться с сервером
if not IdTCPClient1. Connected then
try
IdTCPClient1. Connect
except
end;
Weather_MyNow: = now;
Weather_Reseived. time: = now;
TimerSysTime. Enabled: = true;
work: =true;
LEQuanObjects. Text: ='0';
end;
end;
procedure TFObservation. TimerSysTimeTimer (Sender: TObject);
begin
if not IdTCPClient1. Connected then
begin
with IdTCPClient1 do
try
Connect
except
end
end;
SysTime: = NowSync;
LEModeTime. Text: = TimeToStr (SysTime);
// DetectLostAim (SysTime);
end;
procedure TFObservation. Polling;
begin
Observer. Polling;
end;
procedure TFObservation. DetectLostAim (Time: TDateTime);
begin
Observer. DetectLostAim (SysTime);
end;
procedure TFObservation. FormClose (Sender: TObject;
var Action: TCloseAction);
begin
if IdTCPClient1. Connected then
try
IdTCPClient1. Disconnect;
except
end;
Observer. CloseMap;
if not (Map = nil) then
begin
Map. Destroy;
Mlayers. Free;
end;
end;
procedure TFObservation. SBSelectMapClick (Sender: TObject);
begin
ODMap. Filter: = 'Файлы c картой (*. map) |*. map|Все файлы (*. *) |*. *';
if ODMap. Execute then
EMap. Text: = ODMap. FileName;
end;
procedure TFObservation. IdTCPClient1Disconnected (Sender: TObject);
begin
IdThreadComponent1. Stop;
end;
procedure TFObservation. BBCloseClick (Sender: TObject);
begin
Application. Terminate;
end;
procedure TFObservation. BRemoveTracingClick (Sender: TObject);
begin
Observer. RemoveTracing (SGListTrackingObj. Cells [0,SGListTrackingObj. Row]);
end;
procedure TFObservation. BBZoomInClick (Sender: TObject);
begin
Map. Map. Zoom (False);
end;
procedure TFObservation. BBZoomOutClick (Sender: TObject);
begin
Map. Map. Zoom (True);
end;
procedure TFObservation. GroupBox5DblClick (Sender: TObject);
var i: integer;
begin
DetectLostAim (SysTime);
for i: =1 to SGListTrackingObj. RowCount-1 do
SGListTrackingObj. Rows [i]. Clear;
LEQuanObjects. Text: = '0';
SGListTrackingObj. RowCount: =2;
end;
end.
Размещено на http://www.allbest.ru/
Приложение Б
Результаты тестирования программного обеспечения
Размещено на Allbest.ru
Подобные документы
Описание математической модели летательного аппарата. Разработка алгоритмов управления беспилотным летательным аппаратом . Модель атмосферы и воздушных возмущений. Модель рулевых органов. Синтез управления на траекторном уровне. Петля Нестерова.
дипломная работа [1,0 M], добавлен 29.09.2008Проектирование базы данных, информационной подсистемы PLC-Tester, модуля тестирования и web-приложения. Разработка логической структуры программного продукта и общие требования к техническому обеспечению. Запуск программы и описание тестовых прогонов.
дипломная работа [3,2 M], добавлен 30.06.2011Диагностический анализ системы управления предприятия, его организационной и функциональной структуры. Разработка проекта подсистемы учёта средств вычислительной техники, описание технического обеспечения базы данных. Характеристика программного продукта.
дипломная работа [7,2 M], добавлен 28.06.2011Разработка программного обеспечения для автоматизированной системы калибровки и поверки комплекса технических средств ПАДК "Луг-1". Аналитический обзор аналогов. Проектирование пользовательского интерфейса. Средства разработки программного обеспечения.
дипломная работа [1,4 M], добавлен 17.12.2014Анализ технических средств, разработка структуры подсистемы. Создание программного приложения в среде InduSoft Web Studio. Информационный расчет аналогового ввода сигналов. Адресация каналов модулей. Экспериментальная проверка подсистемы в составе стенда.
дипломная работа [1,7 M], добавлен 16.05.2017Методы защиты программного обеспечения, их оценка и анализ защищенности. Методы свершенствования подсистемы защиты информации от вредоносного программного обеспечения. Перечень сведений конфиденциального характера организации ООО "СтройСпецКомплект".
дипломная работа [1,9 M], добавлен 10.07.2015Область применения и требования создаваемого Web-приложения. Требования к техническому и программному обеспечению. Разработка структуры Web-приложения и выбор средств программной реализации. Программная реализация Web-приложения. Структура базы данных.
дипломная работа [1,4 M], добавлен 03.06.2014Способы построения защищенных сегментов локальных систем. Анализ систем обнаружения вторжений и антивирусное обеспечение. Анализ технологии удаленного сетевого доступа. Установка программного обеспечения на серверы аппаратно-программного комплекса.
дипломная работа [2,4 M], добавлен 14.03.2013Анализ функциональной структуры автоматизированной системы управления. Обоснование необходимости создания подсистемы учета материальных средств, проектирование информационной базы данных. Расчет себестоимости разработки внедряемого программного продукта.
дипломная работа [5,4 M], добавлен 26.06.2011Обобщенная модель процесса обнаружения атак. Обоснование и выбор контролируемых параметров и программного обеспечения для разработки системы обнаружения атак. Основные угрозы и уязвимые места. Использование системы обнаружения атак в коммутируемых сетях.
дипломная работа [7,7 M], добавлен 21.06.2011