Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Подскажите пожалуйста ссылки на учебники по работе с Com

9.7K
29 августа 2005 года
Shopot
8 / / 16.08.2005
Подскажите пожалуйста ссылки на учебники по работе с Com - портом в Windows и DOS. Для Windows еще хотелось бы что нибудь почитать о системе в/в.
344
29 августа 2005 года
Delpher
493 / / 14.08.2005
Цитата:
Originally posted by Shopot
Подскажите пожалуйста ссылки на учебники по работе с Com - портом в Windows и DOS. Для Windows еще хотелось бы что нибудь почитать о системе в/в.


Получение списка имеющихся в системе портов:

Существует как минимум два способа:
Список доступных портов можно узнать, проанализировав ключ реестра HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM

Можно поочередно попробовать открыть порты COM1 .. COM9, таким образом удасться установить все доступные порты (т.е. порты, не открытые другими приложениями)
///////////////////////////////////////////////
Открытие и настройка COM порта

Работу с СOM портом проще всего пояснить на примере

var
DCB : TDCB;
hPort : THandle;
begin
// 1. Открываем файл
hPort := CreateFile(PChar('COM'+IntToStr(<номер порта>)),
GENERIC_READ + GENERIC_WRITE,
0, nil,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
// 2. Контроль ошибок
if hPort = INVALID_HANDLE_VALUE then begin
// Обнаружена ошибка, порт открыть не удалось
exit;
end;
// 3. Чтение текущих настроек порта
if GetCommState(hPort, DCB) then ;
// 4. Настройки:
// Скорость обмена
DCB.BaudRate := [скорость обмена];
// Число бит на символ
DCB.ByteSize := [размер "байта" при обмене по COM порту - обычно 8 бит];
// Стоп-биты
DCB.StopBits := [константа, определяющая кол-во стопбитов];
// Четность
DCB.Parity := [константа, определяющая режим контроля четности];
DCB.Flags := 20625;
// 5. Передача настроек
if not SetCommState(hPort, DCB) then {ошибка настройки порта};
// 6. Настройка буферов порта (очередей ввода и вывода)
if not SetupComm(hPort, 16, 16) then {ошибка настройки буферов};
// 7. Сброс буфферов и очередей
if PurgeComm(hPort, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR) then ;
...............
// 8. Закрытие порта
CloseHandle(hPort);
end;

Теперь рассмотрим все шаги по порядку:
Шаг 1 - открытие порта. Порт открывается стандартной командой CreateFile, только в качестве имени файла передается имя порта (например, "COM1")
Шаг 2 - проверка успешности шага 1. Если порт открылся, то функция CreateFile возвращает его Handle, иначе hPort = INVALID_HANDLE_VALUE, что свидетельствует об ошибке
Шаг 3 - загрузка текущих настроек порта при помощи функции GetCommState. Этот шаг не является обязательным, т.к. можно настроить порт, как говорится, "с нуля". После выполнения GetCommState структура DCB заполняется текущими настройками
Шаг 4 - занесение в структуру DCB необходимых настроек
Шаг 5 - Настрока порта при помощи функции SetCommState. После настройки с портом уже можно работать, но в примере я выполняю полную настроку (шаги 6 и 7)
Шаг 6 - Настрока размеров буфера приема и предачи при помощи SetupComm. В моем примере заданы буфера очень небольшого размера, рекомендуется задать окого 1 кб
Шаг 7 - Очистка буферов и очередей порта - второй параметра функции PurgeComm является битовой маской и задает, что именно необходимо очитстить - в нашем случае все по максимуму
Шаг 8 - закрытие порта после завершения работы с ним

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог