-
Delphi Prob
Hallo zusammen,
ich hätte da ein problem mit delphi (borland d4)
Ich möchte einen USB_IRTransceiver mit Delphi ansprechen um einen asuro fernzusteuern.
Der Transceiver meldet sich als virtuelle ser.Schnittstelle (COM9) an.
Das wär der Code:
Code:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Edit1: TEdit;
ButOpenCOM: TButton;
ButCloseCom: TButton;
ButExit: TButton;
Label1: TLabel;
GroupBox2: TGroupBox;
ButSend: TButton;
procedure ButExitClick(Sender: TObject);
procedure ButOpenCOMClick(Sender: TObject);
procedure ButSendClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
Port: THandle;
implementation
{$R *.DFM}
procedure TForm1.ButExitClick(Sender: TObject);
begin
CloseHandle(Port);
Close;
end;
procedure TForm1.ButOpenCOMClick(Sender: TObject);
begin
Port := CreateFile(PChar('Edit1.Text'),GENERIC_WRITE,0,NIL,OPEN_EXISTING,0,0);
end;
procedure TForm1.ButSendClick(Sender: TObject);
var
befehl: Byte;
Count: DWORD;
begin
befehl := 80;
WriteFile(Port,befehl,1,Count,NIL);
end;
end.
Das Problem: Der USB-IR-T reagiert nicht. MAn sieht weder die beim senden sonst flackernde gelbeLED noch (mit HandyCam) die IR_LED leuchten.
Kann da jemand helfen?
-
Du musst die Parameter der seriellen Schnittstelle doch konfigurieren. Beim ASURO sind das 2400 Baud, 8 Bit, keine Parität, 1 Stoppbit (auch bekannt als 8N1). Ein Codebeispiel das ich auf die schnelle Gefunden habe: http://alexmogurenko.com/blog/progra...delphilazarus/
mfG
Markus
-
So?
Code:
procedure TForm1.ButConfigComClick(Sender: TObject);
var
DCB: TDCB;
begin
GetCommState(Port,DCB);
DCB.BaudRate := 2400;
DCB.ByteSize := 8;
DCB.StopBits := ONESTOPBIT;
DCB.Parity := NOPARITY;
SetCommState(Port,DCB);
end;
vg malte
-
Schaut plausibel aus. Ich habe aber schon Jahre nicht mehr mit Delphi gearbeitet und dabei noch nie eine seriellen Schnittstelle verwendet. Probiere das ganze doch Mal aus, kaputt gehen kann nichts dabei ...
mfG
Markus
-
Das ausprobieren hat ergeben: Will immer noch nicht. Normalerweise blinkt beim Senden eine gelbeLED und man sieht die IRLED mit der Handykammera leuchten.
Hier keins von beidem.
Kennt jemand einen anderen Weg die ser. anzusprechen als über CreateFile+Handle?
vg malte
-
Ich habe bisher immer die TComPort Komponente verwendet. Zu finden z.B. hier: http://sourceforge.net/projects/comport/
Ist wesentlich einfacher als über CreateFile, da man die Events nutzen kann um zum Beispiel auf eingehende Daten zu reagieren.
-
Hallo,
ich schließe mich da Kevin an, habe diese Komponente, allerdings mit Delphi 7, viele Jahre genutzt.
Und habe damit nie Probleme gehabt...
Gruß andré
-
Ich hab grad auf der Seite von arexx folgendes über das FlashTool (das wenn ich das richtig verstanden hab auch den Treiber für die virtuelle Schnittstelle beinhaltet) folgendes gefunden: Das neue ASURO Flash nutzt nicht mehr den VCP Treiber von FTDI, sondern die D2XX Version! Das bedeutet, dass Sie den USB IR Adapter nicht mehr wie einen normalen Comportanschluss benutzten können.
Könnte es daran liegen das das mit dem öffnen via createfile so gar nicht klappt?
vg malte
-
Wird den eine serielle Schnittstelle im Geräte-Manager angezeigt? Wenn ja muss diese eigentlich auch funktionieren. Wie gesagt, mit CreateFile würde ich mich nicht weiter beschäftigen, da die Komponente vieles einfacher macht.
Wenn aber keine Schnittstelle angezeigt wird, nehme ich an das man das ganze via USB anspricht. Wie das dann im Detail funktioniert kann ich leider nicht sagen. Ich habe bisher nur mit dem Microchip USB Framework gearbeitet und dort ist eine dll mit den Funktionen zum ansprechen der USB Schnittstelle enthalten.
edit: Ich hab grade gesehen das die TComPort erst ab Delphi 5 funktionieren soll. Von daher wird es mit dieser wahrscheinlich nicht klappen. Ich habe aber grad nochmal deinen Quelltext angeschaut.
Probier es mal so:
Code:
procedure TForm1.ButOpenCOMClick(Sender: TObject); begin
Port := CreateFile(PChar(Edit1.Text),GENERIC_WRITE,0,NIL,OPEN_EXISTING,0,0);
end;
Die Anführungszeichen bewirken, dass nicht dein eingegebener Text als Name der Schnittstelle genommen wird, sondern eben der String Edit1.Text. Diese Schnittstelle existiert natürlich nicht.
-
Hallo,
@ hagbart: stimmt, danke, ist korrigiert.
Ich würde gerne ohne Komponente auskommen, auch weil das ganze ja eigentlich "nur" beim drücken verschiedener Tasten verschiedene chars senden soll.
Ich vermute es liegt wirklich am Treiber: Für den USB->SER Chip der auf dem IR-Transceiver gibts so wie ich das zurzeit überblicke 2 möglickeiten: VCP (Virt.COM Port) und d2xx (Zugriff usb über ein DLL [??] ) Bisher hatte ich lezteres. Wie werd ich den jetzt los und wo gibts den VCP? wenn ich die alten Treiber über den Gerätemanager deinstalle und den USB-IR-T neu anschließe holt er sich automatisch die alten wieder.
vg malte
Nachtrag: Alternativer Ansatz:
Kann ich mit Delphi so eine Art "virtuelle Eingabe" ins Hyperterminal machen. Also so tun als hätte man eine Tastaturtaste gedrückt? vg M.