Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Lernpaket: Experimente mit USB - FT232R USB UART (https://www.delphipraxis.net/146238-lernpaket-experimente-mit-usb-ft232r-usb-uart.html)

mynamenixname 16. Jan 2010 11:40


Lernpaket: Experimente mit USB - FT232R USB UART
 
Hallo,
ich versuche zurzeit aus dem Franzis Lernpaket "Experimente mit USB" die in Visual Basic geschriebenen Beispielprogramme in Delphi nachzubauen, um die entsprechenden Funktionen selber nutzen zu können.
Es ist mir bereits gelungen mit Hilfe der "D2XXUnit.pas" einen Port zu öffnen und einen Ausgang zu schalten. Nun möchte ich deinen Eingang abfragen, woran ich leider scheitere.
Die Anleitung des Lernpaketes sagt folgendes dazu:
Zitat:

Für das siebte Beispiel ist der Quellcode in der Datei BeispielVBP im Verzeichnis
Bsp_7 einsehbar. Die folgenden Routinen werden aufgerufen, wenn der Schalter
Signale abfragen zur Programmlaufzeit im VB-Formular betätigt wird.

Code:
Private Sub bt_Eingang_abfragen_Click()
.
.
IF FT_GetModemStatus(lngHandle, ModemStatus) <> FT_OK Then
LoggerList.AddItem "Fehler bei Aufruf: FT_GetModemStatus"
Else
Me.Cb_cts.Value = (ModemStatus And &H10) / &H10
Me.cb_dsr.Value = (ModemStatus And &H20) / &H20
Me.cb_ri.Value = (ModemStatus And &H40) / &H40
Me.Cb_dcd.Value = (ModemStatus And &H80) / &H80
End If
.
.
End Sub
Der Funktionsaufruf FT_GetModemStatus zeigt den Zustand der jeweiligen Signalleitungen
im zurückgegebenen Wert ModemStatus in einzelnen Bits an. Diese müssen
abgefragt und einzeln weiter verarbeitet werden:

DCD RI DSR CTS X X X X = Modemstatus, die letzten 8 Bits
D7 D6 D5 D4 D0 = Datenbits
0 0 0 1 0 0 0 0 = Maske: &H10 (= HEX10)

Als Beispiel schauen wir uns die Verarbeitung von CTS an. CTS wird im Datenbit
D4 angezeigt. Mit (ModemStatus And &H10) wird das Datenbit D4 im ModemStatus
mit dem Datenbit D4 in der Maske &H10 logisch mit UND (AND) verknüpft.
Bei einer UND-Verknüpfung müssen beide Bits einen Wert von 1 besitzen, damit
das Ergebnis eine 1, bzw. ungleich 0 ist. Ist CTS 0, bleibt das Ergebnis 0 und das
Kontrollkäschen Cb_cts ist deaktiviert.
CTS = 0:
0 = CTS = 0
0 0 0 1 0 0 0 0 =MaskeHEX10
0 0 0 0 0 0 0 0 = Ergebnis = 0

CTS = 1:
1 = CTS = 1
0 0 0 1 0 0 0 0 =MaskeHEX10
0 0 0 1 0 0 0 0 = Ergebnis = Hex 10, bzw. dezimal 16

Nur wenn CTS eine 1 besitzt, erhält man in diesem Fall ein Ergebnis von 1. Das
Ergebnis aus (ModemStatus And &H10) würde in diesem Fall die Zahl 16
(= Hex10) sein. Damit das Ergebnis gleich alsWert 1 beim Kontrollkästchen Cb_cts
verwendet werden kann, muss noch durch die Maske &H10 geteilt werden.
Die weiteren Signale DCD, RI und DSR werden entsprechend der Position des Bits
im ModemStatus mit &H80, &H40 und &H20 maskiert.
Um den Eingang nun mit Delphi abzufragen habe ich in der "D2XXUnit.pas" nach FT_GetModemStatus gesucht und folgende Funktion gefunden:
Delphi-Quellcode:
function FT_GetModemStatus(ftHandle:Dword; ModemStatus:Pointer):FT_Result; stdcall; External FT_DLL_Name name 'FT_GetModemStatus';
Delphi-Quellcode:
Function Get_USB_Device_ModemStatus : FT_Result;
Begin
Result := FT_GetModemStatus(FT_Handle,@FT_Modem_Status);
If Result <> FT_OK then FT_Error_Report('FT_GetModemStatus',Result);
End;
Leider bekomme ich es einfach nicht hin diese Funktion zu nutzen.
Führe ich sie einfach aus, ergibt sie, egal ob es einen Signal gibt oder nicht, 0.

Wie kann ich die Funktion sinnvoll nutzen?

Vielen Dank für eure Mühe
mynamenixname

Alloc 16. Jan 2010 12:49

Re: Lernpaket: Experimente mit USB - FT232R USB UART
 
Hi,

Zitat:

Zitat von mynamenixname
Delphi-Quellcode:
function FT_GetModemStatus(ftHandle:Dword; ModemStatus:Pointer):FT_Result; stdcall; External FT_DLL_Name name 'FT_GetModemStatus';
Delphi-Quellcode:
Function Get_USB_Device_ModemStatus : FT_Result;
Begin
Result := FT_GetModemStatus(FT_Handle,@FT_Modem_Status);
If Result <> FT_OK then FT_Error_Report('FT_GetModemStatus',Result);
End;
Leider bekomme ich es einfach nicht hin diese Funktion zu nutzen.
Führe ich sie einfach aus, ergibt sie, egal ob es einen Signal gibt oder nicht, 0.

welche der beiden Funktionen hast du denn probiert? Die erste ist ja die "echte" aus der DLL von FTDI, die zweite ein Wrapper in der D2XXUnit (die durchaus schon etwas merkwürdig geschrieben ist ;) ). Wenn du es nur mit letzterer Versucht hast: Ein Rückgabewert von 0 bedeutet nur, dass der Aufruf erfolgreich war. Das ist also gut. Den eigentlichen Wert speichert die Methode in der Variablen FT_Modem_Status in der D2XXUnit, den du dann auslesen kannst.

Grüße,
Chris

mynamenixname 16. Jan 2010 17:02

Re: Lernpaket: Experimente mit USB - FT232R USB UART
 
cool, danke (ich hatte die 2. Funktion genutzt, aber den wert nicht richtig abgefragt)

Dickaa 16. Feb 2010 19:39

Re: Lernpaket: Experimente mit USB - FT232R USB UART
 
Hallo Leute,
Ich weiß das hier ist eigentlich ein Delphi-Forum aber vielleicht kann mir dennoch jemand helfen.
Ich möchte das hier besprochene Experimentierset unter Java betreiben könnte es alternativ aber auch mit Delphi machen.
(Delphi hab ich in der Schule gelernt / Java jetzt im Studium)
Nun wollte ich mal wissen ob jemand weiß wo die Bibliotheken leichter einzu benden sind bzw. ob es da ein auf das Experiment zugeschnittenes Tutorial oder so gibt da ich weder in Delphi noch in Java mit Dll´s gearbeitet habe.

Danke für eure Hilfe!
Fabian

markusj 16. Feb 2010 21:32

Re: Lernpaket: Experimente mit USB - FT232R USB UART
 
Ich habe vor längerer Zeit mal mit den FT232 und der DLL unter Delphi experimentiert, möchte hier aber etwas zu Java + FT232 sagen:
Du wirst das wohl so vergessen können, um mit Java die Hardware direkt ansprechen zu können, außer du bemühst das JNI (Java Native Interface) und evtl. noch C/Delphi um die DLL zu wrappen.
Es gibt wohl bereits ein Projekt mit diesem Ziel, https://jd2xx.dev.java.net/ - Wie weit das fortgeschritten ist, kann ich aber nicht beurteilen.

mfG
Markus

Dickaa 16. Feb 2010 22:10

Re: Lernpaket: Experimente mit USB - FT232R USB UART
 
OK Danke!!!
Dann werd ich doch wohl eher bei Delphi bleiben.
Hab das Projekt schon Teilweise mit Hilfe des Com-Ports verwirklicht - über USB ist es aber vielseitiger.
Werd mich dan mal mit DLL´s in Delphi beschäftigen!!

Alloc 17. Feb 2010 17:56

Re: Lernpaket: Experimente mit USB - FT232R USB UART
 
Zitat:

Zitat von markusj
Es gibt wohl bereits ein Projekt mit diesem Ziel, https://jd2xx.dev.java.net/ - Wie weit das fortgeschritten ist, kann ich aber nicht beurteilen.

Ist eigentlich genauso weit, wie die nativen FTD2XX sind ;)
Der Wrapper ist in einem größeren Projekt im Einsatz, da klappt das wunderbär (zumindest mit Windows + Linux) =)

Grüße,
Chris

hathor 8. Okt 2010 19:32

AW: Lernpaket: Experimente mit USB - FT232R USB UART
 
Der Thread ist zwar etwas alt, aber weil ich mir gerade einige USB-I2C-Wandler (Devantech USB zu I2C Interface Modul) gekauft habe, suchte ich nach DELPHI-Software und andere Infos (FT232R USB UART).

http://www.ftdichip.com/Products/FT232R.htm
http://code.google.com/p/ftdiclass/downloads/list
http://code.google.com/p/ftdiclass/d...-08%20v0.2.zip
http://code.google.com/p/ftdiclass/d...-08%20v0.2.zip
http://www.ftdichip.com/Support/Docu...R/USB232R1.zip
http://www.ftdichip.com/Drivers/VCP.htm


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 Uhr.

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