Re[5]: Как принять данные из COM-порта
От: PauseBreak  
Дата: 22.06.04 09:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>еще один вопрос по теме — есть некое устройство (носимый терминал транкинговой связи), понимающее АТ команды. необходимо написать небольшую программку которая бы эти команды слала и получала ответ. Почитал все ветки, посвященные работе с портами, написал примерно следующее:


А>char *buf_out="AT\r";

А>char *buf_in;

А>DWORD bc;

А>DCB *dcb;
А>COMMTIMEOUTS ct;
А>HANDLE port;
А>DWORD mask;


А>dcb=(DCB*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(DCB));

Не надо забывать указать dcb->DCBlength=sizeof(DCB);
А>BuildCommDCB("baud=38400 parity=N data=8 stop=1",dcb);
dcb->>fNull=TRUE;

А>ct.ReadIntervalTimeout=50;

А>ct.ReadTotalTimeoutMultiplier=ct.ReadTotalTimeoutConstant=0;
А>ct.WriteTotalTimeoutMultiplier=ct.WriteTotalTimeoutConstant=0;


А>port=CreateFile("COM1",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

А>if(port==INVALID_HANDLE_VALUE) {
А>MessageBox("Error");
А>ExitProcess(1);
А>}
А>else m_status.AddString("Com1 connected...");

А>GetCommState(port,dcb);

А>SetCommState(port,dcb);
А>SetCommTimeouts(port,&ct);
А>HeapFree(GetProcessHeap(),0,dcb);



А>buf_in=(char*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,strlen(buf_out)+1);


А>WriteFile(port,buf_out,strlen(buf_out),&bc,NULL);

Между этими функциями должна быть временная задержка!
А>ReadFile(port,buf_in,strlen(buf_out),&bc,NULL);

Все функции выполняются? Проверки на ошибки есть?

Надо посмотреть полное описание устройства. wabo@inbox.ru.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.