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

 

Базовая модель связи открытых систем OSI описывает правила и процедуры передачи данных в различных сетевых средах при организации сеанса связи. В нашей работе будут рассмотрены три нижних уровня базовой сетевой модели, а именно физический, канальный и уровень принятия решений (рисунок 1). Данный рисунок является расширенным представлением рисунка 3 и рисунка 1 соответствующих работ.

Рисунок 1 – иерархическая модель терминала сети.

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

Уровень принятия решений L3 – предназначен для подготовки пакетов для КУ и для расшифровки сообщений L2 уровня используя для этого модуль принятия решений. На основе принятых сообщений, уровень L3 принимает решение о работе терминала в радиосети. В частности, на основе принятых данных L3 уровня и команд модуля принятия решений терминал начинает прослушивать BCCH, запускает процедуру передачи данных по алгоритму конкурентного доступа, переходит в режим Idle и выходит из него. Используя данные с датчиков, которые хранятся в информационной подсистеме, модуль принятия решений подготавливает пакеты трафика и передаёт их на КУ.

За алгоритм сценария работы терминала в радиосети отвечает подуровень управления сценарием работы терминала. Этот подуровень реализует команды модуля принятия решений и адаптирует их для работы терминала, как объекта радиосети. То есть отвечает за реализацию сценария взаимодействия Т с радиосетью, как ответа на сформированные команды модуля принятия решений.

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

Канальный уровень L2 – предназначен для обеспечения адресной доставки сообщений, проверки целостности данных и приведению сообщений к единому стандарту в рамках функционирования терминала в сети. Для выполнения поставленных задач на L2 при приёме происходит группировка потоков битов в кадры, после чего происходит выделение принятой информации, в частности, выделяются поля адреса, типа сообщения. Далее, в соответствии с типом полученного/передаваемого сообщения, канальный уровень активирует соответствующий алгоритм декапсуляции/инкапсуляции данных. При передаче полям сообщений также добавляются адреса отправителя, тип сообщения, признак окончания сообщения, производится расчёт параметра для контроля целостности. Обеспечение идентичности полей L2-сообщения, необходимо для успешного приема сообщения на ТД. На канальном уровне реализуется также многостанционный алгоритм доступа к каналу связи, за который отвечает модуль принятия решений. Конкурентная борьба за канал связи осуществляется на основе метода TDMA, суть которого заключается в том, что терминал передаёт данные в один из десяти произвольных подканалов трафика.

Физический уровень L1 - реализует физическое соединение двух сетевых устройств по соединению точка - точка. В данной системе физический уровень предназначен для передачи потока данных от терминала к точке доступа и наоборот. Уровень отвечает за достоверную доставку потока битов с вероятностью ошибки не ниже 3*10-6, за организации физических каналов TDMA. Конкретные его задачи рассмотрены в соответствующем разделе курсовой работы.

 

Разработка и описание блок-схемы алгоритма модели.

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

 

Разработанная программная модель соответствует элементу сценария в проектируемой радиосети и представлена на рисунке 2.  

Рисунок 2 – сценарий работы сети, для разрабатываемой модели.

 

На рисунке показан один из двух возможных моментов начала прослушивания BCCH: либо терминал включился по команде микроконтроллера и перешёл из режима Idle в активный режим, либо продолжает передавать необходимое количество данных (10 сообщений трафика в пределах одной ТД) до момента, пока не передаст необходимое количество.

После обработки сообщения BCCH терминал получает необходимые данные для начала конкурентной передачи данных на ТД, а именно: ID своей сети, прошитой в памяти терминала; данные об уровне сигнала; флаг доступности сети. (Если какой то из данных параметров окажется «отрицательным», то Т опять будет прослушивать BCCH и извлекать из него информацию).

Отправив сообщение в 1 из 10 случайных временных слота Т ждёт ответа от ТД в течении 3 слотов. ТД, расшифровывая сообщение трафика, проверяет целостность L2-сообщения. (Если Т не получает ответа от ТД, он ждёт ещё 3 слота и продолжает отправлять сообщение трафика, пока не выиграет конкурентную борьбу и не получит сообщение с флагом о достоверности приёма).

В разрабатываемом программном модуле по умолчанию нет ошибок, отказов и все флаги имеют «положительные» значения.

Блок схему алгоритма приёма-передачи сообщения (рисунок 9 статьи [2]) изменим в соответствии  с разрабатываемым программным модулем (рисунок 3).

Разрабатываемая программа будет содержать следующие программные модули:

1.     Формирование и передача сообщения BCCH

2.     Приём и расшифровка сообщений BCCH терминалом

3.     Подготовка терминалом сообщения трафика и его отправка

4.     Приём и анализ сообщений трафика точкой доступа

5.     Отправка служебного сообщения SDCCH на терминал

6.     Приём служебного сообщения терминалом, его анализ и принятие решения на основе принятого/не принятого сообщения.

Рисунок 3 – блок схема приёма/передачи сообщений радиосети

 

 

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

Листинг 1 – формирование/передача сообщения BCCH точкой доступа, приём и расшифровка BCCH сообщения терминалом.

Листинг 1.

%% Отправка сообщения BCCH точкой доступа

clc;

clear all;

     % Определение структуры пакета L2

poly= [0 1 0 1 0 1 0 1]; % полином для расчета контрольной суммы

lenbcch=54;           % длинна сообщения L2 BCCH

len_bcch=28;          % длинна сообщения L3 BCCH

 

ID_NET=[1 1 1 1 1 1 1 0];  % ID сети     

ID_TD =[0 0 0 0 0 1 1 1]; % ID ТД, которая раздаёт BCCH

TYPE=[0 0];               %поле указывающее на тип сообщения

%00-широковещательное сообщение

%01-сообщение управления

%11-сообщение трафика

 

      % Создание сообщения L3 уровня     

      lenl2bcch=zeros(1,len_bcch); % заготовка нулевого вектора для записи

      %фреймов

      OK=[1 1]; %сеть доступна

      left=[1 1 0 0 0 1]; %49 учатников из 100 ещё не прошли эту ТД

      passed=[1 1 0 0 1 0]; %50 участников из 100 уже прошли эту ТД

      data_L3=[OK left passed];

      lenl2bcch(1:length(data_L3))=data_L3;

      L3=lenl2bcch;% Сообщение сетевого уровня

      disp('ТД: создание сообщения L3 BCCH точкой доступа завершено');

      disp('ТД:L3  [сеть доступна; 49 участников впереди; 50 участников позади]');

            

         % Создание сообщения L2 уровня

         IDNETWORK=ID_NET ;      % запись адреса сети

         L2=[IDNETWORK TYPE ID_TD L3];%компоновка фрейма

         % расчет CRC 

         crc=CRC(L2);

         % сборка сообщения L2

         l2transmit_BCCH=[L2 crc]; % сформированное сообщения

         disp('ТД:создание сообщения L2 BCCH точкой доступа завершено');

         disp('ТД:L2 [ID сети;тип:широковещательное;ID ТД;BCCH_L3;CRC-8]');

         disp(sprintf('ТД: L1  сообщение передано на терминалы от ТД в структуре кадра\n'));

       pause;

   

   

%%Приём сообщения BCCH терминалом

 

     % Определение структуры пакета L2

ID_NET=[1 1 1 1 1 1 1 0];  % ID сети, прошитое в терминала

lencmd=54; % длинна сообщения BCCH и SDCCH, прошитое в терминале

lenbcch=28;          % длинна сообщения L3 BCCH

     poly= [1 1 0 1 0 1 0 1]; % полином для расчета контрольной суммы

     % Определение типов сообщений

bcch=[0 0];           % тип сообщения BCCH

sdcch=[0 1];          % тип сообщения служебное

 

     % прием сообщения L2

     l2receive_BCCH=l2transmit_BCCH; % Иммитация приема сообщения

     Addr1=l2receive_BCCH(1:8); % Выделение поля адреса сети

     type=l2receive_BCCH(9:10);  % Выделение типа

     Addr2=l2receive_BCCH(11:18); %выделение поля адреса точки доступа

    

     % Сравнение декодированного и принятого CRC

     if type==bcch         % Проверка типа сообщения

        disp('Т: Принято широковещательное сообщение');

     elseif type==sdcch         % Проверка типа сообщения

        disp('Т: Принято сообщение SDCCH');

     end

     pause;

control_BCCH=l2receive_BCCH(1:46); %Выделение поля для проверки целостности

crc=l2receive_BCCH(47:54);   %Выделение значения расчитанной контрольной суммы

 

% Расчет CRC

CRCReceive_BCCH = CRC(control_BCCH);    % Вызов функции расчета CRC

if crc == CRCReceive_BCCH      % Проверка равенства контрольных  сумм

    disp('T: Целостность сообщения BCCH сохранена');

else

    disp('T: Ошибка приема сообщения!!!');

end   

 

        if  Addr1==ID_NET;        % Проверка принадлежности принятого

     %широковещательного сообщения к сети, в которой разрешена работа

     disp('Т: Сеть своя');

     else

     disp('Т: Сеть не своя');

        end

       

        % Декапсуляция информационной части

data1=l2receive_BCCH(19:20);    % Выделение L3 сообщения

if  data1==[1 1];

    disp('Т:Сеть доступна для передачи')

   else

    disp('Т:Сеть загружена,"жди следующего BCCH"');

end

 

%Формально, для верного принятия решений ещё должен быть модуль,

%подсчитывающий количество передач сообщение трафика

disp('T: Вычислил, что количество передач этой ТД = 7, осталось 3 передачи');

disp('Т: Вычислил, уровень сигнала BCCH достаточен для начала передачи');   

 

    M=num2str(l2receive_BCCH(21:26));

    M=bin2dec(M);

    disp(sprintf('Т:Участников позади=%g',M));

    K=num2str(l2receive_BCCH(27:32));

    K=bin2dec(K); 

    disp(sprintf('Т:Участников впереди=%g',K));

   

% Обработка данных L2 уровня

    %%рассчитываем количество прошедших и оставшихся ТД (всего 100 ТД),

    %предположим, что ID ТД это её порядковый номер

    J=num2str(Addr2);

    J=bin2dec(J);

    disp(sprintf('Т:Пройдено ТД=%g,осталось ТД=%g',J,100-J));

   

% L3 уровень получил данные с L1 уровня об уровне принимаемого сигнала BCCH

% и принимает решение о начале передачи сообщения трафика, формируя поле L3

% данными с измерительных датчиков терминала

 

disp(sprintf('T: Условия для передачи соблюдены, начинаю передачу сообщений трафика на ТД\n'));

pause;

TCH; %переход в режим формирования и отправки сообщений трафика

 

Результатом работы этого модуля являются в том числе формирование сообщения BCCH L2 и L3 уровня.

Рисунок 4 – сообщение BCCH L2 уровня, формируемое ТД.

 

Листинг 2 –  формирование сообщения трафика, отправка его на ТД и анализ целостности этого сообщения точкой доступа (рисунок 5).

Листинг 2.

%% Формирование и отправка сообщения трафика от терминала

     % Определение структуры пакета L2

poly= [0 1 0 1 0 1 0 1]; % полином для расчета контрольной суммы

lentch=74;           % длинна сообщения L2 TCH

len_tch=48;          % длинна сообщения L3 TCH

ID_T=[0 0 0 1 1 0 0 0 1 0];% 98 терминал

   

TYPE=[1 1];               %поле указывающее на тип сообщения

%00-широковещательное сообщение

%01-сообщение управления

%11-сообщение трафика

 

      %% Создание сообщения L3 уровня  

      PULSE_CELOE=[0 1 1 1 0 0 0 0];   %данные пульса(целое число)112

      PULSE_DROBNOE=[0 1 1 0 0 0 0 1]; %данные пульса(дробное число)0.38

      PULSE=[PULSE_CELOE PULSE_DROBNOE]; %пульс

      DAVLENIE_VERH=[1 0 0 0 1 1 0 0]; %уровень верхнего давления 140

      DAVLENIE_NIZHN=[0 1 0 1 0 1 0 1]; %уровень нижнего давления 85

      DAVLENIE=[DAVLENIE_VERH DAVLENIE_NIZHN]; %давление

      SCOROST_CELOE=[0 0 0 1 1 0 0 1]; %показатель скорости(целое число)25

      SCOROST_DROBNOE=[1 1 1 1 1 0 1 1]; %показатель скорости(дробное) 0.98

      SCOROST=[SCOROST_CELOE SCOROST_DROBNOE]; %скорость

      lenl2bcch=zeros(1,len_tch); % заготовка нулевого вектора для записи

      %фреймов

      TCH_L3=[PULSE DAVLENIE SCOROST];%сообщение сетевого уровня TCH    

      disp('Т: создание сообщения трафика терминалом завершено');

      disp('Т: L3  [Пульс Давление Скорость]');

         %% Создание сообщения L2 уровня

         ID_T=[0 0 0 1 1 0 0 0 1 0] ;      % запись ID терминала

         L2_TCH=[ID_T TYPE TCH_L3];%компоновка фрейма

         %% расчет CRC 

         crc_TCH=CRC(L2_TCH);

         %% сборка сообщения L2

         END=[0 0 0 0 0 0];

         traffic=[L2_TCH crc_TCH END]; % сформированное сообщения

         disp('Т:создание сообщения L2 TCH терминалом завершено');

         disp('Т: L2 [ID Т;тип:трафика;TCH_L3;CRC-8;END]');

         pause;

    disp(sprintf('Т: сообщение передано на ТД от терминала в случайный  временной слот кадра\n'));

    pause;

 

    %% Принятие сообщения трафика точкой доступа     

      traffic_rec=traffic; % Иммитация приема сообщения трафика точкой доступа

      Addr1=traffic_rec(1:10); % Выделение поля ID T

      type=traffic_rec(11:12);  % Выделение типа

if type==TYPE;         % Проверка типа сообщения

    disp('ТД: Принято сообщение трафика');

else type==service;%если в слоте канала трафика ТД принято не сообщение трафика,

    %значит произошла коллизия

        disp('ТД: Коллизия');

end

 

control_TCH=traffic(1:61); %Выделение поля для проверки целостности

crc=traffic(62:69);   %Выделение значения расчитанной контрольной суммы

 

%% Расчет CRC

CRCReceive = CRC(control_TCH);    % Вызов функции расчета CRC

 

% Сравнение декодированного и принятого CRC

 

if crc == CRCReceive      % Проверка равенства контрольных  сумм

    disp('ТД: Сообщение трафика целостно');

else

    disp('ТД: Ошибка приема сообщения!!!');

end  

pause;

SDCCH;

 

 

 

Рисунок 5 – сообщение трафика L2 уровня, которое сформирует Т.

 

Листинг 3 – формирование служебного сообщения SDCCH точкой доступа, отправка его на терминал, расшифровка служебного сообщения терминалом и принятие решения на режим работы терминала.

Листинг 3.

%% Создание служебного сообщения ответа от точки доступа, о результате приёма

%сообщения трафика

     % Определение структуры пакета L2

poly= [0 1 0 1 0 1 0 1]; % полином для расчета контрольной суммы

lenservice=26;           % длинна сообщения L2 сужебное

len_service=8;          % длинна сообщения L3 служебное

 

ID_T=[0 1 1 0 0 0 1 0];  % ID Терминала, которому есть служебное сообщение     

TYPE_SDCCH=[0 1];               %поле указывающее на тип сообщения SDCCH

bcch_1=[0 0];

%00-широковещательное сообщение

%01-сообщение SDCCH

%11-сообщение трафика

 

% Создание сообщения L3 уровня ТД

      lenl2bcch=zeros(1,len_service); % заготовка нулевого вектора для записи

      %фреймов

      FLAG=[1 1 1 1];

      %флаг-4 бита-, в котором ТД сообщает терминалу, совпала ли контрольная

      %сумма - 1 1 1 1 или нет - 0 0 0 0.

     

      MODE=[1 1 1 1];%поле «Режим работы» - 4 бит – сообщает терминалу

      %информацию о том, какой режим работы необходимо активировать. Принимая:

%1111 – терминал продолжает работать в обычном режиме передачи сообщений трафика.

%1110– показатели здоровья подходят к критическому уровню.

       %При этом на экране периодически высвечивается: «Показатели здоровья ухудшаются».

%1100 – показатели здоровья на критическом уровне, но тренер участника принял решения

        %продолжать соревнования. На экране появляется: «Показатели критические. Продолжать соревнование».

%1000 – показатели здоровья на критическом уровне, тренер принял решение завершить соревнования.

        %Терминал издаёт звонкий сигнал, оповещая участника соревнований о том,

        %что необходимо их закончить. Экран моргает красным светом.

%0000  – во время соревнований произошло ЧП и принято решение об их остановке.

         %На экране высвечивается сообщение ЧП, издаётся громкий сигнал оповещения.

      L3_service=[FLAG MODE];

      disp('ТД: создание служебного SDCCH сообщения L3 точкой доступа завершено');

      disp('ТД: L3  [флаг достоверности приёма точной доступа; флаг режима работы терминала]');

     

         % Создание сообщения L2 уровня

         L2_service=[ID_T TYPE_SDCCH L3_service];%компоновка фрейма

         % расчет CRC 

         crc_service=CRC(L2_service);

         % сборка сообщения L2

         l2service=[L2_service crc_service]; % сформированное сообщения

         disp('ТД:создание сервисного сообщения L2 точкой доступа завершено');

         disp('ТД  L2:[ID Т;тип:служебное;L3_SDCCH;CRC-8]');

    disp(sprintf('ТД: сообщение передано на конкретный терминал от ТД в структуре кадра\n'));

   

    pause;

   

     

    %% Принятие служебного сообщения терминалом

 

      mode=l2service; % Иммитация приема сообщения трафика точкой доступа

      Addr1=mode(1:8); % Выделение поля ID T

      type=mode(9:10);  % Выделение типа

if type==bcch_1;         % Проверка типа сообщения

    disp('Т: Принято широковещательное сообщение');

elseif type==TYPE_SDCCH;

        disp('Т: Принято сообщение SDCCH');

else type==[1 1],[1 0];

    disp('Т: ТД не приняла сообщение SDCCH, переход в модуль BCCH');

end

 

 

pause;

control_mode=mode(1:18); %Выделение поля для проверки целостности

crc=mode(19:26);   %Выделение значения расчитанной контрольной суммы

 

% Расчет CRC

CRCmode = CRC(control_mode);    % Вызов функции расчета CRC

 

% Сравнение декодированного и принятого CRC

if crc == CRCmode      % Проверка равенства контрольных  сумм

    disp('Т: Сообщение SDCCH целостно');

else

    disp('Т: Ошибка приема сообщения SDCCH, переход в модуль BCCH!!!');

end

 

% Декапсуляция информационной части служебного сообщения

mode_L3=mode(11:18);    % Выделение L3 сообщения

 

    I=mode(11:14);%поле флага о результате приёма точкой доступа сообщения TCH

    B=mode(15:18);%поле, определяющее режим работы и индикации терминала

    if I==[1 1 1 1], B==[1 1 1 1];

    disp('Т:ТД приняла сообщение без ошибок,продолжать нормальный режим работы');

    else

    disp('Изменить режим работы Т в соответствии с принятым сообщением');

    end;

   

    disp('Осуществляем переход либо в режим Idle, на время ti');

    %ti-время, которое рассчитывает модуль принятия решения

 

 

 

Рисунок 6 – структура сообщения SDCCH L2 уровня, которое сформирует ТД.

 

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

ТД: создание сообщения L3 BCCH точкой доступа завершено

ТД:L3  [сеть доступна; 49 участников впереди; 50 участников позади]

ТД: создание сообщения L2 BCCH точкой доступа завершено

ТД:L2 [ID сети; тип: широковещательное; ID ТД;BCCH_L3;CRC-8]

ТД: L1  сообщение передано на терминалы от ТД в структуре кадра

 

Т: Принято широковещательное сообщение

T: Целостность сообщения BCCH сохранена

Т: Сеть своя

Т:Сеть доступна для передачи

T: Вычислил, что количество передач этой ТД = 7, осталось 3 передачи

Т: Вычислил, уровень сигнала BCCH достаточен для начала передачи

Т:Участников позади=49

Т:Участников впереди=50

Т:Пройдено ТД=7,осталось ТД=93

T: Условия для передачи соблюдены, начинаю передачу сообщений трафика на ТД

 

Т: создание сообщения трафика терминалом завершено

Т: L3  [Пульс Давление Скорость]

Т:создание сообщения L2 TCH терминалом завершено

Т: L2 [ID Т;тип:трафика;TCH_L3;CRC-8;END]

Т: сообщение передано на ТД от терминала в случайный  временной слот кадра

 

ТД: Принято сообщение трафика

ТД: Сообщение трафика целостно

ТД: создание служебного SDCCH сообщения L3 точкой доступа завершено

ТД: L3  [флаг достоверности приёма точной доступа; флаг режима работы терминала]

ТД:создание сервисного сообщения L2 точкой доступа завершено

ТД  L2:[ID Т;тип:служебное;L3_SDCCH;CRC-8]

ТД: сообщение передано на конкретный терминал от ТД в структуре кадра

 

Т: Принято сообщение SDCCH

Т: Сообщение SDCCH целостно

Т:ТД приняла сообщение без ошибок,продолжать нормальный режим работы

Осуществляем переход либо в режим Idle, на время ti

 

 

P.s. Для запуска программы, необходимо сохранить 4 прикреплённых файла в рабочей директории и запустить на выполнение файл с названием BCCH.m.Чтобы продолжать шаги выполнения программы, необходимо нажать любую кнопку.

 

Список используемых статей:

1.     http://omoled.ru/publications/view/994

2.     http://omoled.ru/publications/view/995

3.     http://omoled.ru/publications/view/839

4.     http://omoled.ru/publications/view/856

5.     http://omoled.ru/publications/view/320