![]() |
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?? |
Re: Wir kann ich die COM1 unter Delphi nutzen?
Zitat:
Sende ATD0049123456789 an das Modem (statt 123456789 die Rufnummer...) Ich hab das mal vor zig Jahren gemacht, habe aber keinen code mehr davon (defekt auf den backupbandern). |
Re: Wir kann ich die COM1 unter Delphi nutzen?
Eine Alternative ist die Comport Library, die hat zwar weniger Features als AsyncPro,
ist aber wesentlich einfacher anzuwenden. Einfach in Google unter Comport library suchen oder direkt aus ![]() Ich benutze diese Komponenten für mit RS232 (seriell) angeschlossene Waagen und hab damit nur gute Erfahrungen gemacht, nachdem ich vorher auch AsyncPro ausprobiert hatte. Gruß W.H. |
Re: Wir kann ich die COM1 unter Delphi nutzen?
Zitat:
![]() |
Re: Wir kann ich die COM1 unter Delphi nutzen?
Oder die TAPI Komponenten von AsyncProfessional nehmen.
|
Re: Wir kann ich die COM1 unter Delphi nutzen?
Hallo Leutz,
Zitat:
ich votiere auch für die Comport Library. Hat mich noch nie im Stich gelassen und war für etliche Projekte gut. z.B: Teminal mit Synedit zusammen (zum einfärben), div. Geräte Update Manager, Trace Utils und ... ich wollt mal auf die AsyncPro umsteigen, habe es aber nach Anfänglichen Schwierigkeiten gelassen. mfg DerDan |
Re: Wir kann ich die COM1 unter Delphi nutzen?
Das mit dem Modem klappt schon hervorragend. Und wie kann ich jetzt Töne über das Modem schicken, die sich nicht mit den Wahltasten erzeugen lassen?
rollstuhlfahrer PS: Gibts da einen Trick, wie man dem Modem sagen kann, dass der Verbindungsaufbar mit ATDT nicht unbedingt zu einem anderen Modem führt?? |
Re: Wir kann ich die COM1 unter Delphi nutzen?
Zitat:
D - Dial T - Tone Also wähle mit Tonwählverfahren. Somit sind die nachfolgenden Ziffern und + # eindeutig einem Ton zugeordnet. Beim Pulsewählverfahren (atdp) würde entsprechend die Pulse senden. Die Frequenzen der Töne sind definiert, damit die Vermittlung auch entsprechend weiß, wo es hingeht. Du kannst mit einem normalen keine freien Töne erzeugen - Ausnahme: Voice Modems. Diese haben die Möglichkeit vorher hochgeladene bzw. vorgefertigte Samples abzuspielen bzw. auch zu samplen, was der angerufene/Anrufende sagt. Dies überträgt das Modem zum Computer und du kannst dies dann entsprechend auswerten. Es gab früher einige Programme, welche mit einem Voice Modem und dem Rechner einen AB gebaut haben. Von daher mal kundig machen zu dem Standard für die Voice Funktionalität der Modems (sofern vom Modem unterstützt). Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 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