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

c++, Matlab

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

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

1.Изложите принципы организации передачи данных в сетях на основе протокола TCP/IP.

2.Для каких целей используется протокол UDP?

3.Какие типы адресов используются в сетях на основе протокола TCP/IP?

4.Какой формат имеет IP-адрес компьютера (устройства) в сетях на основе протокола TCP/IP?

5.В чем заключается взаимодействие между программами по схеме «клиент/сервер»?

6.Приведите последовательность действий в программной среде C++ Builder 6, необходимую для создания ПО, реализующего функции клиента.

7.Приведите последовательность действий в программной среде C++ Builder 6, необходимую для создания ПО, реализующего функции сервера.

8.Какую структуру имеют пакеты передаваемых данных в сетях на основе протокола TCP/IP?

9.Какие компоненты программной среды C++ Builder предназначены для выполнения обмена данными на основе протокола TCP/IP?

10.Перечислите и кратко охарактеризуйте наиболее важные методы и свой-

ства компонентов ServerSocket и ClientSocket программной среды C++ Builder.

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

1.Архангельский А. Я. Программирование в C++ Builder 6 / А. Я. Архан-

гельский. – М. : Бином, 2003. – 1152 с.

2.Архангельский А. Я. C++ Builder 6 : справ. пособие. Книга 2. Классы

икомпоненты / А. Я. Архангельский. – М. : Бином-Пресс, 2002. – 528 с.

3.Гук М. Аппаратные интерфейсы ПК / М. Гук. – СПб. : Питер, 2002. – 528 с.

4.Калверт Ч. Borland C++Builder. Энциклопедия программиста / Ч. Калверт, К. Рейсдорф. – М. : ДИАСОФТ, 2006. – 1008 с.

5.Олифер В. Г. Компьютерные сети. Принципы, технологии, протоколы / В. Г. Олифер, Н. А. Олифер. – СПб. : Питер, 2006. – 958 с.

81

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

ПЕРЕДАЧА ДАННЫХ С ИСПОЛЬЗОВАНИЕМ ИНТЕРФЕЙСА USB

Цель работы – изучение основ передачи информации между ПК и подключаемыми к нему устройствами, а также разработка простейшего ПО для обмена данными с использованием интерфейса USB.

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

1.Изучить возможности работы программной среды C++ Builder 6 с USBконтроллерами FTDI.

2.В программной среде C++ Builder 6 разработать ПО, осуществляющее обмен данными по интерфейсу USB.

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

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

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

Универсальная последовательная шина USB (Universal Serial Bus) разработана для подключения к компьютеру периферийных устройств различного класса. Данный интерфейс в настоящее время получил широкое распространение за счет удобства использования и достаточно высокого быстродействия. Устройства, подключаемые посредством интерфейса USB, могут быть идентифицированы без перезагрузки компьютера. Данное свойство интерфейса USB известно как функция «Plug and Play». Интерфейс USB является промышленным стандартом расширения архитектуры ПК [3].

Интерфейс USB обеспечивает обмен данными между хост-компьютером [3] (как правило, это ПК) и множеством одновременно доступных периферийных устройств.

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

82

ны на операционную систему: адресация, конфигурирование, управление процессами передачи данных.

Обмен данными по интерфейсу USB осуществляется в трех скоростных режимах: режиме низкой скорости – 1,5 Мбит/с, режиме полной скорости – 12 Мбит/с, режиме высокой скорости – 480 Мбит/с [3].

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

Физический интерфейс USB состоит из четырех проводников: 2 для питания периферийного устройства (VCC и GND) и 2 сигнальных проводника (DATA+ и DATA–). Через проводники питания передается постоянное напряжение приблизительно 5 В с нагрузочной способностью до 500 мА. Уровни напряжения – дифференциальные: когда DATA+ имеет высокий уровень, тогда DATA– находится на низком уровне. Однако имеются некоторые случаи, когда DATA+ и DATA– имеют один и тот же уровень, например при EOP (конец пакета) [3].

Всоответствии со стандартом USB высокий уровень на сигнальных проводниках должен составлять 3,0…3,6 В, при этом напряжение питания шины USB, поступающее от ПК, составляет 4,4…5,25 В [3].

Принцип определения подключения и отключения периферийного устройства основан на контроле сопротивления линии USB.

Скорость передачи информации устройства, подключенного к конкретному USB-порту ПК, определяется по уровням сигналов на линиях DATA+ и DATA–.

Унизкоскоростных USB-устройств между выводами DATA– и VCC подключен подтягивающий резистор. У полноскоростных устройств подтягивающий резистор подключается между выводами DATA+ и VCC [3].

Для работы интерфейса USB на стороне ПК также должен быть предусмотрен специальный драйвер периферийного устройства.

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

Ход работы

Для выполнения лабораторной работы используется ПК с операционной системой Windows XP/7 и стенд «USB», оснащенный USB-контроллером FTDI. Студентами разрабатывается ПО для ПК в виде оконного приложения. ПО на ПК

83

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

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

Рис. 9.1

2.Запустить программную среду C++ Builder 6, создать новый проект (тип проекта – Application) [1].

3.Cохранить проект на жестком диске ПК, используя пункт Save All меню

File (рис. 9.2).

Рис. 9.2

4. Включить питание стенда «USB». Если драйвер для USB-контроллера FTDI не был установлен ранее, то при включении питания стенда в системной

84

панели операционной системы должно появиться сообщение «Найдено новое оборудование: USB <−> Serial» (рис. 9.3).

Рис. 9.3

Через несколько секунд операционная система запустит программу «Мастер нового оборудования», и появится окно, представленное на рис. 9.4.

Рис. 9.4

В появившемся окне следует выбрать пункт «Установка из указанного места» и нажать кнопку «Далее». В следующем окне (рис. 9.5) необходимо отметить пункт «Включить следующее место поиска», нажать кнопку «Обзор» и выбрать папку X:\FTDI Driver, где X – условное обозначение литеры диска, на котором находится драйвер для USB-контроллеров FTDI, и нажать кнопку «Далее».

По окончании установки драйвера должно появиться сообщение о его успешной установке (пример на рис. 9.6).

85

Рис. 9.5

Рис. 9.6

Далее в окне «Мастер нового оборудования» следует нажать кнопку «Готово». В системной панели операционной системы должно появиться сообщение «Новое оборудование установлено и готово к использованию», что также свидетельствует об успешной установке драйвера и готовности использования стенда

«USB».

5.Скопировать файлы Ftd2xx.dll, Ftd2xx.h, Ftd2xx.sys в рабочую папку разрабатываемого проекта из папки X:\FTDI Driver.

6.Скопировать файлы impdef.exe и implib.exe в рабочую папку разра-

батываемого проекта из папки D:\Program Files\Borland\CBuilder6\ Bin, где D – условное обозначение литеры диска с установленной средой C++ Builder.

86

7.В меню «Пуск» системы Windows XP/7 выбрать пункт «Командная строка». В командной строке перейти в рабочую папку разрабатываемого проекта.

8.В командной строке выполнить последовательность команд на рис. 9.7,

где USB_Builder – рабочая папка разрабатываемого проекта; D – условное обозначение литеры диска с рабочей папкой разрабатываемого проекта.

Рис. 9.7

Врезультатеэтихдействийбудетсозданодвафайла: Ftd2xx.def, Ftd2xx.lib. Таким образом, будет подготовлена библиотека Ftd2xx.lib, являющаяся совместимойстойверсиейсредыC++ Builder, вкоторойразрабатываетсяпроект.

9. В меню среды C++ Builder последовательно выбрать пункты: Project Add to Project, что приведет к появлению окна на рис. 9.8. В окне выбрать файл Ftd2xx.lib и нажать кнопку «Открыть».

Рис. 9.8

10. В заголовочном файле формы разместить следующую директиву:

#include "FTD2XX.h"

87

Компилятор и сборщик среды C++ Builder будут связывать функции для работы с USB-контроллером FTDI с соответствующей динамической библиотекой (файл Ftd2xx.dll). Данная библиотека в свою очередь связывается с драйвером USB-контроллера FTDI.

11. Разместить на форме один компонент Memo, три компонента Button, один компонент Edit [2]. Далее будем использовать следующие имена компо-

нентов: Memo1, Button1, Button2, Button3, Edit1 (примерный вид окна по-

сле размещения указанных компонентов показан на рис. 9.9).

Рис. 9.9

12. Задать свойству Caption компонента Button1 значение «ПОДКЛЮЧИТЬСЯ К СТЕНДУ», задать свойству Caption компонента Button2 значение «ОТКЛЮЧИТЬ СТЕНД», задать свойству Caption компонента Button3 значение «ПЕРЕДАТЬ ТЕКСТ» (примерный вид окна после выполнения перечисленных действий показан на рис. 9.10).

Рис. 9.10

88

13.Задать свойству Enabled компонента Button3 значение false.

14.В заголовочном файле формы в разделе public разместить следующий программный код:

FT_STATUS USBStat;

FT_HANDLE hUSB;

unsigned char USBBuffer[32];

15. В обработчике события OnClick компонента Button1 разместить следующий программный код:

Sleep(1000);

USBStat = FT_Open(0, &hUSB); if(USBStat != FT_OK)

{

ShowMessage("Не удалось подключиться к стенду");

return;

}

else

{

Memo1>Lines>Add("Произведено подключение к стенду."); Button3>Enabled=true;

Button1>Enabled=false;

}

USBStat = FT_ResetDevice(hUSB); if(USBStat != FT_OK)

{

FT_Close(hUSB); ShowMessage("Ошибка сброса"); return;

}

USBStat = FT_SetTimeouts(hUSB, 1000, 1000); if(USBStat != FT_OK)

{

FT_Close(hUSB);

ShowMessage("Не удалось установить параметры");

return;

}

USBStat = FT_Purge(hUSB, FT_PURGE_TX);

USBStat = FT_Purge(hUSB, FT_PURGE_RX);

16. В обработчике события OnClick компонента Button2 разместить следующий программный код:

89

Button3>Enabled=false;

Button1>Enabled=true;

FT_Close(hUSB);

17. В файле реализации формы (после имеющегося кода) разместить следующий программный код:

void __fastcall TForm1::SendByte (unsigned char USBData)

{

unsigned char USBBuffer[2]; DWORD BytesWritten;

USBStat = FT_Purge(hUSB, FT_PURGE_TX); if(!USBStat == FT_OK)

{

ShowMessage("Ошибка"); return;

}

USBBuffer[0] = USBData;

USBStat = FT_Write(hUSB, USBBuffer, 1, &BytesWritten); if(!USBStat == FT_OK)

{

ShowMessage("Ошибка при передаче данных");

return;

}

}

18. В файле реализации формы (после имеющегося кода) разместить следующий программный код:

void __fastcall TForm1::USB_ReadBuf(unsigned int Expected)

{

DWORD EventDWord, RxBytes = 0, TxBytes, BytesReceived; USBStat = FT_Purge(hUSB, FT_PURGE_TX);

while (!RxBytes)

{

FT_GetStatus(hUSB, &RxBytes, &TxBytes, &EventDWord); if(RxBytes > 0)

{

USBStat=FT_Read(hUSB,USBBuffer,RxBytes,&BytesReceived); if(!USBStat == FT_OK)

{

ShowMessage("Ошибка при приеме данных");

return;

}

90

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