Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
Delphi 2007 Professional
|
Re: RS232
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.
|