Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.06;
Скачать: CL | DM;

Вниз

Буфер 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
1-17910
stupid
2002-05-27 15:31
2002.06.06
Совмещение функций в одну...


14-18136
herosofnn
2002-05-02 15:38
2002.06.06
Проблема


14-18141
Soo
2002-05-02 17:21
2002.06.06
Программа по социалогическому опросу


4-18206
Deus
2002-04-03 10:41
2002.06.06
Mouse Hook


3-17787
BOOMER
2002-05-15 13:54
2002.06.06
ERROR IN MS SQL Server