Autor Beitrag
Pescoller
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 19.05.09 16:28 
Hallo zusammen,

für den CE Test muß ich meine USB Schnittstelle auf der Geräteseite mit 8kV beschießen was mitunter dazu führt, daß die Kommunikation zum PC abbricht.
Ausstecken und Einstecken des USB Kabels, Neustart des 'Terminal' Programmes lässt den Datenstrom wieder fließen.

Das angeschlossene Gerät verwendet eine FTDI Chip, die 'Terminal' Software die dazugehörige DLL und D2XXUnit.pas

Wie kann ich von der Software aus den USB Port reinitialisieren ohne das Kabel auszustecken?

Die Funktion Reset_USB_Port führt dazu, daß sich das Terminal Programm zwar kompilieren lässt, beim start aber im Hauptprogramm (Application.Initialize) hängen bleibt, ein Next Step im Debugger führt zum Absturz des Programmes.

Ich verwende Delphi 7.

Danke für eure Hilfe!

Gruß
Lukas


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Di 19.05.2009 um 17:28
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Do 21.05.09 11:36 
Mit was für einem Programm beschießt Du es denn genau? Mir fehlt da leider das Mittel, die Ausgangssituation herzustellen.

Aber ich hoffe, dass Dir schon eine solche Abfrage weiterhelfen könnte:
support.microsoft.com/kb/503381/de
eventuell zumindest im Zusammenhang mit Drive.Refresh - oder? Klappt das auch nicht?
Pescoller Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 21.05.09 11:57 
danke für deine Antwort.

ich beschieße die Schnittstelle mit einer Spannungspistole (2kV, 4kV, 8kV - Luft) und bringe damit die Verbindung zum Absturz. Ein und Ausstecken des Kabel führt zu einer Reinitialisierung der betreffenden USB Schnittstelle und genau dies möchte ich automatisch ohne Eingriff des Benutzers von der Terminal Software aus bewerkstelligen.

Im angegebenen Link habe ich gestöbert aber leider nichts brauchbares gefunden.

Lukas
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Do 21.05.09 16:48 
Hi,

user profile iconPescoller hat folgendes geschrieben Zum zitierten Posting springen:

Das angeschlossene Gerät verwendet eine FTDI Chip, die 'Terminal' Software die dazugehörige DLL und D2XXUnit.pas

Wie kann ich von der Software aus den USB Port reinitialisieren ohne das Kabel auszustecken?


In der FTDI-Knowledgebase gibt es eine Beschreibung der "Classic Interface Functions" und dort wiederum eine Funktion namens "FT_ResetDevice":

This function sends a reset command to the device.
FT_STATUS FT_ResetDevice (FT_HANDLE ftHandle)

Parameters
ftHandle Handle of the device.

Return Value
FT_OK if successful, otherwise the return value is an FT error code.

Ob Dir das allerdings weiterhilft, kann ich nicht sagen. Ich befuerchte eher nicht, da ein abgestuerztes Device auf den Befehl vermutlich nicht reagiert.

twm

ps: Danke fuer diese Frage, ich wusste gar nicht, dass man diese Controller auch anders als per Serielle-Schnittstellen-Emulation ansprechen kann.
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Do 21.05.09 21:23 
user profile iconPescoller hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich von der Software aus den USB Port reinitialisieren ohne das Kabel auszustecken?


Hallo,

das ist nicht das entscheidende Problem (bzw. nur die Hälfte davon), die Frage ist, ob du den angeschlossenen Device reinitialisieren kannst - da lautet die Antwort nein, denn es gibt keine Resetleitung auf dem USB-Stecker, also kann ein Reset eines Amok laufenden Controllers nur durch Unterbrechung der Stromversorgung ausgelöst werden, also nur durch Ausstecken. Das ist so per Design, wie MS immer so schön formuliert.

Generell muss ich dazu feststellen: Probleme, die du mit einer Hochspannungspistole auslöst oder den entsprechenden Störungen in der Praxis, ist nicht zuverlässig per Software beizukommen. Sichere Rückholaktionen sind nur ein Hardwarereset oder ein Watchdog, der ja auch einen Reset auslöst.

Gruss Reinhard
Pescoller Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 22.05.09 12:24 
Hallo Reinhard,

eigentlich bleibt das Gerät betriebsbereit, nur die Kommunikation zwischen FTDI und Host hängt. Natürlich kann auch der FTDI chip blockiert sein. Gibt es unter Windows keine Möglichkeit die Stromversorgung eines USB Ports kurzzeitig zu unterbrechen um damit ein RESET des FTDI Controllers zu erzwingen? z.B. über die mA die angefordert werden?

Gruß
Lukas
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Fr 22.05.09 15:34 
user profile iconPescoller hat folgendes geschrieben Zum zitierten Posting springen:
Hallo Reinhard,

eigentlich bleibt das Gerät betriebsbereit, nur die Kommunikation zwischen FTDI und Host hängt. Natürlich kann auch der FTDI chip blockiert sein. Gibt es unter Windows keine Möglichkeit die Stromversorgung eines USB Ports kurzzeitig zu unterbrechen um damit ein RESET des FTDI Controllers zu erzwingen? z.B. über die mA die angefordert werden?

Gruß
Lukas


Hallo,

daraus entnehme ich, dass das Gerät eine eigene Stromversorgung hat - das kompliziert die Sache weiter, weil dann auch ein USB-Powerdown nicht unbedingt einen Reset des FTDI auslöst. Aber falls du es probieren willst, findest du hier was:

msdn.microsoft.com/e...ibrary/ms793200.aspx

Bei Störungen gilt halt, anything can happen. Falls der Controller im PC betroffen ist (der ist sicher weniger geschützt als I/Os in einem Industriegerät, mir sind auch schon mehrere USB-Anschlüsse kaputtgegangen), so musst du dich wohl in den USB-Stack des jeweiligen Betriebssystems einarbeiten. Ich fürchte aber, da kannst du nicht einfach so einen Chip resetten, sondern höchstens den ganzen PC. Filosofisch gesehen: die Störsicherheit des PC zu verbessern, ist nicht deine Aufgabe, da müsstest du einen robusten Industrie-PC von Grund auf entwickeln, womöglich einschliesslich eines besseren USB-Controllers als ihn Intel liefert.

Gruss Reinhard
Pescoller Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 22.05.09 15:46 
Hallo Reinhard,

bin einer funktionierenden Lösung sehr nahe - d.h bei Verwendung der VCP funktioniert's schon. Auf Hinweis vom FTDI support verwende ich die Funktion FT_Reload mit dem FTDI VID und PID. Der Ablauf ist nun folgender:

Die Software erkennt daß die Kommunikation abgebrochen ist z.B. über Timeout

COM schließen
FT_Reload($0403,$6001);
delay( 3 sekunden);
COM Parameter neu setzen (Baudrate, etc.)
COM öffnen

...und siehe da, der Datenstrom fließt wieder...

bei Verwendung von D2XX und USB Befehlen ist die Befehlsfolge ähnlich, allerdings muß ich vor dem neuen öffnen der Verbindung meine Software neu starten.

Gruß und schönes Wochenende
Lukas