15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как прочитать из модема.

Автор: Fernando Silva

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

Совместимость: Delphi (все версии)

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;