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

 

Рассматриваемая система радиоуправления освещением довольно простая и для ее реализации необходимо всего 2 уровня: физический уровень и канальный уровень (рис.3.1).




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

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

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

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

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

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

 

 

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




Программа:

 

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

 

function set = initSettings()

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

 

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

set.SignalFileName = 'signal.bin';

set.SignalFileName2 = 'signal2.bin';

 

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

set.sym_size = 2;

 

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

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

set.number_of_sensor = 5; %номер сенсора

 

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

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

 

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

set.mPos = 2;

 

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

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

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

 

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

params = bchpoly(set.n);

 

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

set.errocorr = params(3,3);

 

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

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

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

 

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

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

set.length_msg_Lev2 = 45;

 

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

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

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

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

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

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

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 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_sensor = my_bi2de(msg(3:10),'left_msb');

dop = my_bi2de(msg(40:45),'left_msb');

 

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

 

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

R_message = [adres number_of_sensor dop];

ans =

 

     2     5    50   100    59    43     6

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

 

 

 

Используемая литература: 

1. "Лекции по курсу ССПО" Бакке А.В.