Здравствуйте! У меня проблема с основами управления com-портом ч-з winapi. Начальная задача передать строчку и сразу прочитать ее. Прочитал, что для этого надо замкнуть 2й и 3й пины на компорте.
Код:
HANDLE hCOM=CreateFile("COM1",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
DCB DCB;
DCB.BaudRate=4799;
DCB.ByteSize = 8;
DCB.Parity = 0;
DCB.StopBits = 0;
SetCommState(hCOM,&DCB);
COMMTIMEOUTS timeCom;
GetCommTimeouts(
hCOM, // handle to comm device
&timeCom // time-out values
);
timeCom.ReadIntervalTimeout=100;
timeCom.ReadTotalTimeoutConstant=50;
timeCom.ReadTotalTimeoutMultiplier=0;
timeCom.WriteTotalTimeoutMultiplier=0;
timeCom.WriteTotalTimeoutConstant=0;
SetCommTimeouts(
hCOM, // handle to comm device
&timeCom // time-out values
);
if (hCOM!=INVALID_HANDLE_VALUE)
{
AfxMessageBox("COM1 is open OK!");
char buffer[30];
// buffer=m_wdata;
//AfxMessageBox(buffer);
memset(buffer,0,sizeof(buffer));
strcpy(buffer,"SAVE TO COM1");
DWORD nb;
OVERLAPPED ov;
WriteFile(hCOM,buffer,sizeof(buffer),&nb,&ov);
CloseHandle(hCOM);
}
else AfxMessageBox("Error Open COM1");
Запись, помоему, не происходит. В дебаггере переменная nb =0, так же происходит, если заменить на readFile (массив buffer остаеться тем же, nb=0).
p.s. nb — кол-во записаных/считанных байт.
p.p.s. Всем заранее спасибо!
.
Re: Проблема при работе с com-портом. vs 6.0
От:
Аноним
Дата:
26.02.06 23:24
Оценка:
Здравствуйте, zipper3, Вы писали:
Z>Здравствуйте! У меня проблема с основами управления com-портом ч-з winapi. Начальная задача передать строчку и сразу прочитать ее. Прочитал, что для этого надо замкнуть 2й и 3й пины на компорте.
Z>Код: Z>
Z>Запись, помоему, не происходит. В дебаггере переменная nb =0, так же происходит, если заменить на readFile (массив buffer остаеться тем же, nb=0).
Z>p.s. nb — кол-во записаных/считанных байт. Z>p.p.s. Всем заранее спасибо! Z>.
Там, по-моему, вместе с СОМ еще куча черточек и точечек должна быть нарисованна. А так скорее всего создастся файл с именем СОМ.
Здравствуйте, zipper3, Вы писали:
Z>Здравствуйте! У меня проблема с основами управления com-портом ч-з winapi. Начальная задача передать строчку и сразу прочитать ее. Прочитал, что для этого надо замкнуть 2й и 3й пины на компорте.
Прицепись к этому порту терминалкой (HyperTerm/SecureCRT/...) и понажимай кнопки, должно быть эхо.
Здравствуйте, zipper3, Вы писали:
Z>Здравствуйте! У меня проблема с основами управления com-портом ч-з winapi. Начальная задача передать строчку и сразу прочитать ее. Прочитал, что для этого надо замкнуть 2й и 3й пины на компорте.
Z>Код: Z>
Z>Запись, помоему, не происходит. В дебаггере переменная nb =0, так же происходит, если заменить на readFile (массив buffer остаеться тем же, nb=0).
Z>p.s. nb — кол-во записаных/считанных байт. Z>p.p.s. Всем заранее спасибо! Z>.
Значит, что бросилось в глаза.
1. Проверку hCOM != INVALID_HANDLE_VALUE надо делать сразу после CreateFile, иначе SetComm... не сработают.
2. Если предполагается работать с портами с номером выше чего-то там, то лучше задать имя \\.\COMx.
3. На Win старше 98 скорости устанавливаются только стандартные (из констант CBR_xxx).
4. Кол-во Stop bits не может быть нулевым. По определению.
5. Из вышеозначенного — проверять лучше результат вызова всех ф-ций.
6. DCB все-таки либо перед установкой нужных параметров очищать, либо инициализировать все поля.
Здравствуйте, <Аноним>, Вы писали:
Z>> HANDLE hCOM = CreateFile("COM1",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); А>Там, по-моему, вместе с СОМ еще куча черточек и точечек должна быть нарисованна. А так скорее всего создастся файл с именем СОМ.
Нет, откроется именно COM, хотя более м... правильно чтоли...
Здравствуйте, Anton Batenev, Вы писали:
AB>Здравствуйте, <Аноним>, Вы писали:
Z>>> HANDLE hCOM = CreateFile("COM1",GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); А>>Там, по-моему, вместе с СОМ еще куча черточек и точечек должна быть нарисованна. А так скорее всего создастся файл с именем СОМ.
AB>Нет, откроется именно COM, хотя более м... правильно чтоли...
AB>
Z>И все равно не работает. Может кто-нибудль просто скинет мне рабочий пример. MSDN не помог.
Сказал же — проверяйте коды возврата ВСЕХ ф-ций. Помогает. Хотя бы понять, где именно проблема.
И еще. Если файл открыт без FILE_FLAG_OVERLAPPED, переменная ov лишняя.
А пример можно взять здесь.
Здравствуйте, _const_, Вы писали:
__>Здравствуйте, zipper3, Вы писали:
Z>>И все равно не работает. Может кто-нибудль просто скинет мне рабочий пример. MSDN не помог.
__>Сказал же — проверяйте коды возврата ВСЕХ ф-ций. Помогает. Хотя бы понять, где именно проблема. __>И еще. Если файл открыт без FILE_FLAG_OVERLAPPED, переменная ov лишняя. __>А пример можно взять здесь.
Всем спасибо. Проблема была в переменной ov если вместо нее написать NULL, то все работает.