webForumDet fria alternativet

seriel port

1 svar · 259 visningar · startad av msossna

msossnaMedlem sedan feb. 2002476 inlägg
#1

hur kommunicerar man via seriel porten, dvs läser av signaler och skickar signaler till den?

TigermannenMedlem sedan juli 200124 inlägg
#2

// variabler
var ComFile     : THandle;
  DeviceName      : Array[0..80] of Char;

  DCB             : TDCB;
  config          : string;
  CommTimeouts    : TCommTimeouts;

begin

//
// anslut
//

  StrPCopy(DeviceName, 'COM1'+ ':'); // eller annan

  ComFile := CreateFile(DeviceName, GENERIC_READ or GENERIC_WRITE, 0, Nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

SetupComm(ComFile, RxBufferSize, TxBufferSize);
GetCommState(ComFile, DCB)
Config := 'baud=' + IntToStr(19200) + ' parity=n data=8 stop=1' + #0; // eller annat

BuildCommDCB(@Config[1], DCB);

SetCommState(ComFile, DCB);

 with CommTimeouts do begin

      ReadIntervalTimeout := 0;
      ReadTotalTimeoutMultiplier := 0;
      ReadTotalTimeoutConstant := 1000;
      WriteTotalTimeoutMultiplier := 0;
      WriteTotalTimeoutConstant := 1000;

 end;

SetCommTimeouts(ComFile, CommTimeouts)
....
//
// skicka och ta emot text
//
function SendText(str : string) : boolean;
var
  BytesWritten    : DWORD;
  Buffer          : array[0..100] of char;

begin

  StrPCopy(Buffer, str);

  if not WriteFile(ComFile, Buffer, length(str), BytesWritten, nil) then
      Result := false
  else
      Result := true;

end;

function ReceiveText : string;
var
  Buffer          : array[0..255] of char;
  i               : integer;
  ByteCount       : DWORD;
  s               : string;
begin

  s:='';
  ReadFile(ComFile,buffer,255,ByteCount,nil);
  for i:=0 to ByteCount-1 do
      s:=s+Buffer[i];
  Result := s;

end;

mvh Tony

125 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)