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

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 16.01.2015
Размер файла 3,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

- видимого 400-700 нм,

- ближнего инфракрасного 700 - 1050 нм;

- электростатических полей;

Ультрафиолетовое излучение полезно в небольших количествах, но в больших дозах приводит к дерматиту кожи, головной боли, рези в глазах. Инфракрасное излучение приводит к перегреву тканей человека (особенно хрусталика глаза), повышению температуры тела. Уровни напряженности электростатических полей должны составлять не более 25 кВ/м. Плотность магнитного поля не более 250 нТл. Напряжённость электрического поля не более 25 В/м. Поверхностный электростатический потенциал не должен превышать 500В. При повышенном уровне напряженности полей следует сократить время работы за компьютером, делать пятнадцатиминутные перерывы в течении полутора часов.

Для предупреждения внедрения опасной техники все дисплеи должны проходить испытания на соответствие требованиям безопасности (например, международные стандарты MRP 2, TCO 99, TCO 03 и т д).

Так как работа программиста по виду трудовой деятельности относится к группе В - творческая работа в режиме диалога с ЭВМ, а по напряженности работы ко II категории тяжести [33], предлагается сократить время работы за компьютером, делать перерывы суммарное время которых должно составлять 50 минут при 8-ми часовой смене.

3.4.1 Инструментальный контроль электромагнитной обстановки

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

Осуществляется контроль органами ГСЭН и (или) испытательными лабораториями (центрами), аккредитованными в установленном порядке. Используемые приборы с допустимой основной относительной погрешностью измерений ± 20 %, должны быть включены в Государственный реестр средств измерения РФ и иметь действующие свидетельства о прохождении Государственной поверки.

Перед проведением инструментального контроля следует составить план размещения рабочих мест пользователей ПЭВМ в помещении, занести в протокол сведения об оборудовании рабочего места, установить на экране ВДТ типичное для данного вида работы изображение (текст, графика и др.). При проведении измерений должна быть включена вся вычислительная техника, ВДТ и другое используемое для работы электрооборудование, размещенное в данном помещении.

Измерение уровней переменных электрических и магнитных полей, статических электрических полей на рабочем месте, оборудованном ПЭВМ, производится на расстоянии 50 см от экрана на трех уровнях на высоте 0,5, 1,0 и 1,5 м.

3.5 Электробезопасность. Статическое электричество

Помещение, в котором производится работа с ПЭВМ, по опасности поражения электрическим током можно отнести к 1 классу, т.е. это помещение без повышенной опасности (сухое, беспыльное, с нормальной температурой воздуха, изолированными полами и малым числом заземленных приборов).

На рабочем месте программиста из всего оборудования металлическим является лишь корпус системного блока компьютера, но здесь используются системные блоки, отвечающие стандарту фирмы IBM, в которых кроме рабочей изоляции предусмотрен элемент для заземления и провод с заземляющей жилой для присоединения к источнику питания. Таким образом, оборудование выполнено по классу 1 (ПУЭ).

Электробезопасность помещения обеспечивается в соответствии с ПУЭ. Опасное и вредное воздействие на людей электрического тока, электрической дуги и электромагнитных полей проявляется в виде электротравм и профессиональных заболеваний.

Степень опасного и вредного воздействия на человека электрического тока, электрической дуги и электромагнитных полей зависит от:

- рода и величины напряжения и тока;

- частоты электрического тока;

- пути тока через тело человека;

- продолжительности воздействия на организм человека.

Электробезопасность в помещении обеспечивается техническими способами и средствами защиты, а так же организационными и техническими мероприятиями.

Рассмотрим основные причины поражения человека электрическим током на рабочем месте:

- прикосновение к металлическим нетоковедущим частям (корпусу, периферии компьютера), которые могут оказаться под напряжением в результате повреждения изоляции;

- нерегламентированное использование электрических приборов;

- отсутствие инструктажа сотрудников по правилам электробезопасности.

В течение работы на корпусе компьютера накапливается статическое электричество. На расстоянии 5-10см от экрана напряженность электростатического поля составляет 60-280 кВ/м, то есть в 10 раз превышает норму 20 кВ/м. Для уменьшения напряжённости применять применение увлажнители и нейтрализаторы, антистатическое покрытия пола.

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

Электробезопасность обеспечивается в соответствии с ГОСТ 12.1.030. - 81 (2001). Опасное и вредное воздействие на людей электрического тока проявляется в виде электротравм и профессиональных заболеваний.

Электробезопасность в лаборатории обеспечивается техническими способами и средствами защиты, а так же организационными и техническими мероприятиями.

Рассмотрим основные причины поражения программиста электрическим током на рабочем месте:

- прикосновение к металлическим нетоковедущим частям системного блока пэвм, которые могут оказаться под напряжением в результате повреждения изоляции;

- запрещенное использование электрических приборов, таких как электрические плиты, чайники, обогреватели.

3.5.1 Обеспечение электробезопасности техническими способами и средствами

Так как все токоведущие части ЭВМ изолированы, то случайное прикосновение к токоведущим частям исключено.

Для обеспечения защиты от поражения электрическим током при прикосновении к металлическим нетоковедущим частям, которые могут оказаться под напряжением в результате повреждения изоляции, рекомендуется применять защитное заземление.

Заземление корпуса ЭВМ обеспечено подведением заземляющей жилы к питающим розеткам. Сопротивление заземления 4 Ом, согласно (ПУЭ) для электроустановок с напряжением до 1000 В.

3.5.2 Организационные и технические мероприятия по обеспечению электробезопасности

Основным организационным мероприятием является инструктаж и обучение безопасным методам труда, а так же проверка знаний правил безопасности и инструкций в соответствии с занимаемой должностью применительно к выполняемой работе.

При проведении незапланированного и планового ремонта вычислительной техники выполняются следующие действия:

- отключение компьютера от сети;

- проверка отсутствия напряжения.

После выполнения этих действий проводится ремонт неисправного оборудования.

Если ремонт проводится на токоведущих частях, находящихся под напряжением, то выполнение работы проводится не менее чем двумя лицами с применением электрозащитных средств.

3.6 Организация рабочего места программиста

Производственная деятельность программиста, заставляет его продолжительное время находиться в сидячем положении, которое является вынужденной позой, поэтому организм постоянно испытывает недостаток в подвижности и активной физической деятельности. При выполнении работы сидя большую роль играет плечевой пояс. Перемещение рук в пространстве влияет не только на работу мышц плечевого пояса и спины, но и на положение позвоночника, таза и даже ног.

Чтобы исключить возникновение заболеваний необходимо иметь возможность свободной перемены поз. Необходимо соблюдать режим труда и отдыха с перерывами, заполняемыми “отвлекающими" мышечными нагрузками на те звенья опорно-двигательного аппарата, которые не включены в поддержание основной рабочей позы.

Антропологические характеристики человека определяют габаритные и компоновочные параметры его рабочего места, а также свободные параметры отдельных его элементов. При размещении рабочих мест с ПЭВМ расстояние между рабочими столами с видеомониторами (в направлении тыла поверхности одного видеомонитора и экрана другого видеомонитора), должно быть не менее 2,0 м, а расстояние между боковыми поверхностями видеомониторов - не менее 1,2 м. При выполнении творческой работы, требующей значительного умственного напряжения или высокой концентрации внимания, рекомендуется изолировать друг от друга перегородками высотой 1,5 - 2,0 м. Экран видеомонитора следует располагать от глаз пользователя на расстоянии 600 - 700 мм, но не ближе 500 мм с учетом размеров алфавитно-цифровых знаков и символов

Конструкция рабочего стола должна обеспечивать оптимальное размещение на рабочей поверхности используемого оборудования с учетом его количества и конструктивных особенностей, характера выполняемой работы. При этом допускается использование рабочих столов различных конструкций, отвечающих современным требованиям эргономики. Поверхность рабочего стола должна иметь коэффициент отражения 0,5 - 0,7.

Рабочий стул (кресло) должен быть подъемно-поворотным, регулируемым по высоте и углам наклона сиденья и спинки, а также расстоянию спинки от переднего края сиденья, при этом регулировка каждого параметра должна быть независимой, легко осуществляемой и иметь надежную фиксацию.

По условиям работы рабочее место программиста относится к индивидуальному рабочему месту для работы сидя.

Рабочее место для выполнения работ в положении сидя должно соответствовать требованиям ГОСТ 12.2.032-78, ГОСТ 22269-76, ГОСТ 21829-76 и требованиям технической эстетики. В конструкции его элементов необходимо учитывать характер работы, психологические особенности человека и его антропометрические данные.

Рабочий стол должен регулировать по высоте в пределах 680-760 мм; при отсутствии такой возможности его высота должна составлять 720 мм. Оптимальные размеры рабочей поверхности столешницы1600х600 мм. Под столешницей рабочего стола должно быть свободное пространство для ног с размерами по высоте не менее 600 мм, по ширине 500 мм, по глубине 650. На поверхности рабочего стола для документов необходимо предусматривать размещение специальной подставки, расстояние которой от глаз должно быть аналогичным расстоянию от глаз до клавиатуры, что позволяет снизить зрительное утомление.

Рабочий стул (кресло) (рисунок 3.2) должен быть снабжен подъемно - поворотным устройством, обеспечивающим регуляцию высоты сидения и спинки, его конструкция должна предусматривать также изменение угла наклона спинки. Рабочее кресло должно иметь подлокотники. Регулировка каждого параметра должна легко осуществляться, быть независимой и иметь надежную фиксацию. Высота поверхности сидения должна регулироваться в пределах 400-500 мм. Ширина сидения должна составлять не менее 400 мм, глубина - не менее 380 мм, ширина подлокотников - не менее 50 мм, длина - не менее 200 мм; высота над поверхностью сидения - 200-250 мм. Высота опорной поверхности спинки должна быть не менее 300 мм, ширина - не менее 380 мм. Радиус ее кривизны в горизонтальной плоскости 400 мм. Угол наклона спинки должен изменяться в пределах 90-110 к плоскости сидения.

Материал покрытия рабочего стула должен обеспечивать возможность легкой очистки от загрязнений. Поверхность сидения и спинки должна быть полумягкой, с нескользящим, неэлектризующим и воздухонепроницаемым покрытием.

На рабочем месте необходимо предусматривать подставку для ног. Ее длина должна составлять 400 мм, ширина 350 мм. Необходимо предусматривать регулировку высоты подставки в пределах 0-150 мм и угла ее наклона - в пределах 0°-20. Она должна иметь рифленое покрытие и бортик высотой 10 мм по нижнему краю.

Организация рабочего места, в которое включается регулируемое по высоте кресло оператора (рисунок 3. 6), позволяет сузить диапазон высот рабочих поверхностей, причем предпочтительнее рабочие поверхности более высокие, т.к. человеку небольшого роста при регулируемой высоте кресла оператора легче приспособиться к соответствующей высоте рабочей поверхности, сохраняя расстояние между высотой рабочей поверхности и кресла оператора равным 270-280 мм, и в случае необходимости пользоваться подставкой для ног.

Рисунок 7.2 - Рабочий стул (кресло)

При организации рабочего места важно учитывать факторы, оказывающие влияние на организацию исполнительной деятельности оператора: размеры моторного поля; величину, форму, сопротивление и направление движения органов управления; их опознавательные признаки; порядок размещения и информационную значимость воздействия органов управления на систему [34].

В ходе анализа вредных и опасных факторов, воздействующих на оператора ЭВМ, были выявлены возможные угрозы, установлены нормы и методы обеспечения безопасности и необходимых условий для работы с ЭВМ, установлены ключевые моменты в организации рабочего места.

Заключение

В результате выполнения дипломного проекта был разработан интернет-сервис взаимного поиска попутного транспорта и пассажиров.

Серверная часть сервиса реализована средствами языка Java, сервера приложений GlassFishи СУБД PostgreSQL. Клиентская часть сервиса - на HTML5, JavaScriptи jQuery. При разработке сервиса большое внимание было уделено интеграции с социальными сетями и картографическими сервисами.

Разработанный сервис предназначен для решения проблемы пробок в современных крупных городах, а также для снижения уровня загрязнения от транспорта путем оптимизации распределения пассажиров между автомобилями. Так как пользователем сервиса может любой человек, имеющий выход в сеть Интернет, нельзя предсказать его уровень компьютерной грамотности. В связи с этим обстоятельством каждый инструмент сервиса имеет интуитивно понятный интерфейс.

При разработке программных средств были учтены все требования, изложенные в техническом задании. Тем не менее, планируется дальнейшее развитие сервиса в направлении интеграции системы с кассами автовокзалов страны для обеспечения пользователям сервиса возможности покупки билета на междугородние автобусы "не выходя из дома".

Было произведено комплексное тестирование разработанных программных средств, в результате которого было установлено полное соответствие разработки и технического задания.

В настоящее время сервис находится в тестовой эксплуатации.

Список использованных источников

1. Интернет-статистика. Вопросы безопасности.

2. Википедия. Транспорт.

3. Моспробка. Carpool - совместное использование автомобиля для проезда.

4. Баканов А.С. Эргономика пользовательского интерфейса. / Баканов А.С., Обознов А.А. - М.: Институт психологии РАН. - 2011.

5. Скотт Б. Проектирование веб-интерфейсов. / Скотт Б., Нейл Т. - М.: Символ-Плюс. - 2010.

6. Р. Дж. Торрес. Практическое руководство по проектированию и разработке пользовательского интерфейса. М.: Вильямс. - 2002.

7. Раскин Д. Интерфейс: новые направления в проектировании компьютерных систем. - М.: Символ-Плюс. - 2004.

8. Таненбаум Э. Современные операционные системы. - СПб.: Питер. - 2011.

9. Марк Г. Собель. Linux. Администрирование и системное программирование. - СПб.: Питер. - 2011.

10. Адельштайн Т. Системное администрирование в Linux. / Адельштайн Т., Любанович Б. - СПб.: Питер. - 2009.

11. Зандрста Мэтт. PHP. Объекты, шаблоны и методики программирования. - М.: Вильямс. - 2011.

12. Котеров Д. PHP 5. / Котеров Д., Костарев А. - СПб.: БХВ-Петербург. - 2008.

13. Шилдт Г. Java. Полное руководство. - М.: Вильямс. - 2012.

14. Лафоре Р. Структуры данных и алгоритмы Java. - СПб.: Питер. - 2011.

15. Эккель Б. Философия Java. - СПб.: Питер. - 2009.

16. GlassFish Community.

17. ReelsenA. PlayFrameworkCookbook. - 2011.

18. Кузнецов М. MySQL 5. / Кузнецов М., Симдянов И. - СПб.: БХВ-Петербург. - 2006.

19. Гешвинде Э. PostgreSQL. Руководство администратора. / Гешвинде Э., Шениг Г. - Ю. - ДиаСофтЮП. - 2002.

20. Дж. Уорсли PostgreSQL. Для профессионалов. Питер. / Дж. Уорсли, Дж. Дрейк. - 2003.

21. Сравнение ООП языков: Java, C++, Object Pascal - http://www.interface.ru/home. asp? artId=3567.

22. Крокфорд Д. JavaScript: сильные стороны. СПб.: Питер. - 2012.

23. Стефанов С. JavaScript. Шаблоны. М.: Символ-Плюс. - 2011.

24. Дронов В.html 5, CSS 3 и Web 2.0. - СПб.: БХВ-Петербург. - 2011.

25. Хеник Б.html и CSS. Путь к совершенству. - СПб.: Питер. - 2011.

26. ДавыдовС. IntelliJIDEA. Профессиональное программирование на Java. Наиболее полное руководство. / ДавыдовС., ЕфимовА. - СПб.: БХВ-Петербург. - 2005.

27. Федотова Д.Э. Case-технологии: Практикум. - М.: Горячая линия. - 2005.

28. Дейт К. Дж. Введение в системы баз данных. - М.: Вильямс. - 2005.

29. Кузнецов С.Д. Основы баз данных. - М.: Интернет-университет информационных технологий, БИНОМ. Лаборатория знаний. - 2007.

30. Конноли Т. Базы данных. Проектирование, реализация и сопровождение. Теория и практика. / Конноли Т., Бегг К. - М.: Вильямс. - 2003.

31. Криспин Л. Гибкое тестирование: практическое руководство для тестировщиков ПО и гибких команд. / Криспин Л., Грегори Д. - М.: Вильямс. - 2010.

32. Ивченко Г.И. Теория массового обслуживания. / Ивченко Г.И., Каштанов В.А., Коваленко И.Н. - М.: Высшая школа. - 1982.

33. "Санитарные нормы и правила при работе с машинами и оборудованием, создающими локальную вибрацию, передающуюся на руки работающих" СанПиН 2.2.2/2.4.3041-84.

34. ГОСТ 12.1.012-90 "Вибрационная безопасность".

35. ГОСТ 24346-80 "Вибрация. Термины и определения".

36. Безопасность жизнедеятельности. Ред. С.В. Белов. Учебник для техникумов и вузов. - М.: Высшая школа, 2009.

37. Санитарные нормы и правила при работе с машинами и оборудованием, создающими локальную вибрацию, передающуюся на руки работающих. № 3041-84.

38. Санитарные нормы вибрации рабочих мест. № 3044-84.

39. Вибрационная безопасность. ГОСТ 12.1.012-90.

40. Вибрация. Термины и определения. ГОСТ 24346-80.

Приложения

Приложение А

/defeat/UDefeat. pas

// ТЕКУЩИЕ ЗАДАЧИ:

//

// ~~~~ УПРАВЛЕНИЕ СРЕДСТВАМИ ПОДАВЛЕНИЯ ~~~~~~~ //

{====================================================

Приложение для организации противодействия БПЛА

Функционирует в связке с приложениями:

КП (KPBPLA)

Погодных условий (Weather)

БПЛА (PImitator)

посредством приложения организующего межпрограммное взаимодействие (trnsserver)

=====================================================}

{====================================================

Общий принцип работы приложения:

После подключения к БД (где содержатся необходимые библиотеки, семантики,

слои и списки со СП), необходимо подсоедениться к серверу.

При этом создаётся поток, для параллельного принятия сообщений,

поступающих от разных элементов системы через сервер.

Сообщения анализируются, и вызывают соответствующую реакцию.

=====================================================}

unit UDefeat;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ComCtrls, Grids, ExtCtrls, Buttons, IdGlobal,

ConnectWithDB, MainDBModul, C_Layers, {C_Maps,} C_Libraries, C_Semantics, C_Primitives,

IOMesVar, Get_Enabled, C_SemanticsConst, All_Use,

UDefeatFeature, IdAntiFreezeBase, IdAntiFreeze, IdThreadComponent,

IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,

USPCommon, IdIOHandler, IdIOHandlerStream, Menus;

type

TBytes = array of Byte;

TPacetStruct = array [1.20] of string;

TIdBytes = TBytes;

TFDefeat = class (TForm)

GroupBox2: TGroupBox;

GroupBox5: TGroupBox;

GroupBox6: TGroupBox;

MProtocol: TMemo;

GroupBox10: TGroupBox;

LEAAdressBLA: TLabeledEdit;

LEAClassBLA: TLabeledEdit;

GroupBox11: TGroupBox;

LEAKodFeature: TLabeledEdit;

LEANameFeature: TLabeledEdit;

LEATypeFeature: TLabeledEdit;

LEARange: TLabeledEdit;

Panel2: TPanel;

Panel3: TPanel;

LETemperature: TLabeledEdit;

LECloud: TLabeledEdit;

LEFog: TLabeledEdit;

LEPrecipitation: TLabeledEdit;

GroupBox3: TGroupBox;

LEWindDirection: TLabeledEdit;

LEWindSpeed: TLabeledEdit;

LEModeTime: TLabeledEdit;

NbDefeat: TNotebook;

GroupBox1: TGroupBox;

GroupBox8: TGroupBox;

LEKodBLA: TLabeledEdit;

LEKodFN: TLabeledEdit;

LEComTime: TLabeledEdit;

SGListFeatures: TStringGrid;

BBTechnicalBehavior: TBitBtn;

GroupBox4: TGroupBox;

LEKodRes: TLabeledEdit;

LETimeRes: TLabeledEdit;

GroupBox7: TGroupBox;

EParDB: TEdit;

GroupBox9: TGroupBox;

CBTypeDB: TComboBox;

GroupBox12: TGroupBox;

LEHost: TLabeledEdit;

LEPort: TLabeledEdit;

GroupBox13: TGroupBox;

SBSelectMap: TSpeedButton;

EMap: TEdit;

PBLoad: TProgressBar;

ODMap: TOpenDialog;

IdTCPCFN: TIdTCPClient;

IdThreadCFN: TIdThreadComponent;

IdAntiFFN: TIdAntiFreeze;

TimerSys: TTimer;

EAnswer: TEdit;

LETimeExution: TLabeledEdit;

SBClear: TSpeedButton;

BChangeState: TButton;

RGLevelMessage: TRadioGroup;

MMenu: TMainMenu;

Files: TMenuItem;

Panels: TMenuItem;

Settings: TMenuItem;

Helper: TMenuItem;

BBLoadFeature: TMenuItem;

BBStart: TMenuItem;

BBExit: TMenuItem;

BBAdjustment: TMenuItem;

BBApply: TMenuItem;

BBSaveIni: TMenuItem;

Features: TMenuItem;

Weather: TMenuItem;

TBehaivor: TMenuItem;

OpenFeatures: TMenuItem;

OpenWeather: TMenuItem;

N2: TMenuItem;

SServer: TMenuItem;

SWeather: TMenuItem;

SBPLA: TMenuItem;

SKPBPLA: TMenuItem;

StatusBar1: TStatusBar;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

RKPBPLA: TMenuItem;

RBPLA: TMenuItem;

Protocol: TMenuItem;

Analiz: TMenuItem;

Pacet: TMenuItem;

MessLog: TMenuItem;

PProtocol: TMemo;

LProtocol: TMemo;

procedure BChangeStateClick (Sender: TObject); // Управление готовностью СП

procedure SBClearClick (Sender: TObject); // Очистка полей с результатами

procedure SGListFeaturesSelectCell (Sender: TObject; ACol, ARow: Integer;

varCanSelect: Boolean); // Отображение готовности СП

procedure BBTechnicalBehaviorClick (Sender: TObject); // Вызов окна ТХ

procedure FormClose (Sender: TObject; var Action: TCloseAction); // Обработка создания формы

procedure BBAdjustmentClick (Sender: TObject); // Открытие вкладки настроек

procedure TimerSysTimer (Sender: TObject); // Обработка тика таймера

procedure IdTCPCFNDisconnected (Sender: TObject); // Обработка отключения от сервера

procedure IdTCPCFNConnected (Sender: TObject); // Обработка подключения к серверу

procedure BBStartClick (Sender: TObject); // Старт работы (подключение к серверу)

procedure BBApplyClick (Sender: TObject); // Применение настроек подключения

procedure SBSelectMapClick (Sender: TObject); // Выбор карты

procedure BBSaveIniClick (Sender: TObject); // Сохранение настроек подключения

procedure BBLoadFeatureClick (Sender: TObject); // Загрузка СП (Подключение к БД)

procedure FormCreate (Sender: TObject); // Обработка закрытия формы

procedure IdThreadCFNRun (Sender: TIdCustomThreadComponent); // Обработка запущенного потока

procedure ExitTFD (Sender: TObject);

procedure FeaturesClick (Sender: TObject);

procedure OpenWeatherClick (Sender: TObject);

procedure AnalizClick (Sender: TObject);

procedure PacetClick (Sender: TObject);

procedure MessLogClick (Sender: TObject);

private

{ Private declarations }

CurrentLine: SmallInt;

Load_Feature: Boolean;

// ListDetectionBLA: TStringList; // Список обнаруженных БЛА (для выбора СП)

ListAllBLA: TStringList; // Список всех БЛА (для оценки поражения)

// Строка это wSID - код канала-отправителя

DefeatFeature: TDefeatFeature; // Средства подавления

BaseDefeat: TBaseDefeat;

Work: Boolean;

ExePath: String;

AddressBPLA: Word;

EndTransfer: Boolean;

procedure SetWeather; // Установка погоды и времени

public

{ Public declarations }

ParDB: String;

Host: String;

Port: Integer;

PathMap: String;

LevelMessage: Word; // Уровень отображения ошибок

SysTime: TDateTime; // Собственное время модели

BPLA: TDataFromIBPLA; // Структура данных от БЛА

DataToISP: TDataToISP; // Структура данных команды от КП БЛА

// Map: TMMap_ALL;

// Mlayers: TMLayer_ALL;

conn: Boolean;

rw,rs,rk,rb,sb,sk: integer;

runstop: boolean;

procedure CommandProcessing; // Выполнение команд КП (?)

procedureBLAProcessing; // Реагирование на пришедшие данные о БПЛА (?)

procedure AnalizDefeat (ParDefeat: TParDefeat); // Для события OnSendMessBLA

// Анализируем сообщение присланное БПЛА о взаимодействии со средством противодействия

procedure SendAnswer (ISPAnswer: TISPAnswer); // Для события OnSendMessKPBLA

// Шлём ответ на присланную от КП команду

procedure interfacing (size, number: integer);

procedure RMOutput (number: integer);

procedure showpacet (pacet: TPacetStruct);

// procedure SMOutput (number: integer);

end;

var

FDefeat: TFDefeat;

implementation

usesUInitFile, Synchro, SetQuery, UAnalizBPLA, UError, DB;

{$R *. dfm}

// =====================================================

// ~~~~~~~ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ~~~~~~~~~~ //

// ====================================================

// Обработка создания главного окна приложения

procedure TFDefeat. FormCreate (Sender: TObject);

begin

NbDefeat. PageIndex: = 0;

Load_Feature: = False;

BBStart. Enabled: = False;

BBSaveIni. Enabled: = False;

BBApply. Enabled: = False;

EndTransfer: = True;

ExePath: = Application. ExeName;

ListAllBLA: = TStringList. Create;

rw: = 0;

rb: = 0;

rk: = 0;

rs: = 0;

sb: = 0;

sk: = 0;

runstop: = false;

MProtocol. Hint: = 'Протокол. '

+ #13#10 + 'Отображает необходимую информацию о поражении цели,'

+ #13#10 + ' а так же команды поступающие от командного пункта';

StatusBar1. Hint: = 'Строка состояний. '

+ #13#10 + 'Отображает число принятых сообщений от'

+ #13#10 + 'сервера, погоды, командного пункта, цели'

+ #13#10 + 'и число отправленных сообщений командному пункту и цели. ';

// Таблица отображения СП

with SGListFeatures do

begin

RowCount: = 2;

ColWidths [0]: = 140;

Cells [0, 0]: = 'Идентификатор';

ColWidths [1]: = 420;

Cells [1, 0]: = 'Тип';

ColWidths [2]: = 160;

Cells [2, 0]: = 'Расположение';

ColWidths [3]: = 50;

Cells [3, 0]: = 'Готов';

end;

// Установка параметров подключения

{

EParDB. ReadOnly: = True;

LEHost. ReadOnly: = True;

LEPort. ReadOnly: = True;

EMap. ReadOnly: = True;

}

// Чтение параметров из файла

ShapingParametr;

// Отображение

EParDB. Text: = ParDB;

LEHost. Text: = Host;

LEPort. Text: = IntToStr (Port);

EMap. Text: = PathMap;

RGLevelMessage. ItemIndex: = LevelMessage;

conn: = false;

end;

// Обработка закрытия приложения (отключение)

procedure TFDefeat. FormClose (Sender: TObject; var Action: TCloseAction);

begin

// Если подключение существует

StatusBar1. SimpleText: = 'Закрытие приложения. ';

Runstop: = true;

with IdTCPCFN do

begin

if Connected then

// Отключаемся

try

Disconnect;

except

end;

end;

BaseDefeat. CloseMap;

{

if not (Map = nil) then

begin

Map. Destroy;

Mlayers. Free;

end;

}

end;

// ===========================================================

// ~~~~~~~~~ ОБРАБОТЧИКИ КОМПОНЕТ ФОРМЫ ~~~~~~~~~~~~ //

// ВКЛАДКИ МЕНЮ------------------------------------------------------------

// ====================================================

// Выход

procedure TFDefeat. ExitTFD (Sender: TObject);

begin

Fdefeat. Close;

// Application. Terminate;

end;

// Окрытие вкладки со средствами противодействия

procedure TFDefeat. FeaturesClick (Sender: TObject);

begin

if OpenFeatures. Caption = 'Открыть' then

begin

interfacing (3,-1);

interfacing (345,1);

NbDefeat. PageIndex: = 0;

OpenFeatures. Caption: = 'Закрыть';

BBSaveIni. Enabled: = false;

BBApply. Enabled: = false;

if BBStart. Caption <> 'Стоп' then

begin

BBAdjustment. Enabled: = true;

end;

end

else

begin

if BBSaveIni. Enabled = false then

begin

interfacing (3,-1);

end;

OpenFeatures. Caption: = 'Открыть';

end;

{

// Открытие таблицы

if OpenFeatures. Caption = 'Открыть' then

begin

// Работа отображением на форме

FDefeat. AutoSize: = False;

FDefeat. Height: = FDefeat. Height - Nbdefeat. Height;

Nbdefeat. Height: = 345;

FDefeat. Height: = FDefeat. Height + Nbdefeat. Height;

FDefeat. AutoSize: = True;

// Блокировка

BBSaveIni. Enabled: = False;

BBApply. Enabled: = False;

// Разблокировка

if BBStart. Caption <> 'Стоп' then

begin

BBAdjustment. Enabled: = True;

end;

TBehaivor. Enabled: = True;

BBLoadFeature. Enabled: = True;

// Изменение наименования кнопки (для работы в активном режиме)

if BBStart. Caption = 'Начать ' then

begin

BBStart. Caption: = 'Начать';

BBStart. Enabled: = True;

end;

// Открытие вкладки с технк ическими характеристиками

NbDefeat. PageIndex: = 0;

// Изменение наименования кнопки (для правильного функционирования)

OpenFeatures. Caption: = 'Закрыть';

end

// Закрытие таблицы

else

begin

// При закрытой вкладке настроек

if BBAdjustment. Enabled = True then

begin

// Работа с отображением на форме

FDefeat. AutoSize: = False;

FDefeat. Height: = FDefeat. Height - Nbdefeat. Height;

Nbdefeat. Height: = 3;

FDefeat. AutoSize: = True;

// Блокировка

// BBAdjustment. Enabled: = True;

TBehaivor. Enabled: = False;

// Открытие вкладки настроек

NbDefeat. PageIndex: = 0;

end

// При открытой вкладке настроек

else

begin

// Блокировка

FDefeat. AutoSize: = False;

BBLoadFeature. Enabled: = False;

BBStart. Enabled: = False;

if BBSaveIni. Enabled = false then

begin

FDefeat. Height: = FDefeat. Height - Nbdefeat. Height;

// Nbdefeat. Height: = 260;

end;

// Разблокировка

FDefeat. AutoSize: = True;

// BBSaveIni. Enabled: = True;

// BBApply. Enabled: = True;

// BBAdjustment. Enabled: = False;

// Открытие вкладки настроек

// NbDefeat. PageIndex: = 1;

end;

OpenFeatures. Caption: = 'Открыть';

end;

}

end;

// Технические характеристики - вызов окна с техническими характеристиками СП

procedure TFDefeat. BBTechnicalBehaviorClick (Sender: TObject);

begin

// Если строка выбрана

if CurrentLine <> 0 then

begin

// передаётся выбранная строка из SGListFeatures

DefeatFeature. ShowTechnicalBehavior (CurrentLine - 1);

end

else

begin

// иначе (строка равна 0)

ShowMessage ('СП не выбрано. ');

end;

end;

// Управление готовностью СП

procedure TFDefeat. BChangeStateClick (Sender: TObject);

begin

if BChangeState. Caption = 'Не готов' then

begin

BChangeState. Caption: = 'Готов';

// Готовность СП ставим в 0

DefeatFeature. SetState (CurrentLine - 1, False);

SGListFeatures. Cells [3, CurrentLine]: = ' Нет';

end

else

begin

BChangeState. Caption: = 'Не готов';

// Готовность СП ставим в 1

DefeatFeature. SetState (CurrentLine - 1, True);

SGListFeatures. Cells [3, CurrentLine]: = 'Да';

end;

end;

// Отображение готовности СП

procedure TFDefeat. SGListFeaturesSelectCell (Sender: TObject; ACol,

ARow: Integer; var CanSelect: Boolean);

begin

CurrentLine: = ARow;

if SGListFeatures. Cells [3, ARow] = 'Да' then

BChangeState. Caption: = 'Не готов'

else

BChangeState. Caption: = 'Готов'

end;

// Очистка полей результатов взаимодействия СП с БПЛА

procedure TFDefeat. SBClearClick (Sender: TObject);

begin

LETimeExution. Text: = '';

LEAAdressBLA. Text: = '';

LEAClassBLA. Text: = '';

LEAKodFeature. Text: = '';

LEATypeFeature. Text: = '';

LEANameFeature. Text: = '';

LEARange. Text: = '';

end;

// Открытие вкладки погоды

procedure TFDefeat. OpenWeatherClick (Sender: TObject);

begin

// Открытие

if OpenWeather. Caption = 'Открыть' then

begin

// Работа с отображением

FDefeat. AutoSize: = False;

Nbdefeat. Top: = 367;

Panel2. Height: = 84;

FDefeat. Height: = FDefeat. Height + Panel2. Height;

FDefeat. AutoSize: = true;

OpenWeather. Caption: = 'Закрыть';

end

// Закрытие

else

begin

// Работа с отображением

FDefeat. AutoSize: = False;

Nbdefeat. Top: = 294;

FDefeat. Height: = FDefeat. Height - Panel2. Height;

Panel2. Height: = 4;

FDefeat. AutoSize: = true;

OpenWeather. Caption: = 'Открыть';

end;

{

if OpenWeather. Caption = 'Открыть' then

begin

FDefeat. AutoSize: = False;

Nbdefeat. Top: = 367;

Panel2. Height: = 84;

if (OpenFeatures. Caption = 'Закрыть') or (BBAdjustment. Enabled = False) then

begin

FDefeat. Height: = FDefeat. Height + Panel2. Height + 5;

end

else

FDefeat. Height: = FDefeat. Height + Panel2. Height + 5;

FDefeat. AutoSize: = True;

OpenWeather. Caption: = 'Закрыть';

end

else

begin

FDefeat. AutoSize: = False;

Nbdefeat. Top: = 294;

Panel2. Height: = 4;

if (OpenFeatures. Caption = 'Закрыть') or (BBAdjustment. Enabled = False) then

begin

FDefeat. Height: = 700;

end

else

FDefeat. Height: = 500;

FDefeat. AutoSize: = True;

OpenWeather. Caption: = 'Открыть';

end;

}

end;

// =====================================================

// НАСТРОЙКИ ПОДКЛЮЧЕНИЯ-----------------------------------------------

// =====================================================

// Настройка подключения (открытие вкладки настроек)

procedure TFDefeat. BBAdjustmentClick (Sender: TObject);

begin

interfacing (3,-1);

interfacing (260,1);

NbDefeat. PageIndex: = 1;

BBAdjustment. Enabled: = False;

BBSaveIni. Enabled: = True;

BBApply. Enabled: = True;

{

// Работа с отображением

FDefeat. AutoSize: = False;

FDefeat. Height: = FDefeat. Height - Nbdefeat. Height;

Nbdefeat. Height: = 260;

FDefeat. Height: = FDefeat. Height + Nbdefeat. Height;

FDefeat. AutoSize: = True;

// Блокировка

BBAdjustment. Enabled: = False;

BBLoadFeature. Enabled: = False;

// Разблокировка

BBSaveIni. Enabled: = True;

BBApply. Enabled: = True;

// Работа с наименование кнопки Начать (для правильного функционирования)

if BBStart. Enabled = true then

begin

BBStart. Enabled: = False;

BbStart. Caption: = 'Начать ';

end;

TBehaivor. Enabled: = False;

// Открытие вкладки настроек

NbDefeat. PageIndex: = 1;

}

end;

// Применение настроек

procedure TFDefeat. BBApplyClick (Sender: TObject);

begin

interfacing (3,-1);

if OpenFeatures. Caption = 'Закрыть' then

begin

interfacing (350,1);

Nbdefeat. PageIndex: = 0;

end;

BBSaveIni. Enabled: = false;

BBApply. Enabled: = false;

BBAdjustment. Enabled: = True;

{

// При открытой таблице

if OpenFeatures. Caption = 'Открыть' then

begin

// Работас отображением

FDefeat. AutoSize: = False;

FDefeat. Height: = FDefeat. Height - Nbdefeat. Height;

Nbdefeat. Height: = 3;

FDefeat. AutoSize: = True;

end

// При закрытой таблице

else

begin

// Работа с отображением

FDefeat. AutoSize: = False;

FDefeat. Height: = FDefeat. Height - Nbdefeat. Height;

Nbdefeat. Height: = 350;

FDefeat. Height: = FDefeat. Height + Nbdefeat. Height;

FDefeat. AutoSize: = True;

// Разблокировка

TBehaivor. Enabled: = True;

// Открытие вкладки средств противодействия

NbDefeat. PageIndex: = 0;

end;

// Блокировка

BBSaveIni. Enabled: = False;

BBApply. Enabled: = False;

// Разблокировка

BBAdjustment. Enabled: = True;

BBLoadFeature. Enabled: = True;

// Проверка наименования кнопки Начать (для правильной работы функционала)

if BBStart. Caption = 'Начать ' then

begin

BBStart. Enabled: = True;

BBStart. Caption: = 'Начать';

end;

// Применение настроек подключения

IdTCPCFN. Port: = Port;

IdTCPCFN. Host: = Host;

}

end;

// Сохранение настроек подключения

procedure TFDefeat. BBSaveIniClick (Sender: TObject);

begin

interfacing (3,-1);

if OpenFeatures. Caption = 'Закрыть' then

begin

interfacing (350,1);

Nbdefeat. PageIndex: = 0;

end;

BBSaveIni. Enabled: = false;

BBApply. Enabled: = false;

BBAdjustment. Enabled: = True;

{

// Разблокировка

BBAdjustment. Enabled: = True;

BBLoadFeature. Enabled: = True;

BBAdjustment. Enabled: = True;

// Проверка наименования кнопки Начать (для правильной работы фунционала)

if BBStart. Caption = 'Начать ' then

begin

BBStart. Enabled: = True;

BBStart. Caption: = 'Начать';

end;

// Блокировка

BBSaveIni. Enabled: = False;

BBApply. Enabled: = False;

// Изменение параметров

ParDB: = EParDB. Text;

Host: = LEHost. Text;

Port: = StrToInt (LEPort. Text);

PathMap: = EMap. Text;

LevelMessage: = RGLevelMessage. ItemIndex;

// Запись параметров в файл (\Defeat. ini)

MakeParametr;

// Если таблица закрыта

if OpenFeatures. Caption = 'Открыть' then

begin

// Работа с отображением на форме

FDefeat. AutoSize: = False;

FDefeat. Height: = FDefeat. Height - Nbdefeat. Height;

Nbdefeat. Height: = 3;

FDefeat. AutoSize: = True;

end

// если таблица открыта

else

begin

// Работа с отображением на форме

FDefeat. AutoSize: = False;

FDefeat. Height: = FDefeat. Height - Nbdefeat. Height;

Nbdefeat. Height: = 350;

FDefeat. Height: = FDefeat. Height + Nbdefeat. Height;

FDefeat. AutoSize: = True;

// Разблокировка

TBehaivor. Enabled: = True;

// Открытие вкладки средств противодействия

NbDefeat. PageIndex: = 0;

end;

}

end;

// Выбор карты

procedure TFDefeat. SBSelectMapClick (Sender: TObject);

begin

ODMap. Filter: = 'Файлы c картой (*. map) |*. map|Все файлы (*. *) |*. *';

if ODMap. Execute then

EMap. Text: = ODMap. FileName;

end;

// =====================================================

// ВРЕМЯ-------------------------------------------------------------------------

// ====================================================

// Обработка тика таймера (обновление времени)

procedure TFDefeat. TimerSysTimer (Sender: TObject);

begin

// Установка TCP соединения

if not IdTCPCFN. Connected then

begin

with IdTCPCFN do

try

Connect

except

end

end;

// Синхронизация

SysTime: = NowSync;

// Обновление времени на форме

LEModeTime. Text: = DateTimeToStr (SysTime);

end;

// =====================================================

// ОСНОВНАЯ ЛОГИКА-----------------------------------------------------------

// =====================================================

// Загрузка (подключение к БД, загрузка СП)

procedure TFDefeat. BBLoadFeatureClick (Sender: TObject);

var

dbConnect: TObject; // Текущее соединение с БД

MLayers: TMLayer_ALL; // Слои (?)

MKLSemantics: TMKL_Semantic_All; // Семантика

LayerSP: TMLayer; // Слой СП (?)

MLibraries: TMLibrary_All; // Библиотеки

PlaceError: String; // Наименование ошибки (?)

begin

// Блокировка

Files. Enabled: = False;

Panels. Enabled: = False;

Settings. Enabled: = False;

Helper. Enabled: = False;

SBClear. Enabled: = False;

StatusBar1. Panels [5]. Text: = 'Система: Подключение к базе данных. ';

LProtocol. Text: = LProtocol. Text + 'Система: Подключение к базе данных. ' + #13#10;

BBLoadFeature. Enabled: = False;

BBAdjustment. Enabled: = False;

BBExit. Enabled: = False;

BBStart. Enabled: = False;

// Прогерсс загрузки = 0

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: =NameIni;

try

try

//

// ShowMessage ('Circle');

PlaceError: = 'BBLoadFeatureClick: 296--ConnectWithDB--';

// Установка соединения с БД

FConnectWithDB (MainDB. dbMain, nil, nil, MainDB. AdbMain, DefRep_WDB,

'Base', 'DB', 'Objects. gdb', 'Нет БД');

StatusBar1. Panels [5]. Text: = 'Система: Установка соединения. ';

LProtocol. Text: = LProtocol. Text + 'Система: Установка соединения. ' + #13#10;

// Вслучаеуспешногосоединения

ifMainDB. dbMain. Connectedthen

begin

// ShowMessage ('BD1');

PBLoad. Position: = PBLoad. Position + 10;

dbConnect: = MainDB. dbMain;

end

else

if MainDB. AdbMain. Connected then

begin

// ShowMessage ('BD2');

PBLoad. Position: = PBLoad. Position + 10;

dbConnect: = MainDB. AdbMain;

end

else

begin

// Иначе

ShowMessage ('Нет БД, работать не могу');

StatusBar1. Panels [5]. Text: = 'Система: Подключение к базе данных не было осуществлено! ';

LProtocol. Text: = LProtocol. Text + 'Система: Подключение к базе данных не было осуществлено! ' + #13#10;

BBExit. Enabled: = True;

Exit

end;

// Получение параметров из файла картографической настройки (?)

Is_User_En_Check: = FGetParFromVV ('Is_User_En_Check', False);

Application. ProcessMessages;

StatusBar1. Panels [5]. Text: = 'Система: Получение параметров из файла картографической настройки. ';

LProtocol. Text: = LProtocol. Text + 'Система: Получение параметров из файла картографической настройки. ' + #13#10;

PBLoad. Position: = PBLoad. Position + 10;

// ShowMessage ('Parametres Map Options');

// Загружаем все слои

PlaceError: = 'BBLoadFeatureClick: 313--Layers--';

MLayers: = TMLayer_ALL. Create (dbConnect);

MLayers. LoadFromDB;

Application. ProcessMessages;

StatusBar1. Panels [5]. Text: = 'Система: Загрузка слоёв. ';

LProtocol. Text: = LProtocol. Text + 'Система: Загрузка слоёв. ' + #13#10;

PBLoad. Position: = PBLoad. Position + 10;

// ShowMessage ('All Layers');

// Семантики

PlaceError: = 'BBLoadFeatureClick: 318--Semantics--';

MKLSemantics: = TMKL_Semantic_All. Create (nil, nil);

MKLSemantics. LoadKlSemBD;

Application. ProcessMessages;

StatusBar1. Panels [5]. Text: = 'Система: Настройка семантик. ';

LProtocol. Text: = LProtocol. Text + 'Система: Настройка семантик. ' + #13#10;

PBLoad. Position: = PBLoad. Position + 10;

// ShowMessage ('Semantics');

// Библиотеки

PlaceError: = 'BBLoadFeatureClick: 323--Libraries--';

MLibraries: = TMLibrary_All. Create (dbConnect);

MLibraries. LoadFromDB;

Application. ProcessMessages;

StatusBar1. Panels [5]. Text: = 'Система: Подключение библиотек';

LProtocol. Text: = LProtocol. Text + 'Система: Подключение библиотек' + #13#10;

PBLoad. Position: = PBLoad. Position + 10;

// ShowMessage ('Libraries');

// Загружаем слой со СП

StatusBar1. Panels [5]. Text: = 'Система: Загрузка слоя со средствами противодействия';

LProtocol. Text: = LProtocol. Text + 'Система: Загрузка слоя со средствами противодействия' + #13#10;

PlaceError: = 'BBLoadFeatureClick: 328--LayerSP--';

LayerSP: = MLayers. LaysById [KodLaySP];

ifLayerSP = nilthen

begin

ShowMessage ('Не найден слой со средствами подавления. ' + #13#10 +

'В КП БПЛА занесите средства подавления и перезапустите программу');

StatusBar1. Panels [5]. Text: = 'Система: Слой со средствами противодействия не найден! ';

LProtocol. Text: = LProtocol. Text + 'Система: Слой со средствами противодействия не найден! ' + #13#10;

BBExit. Enabled: = True;

Exit

end;

except

on E: EDatabaseError do

raise EDBError. Create ('TFDefeat', PlaceError, E. Message);

on E: Exception do

raise EBaseError. Create ('TFDefeat', PlaceError, 'EBaseError',

'Ошибка при загрузке средств подавления',

'Ошибка "' + E. Message + '"');

end;

Application. ProcessMessages;

PBLoad. Position: = PBLoad. Position + 10;

// ShowMessage ('Layers SP');

// Загружаем объекты (СП)

StatusBar1. Panels [5]. Text: = 'Система: Загрузка объектов. ';

LProtocol. Text: = LProtocol. Text + 'Система: Загрузка объектов. ' + #13#10;

if LayerSP <> nil then

DefeatFeature: = TDefeatFeature. Create (dbConnect)

else

begin

ShowMessage ('Нетслоясобъектамиподавления (возможностараяверсияКПБПЛА) ');

StatusBar1. Panels [5]. Text: = 'Система: Нет слоя с объектами противодействия (возможно старая версия КП БПЛА)! ';

LProtocol. Text: = LProtocol. Text + 'Система: Нет слоя с объектами противодействия (возможно старая версия КП БПЛА)! ' + #13#10;

Exit

end;

Application. ProcessMessages;

PBLoad. Position: = PBLoad. Position + 10;

// ShowMessage ('Objects SP');

// Наносим СП на карту

StatusBar1. Panels [5]. Text: = 'Система: Нанесение средств противодействия на карту. ';

LProtocol. Text: = LProtocol. Text + 'Система: Нанесение средств противодействия на карту. ' + #13#10;

if LayerSP. Count > 0 then

begin

// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

DefeatFeature. LoadFeature (LayerSP, MKLSemantics, MLibraries);

// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

PBLoad. Position: = PBLoad. Position + 10;

// ShowMessage ('SP for map');

end

else

begin

StatusBar1. Panels [5]. Text: = 'Система: На карту не нанесены средства противодействия! ';

LProtocol. Text: = LProtocol. Text + 'Система: На карту не нанесены средства противодействия! ' + #13#10;

ShowMessage ('На карту не нанесены средства подавления. ' + #13#10 +

'В КП БПЛА нанесите средства подавления и перезапустите программу');

BBExit. Enabled: = True;

Exit

end;

except

on E: EBaseError do

E. ShowMessage;

on E: Exception do

raise;

end;

// Выбор СП в таблице

CurrentLine: = 1;

// TimerLoad. Enabled: = False;

// Отображаем что загрузка выполнена и разблокируем кнопки

PBLoad. Position: = 100;

// Разблокировка

Files. Enabled: = true;

Panels. Enabled: = true;

Settings. Enabled: = true;

Helper. Enabled: = true;

SbClear. Enabled: = true;

Load_Feature: = True;

BBTechnicalBehavior. Enabled: = True;

BBAdjustment. Enabled: = True;

BBExit. Enabled: = True;

BBStart. Enabled: = True;

BBLoadFeature. Enabled: = True;

// Выводим собщение об успехе

StatusBar1. Panels [5]. Text: = 'Система: Соединение с базой данных установлено, средства противодействия загружены. ';

LProtocol. Text: = LProtocol. Text + 'Система: Соединение с базой данных установлено, средства противодействия загружены. ' + #13#10;

end;

// Старт (соединение с сервером)

procedure TFDefeat. BBStartClick (Sender: TObject);

begin

// Проверка на запуск

if Work then

begin

// Прекращение работы

StatusBar1. Panels [5]. Text: = 'Система: Прекращение работы. ';

LProtocol. Text: = LProtocol. Text + 'Система: Прекращение работы. ' + #13#10;

BBAdjustment. Enabled: = True;

BBLoadFeature. Enabled: = True;

BChangeState. Enabled: = False;

BBStart. Caption: = 'Старт';

TimerSys. Enabled: = false;

work: =false;

// Если поток активен, соединение существует

if IdThreadCFN. Active and IdTCPCFN. Connected then

try

// Останавливаем поток, разрываем соединение

IdThreadCFN. Stop;

IdTCPCFN. Disconnect;

StatusBar1. Panels [5]. Text: = 'Система: Разрыв соединения. ';

LProtocol. Text: = LProtocol. Text + 'Система: Разрыв соединения. ' + #13#10;

except

end

end

else

begin

// Запуск

StatusBar1. Panels [5]. Text: = 'Система: Запуск! ';

LProtocol. Text: = LProtocol. Text + 'Система: Запуск! ' + #13#10;

BBAdjustment. Enabled: = False;

BBLoadFeature. Enabled: = False;

BChangeState. Enabled: = True;

BBStart. Caption: ='Стоп';

IdTCPCFN. Port: = Port;

IdTCPCFN. Host: = Host;

// пробуем соединиться с сервером

StatusBar1. Panels [5]. Text: = 'Система: Подключение к серверу. ';

LProtocol. Text: = LProtocol. Text + 'Система: Подключение к серверу. ' + #13#10;

with IdTCPCFN do

begin

if not Connected then

try

Connect;

if conn = false then

begin

conn: = True;

end;

except

end;

// Синхронизациявремени

Weather_MyNow: = now;

Weather_Reseived. time: = now;

// Запуск таймера (часов)

TimerSys. Enabled: = True;

Work: = True;

end;

end;

end;

// =====================================================

// ~~~~~~~~~ПРОЦЕДУРЫ И ФУНКЦИИ~~~~~~~~~~~~~~~~ //

// ПОГОДА------------------------------------------------------------------------

// =====================================================

// Установка погодных условий (При синхронизации с приложением погоды)

procedure TFDefeat. SetWeather;

begin

// Температура

LETemperature. Text: = IntToStr (Weather_Reseived. Temp) + '°C';

// Облачность

LECloud. Text: = IntToStr (Weather_Reseived. cloud) + '%';

// Наличие тумана

if Weather_Reseived. Mist =0then

LEFog. Text: = 'Нет'

else

LEFog. Text: = 'Есть';

// Осадки

LEPrecipitation. Text: = IntToStr (Weather_Reseived. hydro) + '%';

// Направление ветра

LEWindDirection. Text: = IntToStr (Weather_Reseived. course) + '°';

// Скорость ветра

LEWindSpeed. Text: = FloatToStr (Weather_Reseived. wind) + 'м/сек';

// Отображение системного времени модели

LEModeTime. Text: = DateTimeToStr (SysTime);

end;

// ===================================================

// СВЯЗЬ С КП--------------------------------------------------------------------

// ====================================================

// Команда СП

procedure TFDefeat.commandProcessing;

var

i: Integer;

YesFeature: Boolean;

Kod_ISP: String;

begin

//

try

YesFeature: = False;

with DataToISP do

begin

Kod_ISP: = IntToStr (KodISP); // Код СП из КП

LEKodBLA. Text: = IntToStr (NumerAim); // Номер цели

LEKodFN. Text: = Kod_ISP;

LEComTime. Text: = TimeToStr (TimeMark); // Время засечки

end;

with DefeatFeature do

begin

// Поиск СП в списке

for I: = 0 to ListFeature. Count - 1 do

begin

// Если СП найдено

if ListFeature [i] = Kod_ISP then

begin

YesFeature: = True;

// Команда СП

TBaseDefeat (ListFeature. Objects [i]).commFromKPBLA (DataToISP);

end;

end;

end;

// Не найдено запрашиваемого средства

if Not YesFeature then

raise EBaseError. Create ('TFDefeat', 'CommandProcessing: 206', 'EBaseError',

'Нет средства поражения с кодом = ' + Kod_ISP,

'Нет средства поражения с кодом = ' + Kod_ISP)

except

on E: EBaseError do

E. ShowMessage;

on E: Exception do

raise;

end;

end;

// Отправка ответа в КП

procedure TFDefeat. SendAnswer (ISPAnswer: TISPAnswer);

var

tmp_dyn: TIdBytes;

ISPAnswerPack: TISPAnswerPack;

begin

LEKodRes. Text: = IntToStr (ISPAnswer. KodISP); // Код СП из КП

LETimeRes. Text: = TimeToStr (NowSync); // Синхронизированное время

// Вывод ответа КП на экран

case ISPAnswer. Answer of

SP_Obn_: EAnswer. Text: = 'Принято к исполнению';

SP_NObn_: EAnswer. Text: = 'Цель не обнаружена';

SP_No_: EAnswer. Text: = 'Цель потеряна';

SP_YesAll_: EAnswer. Text: = 'Команда выполнена';

end;

// Запись сообщения

with ISPAnswerPack do

begin

Main. KodISP: = ISPAnswer. KodISP;

Main. TimeMark: = SysTime;

Main. NumerAim: = ISPAnswer. NumerAim;

Main. Answer: = ISPAnswer. Answer;

Header. bType: = SMT_ISPAns;

Header. wSID: = PRG_ISP;

// Header. wAID: = PRG_SERVER;

Header. wAID: = PRG_MAIN;

Header. rDTM: = GetPacketTime (NowSync);

Header. nLength: = Sizeof (TISPAnswer);

Header. wBC: = 0;

end;

// Отправка сообщения

// ShowMessage ('Пишем в буфер');

// sk: = sk + 1;

IdTCPCFN. WriteBuffer (ISPAnswerPack, SizeOf (ISPAnswerPack));

if runstop <> true then

RMOutput (6);

{

if RKPBPLA. Checked = true then

begin

// StatusBar1. Panels [5]. Text: = 'Система: Отправлено сообщение№' + inttostr (sk) + ' командному пункту';

end;

}

// StatusBar1. Panels [8]. Text: = 'K: ' + inttostr (sk);

end;

// =====================================================

// БПЛА--------------------------------------------------------------------------

// =====================================================

// Отслеживание БПЛА (занесение в список целей, отслеживание координат) (?)

procedure TFDefeat. BLAProcessing;

var

i: Integer;

AdrrBPLA: String;

YesBPLA: Boolean;

begin

// BPLA

YesBPLA: = False;

AdrrBPLA: = IntToStr (AddressBPLA);

// Поиск БПЛА в списке

for i: = 0 to ListAllBLA. Count - 1 do

begin

if ListAllBLA [i] = AdrrBPLA then

begin

// Определение координат БПЛА

TAnalizBPLA (ListAllBLA. Objects [i]). SetCoord (BPLA);

YesBPLA: = True

end

end;

if Not YesBPLA then

// Добавление БПЛА в список (если не было найдено)

ListAllBLA. AddObject (AdrrBPLA, TAnalizBPLA. Create (BPLA, AddressBPLA));

end;

// =====================================================

// TCP---------------------------------------------------------------------------

// =====================================================

// Обработка подключения

procedure TFDefeat. IdTCPCFNConnected (Sender: TObject);

var

Ident: R_Ident;

tmp_dyn: TIdBytes;

Ipacet: TPacetStruct;

begin

// Запускаем поток

IdThreadCFN. Start;

// Запись сообщения

// if IdTCPCFN. IOHandler. Connected then

if IdTCPCFN. Connected then

begin

with Ident do

begin

// Параметры сообщения

Main. wCnlID: = PRG_ISP; // Код программы (отправителя)

Main. sARM_Name: = FGet_ARMName; // Имя машины

Main. sSRV_Name: = Host; // Адрес сервера

Main. sPRG_Path: = ExePath; // Пусть к исполняемому файлу

Main. sPRG_Rem: = 'Имитатор ср-в подавления'; // Наименование приложения

Header. bType: = SMT_SCQ; // Тип cообщения (запрос списка абонентов) (!)

Header. wSID: = PRG_ISP; // Код отправителя

Header. rDTM: = GetPacketTime (NowSync); // Параметры времени (!)

Header. wAID: = PRG_SERVER; // Код получателя

Header. nLength: = SizeOf (Main); // Размер пакета (!)

Header. wBC: = 0; // Число блоков данных

Ipacet [1]: = '1';


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

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