Delphi-PRAXiS
Seite 1 von 2  1 2      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:47 Uhr.
Seite 1 von 2  1 2      

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