Registriert seit: 13. Dez 2005
153 Beiträge
|
Re: Rechner über RS232 herunterfahren lassen
5. Okt 2007, 09:58
Danke für deinen Hinweis. Aber geht das auch anders? Das ich beim öffnen der Schnittstelle einfach RTS und DTR auf High setze?
Hier mein Quellcode beim öffnen der Schnittstelle:
Delphi-Quellcode:
Function TForm1.Com_VerbindungStart (comport:Byte; baudrate:Word; Byte,Parity,StopBits:Byte; var Handle :THandle):Boolean;
Var
// Variablen für das öffnen der Com-Verbindug
port : pansichar;
b_fsuccess, b_RSetMask : Boolean;
Dcb : TDCB;
TCOM_com : TCOMMTIMEOUTS;
begin
case comport of
1: port := ' com1'; 2: port := ' com2'; 3: port := ' com3';
4: port := ' com4'; 5: port := ' com5'; 6: port := ' com6';
7: port := ' com7'; 8: port := ' com8'; 9: port := ' com9';
end;
Result := True;
//************** Com-Schnittstellen konfigurieren und öffnen *******************
//******************************************************************************
Handle:=createfile(port,GENERIC_READ or GENERIC_WRITE,0, nil,OPEN_EXISTING, 0, 0);
IF Handle=INVALID_HANDLE_VALUE then begin
Result := False;
//Application.Terminate;
MessageDlg(' Port "'+port+' " nicht gefunden.', mtWarning, [mbOK], 0);
end;
//************** Com setzen: *****************************************
// Lesen der Schnittstellenparameter:
b_fsuccess := GetcommState( Handle,dcb);
//-------------------------------------
dcb.BaudRate := baudrate;
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;
//Schreiben der Schnittstellenparameter:
b_fsuccess := SetcommState( Handle, Dcb );
If b_fsuccess = False Then begin
Result := False;
MessageDlg( ' Fehler beim schreiben der Schnittstellenparameter', MtError, [MbOk], 0 );
end;
// SPECIFIES A SET OF EVENTS TO BE MONITORED :
b_RSetMask := SetCommMask( Handle, EV_RXCHAR );
//-------------------------------------------
If b_RSetMask = False Then begin
Result := False;
// MessageDlg( 'SPECIFIES A SET OF EVENTS TO BE MONITORED : FAIL', MtError, [MbOk], 0 );
end;
// Festlegen der TimeOuts für die Kommunikation
TCOM_com.ReadIntervalTimeOut := 500;
TCOM_com.ReadTotalTimeoutMultiplier := 10; //MAXDWORD;
TCOM_com.ReadtotalTimeOutConstant := 100;
//--------------------------------------
// Setzten des TimeOuts für die Kommunikation
SetCommTimeouts( Handle,TCOM_com);
//-----------------------------------
// Größe von INPUT- und OUTPUT-BUFFER festlegen:
b_fsuccess := SetupComm( Handle, 2000, 2000 );
//--------------------------------------------
If b_fsuccess = False Then begin
Result := False;
MessageDlg( ' Festlegen der Größe für Input- und Output-Buffer ist fehlgeschlagen', MtError, [MbOK], 0 );
end;
end;
|
|
Zitat
|