| 
   
    | ...write/read a string to/from the serial port? |   
    | Autor: 
      GeLu-EDV-Service |  | [ Print tip 
] |  |  |  
 
 
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;
 
 
 
   |