Отчёт - Имитационная модель воздушно-космической обороны
Описание файла
Документ из архива "Отчёт - Имитационная модель воздушно-космической обороны", который расположен в категории "". Всё это находится в предмете "военная кафедра" из 10 семестр (2 семестр магистратуры), которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "военная кафедра" в общих файлах.
Онлайн просмотр документа "Отчёт - Имитационная модель воздушно-космической обороны"
Текст из документа "Отчёт - Имитационная модель воздушно-космической обороны"
Московский Государственный Технический Университет им. Н.Э. Баумана
Пояснительная записка
«ИМИТАЦИОННАЯ МОДЕЛЬ ВОЗДУШНО-КОСМИЧЕСКОЙ ОБОРОНЫ »
Учебный взвод: ИУ5 (5 курс)
Студент: Шурубура О
Руководитель: Егерев А.
Москва 2013
Оглавление
Постановка задачи 3
1. Заданный вариант 4
2. Тексты скриптов 4
1. Файл CommonFuncs.sh 4
2. Файл params.sh 6
3. Файл VKO.sh 10
4. Файл KP.sh 13
5. Файл SartSystems.sh 15
3. Алгоритмы работы 16
4. Топографическая карта 17
5. Отрывки журналов работы 18
6. Выводы 19
-
Постановка задачи
Задача практической работы: создать имитационную модель работы ВКО.
Дано:
-
координаты и ттх 3-х радиолокационных станций СПРН;
-
координаты и ттх 3-х зенитно-ракетных дивизионов (зрдн);
-
координаты и зона действия СПРО;
-
генератор целей, создающий до 30 целей одновременно.
Параметры цели задает скрипт GenTargets.sh (выдается преподавателем).
GenTargets.sh работает, следующим образом:
в каталог/tmp/GenTargets/Targets создает файлы с названиями следующего вида (пример):
Target.id.0a4cf5.5b26908e6d84b37fe2cd6c702f443253,
Target.id.1420c1.2c962005678c1ef1b5803b0c47fd83e1,
Target.id.0a4cf5.3787a56ca9df6ab8c02a97c816843342,
содержащие параметры цели в следующем формате: 959870128688 –координаты цели по X и Y. Каталог сам очищается, из него необходимо выбирать последние созданные файлы, в имени файла содержится ID цели сами файлы изменять и удалять запрещается.
Координаты получают все радиолокационные станции СПРН, зрдн, система ПРО.
Частные задачи:
-
Задачи РЛС:
РЛС проверяет направление полета БР по 2-м засечкам, если движение БР направлено в зону ответственности СПРО, выдавать соответствующую информацию на КП, также выдавать информацию обо всех замеченных целях. Не допускать повторную выдачу одинаковой информации.
Пример: “Обнаружена цель ID:xxxxxx с координатами xxx xxx”
“Цель ID:xxxxxx движется в направлении СПРО”
-
Задачи СПРО:
Обнаруживать и уничтожать цели в зоне обнаружения системы. Выдавать данные на КП об обнаруженных целях. Уничтожать БР (Уничтожение цели возможно только на 2-й засечке). Уничтожение цели происходит с вероятностью 80%генератором целей.
-
Задачи зрдн:
Обнаруживать и уничтожать цели в зоне ее ответственности. Выдавать данные на КП об обнаруженных целях. Уничтожать цели (Уничтожение цели возможно только на 2-й засечке). Уничтожение цели происходит с вероятностью 80% генератором целей.
-
Задачи КП ВКО:
Принимать данные от всех систем ВКО, вести журнал работы системы в целом и журналы каждого элемента системы. Проверять работоспособность системы через определенные промежутки времени.
-
Заданный вариант
-
Тексты скриптов
-
Файл CommonFuncs.sh
function CheckConditions
{
if [[ $EUID -eq 0 ]]; then
echo "Невозможен запуск с правами администратора"
exit 1
fi
OS=`uname -s`
if [[ $OS != "Linux" ]]; then
echo "Невозможен запуск в ОС, отличной от Linux"
exit 1
fi
t1="1";
t2="1";
[[ $t1 == $t2 ]]
res=$?
if [ $res != 0 ]; then
echo "Невозможен запуск в интерпретаторе, отличном от BASH"
exit 1
fi
}
sigint_handler() { echo "";echo "Завершение работы системы $TYPE" ; exit 0;}
function GetTargetsList
{
Targets=`ls -tr $DirectoryTargets 2>/dev/null | grep id.`
result=$?;
if (( $result != 0 ))
then
echo "Система не запущена!"
exit 0
fi
}
returnIdx=0;
function isNewIDinList
{
# if new returns -1
# else returns index of element
sizeofElem="$1"
idcurr="$2";
#shift
#shift
#declare -a list=("${@}")
((countofElem=${#TargetsId[@]}/sizeofElem)); #echo "ELEMENTS = $countofElem"
returnIdx=-1
i=0
while (( "$i" < "$countofElem" ))
do
if [[ "${TargetsId[0+$sizeofElem*$i]}" == "$idcurr" ]]
then
returnIdx=$i
break;#return "$i"
fi
let i+=1
done
}
function checkDetection
{
type="$1"
maxoftype=$2
X=$3
Y=$4
i=0
while [[ "$i" < "$maxoftype" ]]
do
checkinAreaByType $type $i $X $Y
spotted=$?
let i+=1
if [[ "$spotted" == "1" ]]
then
return 1;
fi
done
}
function TargetTypeBySpeed
{
#0-br 1-plan 2-cmiss
speed=$1
if (( $speed < 0 ))
then
let speed=-1*$speed;
fi
if (( $speed < 250 ))
then
return 1
fi
if (( $speed < 1000 ))
then
return 2
fi
if (( $speed < 10000 ))
then
return 0
fi
return 100
}
hbspro=0
hbzrdn=0
hbrls=0
function HeartBeatInit
{
type="$1"
filename=$DirectoryComm/$type
echo "0" >$filename
case $type in
"rls" )
hbrls=0
;;
"spro" )
hbspro=0
;;
"zrdn" )
hbzrdn=0
esac
}
function HeartBeat
{
type="$1"
case $type in
"rls" )
let hbrls+=1
echo "$hbrls" >$filename
;;
"spro" )
let hbspro+=1
echo "$hbspro" >$filename
;;
"zrdn" )
let hbzrdn+=1
echo "$hbzrdn" >$filename
esac
}
function RandomSleep
{
rand=$((RANDOM%5+5))
sltime=$(echo "$rand/10" | bc -l);
sleep $sltime
}
-
Файл params.sh
# ------------------------------------------
# System vars
# ------------------------------------------
TempDirectory=/tmp/GenTargets
DirectoryTargets="$TempDirectory/Targets"
DestroyDirectory="$TempDirectory/Destroy"
DirectoryComm="$TempDirectory/Comm"
DirectoryCommLog="$TempDirectory/CommLog"
LogFile=$TempDirectory/GenTargets.log
# ------------------------------------------
# Location params
# ------------------------------------------
MaxRLS=3
MaxZRDN=3
MaxSPRO=1
declare -a RLS # x y a r fov
#1
RLS[0+5*0]=6000
RLS[1+5*0]=6000
RLS[2+5*0]=270
RLS[3+5*0]=4500
RLS[4+5*0]=48
#2
RLS[0+5*1]=2500
RLS[1+5*1]=3600
RLS[2+5*1]=135
RLS[3+5*1]=3000
RLS[4+5*1]=120
#3
RLS[0+5*2]=5500
RLS[1+5*2]=3750
RLS[2+5*2]=225
RLS[3+5*2]=6000
RLS[4+5*2]=90
declare -a ZRDN # x y r
#1
ZRDN[0+3*0]=6200
ZRDN[1+3*0]=3500
ZRDN[2+3*0]=600
#1
ZRDN[0+3*1]=5500
ZRDN[1+3*1]=3750
ZRDN[2+3*1]=400
#1
ZRDN[0+3*2]=4400
ZRDN[1+3*2]=3750
ZRDN[2+3*2]=650
declare -a SPRO # x y r
#1
SPRO[0+3*0]=3250
SPRO[1+3*0]=3400
SPRO[2+3*0]=1000
function SetParamsBySystemID
{
local cType=$1;
case $cType in
0 ) # RLS
TYPE="РЛС"
TYPELOG="rls"
MAXOFTYPE=$MaxRLS
CANDESTROY=(0 0 0) #0-br 1-plan 2-cmiss
;;
1 ) # ZRDN
TYPE="зрдн"
TYPELOG="zrdn"
MAXOFTYPE=$MaxZRDN
CANDESTROY=(0 1 1) #0-br 1-plan 2-cmiss
;;
2 ) # SPRO
TYPE="СПРО"
TYPELOG="spro"
MAXOFTYPE=$MaxSPRO
CANDESTROY=(1 0 0) #0-br 1-plan 2-cmiss
;;
esac
}
function checkinSector()
{
local i=$1
local X=$2
local Y=$3
((x1=-1*${RLS[0+5*$i]}+$X))
((y1=-1*${RLS[1+5*$i]}+$Y))
#echo "$x1 $y1"
local r1_=$(echo "sqrt ( (($x1*$x1+$y1*$y1)) )" | bc -l)
r1=${r1_/\.*}
if (( $r1 <= ${RLS[3+5*$i]} ))
then
#echo "R is OK!"
#cosfi=$(echo "-$x1/$r1_" | bc -l); #echo $cosfi
local fi=$(echo | awk " { x=atan2($y1,$x1)*180/3.14; print x}"); fi=(${fi/\.*});
if [ "$fi" -lt "0" ]
then
((fi=360+$fi))
fi
((fimax=${RLS[2+5*$i]}+${RLS[4+5*$i]}/2)); #echo $fimax
((fimin=${RLS[2+5*$i]}-${RLS[4+5*$i]}/2)); #echo $fimin
if (( $fi <= $fimax )) && (( $fi >= $fimin ))
then
# echo "fi is OK!"
return 1
fi
fi
return 0
}
function checkinCircle()
{
local i=$1
local X=$2
local Y=$3
local typeofvko=$4
if (( typeofvko == 1 )); then
((x1=-1*${SPRO[0+3*$i]}+$X))
((y1=-1*${SPRO[1+3*$i]}+$Y))
else
((x1=-1*${ZRDN[0+3*$i]}+$X))
((y1=-1*${ZRDN[1+3*$i]}+$Y))
fi
#echo "$x1 $y1"
local r1_=$(echo "sqrt ( (($x1*$x1+$y1*$y1)) )" | bc -l)