![]() |
|
|
![]()
|
|
| Maxim Prishchepa |
|
|||
|
Unregistered |
Первый раз столкнулся с проблемой - работы с СОМ портами.... естественно ни литературы, ни исходников нету.... Ковырять нечего.... Посоветуйте что можно почитать и поковырять.... (желательно в эл. виде) Заранее благодарствую.... |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
MSDN--PlatformSDK--BaseServices--Files and I/O--Communications
там есть пример работы с COM-портом или компоненты какие-нибудь поискать, но тут уж я совсем не специалист... -------------------- qqq |
|||
|
||||
| VID |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 4.10.2004 Где: Новосибирск Репутация: нет Всего: нет |
Если работаешь под С++Builder или Delphi, то слветую поискать в инете архив компонента Async32 от TMS Software или компонент APRO 4.06 от фирмы Turbo Power. В инете есть архивы - это законченные компоненты для работы с СОМ портом.
Желаю Удачи!!! |
|||
|
||||
| Гость_Alexander |
|
|||
|
Unregistered |
смотри функции API:
Открыть дискриптор порта CreatFile() Получить настройки порта GetCommState () GetCommTimeouts () Изменить и сохранить SetCommState () SetCommTimeouts () Закрыть дескриптор CloseHandle () |
|||
|
||||
| Гость_Boom |
|
|||
|
Unregistered |
Только вчера закончил с этим ковыряться.
Вот как открыть порт: bool TCommThread::Connect() { BOOL bResult = TRUE; hComm = CreateFile("com1", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, // эксклюзивный доступ NULL, // никакой безопасности :-) OPEN_EXISTING, 0, NULL); int m_bPortReady = SetupComm(hComm, 512, 512); // установка размера буфера DCB m_dcb; m_bPortReady = GetCommState(hComm, &m_dcb); m_dcb.BaudRate = 9600 ; m_dcb.ByteSize = 8 ; m_dcb.Parity = NOPARITY; m_dcb.StopBits = ONESTOPBIT; m_dcb.fAbortOnError = TRUE; m_bPortReady = SetCommState(hComm, &m_dcb); COMMTIMEOUTS m_CommTimeouts; m_bPortReady = GetCommTimeouts (hComm, &m_CommTimeouts); m_CommTimeouts.ReadIntervalTimeout = 50 ; m_CommTimeouts.ReadTotalTimeoutConstant = 50 ; m_CommTimeouts.ReadTotalTimeoutMultiplier = 10 ; m_CommTimeouts.WriteTotalTimeoutConstant = 100 ; m_CommTimeouts.WriteTotalTimeoutMultiplier = 0 ; m_bPortReady = SetCommTimeouts (hComm, &m_CommTimeouts); return true; } Скорость ожидания зависит от таймаутов. Почитай на microsoft.com в MSDN про структуру COMMTIMEOUTS Теперь считать: у меня операции с ком-портом запиханы в thread (так программа не подвисает) void __fastcall TCommThread::Execute() { char buf[512]; int pos = 0; Connect(); unsigned long readen; MSG msg; while( !Terminated ){ ReadFile( hComm, buf, 1, &readen, NULL ); //считываю 1 символ, чтобы время ожидания ответа не превышало ReadTotalTimeoutMultiplier*1+ReadTotalTimeoutConstant=60мс. if(readen == 1){ //в буфере еще что-то есть ReadFile( hComm, buf+1, 510, &readen, NULL ); buf[readen] = 0; SendMessage( hParentWnd, WM_USER, 0xB00B, (long)buf ); //отправлять сообщение родительской форме о факте поступления данных на COM-порт. } } Disconnect(); } теперь TCommThread::Disconnect() { CloseHandle(hComm); } типы: HANDLE hComm; HWND hParentWnd; про остальное сам додумывайся |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |