Обеспечение подсистемы имитаторов средств обнаружения и противодействия беспилотным летательным аппаратам

Разработка программного обеспечения подсистемы имитаторов, входящей в состав комплекса средств обнаружения и противодействия беспилотным летательным аппаратам. Сравнительный анализ существующих аналогов. Требования к аппаратно-программному обеспечению.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 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


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.