Einzelnen Beitrag anzeigen

DoktorD

Registriert seit: 13. Dez 2005
153 Beiträge
 
#8

Re: Rechner über RS232 herunterfahren lassen

  Alt 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;
  Mit Zitat antworten Zitat