Форум — Ответы     (  К темам )
 ?  Роман: Помогите разобраться с параметрами инициализации порта и его работой (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)
Спасибо! Буду разбираться ...