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

Вниз

Буфер com-порта   Найти похожие ветки 

 
Aric   (2002-03-10 14:20) [0]

Приветствую! Скажите, как можно обнулить буфер com-порта? Т.е. сбросить все, что там уже есть и начать писать в него заново? Заранее спасибо!


 
Anatoly Podgoretsky   (2002-03-10 14:42) [1]

Думаю надо перезагрузить компьютер


 
Aric   (2002-03-10 14:53) [2]

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


 
Anatoly Podgoretsky   (2002-03-10 14:59) [3]

Я серьезно, но у тебя был вопрос про запись, а с чтением просто, прочитай все и буфер будет чист


 
Aric   (2002-03-10 15:05) [4]

Читать в никуда? А как узнать, что в буфер уже пуст? а если там много? Вопросы, конечно, несколько тупские, но я в этом профан, а шеф требует(


 
Королев   (2002-03-11 06:24) [5]

есть такая команда в апи, точно есть clear*** что-то. посмотри в группе команд для ком порта.


 
EsKor   (2002-03-11 10:17) [6]

Используй API-функцию (описана в справке SDK)
PurgeComm(
HANDLE hFile, // дескриптор порта
DWORD dwFlags // флаг действия
);

dwFlags
Этот параметр м.б. комбинацией следующих значений:
PURGE_TXABORT - Прерывает операцию записи в порт даже если она не завершена;
PURGE_RXABORT - То же для операции чтения;
PURGE_TXCLEAR - Очищает выходной буфер (запись), т.е. компьютер можно не перезагружать ;
PURGE_RXCLEAR - Очищает входной буфер (чтение).

Хотя действительно можно организовать цикл чтения порта до тех пор пока не будут возвращаться пустые значения - это и означает, что буфер порта пуст.


 
Coalycat   (2002-03-11 10:25) [7]

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


 
Leo_   (2002-03-12 15:07) [8]

Вот как читать инфу из модема(с com порта)

После предварительной настройки переменных, COM порт открывается как обычный файл. Так же пример показывает, как очищать буфер COM порта и читать из него.

Var
PortSpec : array[0..255] of char;
PortNo : Word;
success : Boolean;
error:integer;
begin
FillChar(PortSpec,Sizeof(PortSpec),#0);
StrPCopy(PortSpec,"Com1:19200,n,8,1");
PortSpec[3]:=Char(Ord(PortSpec[3])+Ord(PortNo));

if not BuildCommDCB(PortSpec,Mode) Then
Begin
//какая-то ошибка...
Exit;
End;

PortSpec[5]:=#0; { "Com1:" }

Mode.Flags:=EV_RXCHAR + EV_EVENT2; { $1001 }

Com := CreateFile(PortSpec,GENERIC_READ or GENERIC_WRITE,
0, //* comm устройство открывается с эксклюзивным доступом*/
Nil, //* нет security битов */
OPEN_EXISTING, //* comm устройства должны использовать OPEN_EXISTING*/
0, //* not overlapped I/O */
0 //* hTemplate должен быть NULL для comm устройств */
);
if Com = INVALID_HANDLE_VALUE then Error := GetLastError;
Success := GetCommState(Com,Mode);

if not Success then // Обработчик ошибки.
begin

end;

Mode.BaudRate := 19200;
Mode.ByteSize := 8;
Mode.Parity := NOPARITY;
Mode.StopBits := ONESTOPBIT;//нужен был для перезаписи в NT

Success := SetCommState(Com, Mode);

if not Success then // Обработчик ошибки.
begin

end;
end;

Переменная "com" типа dword.

Вы так же можете очистить буффер COM порта - PurgeComm(Com,PURGE_RXCLEAR or PURGE_TXCLEAR);
И прочитать из него

Function ReadCh(Var Ch:Byte):dword;
var
n : dword;
Begin
Readfile(Com,ch,1,result,nil);
End;


 
Aric   (2002-03-12 15:17) [9]

Всем спасибо! Тема закрыта, т.к. первоначально задуманный вариант был не оч. удачным.


 
XOY   (2002-03-12 20:08) [10]

Удалено модератором



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

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

Наверх





Память: 0.47 MB
Время: 0.006 c
1-17973
Yanval
2002-05-28 14:04
2002.06.06
Открытие файла


4-18186
Blast
2002-04-04 12:46
2002.06.06
Окошко в TaskBarе


8-18070
Landgraph
2002-01-19 21:28
2002.06.06
Играем WAV у


3-17770
VicV
2002-05-13 17:59
2002.06.06
фильтр в TTable по месяцам


1-18015
antistatic
2002-05-22 15:50
2002.06.06
ClientWidth формы, но не по-дефолту..





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский