Hallo, habe ein USB Gerät mit og. Chip. Im Terminalprogramm sehe ich wie die Daten vom Gerät über FTDI gemeldet werden. Habe einen Rechner mit Win7und programmiere in einer Datenbank unter Access 2003 die Kommunikation mit dem Gerät. Die Einbindung der DLL etc. hat geklappt. Kann das Gerät ansteuern. Der READ funktioniert nur halb: ftstatus = FT_Read(lngHandle, FT_rxbuffer, RxBytes, lngBytesRead) Beispielsweise habe ich 16 Bytes erwartet. Der read Befehl wird ausgeführt und in lngBytesRead steht er hat 16 Bytes gelesen. Aber der FT_rxbuffer bleibt leer. Mit debug funktionen etc. getestet. Der Buffer ist als string deklariert. BaudRate etc. habe ich x-mal geprüft. Könnte es evtl. sein - das ein terminalprogramm die Daten gar nicht abholt. Sondern diese durchgereicht bekommt, und dann der Read falsch wäre? Kann mir jemand helfen? Danke Andi.
:
Verschoben durch User
Poste mal Deinen Quelltext und nicht nur ein Schnipselchen.
Danke für die Reaktion: a) die Funktion (von FTDI) #Public Declare Function FT_Read Lib "FTD2XX.DLL" ( _ ByVal lngHandle As Long, _ ByVal lpszBuffer As String, _ ByVal lngBufferSize As Long, _ ByRef lngBytesReturned As Long) As Long b) der Read Private Sub LESE Dim FT_rxbuffer As String Me!Ergebniss = Me!Ergebniss & vbCrLf & vbCrLf & (" ------------- DATENEMPFANGSMODUS -----------------") inghandle = Me![USB_ANZAHL] flTimedout = False flFatalError = False If FT_GetQueueStatus(lngHandle, RxBytes) <> FT_OK Then ' Anzahl der Bytes in der Warteschlange lesen MsgBox ("Status war fehlerhaft") Else Me!Ergebniss = Me!Ergebniss & vbCrLf & RxBytes & " Bytes in Queue" End If WARTEN: ftstatus = FT_GetStatus(inghandle, FT_RxBytes, FT_TXBYtes, ingevent_get_stat) If ftstatus = FT_OK Then Else If ftstatus = FT_IO_ERROR Then MsgBox ("Fehler 10") End If End If I = I + 1 If I > 20000 Then MsgBox ("Keine Antwort - es wird abgebrochen") Exit Sub End If If FT_RxBytes < 18 Then GoTo WARTEN End If flTimedout = False flFatalError = False lngTotalBytesRead = 0 FT_rxbuffer = "" If FT_RxBytes > 0 Then Do ' FTDI - Buffer auslesen lngBytesRead = 0 ftstatus = FT_Read(lngHandle, FT_rxbuffer, RxBytes, lngBytesRead) If (ftstatus = FT_OK) Or (ftstatus = FT_IO_ERROR) Then If lngBytesRead > 0 Then lngTotalBytesRead = lngTotalBytesRead + lngBytesRead 'Debug.Print "RX1: " & lpszBuffer Else flTimedout = True End If Else flFatalError = True End If Loop Until (lngTotalBytesRead = RxBytes) Or (flTimedout = True) Or (flFatalError = True) If (flTimedout = False) And (flFatalError = False) Then Me!EINGANG = "RX GES: " & FT_rxbuffer Debug.Print "RX GES: " & FT_rxbuffer Me!Ergebniss = Me!Ergebniss & vbCrLf & ("Byte Daten gelesen: " & lngTotalBytesRead) Else MsgBox ("Fehler beim Lesen") End If Else MsgBox ("Keine Daten vorhanden - Bitte prüfen ob Gerätemessung schon abgeschlossen") End If end sub c) das Ergebniss: ------------- DATENEMPFANGSMODUS ----------------- 18 Bytes in Queue Byte Daten gelesen: 18 aber kein Wert im FT-rxbuffer Keine ahnung ob es am Code oder was anders liegt.
Andreas Holzheimer schrieb: > #Public Declare Function FT_Read Lib "FTD2XX.DLL" ( _ > ByVal lngHandle As Long, _ > ByVal lpszBuffer As String, _ > ByVal lngBufferSize As Long, _ > ByRef lngBytesReturned As Long) As Bist Du Dir sicher, daß lpszBuffer korrekt deklariert ist? Mach mal aus ByVal ein ByRef.
sicher bin ich mir ganz und gar nicht ... Aber habe ich gerne mal ausprobiert: ByRef lpszBuffer As string --> Da stürzte mir gleich das Access ab. dann mal mit Any probiert: ByRef lpszBuffer As Any --> Da stürzte mir gleich wieder das Access ab. Habe das dann nochmals in der Literatur geprüft - war schon so OK. Public Declare Function FT_Read Lib "FTD2XX.DLL" ( _ ByVal lngHandle As Long, _ ByVal lpszBuffer As String, _ ByVal lngBufferSize As Long, _ ByRef lngBytesReturned As Long) As Long Aber irgend sowas wird es wohl sein. Außerdem - finde ich super - das R.t.F. gleich so schnell reagiert und Ideen zum Checken gibt. Hat vielleicht irgendwer schon ein VBA Programm unter WIN7 mit diesem beihaltigem Baustein und mit einer READ-Anweisung laufen?
Hallo, habe zwischenzeitlich die ganze Sache auf WinXP gespielt und getestet. Der Befehl verhält sich wie bei WIN7: - Bytes werden gelesen, aber im Buffer steht nix drin. Hat jemand sowas im VBA unter winXP schon gemacht?
Hallo, ich glaub es nicht - Problem ist gelöst! Der Trick für alle, die isch auch 36 Stunden am Stück plagen, ist man muss im VBA die String Variable mit Buffer Size verweben. Lösung bei mir war/ist die Nachfolgende Deklaration: ' IO buffer sizes Public Const FT_In_Buffer_Size = 1024 Public FT_rxbuffer As String * FT_In_Buffer_Size Das war auch nirgends so beschrieben. Danke an Rufus und Team - denn ich hatte das Gefühl, ich war nicht allein. Ciao Andi
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.