Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Сафоненко Практикум по интерфейсам последователной передачи 2012

.pdf
Скачиваний:
2
Добавлен:
12.11.2022
Размер:
4.56 Mб
Скачать

Рис. 26. Тест равномерности распределения: теоретический результат

Оба графика совпадают с линейной функцией y = ax в пределах погрешности 5 % и подтверждают равномерность распределения.

Диаграмма (рис. 27) иллюстрирует фактическое состояние интерфейса во времени. Каждый столбец диаграммы соответствует абсолютному значению задержки пакета (заявки) в интерфейсе от момента поступления в очередь до момента изъятия из очереди на обработку.

Рис. 27. Интервалы задержки при передаче

121

Пример 2. Применение графического интерфейса

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

Для работы примера требуется создать связь между портами

COM3 и COM4, посредством ПО Eltima Virtual Serial Ports Driver XP. Программа демонстрирует применение стандартных графических средств GUI системы MATLAB .

%инициализацияи работа с формой task2.fig function varargout = task2(varargin)

%TASK2 M-file for task2.fig

%TASK2, by itself, creates a new TASK2 or raises the existing

%singleton*.

%

%H = TASK2 returns the handle to a new TASK2 or the handle to

%the existing singleton*.

%

%TASK2('CALLBACK',hObject,eventData,handles,...) calls the lo-

cal

%function named CALLBACK in TASK2.M with the given input arguments.

%TASK2('Property','Value',...) creates a new TASK2 or raises the

%existing singleton*. Starting from the left, property value pairs

are

%applied to the GUI before task2_OpeningFunction gets called.

An

%unrecognized property name or invalid value makes property application

%stop. All inputs are passed to task2_OpeningFcn via varargin.

%*See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one

122

%instance to run (singleton)".

%See also: GUIDE, GUIDATA, GUIHANDLES

%Edit the above text to modify the response to help task2

%Last Modified by GUIDE v2.5 19-Mar-2007 01:05:00

%Begin initialization code – DO NOT EDIT

gui_Singleton = 1;

 

gui_State = struct('gui_Name',

mfilename, ...

'gui_Singleton',

gui_Singleton, ...

'gui_OpeningFcn', @task2_OpeningFcn, ...

'gui_OutputFcn',

@task2_OutputFcn, ...

'gui_LayoutFcn',

[] , ...

'gui_Callback',

[]);

if nargin && ischar(varargin{1})

 

gui_State.gui_Callback = str2func(varargin{1});

end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:});

end

%End initialization code – DO NOT EDIT

%--– Executes just before task2 is made visible.

function task2_OpeningFcn(hObject, eventdata, handles, varargin)

%This function has no output args, see OutputFcn.

%hObject handle to figure

%eventdata reserved – to be defined in a future version of MATLAB

%handles structure with handles and user data (see GUIDATA)

%varargin command line arguments to task2 (see VARARGIN)

%Choose default command line output for task2

123

handles.output = hObject;

% Update handles structure guidata(hObject, handles);

global s1 s2 t2 t1 P A kol a ch sec1 sec2 sch kol2

P=[];ch=[];A=[];sec1=[];sec2=[];sch=1;

%интервалгенерации случайных чиселдля распределения Пуассона

kol=15;

%параметр распределения Пуассона

a=5;

% интервалгенерации случайных чиселдля нормального распределения

kol2=13;

warning off

% инициализацияобъектов последовательного порта s1=serial('COM3');

s2=serial('COM4');

zadcom41=ceil(rand(1)*kol2);

sec2=[sec2;zadcom41];

A=0;

%открытие портов fopen(s1); fopen(s2);

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

124

t1 = timer('TimerFcn',@tsend, 'Period', 1, 'TasksToExecute',1,'startdelay',1,'ExecutionMode','fixedRate');

t2 = timer('TimerFcn',{@tfun,handles}, 'Period', 1, 'TasksToExecute',1,'startdelay',zadcom41,'ExecutionMode','fixedRate');

% задание параметровпортов s1.baudrate=4800; s2.baudrate=4800; s1.databits=8;

s2.databits=8;

s1.parity='odd';

s2.parity='odd';

s1.stopbits=1;

s2.stopbits=1;

s1.flowcontrol='hardware';

s2.flowcontrol='hardware';

%запуск таймера start(t1); start(t2);

%--– Outputs from this function are returned to the command line. function varargout = task2_OutputFcn(hObject, eventdata, handles)

%varargout cell array for returning output args (see VARARGOUT);

%hObject handle to figure

%eventdata reserved – to be defined in a future version of MATLAB

%handles structure with handles and user data (see GUIDATA)

%Get default command line output from handles structure varargout{1} = handles.output;

global s1 s2

%--– Executes on button press in pushbutton1.

function pushbutton1_Callback(hObject, eventdata, handles)

%hObject handle to pushbutton1 (see GCBO)

%eventdata reserved – to be defined in a future version of MATLAB

125

% handles structure with handles and user data (see GUIDATA) global s1 s2 A P kol sec1 sec2 kol2 sch

%завершение работы с портами fclose(s1);

delete(s1); clear s1; fclose(s2); delete(s2); clear s2;

%закрытие формы close task2;

%график распределения Пуассона figure;

hist(sec1,1:1:kol); grid on; xlabel('x'); ylabel('F(x)');

title('Puasson distribution');

% график равномерного распределения figure;

hist(sec2,1:1:kol2); grid on; xlabel('x'); ylabel('F(x)');

title('Normal distribution');

%Окончательный график очереди

[n,m]=size(A);

figure;

plot(1:1:m,A,'ro'); grid on;

126

xlabel('n');

ylabel('x'); title('All x');

%массив интервалов, распределенныхпо закону Пуассона sec1

%переданные числа

P

%массив интервалов, распределенныхпо равномерному закону sec2

%функция, передающая данные

function tsend(obj,event) global s1 s2 t1 kol a sec1

% передаем случайное число от 0 до kol for i=[1:1:kol]

granici(i)=(a^i)*exp(-a)/factorial(i);

end

granici_new(1)=granici(1)*kol;

for i=[2:1:kol] granici_new(i)=granici(i)*kol+granici_new(i-1);

end

random=kol*rand(1);

if (random>=0&&random<=granici_new(1)) num=1;

end

for i=[2:1:kol]

if (random>=granici_new(i-1)&&random<=granici_new(i)) num=i;

end

127

end stop(t1);

t1.startdelay=num;

start(t1);

fwrite(s1,num,'double');

sec1=[sec1;num];

%функция, вызываемая при срабатывании системного таймера (принимающая данные)

function tfun(obj,event,handles)

global s1 s2 t2 P A kol2 a sec2 sch

sch=sch+1;

if (s2.BytesAvailable~=0) %получение числа из очереди p=fread(s2,1,'double');

av=s2.BytesAvailable/8; A=[A av];

P=[P;p];

%перерисовываем график очереди plot(handles.axes1,1:1:sch,A,'ro') set(handles.axes1,'XGrid','on'); set(handles.axes1,'YGrid','on');

%равномерное распределение zadcom4=ceil(rand(1)*kol2); sec2=[sec2;zadcom4];

%останавливаем системный таймер stop(t2);

%время задержки на число zadcom4 t2.startdelay=zadcom4;

128

%запускаемсистемный таймер start(t2);

else

av=0 A=[A av]; p=NaN; P=[P;p];

%перерисовываем график очереди plot(handles.axes1,1:1:sch,A,'ro'); set(handles.axes1,'XGrid','on'); set(handles.axes1,'YGrid','on');

%равномерное распределение zadcom4=ceil(rand(1)*kol2); sec2=[sec2;zadcom4];

%останавливаем системный таймер stop(t2);

%время задержки на число, распределенное по равномерному закону

t2.startdelay=zadcom4;

%запускаемсистемный таймер start(t2);

end

129

Лабораторный практикум

Работа 1 Программирование последовательного канала: байтовая передача

Цель работы – разработка программ моделирования последовательного интерфейса и анализ протоколов обмена.

Задание к выполнению работы

Разработать и представить алгоритм протокола связи двух устройств, подключенных к каналу последовательного типа связи. Варианты и характеристики систем перечислены в табл. 1.1. Варианты заданий перечислены в табл. 1.21.4. При подготовке алгоритма по одному из предложенных вариантов следует учесть, что виды обменов (симплексный, полудуплексный, дуплексный), а также контрольные параметры протокола связи (контроль числа полученных символов) должны быть применены ко всем вариантам заданий.

Порядок выполнения лабораторной работы

1.Разработать, написать и отладить программу связи компьютеров по шине RS-232. Прием и передача данных – по прерыванию (асинхронный режим) или по готовности (синхронный режим).

2.Программу оформить на языке Си.

3.Провести анализ передачи данных в ОС Windows.

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

5.Подготовить и провести демонстрацию работы программы; процесс приема – передачи в системе отображается на экранах обоих компьютеров в режиме реального времени.

6.Для формирования временных интервалов можно использовать прерывания системного таймера или дозированные циклы.

7.Подготовить отчет о выполненной работе, в состав которого включить:

а) структурную схему системы; б) математическую модель протокола обмена в системе;

в) текст программы с комментариями;

130

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]