Радиосеть управления освещением часть 3

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

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

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

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

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

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


Рис.1 модель OSI

Кроме канального и физического уровня в системе присутствует уровень L3-интеллект всей системы. На этом уровне закладываются сценарии взаимодействия терминалов с точкой доступа, анализируются принятые сообщения, выполняются команды, принимаются решения такие как: повышение уровня мощности и решение довести до пользователя информацию о неисправности светильника (часть 2). Физический и канальный уровни выполняют транспортные функции, доводя до терминалов команды уровня L3 точки доступа и передавая в обратном порядке радиоизмерения с уровня L3 терминалов. Важен тот факт, что уровни L3, как и канальные не могут общаться непосредственно друг с другом и сообщению необходимо пройти долгий путь, постоянно преобразуюсь, чтобы достичь адресата.

Канальный уровень делится на 2 подуровня:

 

RLC – подуровень, отвечающий за взаимодействие с уровнем L3.

 

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

 

Следует отметить, что RLC подуровень способен передать сообщение на физический уровень, обойдя подуровень MAC. Это будет использоваться в радиоизмерениях, для повышения уровня мощности, если сообщение до терминала при исходных данных не доходит. 

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

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

Рассмотрим передачу команды от ТД к терминалу с точки зрения программной части. Разрабатываемая модель будет содержать в себе только канальный и физический уровни, уровень L3 задействован в программе не будет. С L3 уровня точки доступа команда передается на L3 уровень терминала, проходя через канальный и физический уровни.  Рассмотрим, какие операции необходимо выполнить для успешной передачи:

  Поступая на канальный уровень сообщение перегруппировывается, создавая пакет канального уровня, здесь также происходит вычисление и добавлениеCRC(1).  Затем оно переходит на физический уровень, где кодируется с помощью БЧХ кода(255), который, вводя избыточность, расширяет его до 255 бит(2), происходит добавление дополнительного бита(3), для приведения сообщения к величине, кратной log2  позиционности модуляции BFSK, происходит модуляцияcообщения(4) и переход его в канал связи, где появляется шум(5).


Рис.2. Блок-схема канала передатчика.

На приемной стороне, последовательность действий обратная:

Поступая из канала связи(1), происходит выделение сообщения, демодуляция(2), избавление от дополнительного бита(3), декодирование БЧХ кода(4), переход сообщения на канальный уровень(5), где оно снова разбивается на блоки и поступает на уровень L3.


 Рис. 3. Блок-схема приемника .   

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

Реализуем разработанную выше блок схему.

Начнем с задания входных параметров, необходимых для построения приемо-передающего тракта:

function set = initSettings()

%% Инициализация основных параметров модели

 % Выбор файлов для сохранения действительной и мнимой частей сигнала

set.SignalFileName = 'signal.bin';

set.SignalFileName2 = 'signal2.bin';

 

% Кодировка передаваемых символов: 2 бита на символ

set.sym_size = 2;

 

% Данные, входящие в состав сообщения канального уровня:

set.adres = 2; % адресная доставка сообщения

set.number_of_lighter = 5; %номер светильника

 

% Информационная часть, передаваемой команды:

set.red = 100; % значение мощности для красного светодиода;

set.green = 59; % значение мощности для зеленого светодиода;

set.blue = 43; % значение мощности для синего светодиода;

set.dop = 6; % номер слота для ответа и запрос телеметрии.

 

% Позиционность модуляции - BFSK

set.mPos = 2;

 

% Параметры БЧХ кода

set.n = 255; % размер после кодирования

set.k = 45; % размер до кодирования

 

% Определение матрицы оптимальных параметров

params = bchpoly(set.n);

 

% Определение параметров кодирования

set.errocorr = params(3,3);

 

Параметры CRC-8

set.poly=[1 0 0 0 0 0 1 1];

[set.x set.y]=size(set.poly); %размерность полинома

 

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

% поля контрольной суммы

set.length_msg_Lev2 = 37;

 

Настроим передатчик в модуле Transmitter:

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

Во-первых, переведем входные данные в двоичную систему в соответствии с заданным в П2 размером полей:

% Перевод параметров, передаваемых в сообщении в двоичную систему счисления

adres = my_de2bi(st.adres,'left_msb',2);

number_of_lighter = my_de2bi(st.number_of_lighter,'left_msb',8);

red = my_de2bi(st.red,'left_msb',7);

green = my_de2bi(st.green,'left_msb',7);

blue = my_de2bi(st.blue,'left_msb',7);

dop = my_de2bi(st.dop,'left_msb',6);

 

Во-вторых вычислим CRC:

% получение CRC кода

m=[msg zeros(1,st.y-1)]; % вставка нулей в поле CRC

% Поиск частного и остатка от деления информационной части

% на порождающий полином CRC кода

[q r] = deconv(m,st.poly);

r = mod(abs(r),2);

CRC = r(st.length_msg_Lev2 + 1:end);%расчет CRC

 

И наконец, соберем пакет канального уровня:

сборка сообщения канального уровня

msg = [adres number_of_lighter red green blue dop];

% окончательная сборка сообщения канального уровня

msg = [msg CRC];

 

Далее сообщение поступает на физический уровень, где кодируется, передается по каналу связи и поступает на физический уровень приемника. Подробное описание будет приведено в 4 Части.

 

Перейдем к канальному уровню приемника в модуле Receiver:

                                                                    

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

 

Сначала осуществляется вычисление контрольной суммы и проверка целостности сообщения с помощью ее:

% Подготовка к проверке CRC

[q r]=deconv(msg,st.poly);

 

% Проверка остатка

r = mod(abs(r),2);

if r == zeros(1,length(msg))

     detect=0;% ошибок нет

else

     detect=1;% обнаружены ошибки

end;

 

После этой операции сообщение канального уровня уже без СRC выглядит следующим образом:

% Принятое сообщение

msg = msg(1:st.length_msg_Lev2);

 

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

 

% Преобразование принятых параметров в десятичную систему счисления

adres = my_bi2de(msg(1:2),'left_msb');

number_of_lighter = my_bi2de(msg(3:10),'left_msb');

red = my_bi2de(msg(11:17),'left_msb');

green = my_bi2de(msg(18:24),'left_msb');

blue = my_bi2de(msg(25:31),'left_msb');

dop = my_bi2de(msg(32:37),'left_msb');

 

И наконец происходит вывод полученного сообщения на монитор:

 

Вывод информации на экран

R_message = [adres number_of_lighter red green blue dop];

ans =

 

     2     5     100    59    43     6

Как можно увидеть из этого ответа: сообщение было передано и раскодировано верно.