API - comunicacoes com a serial via api

Top  Previous  Next

// comunicacoes com a serial via api

 

function OpenCOMPort: Boolean; 

var 

  DeviceName: array[0..80of 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..80of 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