Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];

Вниз

Чтение из com-порта...   Найти похожие ветки 

 
Mr.Nobody   (2003-11-25 22:17) [0]

Помогите чайнику...
Я пишу в com-порт некий запрос, а устройство на этом порту шлет мне ответ. Проблема в следующем: заранее не известно, какой длины будет этот ответ. Вопрос соответственно: можли ли узнать эту длину перед чтение. Сейчас делаю так: читаю посимвольно до наступления timeout"а...


 
Evgeny V   (2003-11-26 06:03) [1]

Правильно делаешь, если нет заранее известного размера ответа. Можно не посимвольно, а сразу все что пришло, до наступления тайм-аута. Хотя если устройство твое, то лучше бы какой бы протокольчик организовать, но наверное не твое


 
Mr.Nobody   (2003-11-26 11:34) [2]

Нет, устройство не мое... ну всмысле мое... разработка не моя.
Я просниферил как с этим устройством общается другая прога. Ну так вот она после каждой записи в порт посылает запрос IOCTL_SERIAL_GET_COMMSTATUS и тока потом читает. Мне почему-то кажется что по этому запросу и определяется длина данных, которые готовы к прочтению. Поискал про этот запрос в MSDN - ничего внятного, все ссылки на DDK, а драйвер писать у меня чо-то желания нет. Кто-нить чо-нить про этот запрос знает?


 
MaxDDinc   (2003-11-26 19:59) [3]

Доброго времени суток. Есть библиотечка "pcomm.dll" для работы с расширителями Com"порта, там есть все, если интересно, мыльте.
А посоветую следующее: (для pcomm.dll)
1. Проверяем, есть что-то в буфере IN
2. Если есть, то забираем, ждем секунду и снова проверяем
3. Если ничего больше нет, то и пакет закончен


 
shane54   (2003-11-26 20:20) [4]

Убери тока лищнее (лень самому):

procedure ReadFromHSMHost(var p_hsm_cmdi : integer; var p_hsm_cmds : string);
var
v_flag : boolean;
v_size, v_errs, v_mask : DWord;
v_cmdarr : array [0..4000] of char;
begin
v_flag := true;
while v_flag do
begin
v_mask := 0;
WaitCommEvent(HSMHostPort, v_mask, @Ovr);
if (v_mask and EV_RXFLAG) = EV_RXFLAG then
begin
ClearCommError(HSMHostPort, v_errs, @Stat);
v_size := Stat.cbInQue;
ReadFile(HSMHostPort, v_cmdarr, v_size, v_size, @Ovr);
p_hsm_cmds := String(v_cmdarr);
v_flag := false;
end;
end;
p_hsm_cmdi := StrToInt(Copy(p_hsm_cmds, 2, 4));
p_hsm_cmds := Copy(p_hsm_cmds, 6, v_size - 7);
end;



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2004.02.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.013 c
1-29355
zamkom
2004-01-29 12:12
2004.02.10
StrToWord


1-29376
Grinder
2004-01-30 23:13
2004.02.10
Рисование на border


1-29405
Daniel
2004-01-31 22:48
2004.02.10
Еще


4-29670
mRodion
2003-12-03 12:00
2004.02.10
Как определить, что окно стало активным по щелчку мыши?


1-29467
tovSuhov
2004-01-30 14:07
2004.02.10
Проблема с перезагрузкой





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский