1.5. Построение
результирующих иерархических моделей терминала и выделенных узлов сети (в соответствии
с концепцией OSI) с отражением путей доставки служебных, так и информационных сообщений.
Ниже приведено назначение
уровней модели OSI, применяемых нами в данной системе.
На физическом уровне выполняются такие
задачи, как модуляция, обеспечение синхронизации, помехоустойчивое кодирование,
передача сообщений по радиоканалу и радиоизмерения.
Канальный уровень в разрабатываемой сети отвечает
за доступ к каналу связи, а именно алгоритм множественного доступа по
методу опроса активных терминалов. Также к задачам, выполняемым на этом уровне,
относится проверка паритета методом расчёта контрольных сумм.
Сетевой уровень отвечает за принятие решений об управлении сетью в целом, а также
за взаимодействие с другими сетями (нами был рассмотрен вариант взаимодействия
с сетью Internet).
На рис. 1 приведена иерархическая модель сети. Данная модель описывает взаимодействие разных
сетевых объектов при передаче служебных сообщений и сообщений трафика.
За формирование служебного сообщения (всех типов широковещательных
сообщений и сообщений опроса) отвечает служба
управления сетью на L3 уровне. Служебные сообщения могут быть сформированы либо исходя
из алгоритмов функционирования ПО элемента сети на L3 уровне либо по
инициативе пользователя. Это решение обосновано необходимостью в средстве
быстрого реагирования, такого как срочная команда. (Рис. 5) Также на этом
уровне принимается решение о регистрации новых терминалов в сети (предусмотрен
вариант принятия этого решения пользователем).
Служба взаимодействия с
другими сетями служит для обмена служебными и информационными
сообщениями с пользователем, используя сеть Internet.
Служба реконструкции сети определяет необходимость назначения транзитных терминалов.
Служба управления
радиоресурсами предназначена для определения интервала опроса
для каждого терминала, учитывая его срочность.Компактная сеть радиодоступа-ч.2
Служба управления
энергетикой предназначена для изменения уровня мощности
элементов сети (предусмотрено наличие режима энергосбережения, активируемого по
команде пользователя, включение данного режим приведет к изменению мощности
сигнала элементов сети, количества транзитных терминалов и длительности
интервала опроса).
Сообщение трафика формируется либо
пользователем либо устройством при терминале (причем если таким устройством
является видеокамера, пакет видео поступает сразу на физический уровень).
Рис.1 – Иерархическая
модель сети
В нашей системе под служебным
сообщением понимается широковещательно сообщение, сообщения запроса и ответа,
сообщения запроса на регистрацию. Под сообщением трафика понимают как команду
конкретному устройству, так и показания приборов, датчиков, сигнализации.
2. Экспериментальная часть. Разработка и экспериментальное исследование
программной модели канала передачи данных.
2.1. Разработка и описание блок-схемы алгоритма
модели.
На данном этапе курсовой работы
требовалось смоделировать на языке Matlab сценарий
приёмо-передачи сообщений на канальном уровне. Блок-схема алгоритма,
описывающего данный сценарий, представлена на рис.2. На данном рисунке изображена
блок-схема алгоритма приемо-передачи в режиме прямого доступа (рис.3).
Основная часть программы заключена в
цикле с изменяющейся временной меткой. Если
эта метка при делении на длину кадра дает в остатке 1, это означает, что на
данном этапе терминал принимает широковещательное сообщение. В этом случае
происходит прием ВССН терминалом (формирование ВССН представлено пунктирным
блоком, так как не является частью сценария поведения терминала, а просто
необходим для работоспособности программы; это относится ко всем блокам,
выделенным пунктиром). Если остаток от деления временной метки на 1998(длина кадра)
равен произведению 1960 (берется из состава кадра, представленного во второй
части курсовой работы)*n,
где n-интервал опроса
данного терминала, то это является свидетельством начала опроса данного
терминала. В этом случае терминал получает сообщение запроса, принимает блок
данных, формирует сообщение запроса и блок передаваемых данных. После процедуры
опроса программа предусматривает возможную регистрацию в сети через данный
терминал (цикл регистрации не может происходить чаще, чем цикл опроса).
Рис.2 – Блок-схема алгоритма
Рис. 3 – Временная диаграмма работы в
режиме прямого доступа (для понятия блок-схемы алгоритма)
На рис. 4 представлено дерево скриптов,
использованных в программе.
ВССН_form – функция, формирующая сообщение ВССН.
zapros_form - функция, формирующая сообщение
запроса.
data_form – функция, формирующая сообщение
трафика.
ad_form – функция, формирующая сообщение
запроса на регистрацию .
otvet_form – функция, формирующая сообщение
ответа.
rx_bcch – функция, осуществляющая прием ВССН.
rx_zapros - функция, осуществляющая прием
сообщения запроса.
rx_data - функция, осуществляющая прием сообщения
трафика.
rx_ad - функция, осуществляющая прием
сообщения запроса на регистрацию.
strobin – функция для перевода текстового
сообщения в бинарный код.
bintostr – функция для перевода бинарного кода в
текстовое сообщение.
Стоит сказать, что в данном дереве
отсутствует одна функция (decod_BCCH_L3) по причине того, что она отвечает за
декодирование сообщений на L3 уровне, а все вышеперечисленные на L2.
На данном рисунке сплошная линия свидетельствует
о вызове данной функции из текущей, а пунктирная − означает, что формирование
переменной для данного скрипта происходит в функции, из которой выходит пунктирная
линия.
Рис. 4 – Дерево скриптов,
использованных при разработке программы
2.2. Разработка программных модулей передачи
и приема сообщений канального уровня.
Работа программы, представленной в этой статье, имитирует работу
канального уровня терминала в режиме прямого доступа. Ниже
будут представлены фрагменты кода программы, отвечающие за конкретные задачи Формирование широковещательного
сообщения делится на формирование широковещательного сообщения сетевого и
канального уровня (листинг 1).
Листинг
1
%% формирование L3 сообщения
zv=0;% флаг,
определяющий наличие видеопотока в кадре, следующем после BCCH
%сообщения 0-есть видеопоток,
1-нет
%необходимо для регистрации в сети после включения
АР(когда еще ни 1 Т в
%сети нет), передачи
срочной команды и опроса терминала, передающего
%видеопоток(он опрашивается
реже всего)
IDss='brainHouse1';%id сети
IDs=strtobin(IDss)';%id в двоичной форме
comMost=zeros(1,64);%срочная
команда, если таковой нет - заполняется нулями
fldubl=0;%флаг,
определяющий необходимость дублирования ВССН в случае срочной
%команды. Очередность
дублирования, как и опроса при отсутствии видео,
%задается при опросе
L3bcch=[zv IDs comMost fldubl];%сборка
сообщения L3
Сообщение ВССН на L3 уровне будет выглядеть следующим образом (рис. 5).
Рис.5 – Сообщение ВССН L3 уровня
%% формирование пакета L2
уровня
%рассчитывается полином для
проверки целостности на приемной стороне
ini.CRC_pol= [1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0];
[crcx crcy]=size(ini.CRC_pol);
bcch = [];
%перевод длины пакета в
двоичный код для добавления в сообщение
iff=L3bcch((n-1)*104+1:end);
iff=size(iff);
ifff=iff(2);
if ifff > 104
flength=104;
else
flength=ifff;
end
length=flength;
Blength=[fix(length/64)];
length=mod(length,64);
for i=1:6
Blength=[Blength
fix(length/2^(6-i))];
length=mod(length,2^(6-i));
end
if n<3
data=L3bcch((n-1)*104+1:n*104);%выделение
поля Data из L3 сообщения
else
data=L3bcch((n-1)*104+1:end);
end
data1=[data zeros(1,crcy-1)];
[q r] = deconv(data1
,ini.CRC_pol);% поиск частного и остатка от деления
%информационной части на порождающий полином CRC кода
r = mod(abs(r),2);
CRC = r(flength+1:end);%окончательное формирование поля паритета
bcch=[fl Blength data CRC];%сборка пакета
BCCH=bcch;
Сообщение ВССН L2 уровня представлено на рис.6.
Рис.6 – Сообщение ВССН L2 уровня
Приём сообщения ВССН представляет собой прием ВССН на L2 уровне и декодирование собранного на L3 уровне сообщения (листинг 2).
Листинг 2
%% прием широковещательного
сообщения и его обработка на %L2 уровне
function rxB =
rx_bcch(BCCH)
switch nargin%параметры
вызова без задания аргументов
case 0
BCCH=BCCH_form(1,1);
end
ini.CRC_pol= [1 0 0 0 1 0 0 0 0 0
0 1 0 0 0 1 0];%полином расчета паритета
err=0;
if BCCH(1)==1
disp('доступно!!!');
else
disp('недоступно!!!%');
end
length=BCCH(2:8);%выделение блока length
Dlength=0;
for x=1:7
Dlength=length(x)*2^(7-x)+Dlength;%определение длины пакета
end
[q r]=deconv(BCCH,ini.CRC_pol);
%проверка остатка
r=mod(abs(r),2);
l=zeros(1,Dlength+8);
if r(1:Dlength+8) == l%проверка CRC
detect=0;% ошибок
нет
disp('ошибок нет!!!');
else
err = err + 1;
detect=1;% обнаружены ошибки
disp('ошибкa!!!');
end;
rxB=BCCH(9:Dlength+8);%выделение поля DATA
end
%% декодирование L3
сообщения ВССН
function dBL3 =
decod_BCCH_L3(BCCH)
l=length(BCCH);
if
or(BCCH(l-64:l-1)>zeros(1,64),BCCH(l-64:l-1)<zeros(1,64))%определение
наличия срочных команд
disp('срочная команда!!!!');
if BCCH(l)==1%определение
необходимости дублирования ВССН
disp('дублируем ВССН');
BCCH_form(1,1);%собственно
дублирование
BCCH_form(2,1);
BCCH_form(3,1);
end
end
name_web=BCCH(2:l-65);%ID сети
name=dec2bin(name_web);
name=bintostr(name_web);%перевод в символы
disp(name);%вывод идентификатора сети
end
Формирование сообщения запроса/
ответа (служебные сообщения опроса в данной сети по своей структуре одинаковы)
(листинг 3).
Листинг
3
%% формирование сообщения
ответа!
function otvet =
otvet_form(adT)
switch nargin
case 0
adT = [];% id регистрирующихся
терминалов
end
rng('shuffle');
%% составление, определение
параметров длины полинома паритета
ini.CRC_pol= [1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0];
[crcx crcy]=size(ini.CRC_pol);
%% формирование поля DATA
otvet = [];
otv=randint(1,190,[0,1]);
otv=[otv adT];%добавление
id терминалов(до 6) в поле DATA
%%
length1=size(otv);%определение
длины поля DATA
length=length1(2);
if mod(length+25,64)==0 %проверка
на кратность длины 64 битам
else
m=mod(length+25,64);
dop=64-m;
length=length+dop;
otv=[otv zeros(1,dop)];
end%на этом этапе длина кратна
64 битам
%% перевод длины в двоичный
код
flength=length;
Blength=[fix(length/256)];
length=mod(length,256);
for i=1:8
Blength=[Blength
fix(length/2^(8-i))];
length=mod(length,2^(8-i));
end
%% рассчет полинома и
сборка сообщения L2 уровня
data=otv;
data1=[data zeros(1,crcy-1)];
[q r] = deconv(data1
,ini.CRC_pol); % поиск частного и остатка от деления
%информационной части на
порождающий полином CRC кода
r = mod(abs(r),2);
CRC = r(flength+1:end);
otvet=[Blength data CRC];
end
Рис. 7
– Сообщение запроса L2
уровня
Прием сообщения запроса (листинг 4).
Листинг
4
%% Прием сообщения запроса
function rxZ =
rx_zapros(zapros)
switch nargin
case 0
zapros=zapros_form(zeros(1,294));
end
ini.CRC_pol= [1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0];
err=0;
length=zapros(1:10);%выделение поля length
Dlength=0;
for x=1:9
Dlength=length(x)*2^(9-x)+Dlength;%перевод
длины сообщения в десятичное число
end
%% расчет паритета
[q r]=deconv(zapros,ini.CRC_pol);
%проверка остатка
r=mod(abs(r),2);
l=zeros(1,Dlength+9);
if r(1:Dlength+9) == l
detect=0;% ошибок
нет
disp('ошибок нет!!!');
else
err = err + 1;
detect=1;% обнаружены ошибки
disp('ошибкa!!!');
end;
rxZ=zapros(10:Dlength+10);
rxZZ=rxZ(200:end);
for t=1:6%зарегистрированные
терминалы
lrxZ=size(rxZZ);
lrxZZ=lrxZ(2);
if lrxZZ>48
id=rxZZ(1:49);
rxZZ=rxZZ(50:end);
disp('зарегистрирован терминал');
id=dec2bin(id);
disp(id');
end
end
end
Формирование
сообщения трафика (листинг 5).
Листинг 5
%% Формирование сообщения трафика
function dataMes =
dataMes_form(length)
switch nargin
case 0
length = 934;% размер поля DATA
end
rng('shuffle');
ini.CRC_pol= [1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0];
[crcx crcy]=size(ini.CRC_pol);
dataMes = [];
flength=length;
Blength=[fix(length/512)];
length=mod(length,512);
for i=1:9%перевод
длины сообщения в двоичный код
Blength=[Blength
fix(length/2^(9-i))];
length=mod(length,2^(9-i));
end
data=randint(1,flength,[0,1]);
data1=[data zeros(1,crcy-1)];
[q r] = deconv(data1
,ini.CRC_pol); % поиск частного и остатка от деления
%информационной части на
порождающий полином CRC кода
r = mod(abs(r),2);
CRC = r(flength+1:end);
dataMes=[Blength data CRC];
end
Рис. 8 – Сообщение
трафика
Приём сообщения трафика (листинг 6).
Листинг 6
%% прием сообщения трафика
function rxD = rx_dataMes(dataMes)
switch nargin
case 0
dataMes=dataMes_form(487);
end
ini.CRC_pol= [1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0];
err=0;
length=dataMes(1:10);
Dlength=0;
for x=1:10%перевод
длины сообщения в десятичное число
Dlength=length(x)*2^(10-x)+Dlength;
end
[q r]=deconv(dataMes,ini.CRC_pol);
%проверка остатка
r=mod(abs(r),2);
l=zeros(1,Dlength+10);
if r(1:Dlength+10) == l
detect=0;% ошибок
нет
disp('ошибок нет!!!');
else
err = err + 1;
detect=1;% обнаружены ошибки
disp('ошибкa!!!');
end;
rxD=dataMes(11:Dlength+11);
end
Формирование сообщения заявки на
регистрацию (листинг 7).
Листинг
7
%% формирование сообщения
заявки на регистрацию
function ad = ad_form(fl)
switch nargin
case 0
fl = 1;% тип срочности терминала
end
ad=[]
id=randint(1,48,[1,0]);
ad=[fl id];
end
Рис. 9 – Сообщение о
заявке на регистрацию
Прием сообщения заявки на
регистрацию (листинг 8).
Листинг
8
%% прием сообщения заявки
на регистрацию
function rxA = rx_AD(ad)
switch nargin
case 0
ad=ad_form;
end
if ad(1)==1
disp('терминал срочный!!!');
else
disp('терминал несрочный!!!');
end
rxA=ad;
end
4.Часть 3. Локальная радиосеть.
5. Лекции по курсу ССсПО.