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

Ваш аккаунт

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

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

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

Чтение данных из Сом-порта...

14K
10 ноября 2005 года
Pumpa
4 / / 10.11.2005
Суть проблемы вот в чем:
Необходимо считывать данные с магнитных карт. Ридер подключен к Сом-порту. А кот как с ним работать - никак не соображу. Кто-нибудь решал аналогичные задачи? Можете поделиться опытом?
Предположим,
HANDLE hCom=CreateFile("COM1",GENERIC_WRITE | GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);

if(hCom==INVALID_HANDLE_VALUE){//ошибка };
А теперь нужно считать данные. Вот тут то я и задумалась! =)
Честно перерыла кучу форумов, но ничего умного не нашла.
6.4K
11 ноября 2005 года
Host
122 / / 22.09.2005
Цитата:
Originally posted by Pumpa
Суть проблемы вот в чем:
Необходимо считывать данные с магнитных карт. Ридер подключен к Сом-порту. А кот как с ним работать - никак не соображу. Кто-нибудь решал аналогичные задачи? Можете поделиться опытом?
Предположим,
HANDLE hCom=CreateFile("COM1",GENERIC_WRITE | GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);

if(hCom==INVALID_HANDLE_VALUE){//ошибка };
А теперь нужно считать данные. Вот тут то я и задумалась! =)
Честно перерыла кучу форумов, но ничего умного не нашла.



А дальше :

DCB dcb;
COMMTIMEOUTS to;

Необходимо заполнить структуру DCB, причем настройки источника и получателя должны быть идентичны.

GetCommState(hCom,&dcb); //Заполняет DCB параметрами по умолчанию

После заполнения (если вносим изменения):
SetCommState(hCom,&dcb); //Применяем параметры
...Заполняем COMMTIMEOUTS
SetCommTimeouts(hCom,&to);//Применяем параметры

Когда COM1 настроен, необходимо создать буфер, куда будут поступать данные и откуда будем их читать.

SetupComm(hCom, iIn, iOut);

Читаем-пишем в созданный буфер:
ReadFile();
WriteFile();

По окончании работы с COM
CloseHandle(hCom);

6.4K
11 ноября 2005 года
Host
122 / / 22.09.2005
Цитата:
Originally posted by Pumpa
Суть проблемы вот в чем:
Необходимо считывать данные с магнитных карт. Ридер подключен к Сом-порту. А кот как с ним работать - никак не соображу. Кто-нибудь решал аналогичные задачи? Можете поделиться опытом?
Предположим,
HANDLE hCom=CreateFile("COM1",GENERIC_WRITE | GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);

if(hCom==INVALID_HANDLE_VALUE){//ошибка };
А теперь нужно считать данные. Вот тут то я и задумалась! =)
Честно перерыла кучу форумов, но ничего умного не нашла.



А дальше :

DCB dcb;
COMMTIMEOUTS to;

Необходимо заполнить структуру DCB, причем настройки источника и получателя должны быть идентичны.

GetCommState(hCom,&dcb); //Заполняет DCB параметрами по умолчанию

После заполнения (если вносим изменения):
SetCommState(hCom,&dcb); //Применяем параметры
...Заполняем COMMTIMEOUTS
SetCommTimeouts(hCom,&to);//Применяем параметры

Когда COM1 настроен, необходимо создать буфер, куда будут поступать данные и откуда будем их читать.

SetupComm(hCom, iIn, iOut);

Читаем-пишем в созданный буфер:
ReadFile();
WriteFile();

По окончании работы с COM
CloseHandle(hCom);

14K
11 ноября 2005 года
Pumpa
4 / / 10.11.2005
Цитата:
Originally posted by Host
А дальше :
....
Читаем-пишем в созданный буфер:
;
WriteFile();
....
CloseHandle(hCom);


М...
А в какой момент ReadFile() вызывать?

6.4K
11 ноября 2005 года
Host
122 / / 22.09.2005
Цитата:
Originally posted by Pumpa
М...
А в какой момент ReadFile() вызывать?



В любой. Данные, приходящие на COM-порт хранятся в буфере, который мы создали ранее. ReadFile() просто читает содержимое этого буфера на момент вызова функции, естественно указатель на буфер необходимо передавать в функцию:

BOOL ReadFile(
HANDLE hFile, //hCom
LPVOID lpBuffer, //&bufer
DWORD nNumberOfBytesToRead,
LPDWORD lpNumberOfBytesRead,
LPOVERLAPPED lpOverlapped
);

14K
11 ноября 2005 года
Pumpa
4 / / 10.11.2005
Цитата:
Originally posted by Host
В любой. Данные, приходящие на COM-порт хранятся в буфере, который мы создали ранее. ReadFile() просто читает содержимое этого буфера на момент вызова функции, естественно указатель на буфер необходимо передавать в функцию:
);


Чего-то не очень получается... Сдается, пора мне в секретарши идти... =((

243
12 ноября 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by Pumpa
Чего-то не очень получается... Сдается, пора мне в секретарши идти... =((


Не, ну это в натуре уже безобразие!!! Каждый месяц одно и тоже, ощущение что поиск по форуму создан просто так, для вида.

6.4K
14 ноября 2005 года
Host
122 / / 22.09.2005
Цитата:
Originally posted by Pumpa
Чего-то не очень получается... Сдается, пора мне в секретарши идти... =((



Примерно так это работает

6.4K
14 ноября 2005 года
Host
122 / / 22.09.2005
забыл вложить файл
14K
14 ноября 2005 года
Pumpa
4 / / 10.11.2005
Цитата:
Originally posted by Host
Примерно так это работает



Спасибо тебе огромное!

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