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

c++, Matlab

.pdf
Скачиваний:
98
Добавлен:
30.03.2015
Размер:
1 Mб
Скачать

ным ранее набором параметров. Для оформления трехмерных графиков можно пользоваться описанными ранее функциями: text, xlabel, ylabel, zlabel,

title, grid, subplot.

Для трёхмерных графиков существует возможность изменять точку их обзора, т. е. положение виртуальной камеры с помощью функции view([Az El]), где az – угол азимута; el – угол возвышения. Изменение азимута означает вращение плоскости xOy вокруг оси Oz против часовой стрелки. Угол возвышения – это угол между направлением на камеру и плоскостью xOy.

По умолчанию Az = −37,5°, El = 30°. Чтобы узнать текущее положение наблюдателя, следует вызвать функцию view с двумя выходными аргументами, например:

>>[Az, El] = view Az = 37.5000

El = 30

Требуемое положение наблюдателя задается входными аргументами view, например,

view(135, 45)

Можно поворачивать график мышью. Для этого достаточно активизировать последнюю справа кнопку панели инструментов с изображением окружности со стрелкой (рис. 3.4).

Рис. 3.4

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

При использовании функциональной окраски весьма полезным является вывод шкалы цветов командой colorbar. Ее варианты перечислены ниже:

colorbar('vert') – выводит вертикальную шкалу цветов на текущий график;

colorbar('horiz') – выводит горизонтальную шкалу цветов на текущий график.

31

Специальная графика

Для построения специализированных графиков может быть использована команда, позволяющая строить трехмерные изображения с помощью множества стрелок. Функция quiver [2] выводит на экран изображение поверхности в виде стрелок, показывающих направление возрастания функции z(x, у). Функция quiver записывается в следующих формах [2]:

quiver(X, Y, U, V) – строит график поля градиентов в виде стрелок для каждой пары элементов массивов X и Y, причем элементы массивов U и V указывают направление и размер стрелок;

quiver(U, V) – строит векторы скорости в равнорасположенных точках на плоскости (X, Y);

quiver(U, V, S) или quiver(X, Y, U, V, S) – автоматически масштаби-

рует стрелки по сетке и затем вытягивает их по значению S. Используйте S = 0, чтобы построить стрелки без автоматического масштабирования;

quiver(…, LINESPEC) – использует для векторов указанный тип линии. Указанные в LINESPEC маркеры рисуются у оснований, а не на концах векторов; quiver(…, 'filled') – дает график с закрашенными маркерами;

H = quiver(…) – строит график и возвращает вектор дескрипторов.

Движение точки на плоскости

Для отображения движения точки по траектории используется команда comet. При этом движущаяся точка напоминает ядро кометы с хвостом. Используются следующие формы представления этой команды [2]:

comet(Y) – отображает движение «кометы» по траектории, заданной вектором Y;

comet(X, Y) – отображает движение «кометы» по траектории, заданной парой векторов X и Y;

comet(X, Y, p) – аналогична предшествующей команде, но позволяет задавать длину «хвоста кометы» (т. е. отрезка траектории, выделенного цветом) с помощью вектора p. Подробное описание значений аргумента p можно найти в работе [1].

>>x=0:0.01:15;

>>comet(x,sin(x)cos(x))

Движение точки в пространстве

В среде Matlab также имеется команда, позволяющая отображать движение точки по траектории в трехмерном пространстве. Это команда comet3, имеющая следующий синтаксис [2]:

32

comet3(Z) – отображает движение точки с цветным «хвостом» по трехмерной кривой, определенной массивом Z;

comet3(X, Y, Z) – отображает движение точки «кометы» по кривой в пространстве, заданной точками [X(i), Y(i), Z(i)];

comet3(X, Y, Z, p) – аналогична предшествующей команде с заданием длины «хвоста кометы» с помощью вектора p. По умолчанию значение р установлено равным 0,1.

Ниже представлен пример применения команды comet3:

>>W=0:pi/500:10*pi;

>>comet3(cos(W),sin(W)+W/10, W)

На рис. 3.5 показан стоп-кадр изображения, созданного командой comet3.

Рис. 3.5

Ход работы

1.Построить с помощью команды plot3 график функции z = y3 + sin(–x2)

втрехмерном пространстве. Для этого задать матрицу значений аргументов:

>>[X, Y] = meshgrid([2:0.1:2]);

Набрать формулу и построить график поверхности в виде линий:

>>Z = Y.^3+sin(X.^2); plot3(X, Y, Z)

>>[X, Y] = meshgrid([2:0.1:2]);

>>Z = Y.^3+sin(X.^2); plot3(X, Y, Z)

33

2.Построить тот же график, но с проекциями линий постоянного уровня

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

>>meshc(X, Y, Z)

>>meshz(X, Y, Z)

3.Построить трехмерную поверхность катеноида, заданного параметрически:

x= ch(u) · cos(v),

y= ch(u) · sin(v),

z= u,

где u и v меняются от –π до π. Для этого определить векторы переменных u и v, создать массивы значений X, Y и Z:

>>v = pi:0.1*pi:pi; u=v;

>>[u,v]=meshgrid(u,v);

>>X=cosh(u).*cos(v);

>>Y=cosh(u).*sin(v); Z=u;

>>surf(X, Y, Z)

Вывести на график шкалу цветов.

4.Построить поле направлений для функции z = x ex xy y в области –2 ≤ x ≤ 2, –2 ≤ y ≤ 2. Для этого определить матрицу значений x и y и выполнить расчеты в соответствии с примером:

>>[x, y] = meshgrid(2:0.2:2);

>>z = x.*exp(x.^2 y.^2);

>>[dx, dy] = gradient(z, 0.2, 0.2);

>>contour(x, y, z), hold on

>>quiver(x, y, dx, dy)

5.Построить разность двух функций tg(sin(t)) – sin(tg(t)) в виде траектории движения точки.

>>t = pi : pi/200 : pi;

>>comet(t, tan(sin(t)) sin(tan(t)))

6.Построить пространственную параметрическую кривую

x= sin(5 · t),

y= cos(3 · t),

z= t

в виде траектории движения точки.

>>t = pi : pi/500 : pi;

>>comet3(sin(5*t), cos(3*t), t)

34

Контрольные вопросы

1.Каким образом необходимо подготовить данные для построения трехмерных графиков?

2.Для каких целей используются функции mesh и meshc?

3.Какое назначение имеет функция plot3? Какие аргументы имеет данная функция?

4.Опишите синтаксис функции surf. Для каких целей она используется?

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

6.Какими способами можно изменить угол поворота графика?

7.Какая команда позволяет вывести цветовую шкалу на график?

8.Какое назначение имеет функция quiver? Перечислите и опишите аргументы этой функции.

9.Для каких целей используется функция comet?

10.Перечислите функции, которые относятся к специальной графике.

Библиографический список

1.Дьяконов, В. П. Matlab 6.5 SP1/7 + Simulink 5/6. Основы применения /

В. П. Дьяконов. – М. : СОЛОН-Пресс, 2005. – 800 с.

2.Курбатова, Е. А. MATLAB 7. Самоучитель / Е. А. Курбатова. – М. : Диа-

лектика, 2005. – 256 с.

3.Поршнев, С. В. Matlab 7. Основы работы и программирования : учебник / С. В. Поршнев. – М. : Бином-Пресс, 2011. – 320 с.

35

ЛАБОРАТОРНАЯ РАБОТА 4

ОРГАНИЗАЦИЯ ОБМЕНА ДАННЫМИ МЕЖДУ ПК

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

Задание к работе

1.Изучить возможности работы программной среды Matlab с интерфейсом COM-порта компьютера.

2.Разработать ПО на языке Matlab, осуществляющее обмен информацией между двумя ПК посредством COM-портов.

3.Произвести передачу и прием данных (файлов различного формата) с помощью разработанного ПО.

4.Сделать выводы по результатам работы.

Пояснения к работе

Сеть передачи данных – это совокупность оконечных устройств (терминалов) связи, объединённых каналами передачи данных и коммутирующими устройствами (узлами сети), обеспечивающими обмен сообщениями между всеми оконечными устройствами. Согласно руководящему документу [1] сетью передачи данных (сетью данных) называется совокупность узлов и каналов электросвязи, специально созданная для организации связей между определенными точками с целью обеспечения передачи данных между ними. Сети передачи данных в общем случае принято условно разделять на телефонные и компьютерные. В компьютерных сетях оконечными устройствами являются компьютеры. Современные прогнозы указывают на тенденцию превращения всех сетей электросвязи в сети передачи данных, по которым будут передаваться любые виды информации (включая речь и видео), преобразованные в цифровые сигналы [1].

Простейшая компьютерная сеть представляет собой систему распределенной обработки информации, состоящую как минимум из двух компьютеров и других вычислительных устройств (принтеров, факсимильных аппаратов и т. д.). Два компьютера могут быть соединены отрезком кабеля, подключенного к их LPTили COM-портам. Кроме того, в настоящее время разработаны устройства, позволяющие соединять два компьютера через USB-порты. Для обеспече-

36

ния высокой скорости передачи информации необходимо использовать сетевые адаптеры и их драйверы.

Ход работы

Для выполнения лабораторной работы используются два ПК, оснащенных COM-портами. В ходе лабораторной работы студентами разрабатывается ПО, осуществляющее файловый обмен между ПК.

1. Собрать рабочее место для выполнения лабораторной работы согласно рис. 4.1 (данная схема используется для самопроверки COM-портов ПК);

Рис. 4.1

Указания пп. 2–9 выполнить на каждом из ПК, входящих в состав рабочего места.

2. Запустить программную среду Matlab, установить текущую папку X:\Matlab…\work\Komplex_OTT, где X – условное обозначение литеры диска с установленной системой Matlab. Поле для установки текущей папки показано на рис. 4.2.

Рис. 4.2

37

3. Создать объект [4, 5] для передачи данных с использованием интерфейса RS-232. Объект создается следующими командами [2]:

>>global obj1;

>>obj1 = serial('COM1');

Созданный программный объект obj1 связан с «железным» объектом СОМ1 ПК.

4. Задать свойства объекта, т. е. параметры порта [3]:

>> set(obj1, 'BaudRate', 9600);

% Скорость обмена

>>set(obj1, 'BreakInterruptFcn', '');

>>set(obj1, 'ByteOrder', 'littleEndian');

>>set(obj1, 'BytesAvailableFcn', '');

>>set(obj1, 'BytesAvailableFcnCount', 48);

>>set(obj1, 'BytesAvailableFcnMode', 'terminator');

>> set(obj1, 'DataBits', 8);

% Количество бит данных

>>set(obj1, 'DataTerminalReady', 'on');

>>set(obj1, 'ErrorFcn', '');

>>set(obj1, 'FlowControl', 'none');

>>set(obj1, 'InputBufferSize', 512); % Размер приемного

>>

% буфера порта

>>set(obj1, 'Name', 'SerialCOM1');

>>set(obj1, 'OutputBufferSize', 512);

>>set(obj1, 'OutputEmptyFcn', '');

>>

set(obj1, 'Parity', 'none');

% Проверка четности (нет)

>>

set(obj1, 'PinStatusFcn', '');

 

>>

set(obj1, 'Port', 'COM1');

% Используем порт COM1

>>

set(obj1, 'ReadAsyncMode', 'continuous');

% Асинхронный

>>

 

% и непрерывный режим передачи

>>set(obj1, 'RecordDetail', 'compact');

>>set(obj1, 'RecordMode', 'overwrite');

>>set(obj1, 'RecordName', 'record.txt');

>>set(obj1, 'RequestToSend', 'on');

>>

set(obj1, 'StopBits', 1);

% Количество стопбит один

>>

set(obj1, 'Tag', '');

 

>>

set(obj1, 'Terminator', 'LF');

 

>>

set(obj1, 'Timeout', 10);

 

>>

set(obj1, 'TimerFcn', '');

 

>>

set(obj1, 'TimerPeriod', 1);

 

>>

set(obj1, 'UserData', []);

 

Кратко перечислим наиболее важные свойства объекта, заданные с помощью приведенных команд. Скорость передачи данных составляет 9600 бит/c, передаются 8-битные данные и один стоп-бит. Проверка четности отключена.

38

Размер входного буфера 512 байт. На случай, если данные имеют 16-разрядную структуру, указано, какой байт является старшим (в данном случае первым передается старший байт слова, затем младший). И наконец, в тексте программы записано, что объект работает в асинхронном непрерывном режиме. Указание на размер буфера и непрерывный режим работы означает, что после того как во входном буфере накопится 512 байт данных, они будут переданы в прикладную часть программы, после чего накопление данных возобновится [2].

5.Произвести запуск объекта с помощью команды:

>>fopen(obj1);

6.Создать переменную D1_t, присвоить ей некоторое положительное целочисленное значение, например:

>>D1_t=62;

7.Передать значение D1_t с использованием интерфейса RS-232. Для этого выполнить команду

>>fwrite(obj1, D1_t, 'uint8');

8.Выполнить команду

>>[D1_r, count]=fread(obj1,512,'uint8');

9.Сравнить значения переменных D1_t и D1_r. Значение D1_r должно быть равно значению D1_t. В этом случае результат самопроверки COM-порта ПК считается удовлетворительным.

10.Собрать рабочее место для выполнения лабораторной работы согласно рис. 4.3.

Рис. 4.3

11. На ПК1 открыть файл Transmit_file.txt, предназначенный для передачи (файл открывается в бинарном режиме):

>> fid_r = fopen('Transmit_file.txt','rb');

39

Если в результате выполнения команды значение переменной fid_r является числом из ряда 3, 4, 5, 6…, то файл был успешно открыт. Значение переменной fid_r,равное –1, говорит о наличии ошибки при открытии файла.

12.На ПК1 загрузить содержимое передаваемого файла в переменную D_t (файл читается побайтно до тех пор, пока не будет достигнут его конец):

>>[D_t, count_r]=fread(fid_r, inf, 'ubit8')

>>fclose(fid_r); % Закрываем файл.

13.Передать байты файла Transmit_file.txt с использованием интерфейса RS-232. Для этого на ПК1 выполнить команду

>>fwrite(obj1, D_t, 'uint8');

14.Принять байты файла Transmit_file.txt и записать их в переменную D_r. Для этого на ПК2 выполнить команду

>>[D_r, count]=fread(obj1,512,'uint8');

15.Записать принятые байты в файл на жестком диске ПК2. Для этого на ПК2 создать новый файл для записи, выполнив команду

>>fid_w = fopen('Recieved_file.txt','wb');

16.Записать содержимое переменной D_r в файл Recieved_file.txt. Для этого на ПК2 выполнить команды

>>count_w=fwrite(fid_w, D_r, 'ubit8')

>>fclose(fid_w); % Закрываем файл.

17.На ПК1 открыть файл Transmit_file.txt с помощью текстового редактора «Блокнот». На ПК2 открыть файл Recieved_file.txt с помощью текстового редактора «Блокнот».

18.Сравнить тексты открытых файлов. Текст в файле Transmit_file.txt должен совпадать с текстом в файле Recieved_file.txt. В случае различия текстов выполнить действия пп. 11–18 повторно.

19.Повторить действия пп. 11–18, используя ПК1 вместо ПК2 (ПК2 вместо ПК1).

Если в процессе отладки прикладных программ необходимо изменить параметры порта, то созданный ранее объект необходимо уничтожить и затем создать новый объект [2]. Уничтожение объекта можно сделать с помощью следующих команд:

>>fclose(obj1);

>>delete(obj1);

>>clear obj1;

40

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