WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   wie serielle Com in Delphi ansprechen (http://www.wcm.at/forum/showthread.php?t=111115)

roadrunner 05.10.2003 18:59

wie serielle Com in Delphi ansprechen
 
hallo!

ich bin neu in delphi und muss die serielle schnittstelle ansprechen.

wenn es jemand weiss und mir in kleinen schritten erklären kann wie ich in delphi 7 die serielle schnittstelle ansprechen kann, wäre ich sehr dankbar (habe mich eh schon im internet umgesehen, werde aber aus den ganzen posts nicht schlau).

recht herzlichen dank

delphirocks 12.10.2003 19:32

hallo,
such mal auf source forge nach Turbopower/asyncpro

sg

Katze 12.10.2003 20:55

Code:


function OpenCOMPort: Boolean;
var
  DeviceName: array[0..80] of Char;
  ComFile: THandle;
begin
  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;
  ComFile: THandle;
begin
  Result := True;

  if not SetupComm(ComFile, RxBufferSize, TxBufferSize) then
    Result := False;

  if not GetCommState(ComFile, DCB) then
    Result := False;

  // 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;



procedure SendText(s: string);
var
  BytesWritten: DWORD;
begin
  s := s + #13 + #10;
  WriteFile(ComFile, s[1], Length(s), BytesWritten, nil);
end;



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
  CloseHandle(ComFile);
end;

Es grüsst

- Die Katze

roadrunner 12.10.2003 23:11

thx werds probieren


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag