Thema: Delphi RS232

Einzelnen Beitrag anzeigen

Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#7

Re: RS232

  Alt 7. Mär 2005, 16:16
hi .. Ihr wollt nen Com-Port ansteuern
oder hab ich da jetzt was missverstanden
Naja falls nicht hab ich das bis dato immer ohne kombos gemacht ..

Und zwar zum öffnen der Verbindung:
Delphi-Quellcode:
// Kommunikation mit Com-Port Initiieren
Procedure VerbindungStart;
Var
// Variablen für das öffnen der Com verbindug
    port:pansichar;
    b_fsuccess, b_RSetMask : Boolean;
    Dcb : TDCB;
    TCOM_com : TCOMMTIMEOUTS;
begin
//************** Com-Schnittstellen konfigurieren und öffnen *******************
//******************************************************************************
  hcom_3:=createfile('com1',GENERIC_READ or GENERIC_WRITE,
                    0,nil,OPEN_EXISTING, 0, 0);
  IF hcom_3=INVALID_HANDLE_VALUE then Application.Terminate;
//************** Com1 setzen: *****************************************
  // READ THE SERIAL PORT CONFIGURATION :
  b_fsuccess := GetcommState(hcom_3,dcb);
  //-------------------------------------
  dcb.BaudRate := baud;
  Dcb.ByteSize := byte;
  Dcb.Parity := Parity; {0-4     = None, Odd, Even, Mark, Space}
  Dcb.StopBits := StopBits; {0, 1, 2 = 1, 1.5, 2                   }
  dcb.flags :=$1011;

  // WRITE SERIAL PORT CONFIGURATION :
  b_fsuccess := SetcommState( hcom_3, Dcb );
  If b_fsuccess = False Then
    MessageDlg( 'WRITE SERIAL PORT CONFIGURATION : FAIL', MtError, [MbOk], 0 );

  // SPECIFIES A SET OF EVENTS TO BE MONITORED :
  b_RSetMask := SetCommMask( hcom_3, EV_RXCHAR );
  //-------------------------------------------
  If b_RSetMask = False Then
    MessageDlg( 'SPECIFIES A SET OF EVENTS TO BE MONITORED : FAIL',
               MtError, [MbOk], 0 );
  // COMPLETE THE STRUCTURE OF THE TIME OUT COMMUNICATION
  TCOM_com.ReadIntervalTimeOut := 500;
  TCOM_com.ReadTotalTimeoutMultiplier := 10;//MAXDWORD;
  TCOM_com.ReadtotalTimeOutConstant := 100;
  //--------------------------------------
  // SET THE TIME OUT OF THE COMMUNICATION
  SetCommTimeouts(hcom_3,TCOM_com);
  //-----------------------------------
  // SET THE SIZE OF THE INPUT AND OUTPUT BUFFER :
  //b_fsuccess := SetupComm( Handle_Com, 1024, 1000 );
  b_fsuccess := SetupComm( hcom_3, 2000, 2000 );
  //--------------------------------------------
  If b_fsuccess = False Then
    MessageDlg( 'SET THE SIZE OF THE INPUT AND OUTPUT BUFFER : FAIL',
                MtError, [MbOK], 0 );
  {************** Com3 Konfiguration lesen:******************************}
  IF GetcommState(hcom_3, DCB) then
  begin
  end
  else MessageDlg('read serial Port configuration: Fail',mtError,[mbOK],0);
//*********************************************************************
end;
zum Schließen:
Delphi-Quellcode:
// Kommunikation mit Com-Port beenden
Procedure VerbindungStop;
Begin
  closehandle(hcom_3);
end;
Zum senden (evtl. noch mit programmschnipseln von mir )
Delphi-Quellcode:
Procedure Senden (sendezeichen :string);
Var
  // SchreibeVar's
  Text : string;
  I,Laenge : integer;
  Zeichen : char;
  State : boolean;
  writtenBytes : dword;

Begin
// ************************ An COM3 Senden : **********************
  Text:=sendezeichen+CHR(013);
  Laenge:=length(Text);
  For I:=1 to Laenge do
  begin
    Zeichen:=Text[I];
    state:= writefile(hcom_3,Zeichen,1, writtenBytes ,nil);
    IF( not state )then
    begin
    // Hier kommt fehlermeldung
      MessageDlg('Fehler beim senden an den Com-Port.', mtWarning, [mbOK], 0);
    end;
  end;
end;
Und zum Empfangen: (evtl. auch noch mit programmschnipseln von mir )
Delphi-Quellcode:
Function Empfangen : String ;
var
  // LeseVar's
  success : boolean;
  Empfangene_Zeichen : array[0..50] of char;
  len : dword;
  Text : string;
  I : integer;
begin
  success:=readfile(hcom_3,Empfangene_Zeichen,35,LEN,nil); // Werte Empfangen
  If not success then
  begin
    MessageDlg('Fehler beim empfangen vom Com-Port.', mtWarning, [mbOK], 0);
  end;

  Result:=Empfangene_Zeichen;
end;
hmmm in der OH sollte mehr darüber stehen ... oder zumindest in der DP
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat