AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme USB->Serial Converter

Ein Thema von thomasdrewermann · begonnen am 15. Jun 2002 · letzter Beitrag vom 15. Jun 2002
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von thomasdrewermann
thomasdrewermann

Registriert seit: 8. Jun 2002
Ort: Herne
575 Beiträge
 
Delphi 3 Professional
 
#11
  Alt 15. Jun 2002, 10:24
Wenn das geht...
Ist ja klasse
Aber wenn nicht

Aber wie muss ich denn jetzt Portname deklarieren?
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#12
  Alt 15. Jun 2002, 10:25
portname ist ein String.
Ich habe nur einen sehr kleinen Ausschnitt von meinem Code gepostet. Eine zusätzliche DLL sagt mir aber, dass diese direkt auf den Port zugreift. Wenn du willst, kann ich auch die komplette Unit hier posten (ca. 170 Zeilen, von denen ich unnötiges entfernen kann).
  Mit Zitat antworten Zitat
Benutzerbild von thomasdrewermann
thomasdrewermann

Registriert seit: 8. Jun 2002
Ort: Herne
575 Beiträge
 
Delphi 3 Professional
 
#13
  Alt 15. Jun 2002, 10:29
Die Unit greift ja nur auf die DLL zu...
In der sind alle DLL-Funktionen deklariert, damit man nicht in jedem Prog die DLL-Funktionen neu deklarieren muss
  Mit Zitat antworten Zitat
Benutzerbild von thomasdrewermann
thomasdrewermann

Registriert seit: 8. Jun 2002
Ort: Herne
575 Beiträge
 
Delphi 3 Professional
 
#14
  Alt 15. Jun 2002, 10:32
Der Compiler mekert über das FPortHandle: "Undefinierter Bezeichner...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15
  Alt 15. Jun 2002, 10:35
Code:
FPortHandle: THandle;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von thomasdrewermann
thomasdrewermann

Registriert seit: 8. Jun 2002
Ort: Herne
575 Beiträge
 
Delphi 3 Professional
 
#16
  Alt 15. Jun 2002, 10:35
DANKE
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#17
  Alt 15. Jun 2002, 10:36
Das ist auch nicht der komplette Code, den ich oben gepostet habe.

Code:
unit COMPort;
interface
uses Windows, SysUtils, Classes;
type
  TComPortNumber = (ComNone, Com1, Com2, Com3, Com4, Com5, Com6, Com7); // ggf. erweitern
  TComPort = class(TObject)
  private
    FPort: TComPortNumber;
    FPortHandle: THandle;
    Fdcb: TDCB;
    FRaiseOpenException: Boolean;
    procedure SetPort(Value: TComPortNumber);
    procedure SetDCB(const Value: TDCB);
  protected
    function GetHandle: THandle; virtual;
    procedure ClosePort; virtual;
  public
    constructor Create;
    destructor Destroy; override;
    function Write(const buf; size: Cardinal): Cardinal;
    function Read(var buf; size: Cardinal): Cardinal;
    function ClearAll: Boolean; // clears the output and input buffer
    function ClearInput: Boolean; // clears the input buffer
    function ClearOutput: Boolean; // clears the output buffer
    property Port: TComPortNumber read FPort write SetPort;
    property DCB: TDCB read Fdcb write SetDCB;
    property Handle: THandle read GetHandle;
    property RaiseOpenException: Boolean read FRaiseOpenException write FRaiseOpenException;
  end;
const
 // TDCB.Flags
  fBinary          = $0001;  // binary mode, no EOF check
  fParity          = $0002;
  fDtrControlEnable = $0010;  // DTR flow control type
  fRtsControlEnable = $1000;  // RTS flow control enable
implementation
constructor TComPort.Create;
begin
  inherited;
  FPort := ComNone;
  FPortHandle := 0;
  FillChar(Fdcb, SizeOf(Fdcb), 0);
  FRaiseOpenException := False;
end;
destructor TComPort.Destroy;
begin
  ClosePort;
  inherited;
end;
procedure TComPort.ClosePort;
begin
  if FPortHandle <> 0 then begin
    // Port schließen
     CloseHandle(FPortHandle);
     FPortHandle := 0;
  end;
end;
function TComPort.GetHandle: THandle;
var
  commtimeouts: TCommTimeouts;
  portname: String;
begin
  case FPort of
    ComNone: begin
      ClosePort;
      Result := 0;
    end;
    else begin // case else
      if FPortHandle <> 0 then begin
         Result := FPortHandle;
         exit;
      end;
      portname := '\\.\COM' + IntToStr(Integer(FPort));
      FPortHandle := CreateFile(PChar(portname), // name of COM device to open
        GENERIC_READ or GENERIC_WRITE, // read-write access
        0, nil,                       // not used
        OPEN_EXISTING,                // required for tape devices
        0, 0);                        // not used
      Result := FPortHandle;
      if Result = INVALID_HANDLE_VALUE then Result := 0;
      if (FPortHandle <> 0) then begin
        // Device-Parameter setzen
         Fdcb.DCBlength := SizeOf(Fdcb);
         GetCommState(FPortHandle, Fdcb);
          Fdcb.Flags := dcb.Flags and not (fDtrControlEnable or fRtsControlEnable) or fBinary;
          Fdcb.BaudRate := CBR_19200; // baud
          Fdcb.ByteSize := 8;
          Fdcb.Parity := NOPARITY;
          Fdcb.StopBits := ONESTOPBIT;
         SetCommState(FPortHandle, Fdcb);
        // Timeout für ReadFile() setzen
          commtimeouts.ReadIntervalTimeout := 0;
          commtimeouts.ReadTotalTimeoutMultiplier := 5;
          commtimeouts.ReadTotalTimeoutConstant := 100;
         SetCommTimeouts(FPortHandle, commtimeouts);
      end;
      if (Result = 0) and (FRaiseOpenException) then RaiseLastWin32Error;
    end; // case else
  end; // case
end;
procedure TComPort.SetPort(Value: TComPortNumber);
begin
  if Value = FPort then exit;
  FPort := Value;
  ClosePort;
  GetHandle; // Handle erzeugen
end;
procedure TComPort.SetDCB(const Value: TDCB);
var h: THandle;
begin
  h := Handle;
  if h = 0 then exit;
  if SetCommState(h, Value) then begin
     if not GetCommState(h, Fdcb) then Move(Value, Fdcb, SizeOf(Fdcb));
  end;
end;
function TComPort.Write(const buf; size: Cardinal): Cardinal;
begin
  Result := 0;
  if size = 0 then exit;
  if not WriteFile(Handle, buf, size, Result, nil) then Result := -1 * Result;
end;
function TComPort.Read(var buf; size: Cardinal): Cardinal;
begin
  Result := 0;
  if size = 0 then exit;
  if not ReadFile(Handle, buf, size, Result, nil) then Result := -1 * Result;
end;
function TComPort.ClearAll: Boolean; // clears the output and input buffer
begin
  Result := PurgeComm(Handle, PURGE_TXCLEAR or PURGE_RXCLEAR);
end;
function TComPort.ClearInput: Boolean; // clears the input buffer
begin
  Result := PurgeComm(Handle, PURGE_RXCLEAR);
end;
function TComPort.ClearOutput: Boolean; // clears the output buffer
begin
  Result := PurgeComm(Handle, PURGE_TXCLEAR);
end;
end.
  Mit Zitat antworten Zitat
Benutzerbild von thomasdrewermann
thomasdrewermann

Registriert seit: 8. Jun 2002
Ort: Herne
575 Beiträge
 
Delphi 3 Professional
 
#18
  Alt 15. Jun 2002, 10:37
Wie steuer ich jetzt die TXD-LEitung von meinem "Virtuellen"-COM?
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#19
  Alt 15. Jun 2002, 10:44
Schaue dir einmal die TDCB Struktur im PSDK an. Dort müsstest du fündig werden.
Zu setzen der TDCB Struktur:
Code:
// ComPort: TComPort;
var dcb: TDCB;
begin
  dcb := ComPort.DCB;
 // deine Änderungen an der Struktur hier:
  dcb.BaudRate := CBR_2400;

  ComPort.DCB := dcb;
end;
  Mit Zitat antworten Zitat
Benutzerbild von thomasdrewermann
thomasdrewermann

Registriert seit: 8. Jun 2002
Ort: Herne
575 Beiträge
 
Delphi 3 Professional
 
#20
  Alt 15. Jun 2002, 10:49
Irgendwie bin ich immernochnicht schlauer als vorher.
Ich muss die TXD-Leitung seperat ansteuern können.
Ich habe eine Anzege aus der Bochumer U-Bahn hier ligen, und die hat ein sehr merkwürdiges Protokoll: IBIS

Die TXD-Leitung ist immer 1, und so weiter....

Bei meinem Alten Laptop kalppte das alte Prog. auch problemlos, nur an meinem neuen ist kein COM-PORT mehr dran, daher hab ich mir ein USB->Serial converter gekauft.

Nur jetzt lässt sich dieser neue COM-PORT nicht mit meinem alten Prog. ansteuern....


MFG
THOMAS
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 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