AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Kommunikation mit virtuellem ComPort?
Thema durchsuchen
Ansicht
Themen-Optionen

Kommunikation mit virtuellem ComPort?

Ein Thema von HorstBS · begonnen am 12. Jan 2006 · letzter Beitrag vom 17. Jan 2006
Antwort Antwort
Seite 1 von 3  1 23      
HorstBS

Registriert seit: 10. Jan 2006
21 Beiträge
 
#1

Kommunikation mit virtuellem ComPort?

  Alt 12. Jan 2006, 10:04
Hallo,
ich versuche nun schon seit einiger Zeit verzweifelt auf ein externes Geraet zuzugreifen, was ueber den USB Port mit meinem PC verbunden ist. Es handelt sich um einen USB Analog Digital Wandler.
Mitlerweile bin ich schon so weit und weiß, dass der Wandler sich ueber einen virtuellen ComPort bei meinem PC anmeldet. (bzw. kann ich es nur vermuten, da mir weder ein solcher Port angezeigt wird, noch das in der Anleitung genauer darauf eingegangen wird).

Ich moechte ein Delphi Programm schreiben, dass sich mit dem Wandler verbindet, ihm Befehle sendet und die Antworten empfaengt. Das ganze funktioniert sogar schon bei einem normalen Com Port nur leider nicht bei diesem virtuellen. Bei dem AD-Wandler lag auch ein C++ Programm bei, welches genau dies schafft, was mein Programm schaffen soll (verbinden,kommunizieren). Allerdings verstehe ich mit viel von C++. Das Programm verbindet sich mit 'ELV USB-AD-Wandler'.

Wenn ich das bei Delphi versuche
Delphi-Quellcode:
ComHandle := CreateFile(pchar(ELV USB-AD-Wandler), GENERIC_READ or GENERIC_WRITE,
                        0, nil, OPEN_EXISTING, 0, 0);
passiert jedoch nichts.

Kennt sich jemand mit dem Thema aus? Es muss doch eine Moeglichkeit geben mit diesem Ding zu kommunizieren?!

MfG HorstBS
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Kommunikation mit virtuellem ComPort?

  Alt 12. Jan 2006, 10:51
Hi,
was heißt denn es passiert nichts? Wie sieht denn dein Handle aus? Negativ, Null oder Positiv? Am besten vorher mit Null initieren und dann schauen ob es sich geändert hat.
Ansonsten wäre es noch schön, wenn du genauer beschreiben könntest, was dein Problem ist. Ich meine jetzt was genau du getan hast und welche Art von Fehler du bekommen hast. Oder poste die Stellen C-Code die du nicht verstehst, auch da kann man dir dann sicherlich leichter helfen

Gruß Der Unwissende
  Mit Zitat antworten Zitat
HorstBS

Registriert seit: 10. Jan 2006
21 Beiträge
 
#3

Re: Kommunikation mit virtuellem ComPort?

  Alt 12. Jan 2006, 11:16
Hi, also ich versuch mal meinen Code hier auszugeben damit man ungefaehr nachvollziehen kann was ich bisher gemacht hab.

const comport = 'ELV USB-AD-Wandler';
Delphi-Quellcode:
procedure TForm1.VerbindenClick(Sender: TObject);
  var DCB : TDCB;
  var TimeOut : TCommTimeouts;
begin
  connect:=false;
  i:=1;
  while (ComHandle <= 0) and (i < 10) do
  begin
    ComHandle := CreateFile(pchar(comport), GENERIC_READ or GENERIC_WRITE,
                            0, nil, OPEN_EXISTING, 0, 0);
    inc(i);
  end;

  if (i > 10) then
  begin
    memo1.lines.add('Verbindung fehlgeschlagen');
    i:=0;
  end;

  if (ComHandle > 0) then
  begin
    memo1.lines.add('Verbindung hergestellt');
    memo1.Lines.add(inttostr(ComHandle));
    connect:=true;

    DCB.DCBlength := SizeOf(DCB);
    DCB.ByteSize := 8;
    DCB.Parity := NoParity;
    DCB.StopBits := ONESTOPBIT;
    DCB.BaudRate := 38400;
    DCB.Flags := 5123; { Wenn 2 Pins belegt sind }
    DCB.EofChar := #0;
    DCB.ErrorChar := #0;
    DCB.EvtChar := #0;
    DCB.XoffChar := #0;
    DCB.XoffLim := 0;
    DCB.XonChar := #0;
    DCB.XonLim := 0;
    SetCommState(ComHandle, DCB);
    GetCommTimeOuts(ComHandle, TimeOut);

    TimeOut.ReadIntervalTimeOut := 100;
    TimeOut.ReadTotalTimeoutMultiplier := 0;
    TimeOut.ReadTotalTimeoutConstant := 250;

    TimeOut.WriteTotalTimeoutMultiplier := 0;
    TimeOut.WriteTotalTimeoutConstant := 200;
    SetCommTimeouts(ComHandle, TimeOut);
  end;
end;
So versuche ich Kontakt zum ComPort bzw. zu dem AD-Wandler aufzubauen.
Mein PC selber hat zwei ComPorts: Com1 und Com3.
Wenn ich diese ansteuer (also comport:='com1';)
erhalte ich als Antwort
Zitat:
Verbindung hergestellt
96
und bei com3:
Zitat:
Verbindung hergestellt
112
Wenn ich jetzt irgendwelche anderen Ports angebe zb. comport:='com5'; , dann erhalte ich folgende Meldung:
Zitat:
Verbindung hergestellt
4294967295
Also eine Art Fehlermeldung. Und eben di erhalte ich auch wenn ich verscuhe 'ELV USB-AD-Wandler' anzusprechen.

Ansonste versuche ich noch Informationen an das Geraet zu senden mit folgendem Code:
Delphi-Quellcode:
procedure TForm1.SendenClick(Sender: TObject);
  var send : Integer;
  var text : String;
begin

  if (connect) then
  begin
    text:= chr(50); //ASCII "1"
    send := FileWrite(ComHandle, Text[1], Length(Text));

    //Fehlerueberpruefung
    if (send <> Length(Text)) then memo1.lines.add('Senden fehlgeschlagen')
    else memo1.lines.add('Senden OK');
    form1.Antwort.Caption:='"'+inttostr(send)+'" und '+inttostr(length(Text))+'"';
  end;
end;
Bei Com1 und Com3 bekomme ich "Senden OK" , bei den anderen Eingaben erhalte ich als Antwort "Senden fehlgeschlagen", wobei send=-1 und length(Text)=1 sind.

Ich hab echt kein Plan wie ich auf das Ding zugreifen soll und von dem C++ Programm versteh ich wie gesagt nicht viel.. Da es aus mehreren Dateien besteht die alle aufeinander zureuckgreifen ist es auch schwer irgendwas zurueck zuerfolgen oder irgendeinen Code zu posten.
Hoffe meine Angaben stellen das Problem ein bisschen besser dar.
MfG HorstBS
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: Kommunikation mit virtuellem ComPort?

  Alt 12. Jan 2006, 11:17
Wo hast du denn nach dem virtuellen COM Port Asusschau gehalten?
Im Geraetemanager unter "Anschlüsse (COM und LPT)" sollte er auftauchen. Er sollte verschwinden sobald man das Geraet abzieht.

COM3 duerfte der UAD 8 sein.
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#5

Re: Kommunikation mit virtuellem ComPort?

  Alt 12. Jan 2006, 11:28
Und für den Zugriff auf Com-Ports (visrtuell odern nicht) gibt es fertige Komponenten, ich nutze zum Beispiel die Lib CPort CportLib


mfg

DerDan
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
HorstBS

Registriert seit: 10. Jan 2006
21 Beiträge
 
#6

Re: Kommunikation mit virtuellem ComPort?

  Alt 12. Jan 2006, 11:41
Hallo, die Idee hatte ich auch schon allerdings stehen dort nur 2 Geraete:
Druckeranschluss (LPT1) und Kommunikationsanschluss (Com1). Keiner der beiden verschwindet sobald ich das Kabel entferne.
Die Vermutung das Com3 der virtuelle Port ist liegt wohl nahe aber kann ich da sicher sein?
Jemand meinte das es sich dabei nur um einen Modemanschluß handelt.
Außerdem muesste ich doch eine Antwort erhalten, sobald ich etwas schicke oder?

Meine Empfangs Funktion sieht so aus:
Delphi-Quellcode:
procedure TForm1.readbufClick(Sender: TObject);
VAR
  anzahl : integer;
  buf : string;
BEGIN
  anzahl := 100;
  SetLength(buf, Anzahl);
  If anzahl > 0 then
  begin
    FileRead(ComHandle, buf, anzahl);
    form1.Antwort.Caption:='"'+buf+'"';
    form1.antwort.Update;
  end
  else
    form1.Antwort.Caption:='fehlgeschlagen';
END;
Vielleicht liegt da der Fehler??

Ich versuche es nochmal mit com3.
MfG HorstBS
  Mit Zitat antworten Zitat
HorstBS

Registriert seit: 10. Jan 2006
21 Beiträge
 
#7

Re: Kommunikation mit virtuellem ComPort?

  Alt 12. Jan 2006, 11:54
Mit den Komponenten hab ichs schon versucht aber die bringen mich auch nicht weiter..ich kann mich auch nur mit Com1 oder Com3 verbinden. Und wenn ich zb sachen an Com3 sende dann passiert auch nichts. Die examples die dabei sind kann man vergessen. Hab auch schon andre ausprobiert damit hatte ich genauso wenig Erfolg.
  Mit Zitat antworten Zitat
HorstBS

Registriert seit: 10. Jan 2006
21 Beiträge
 
#8

Re: Kommunikation mit virtuellem ComPort?

  Alt 12. Jan 2006, 12:07
Ich hab nochmal nen bisschenmit den Komponenten rumprobiert und bin darauf gestoßen das com3 doch der Modemanschluß ist. Das steht zumindest da in der Taskleite wenn ich ne Verbindung hab (Also von Windows aus). Also bin ich soweit wie vorher .. :(
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#9

Re: Kommunikation mit virtuellem ComPort?

  Alt 12. Jan 2006, 12:15
So, erstmal zu Com 1 und 3, wieviele RS232 Schnittstellen hat denn dein Mainboard? (sorry falls du das schon beantwortet haben solltest, hab es dann nur nicht gelesen). Wenn es nur 1 gibt, müsste die andere eigentlich virtuell sein.
Dann wäre die andere Frage, was lag denn genau dem Board bei? Die Anleitung die du gepostet hast ist zwar ganz nett, aber weder ein SDK noch irgendwas was weiterhilft.
Wenn ein Programm beilag (laut Anleitung der Fall), dann schau einfach mal bei Sysinternals.com nach einer Komponente (weiß gerade nicht genau wie die heißt), mit der du die RS232-Schnittstellen belauschen kannst. Die richten sich da sehr Systemnah als virtueller Comport ein und schneiden alles mit. Erst dieses Programm starten und mit deinem Rechner (lokal) verbinden, prüfen dass auf allen Ports gelockt wird (Com 1 + 3) und dann das mitgelieferte Programm von ELV starten. Wenn es dann etwas über einen virtuellen Comport sendet, sollte das auch von Sysinternals erkannt und geloggt werden. Da siehst du dann schonmal was sie senden und über welchen Port.

An sich funktionieren die virtuellen Comport wirklich sehr analog zu den Realen. Hab da einen mit RJ45-Buchse, der hat eigentlich ohne Probleme funktioniert.

Wenn dass alles nicht hilft, wäre es wie gesagt schön, wenn du ein Teil des SDK oder so posten könntest. Die C-Beispielprogramme könntest du auch einfach als Verzeichnis packen und mit der Attachment-Funktion anhängen.

Gruß Der Unwissende

PS:
Ok, das mit dem Comport hat sich gerade geklärt. Hast du denn die USB-Treiber installiert? Und wird irgendwas von Windows installiert, sobald du den AD-Wandler ansteckst?
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#10

Re: Kommunikation mit virtuellem ComPort?

  Alt 12. Jan 2006, 12:41
Koenntest du mal erzahlen was im Geraetemanager an COM Ports aufgefuehrt ist?
Insbesondere dabei den UAD 8 an- und abstecken.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 01:16 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