Консультация № 108163
05.11.2007, 20:27
0.00 руб.
0 2 2
Здравствуйте. Помогите разобраться с работой с ком портом из под виндоус хр? Сам я мало что понимаю, но очень нужно написать программку и разобраться как она работает на уровне, чтобы мог дописывать потихоньку нужные прибамбасы. Сейчас конкретно нужно что бы программа по команде, например по нажатию кнопки, отсылала введенный байт и принимала данные с внешнего устройства. Может у кого есть уже готовая заготовка с исходниками, чтобы можно было разобраться и чайнику? (Настройки порта пока не так важны, главное знать как их настроить). И еще посоветуйте где почитать можно литературу на русском по работе с ком портом? с примерами. Организую связь микроконтроллера с компьютером, программа для контроллера готова и работает. С гипертерминала данные уходят в контроллер, им обрабатываются и отсылаются обратно в гипер. Пока это просто тестовая прога, сейчас необходимо уже написать приложение под виндоус.

Обсуждение

Неизвестный
06.11.2007, 01:38
общий
это ответ
Здравствуйте, Dark128!

Да вообщем-то все достаточно просто - в Windows COM-порты как файлы

1. Открываем порт
hCom := CreateFile(‘com1‘,
GENERIC_WRITE or GENERIC_READ,
0,
nil,
OPEN_EXISTING,
0,
0);
Проверяем на INVALID_HANDLE_VALUE, а то может уже занят кем-то.

2. Устанавливаем скорость и т.п.
var dcb : TDCB;
GetCommState(hCom, dcb);
dcb.BaudRate := 9600;
dcb.ByteSize := 8;
dcb.Parity := 0;
dcb.StopBits := 1;
if not SetCommState(hCom[VC], dcb) then Error(‘SetCommState FAILED‘);

3. Чтение ReadFile(hCom, data^, size, dwBytes, nil)

4. Запись WriteFile(hCom, data^, size, dwBytes, nil)

5. Статус (наличие данных)
var comstat : TCOMSTAT; dummy : DWORD;
ClearCommError(hCom, dummy, @comstat);
Result := comstat.cbInQue;

6. Заканчиваем работу CloseHandle(hCom);

Неизвестный
06.11.2007, 09:54
общий
это ответ
Здравствуйте, Dark128!

Я бы посоветовал воспользоваться компонентами ComPort Library, а не писать работу с COM портом самому.
В принципе, компонентов для работы с COM портом хватает, просто яконкретно с этой библиотекой я работал.
Форма ответа