Форум — Ответы ( К темам )
? | Роман: Помогите разобраться с параметрами инициализации порта и его работой (21-12-2002 02:53:18) |
Здравствуйте! Помогите разобраться с параметрами инициализации порта и как он работает. Зачем нужен оператор SetCommMask() и что значат параметры к нему EV_RXCHAR и EV_TXEMPTY? Есть ли еще параметры к нему (желательно с описанием)? Когда мы конфигурируем временные параметры порта взятые функцией GetCommTimeouts() в каких единицах (размерность) они устанавливаются (например — ReadIntervalTimeout=10 -> 10 мс?)? При инициализации порта мы также создаем промежуточный буфер функцией SetupComm() — как подобрать оптимальные параметры для него? Передача/прием из него начинается только при наличие определенного числа символов (при выполнении какого-то условия)? Можем ли мы управлять этим буфером (передачей/приемом)? Объясните, пожалуйста, его механизм работы (взаимодействия с Win32). Нужно ли при работе с портом подключать какие-либо специализированные файлы (например — для расширения возможностей диагностики)? Какие оптимальные настройки порта, если для связи с внешним устройством используется только три провода (TxD, RxD, GND), остальные соединены по следующей схеме — RTS-CTS, и DSR-DCD-DTR (одна из стандартных схем распаек нуль-модемного кабеля)? И как это влияет (отсутствие аппаратного подтверждения) на настройки порта? | |
Георгий (28-12-2002 01:09:24) | |
1. Все временные параметры устанавливаются и читаются в мс 2. по умолчанию Windows ставит буффер 2048 чтение и 512 байт на запись оптимальные: чтобы поместилась пара пакетов от устройства, с корторым работать будеш... 3. передача/чтение начинаются сразу же после появления сигнала готовонсть приёма/ или запроса от проги на чтение данных (если эти данные в буфере, а если нет, то в течение таймаюта ожидается приход нужного числа байт ) 4. если используется шнурок на 3 провода (приём , передача, земля), то запись в порт выполняется сразу же, а чтение — смотри выше 5. с портом работать можно примерно так: this->hCom=CreateFile( ComName.c_str(), GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); BuildCommDCB(CfgString.c_str(),&dcb) SetCommState(this->hCom,&dcb) SetCommTimeouts(hCom,&ctmo); PurgeComm(this->hCom,PURGE_TXCLEAR|PURGE_RXCLEAR); WriteFile(hCom,this->OutPutBuffer,size,&nBytes,NULL); ReadFile(hCom,this->InPutBuffer,size,&nBytes,NULL); CloseHandle(hCom) для работы с 3-х жильным шнурком надо настроить DCB — смотри MS SDK А то если я всё раскажу, то тебе не интересно станет.... | |
Роман (06-01-2003 05:21:48) | |
Спасибо! Буду разбираться ...
| |
Роман (06-01-2003 05:24:23) | |
Спасибо! Буду разбираться ...
|