![]() |
Wir kann ich die COM1 unter Delphi nutzen?
Hallo Alle!
Ich möchte gern unter Delphi die COM1 benutzen. Ich hatte unter Basic dafür ein kleines Programm
Delphi-Quellcode:
Wie kann ich dieses kleine Programm nach Delphi portieren?
OPEN "COM1: 9600,N,8,DSO" FOR OUTPUT AD #1
PRINT#! "Hallo Welt!" CLOSE #1 |
Re: Wir kann ich die COM1 unter Delphi nutzen?
also .. ich hab mir da folgende Codeschnipsel zusammengesucht
Es funtzt alles aber da der Code recht "alt" ist und ich damals noch weniger über Delphi wusste kann es gut sein, daß er (der Code) nicht optimal ist .... Verbindung aufbauen:
Delphi-Quellcode:
Verbindung schließen:Function 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; //************** Com1 setzen: ***************************************** // READ THE SERIAL PORT CONFIGURATION : 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; // WRITE SERIAL PORT CONFIGURATION : b_fsuccess := SetcommState( Handle, Dcb ); If b_fsuccess = False Then begin Result := False; // MessageDlg( 'WRITE SERIAL PORT CONFIGURATION : FAIL', 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; // 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(Handle,TCOM_com); //----------------------------------- // SET THE SIZE OF THE INPUT AND OUTPUT BUFFER : //b_fsuccess := SetupComm( Handle_Com, 1024, 1000 ); b_fsuccess := SetupComm( Handle, 2000, 2000 ); //-------------------------------------------- If b_fsuccess = False Then begin Result := False; // MessageDlg( 'SET THE SIZE OF THE INPUT AND OUTPUT BUFFER : FAIL', MtError, [MbOK], 0 ); end; {************** Com3 Konfiguration lesen:******************************} IF not GetcommState(Handle, DCB) then begin Result := False; // MessageDlg('read serial Port configuration: Fail',mtError,[mbOK],0); end; //********************************************************************* end;
Delphi-Quellcode:
Senden:
CloseHandle(handle);
Delphi-Quellcode:
empfangen:
Function Com_Senden (Handle:Cardinal; sendezeichen :string):Boolean;
Var // SchreibeVar's Text : string; I,Laenge : integer; Zeichen : char; State : boolean; writtenBytes : dword; Begin Result := True; Text := sendezeichen+CHR(013); Laenge := length(Text); For I:=1 to Laenge do begin Zeichen:=Text[I]; state:= writefile(Handle,Zeichen,1, writtenBytes ,nil); IF( not state )then begin // Hier kommt fehlermeldung Result := False end; end; end;
Delphi-Quellcode:
EDIT: für die meisten Optionen beim verbindungsaufbau gibbet übrigens auch Constanten (z.b. CBR_4800)
Function Com_Empfangen (handle:THandle; var empangezeichen:string):Boolean; Overload;
var // LeseVar's success : boolean; Empfangene_Zeichen : array[0..50] of char; len : dword; Text : string; I : integer; begin Text := ''; success := readfile(Handle,Empfangene_Zeichen,30,LEN,nil); // Werte Empfangen If success then begin for i := 0 to (len-1) do begin Text:=Text+Empfangene_Zeichen[i]; end; empangezeichen := Text; Result := True; end else begin Result := False; // Hier kommt fehlermeldung end; end; |
Re: Wir kann ich die COM1 unter Delphi nutzen?
Vielen Dank, TeronG
Wie eröffne ich das ganze? so:
Delphi-Quellcode:
Com_VerbindungStart(1,9600,8,0,1);
|
Re: Wir kann ich die COM1 unter Delphi nutzen?
Für COM1 usw. ist immer noch AsyncProfessional erste Wahl. Würde da keinen zusammengestrickten eigenen Code verwenden ! Die serielle Schnittstelle hat dafür einfach zu viele Parameter und Eigenheiten.
|
Re: Wir kann ich die COM1 unter Delphi nutzen?
Zitat:
"zusammengestrickten " ?? pähh :???: :P |
Re: Wir kann ich die COM1 unter Delphi nutzen?
Zitat:
|
Re: Wir kann ich die COM1 unter Delphi nutzen?
Zitat:
![]() ![]() ![]() ![]() |
Re: Wir kann ich die COM1 unter Delphi nutzen?
Zitat:
|
Re: Wir kann ich die COM1 unter Delphi nutzen?
Zitat:
|
Re: Wir kann ich die COM1 unter Delphi nutzen?
und wie kann man über ein am Com-Port angeschlossenes Modem wählen??
EDIT: und die Verbindungen annehmen?? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz