реклама на сайте
подробности

 
 
> Программирование COM порта, Проблемы с передачей данных устройству по COM
Yuriy_Rus
сообщение Aug 30 2006, 08:45
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 24-07-06
Пользователь №: 19 039



Уважаемые, уже котрый день занимаюсь программированием GPRS модема по COM и не могу понять, что за фигня...
Загружаю комп втыкаю модем, запускаю прогу - всё виснет, соединения - нет.
Закрываю прогу. Запускаю гипертерминал. Ввожу любую команду - всё ништяк, устройство отвечает.

Закрываю гипертерминал. Запускаю прогу, и всё уже пашет без проблем, только установка настроек порта(SetCommState(Port, &dcb) странно работет (то работает, то не работает, но восновном не работает).
Так вроде в DCB всё указываю что надо для работы устройства.
Исходник открытия и настройки порта:

if(PortOpen == 1) return false;

DCB dcb;
COMMTIMEOUTS ct;
unsigned long int bc;

//dcb = (DCB*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DCB));
dcb.DCBlength = sizeof(DCB);
//BuildCommDCB("baud = 9600 parity = N data = 8 stop = 1", &dcb);

dcb.fBinary = TRUE;
dcb.BaudRate = 9600;
dcb.fParity = NOPARITY;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;


dcb.fNull = TRUE; //Èãíîðèðîâàíèå íóëåâûõ áàéò ïðè ïðè¸ìå
dcb.fOutX = FALSE;
dcb.fInX = FALSE;

ct.ReadIntervalTimeout = D_TimeOutValue;
ct.ReadTotalTimeoutMultiplier=ct.ReadTotalTimeoutConstant = D_TimeOutValue;
ct.WriteTotalTimeoutMultiplier=ct.WriteTotalTimeoutConstant = D_TimeOutValue;

Port = CreateFile(D_COM_Name, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

if(Port == INVALID_HANDLE_VALUE)
{
Application->MessageBox(D_ComOpenError, D_Error, MB_OK+MB_ICONERROR);
ComPortClose();
return FALSE;
}

if(!SetCommState(Port, &dcb))
{
// Application->MessageBox(D_ComOpenError, D_Error, MB_OK+MB_ICONERROR);
// ComPortClose();
// return false;
}

if (!SetCommTimeouts(Port, &ct))
{
Application->MessageBox(D_ComOpenError, D_Error, MB_OK+MB_ICONERROR);
ComPortClose();
return FALSE;
}
else PortOpen = 1;

PurgeComm(Port, PURGE_RXABORT);
PurgeComm(Port, PURGE_TXCLEAR|PURGE_RXCLEAR);

Подскажите, пожалуста, как решить эту проблему. help.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 13:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01354 секунд с 7
ELECTRONIX ©2004-2016