Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wir kann ich die COM1 unter Delphi nutzen? (https://www.delphipraxis.net/64741-wir-kann-ich-die-com1-unter-delphi-nutzen.html)

smart 7. Mär 2006 16:29


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:
OPEN "COM1: 9600,N,8,DSO" FOR OUTPUT AD #1
PRINT#! "Hallo Welt!"
CLOSE #1
Wie kann ich dieses kleine Programm nach Delphi portieren?

TeronG 7. Mär 2006 16:43

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:

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;
Verbindung schließen:
Delphi-Quellcode:
CloseHandle(handle);
Senden:
Delphi-Quellcode:
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;
empfangen:
Delphi-Quellcode:
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;
EDIT: für die meisten Optionen beim verbindungsaufbau gibbet übrigens auch Constanten (z.b. CBR_4800)

smart 7. Mär 2006 18:05

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);

Hansa 7. Mär 2006 18:34

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.

TeronG 8. Mär 2006 07:43

Re: Wir kann ich die COM1 unter Delphi nutzen?
 
Zitat:

Zitat von smart
Vielen Dank, TeronG

Wie eröffne ich das ganze? so:
Delphi-Quellcode:
Com_VerbindungStart(1,9600,8,0,1);

Sollte so klappen dir fehlt allerdings noch das Hendl (THandle / Cardinal) damit du das Ding dann wieder identifizieren kannst.

"zusammengestrickten " ?? pähh :???: :P

smart 8. Mär 2006 14:40

Re: Wir kann ich die COM1 unter Delphi nutzen?
 
Zitat:

Zitat von Hansa
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.

Wo bekomme ich das?

Thorben77 8. Mär 2006 14:49

Re: Wir kann ich die COM1 unter Delphi nutzen?
 
Zitat:

Zitat von smart
Wo bekomme ich das?

Benutz doch mal die Foren-Suche nach Hier im Forum suchenAsyncProfessional, dann findest Du diesen Beitrag von Hansa mit diesem Link zu einer Nachricht bei Heise, wo Du wiederum diesen Link findest und der führt Dich zum Ziel :wink: .

TeronG 8. Mär 2006 14:52

Re: Wir kann ich die COM1 unter Delphi nutzen?
 
Zitat:

Zitat von Thorben77
Zitat:

Zitat von smart
Wo bekomme ich das?

Benutz doch mal die Foren-Suche nach Hier im Forum suchenAsyncProfessional, dann findest Du diesen Beitrag von Hansa mit diesem Link zu einer Nachricht bei Heise, wo Du wiederum diesen Link findest und der führt Dich zum Ziel :wink: .

Bist du nebenberuflich Routenplaner? :mrgreen:

Thorben77 8. Mär 2006 14:54

Re: Wir kann ich die COM1 unter Delphi nutzen?
 
Zitat:

Zitat von TeronG
Bist du nebenberuflich Routenplaner? :mrgreen:

Eigentlich nicht, ist aber 'ne nette Idee, die bestimmt Zukunft hat :stupid: .

rollstuhlfahrer 8. Jan 2008 11:20

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??

mashutu 8. Jan 2008 11:40

Re: Wir kann ich die COM1 unter Delphi nutzen?
 
Zitat:

Zitat von rollstuhlfahrer
und wie kann man über ein am Com-Port angeschlossenes Modem wählen??

EDIT: und die Verbindungen annehmen??

Waehlen:

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).

whsd 8. Jan 2008 12:03

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 http://sourceforge.net/projects/comport/ runterladen.
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.

Muetze1 8. Jan 2008 13:30

Re: Wir kann ich die COM1 unter Delphi nutzen?
 
Zitat:

Zitat von rollstuhlfahrer
und wie kann man über ein am Com-Port angeschlossenes Modem wählen??

EDIT: und die Verbindungen annehmen??

Einfach mal nach "Hayes AT Commands" googlen... z.B.

v2afrank 8. Jan 2008 13:47

Re: Wir kann ich die COM1 unter Delphi nutzen?
 
Oder die TAPI Komponenten von AsyncProfessional nehmen.

DerDan 8. Jan 2008 13:48

Re: Wir kann ich die COM1 unter Delphi nutzen?
 
Hallo Leutz,


Zitat:

Zitat von whsd
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 http://sourceforge.net/projects/comport/ runterladen.
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.


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

rollstuhlfahrer 10. Jan 2008 17:27

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??

Muetze1 10. Jan 2008 18:36

Re: Wir kann ich die COM1 unter Delphi nutzen?
 
Zitat:

Zitat von rollstuhlfahrer
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?

AT - Einleitung
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:

Zitat von 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??

Das Modem ist ein MOdularisierer und ein DEModularisierer. Somit versucht eine entsprechende Gegenstelle zu finden, mit der er sich austauschen kann und die Arbeit des anderen entsprechend wieder in Daten zurückwandeln kann. Ein Modem unterhält sich nur mit einem Modem (bzw. eine ISDN Karte emuliert das entsprechend, etc) bzw. mit einem Fax (wenn es denn ein Fax Modem ist). Somit versucht das Modem bei der Anwahl immer erstmal mit dem Gegenüber eine Verbindungsgeschwindigkeit auszuhandeln.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz