API - comunicacoes com a serial via api

Top  Previous  Next

// comunicacoes com a serial via api

 

function OpenCOMPort: Boolean; 

var 

  DeviceName: array[0..80] of Char; 

  ComFile: THandle; 

begin 

   { First step is to open the communications device for read/write. 

     This is achieved using the Win32 'CreateFile' function. 

     If it fails, the function returns false. 

 

     Wir versuchen, COM1 zu öffnen. 

     Sollte dies fehlschlagen, gibt die Funktion false zurück. 

   } 

  StrPCopy(DeviceName, 'COM1:'); 

 

  ComFile := CreateFile(DeviceName, 

    GENERIC_READ or GENERIC_WRITE, 

    0, 

    nil, 

    OPEN_EXISTING, 

    FILE_ATTRIBUTE_NORMAL, 

    0); 

 

  if ComFile = INVALID_HANDLE_VALUE then 

    Result := False 

  else 

    Result := True; 

end; 

 

 

function SetupCOMPort: Boolean; 

const 

  RxBufferSize = 256; 

  TxBufferSize = 256; 

var 

  DCB: TDCB; 

  Config: string; 

  CommTimeouts: TCommTimeouts; 

begin 

   { We assume that the setup to configure the setup works fine. 

     Otherwise the function returns false. 

 

     wir gehen davon aus das das Einstellen des COM Ports funktioniert. 

     sollte dies fehlschlagen wird der Rückgabewert auf "FALSE" gesetzt. 

   } 

 

  Result := True; 

 

  if not SetupComm(ComFile, RxBufferSize, TxBufferSize) then 

    Result := False; 

 

  if not GetCommState(ComFile, DCB) then 

    Result := False; 

 

  // define the baudrate, parity,... 

  // hier die Baudrate, Parität usw. konfigurieren 

    

  Config := 'baud=9600 parity=n data=8 stop=1'; 

 

  if not BuildCommDCB(@Config[1], DCB) then 

    Result := False; 

 

  if not SetCommState(ComFile, DCB) then 

    Result := False; 

 

  with CommTimeouts do 

  begin 

    ReadIntervalTimeout         := 0; 

    ReadTotalTimeoutMultiplier  := 0; 

    ReadTotalTimeoutConstant    := 1000; 

    WriteTotalTimeoutMultiplier := 0; 

    WriteTotalTimeoutConstant   := 1000; 

  end; 

 

  if not SetCommTimeouts(ComFile, CommTimeouts) then 

    Result := False; 

end; 

 

 

{ 

  The following is an example of using the 'WriteFile' function 

  to write data to the serial port. 

 

  Folgendes Beispiel verwendet die 'WriteFile' Funktion, um Daten 

  auf den seriellen Port zu schreiben. 

} 

 

 

procedure SendText(s: string); 

var 

  BytesWritten: DWORD; 

begin 

   { 

     Add a word-wrap (#13 + #10) to the string 

 

     An den übergebenen String einen Zeilenumbruch (#13 + #10) hängen 

   } 

  s := s + #13 + #10; 

  WriteFile(ComFile, s[1], Length(s), BytesWritten, nil); 

end; 

 

 

{ 

  The following is an example of using the 'ReadFile' function to read 

  data from the serial port. 

   

  Folgendes Beispiel verwendet die 'ReadFile' Funktion, um Daten 

  vom seriellen Port zu lesen. 

} 

 

 

procedure ReadText: string; 

var 

  d: array[1..80] of Char; 

  s: string; 

  BytesRead, i: Integer; 

begin 

  Result := ''; 

  if not ReadFile(ComFile, d, SizeOf(d), BytesRead, nil) then 

  begin 

    { Raise an exception } 

  end; 

  s := ''; 

  for i := 1 to BytesRead do s := s + d[I]; 

  Result := s; 

end; 

 

 

procedure CloseCOMPort; 

begin 

  // finally close the COM Port! 

  // nicht vergessen den COM Port wieder zu schliessen! 

  CloseHandle(ComFile); 

end;