Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
16.01.2009, 09:27 (Dieser Beitrag wurde zuletzt bearbeitet: 16.01.2009 09:28 von Martin_München.)
ich hätte da mal wieder ein Problem, das mich zum verzweifeln bringt.
Wir haben hier ein Gerät stehen, welches über den FTDI Treiber als serielle Schnittstelle angesprochen werden kann (USB 2 Serial).
Was macht das Programm:
1) Es sucht die entsprechende Com Schnittstelle über "VISA Find Resource".
2) Es initialisiert das Gerät, dass wir entsprechend Daten auslesen können.
3) Der Kontakt zum Gerät wird realisiert über "VISA write" und "VISA read". Dabei wird 1 Byte solange gelesen, bis der Abschluss Charakter (";") oder das Timeout erreicht ist.
4) Periodisch alle 50ms wird nun ein Wert ausgelesen.
5) Im gleichen VI, welches die Werte ausliest, wird über Events auch ein Signal übergeben, dass das Gerät (ca. alle 5 Sek) zum Schalten eines Zustandes bewegt. Es kann also nicht gleichzeitig auf die Schnittstelle zugegriffen werden, da nur ein VI die Schnittstelle verwendet.
Nun funktioniert das Programm prima! Es läuft ohne Probleme für mehrere Stunden. Doch irgendwann hängt das Gerät und es nimmt keine Befehle mehr auf.
Ich lasse die serielle Verbindung ständig bestehen und schließe sie nur, wenn ich das Programm schließe...
Kann es an einer falschen Einstellung der Schnittstelle liegen?
Oder doch am Controller? Zum Gerät sei gesagt, dass es noch ein Prototyp ist...der aber kurz vorm Verkauf steht...
' schrieb:Kann es an einer falschen Einstellung der Schnittstelle liegen?
Das würde ich vorerst ausschließen.
Ich tippe auf zwei Sachen:
Der Handle des USB-Kanals im PC geht verloren. Kann passieren, wenn die USB-Schnittstelle sich abmeldet. Das wiederum kommt vor, wenn z.B. Störungen auf der Vorsorgungsspannung des Endgerätes auf den USB durchschlagen. (Immer wenn ich das Labornetzteil, das 2m vom Rechner weg steht, einschalte, meldet sich das PIC-Programmiergerät vom Rechner ab.)
Das Endgerät macht einen Fehler.
Du kannst den Fehler leicht eingrenzen: Wenn der Fehlerfall auftritt, kuckst du einfach auf dem USB-Kabel nach, ob da noch Daten übertragen werden. Wird noch was übertragen, liegt es eher am Endgerät, wird nichts mehr übertragen liegt eher am PC.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Ich habe mal eine ähnliche Erfahrung mit einem USB-Seriell-Controller gemacht.
Lösung war, die Schnittstelle nicht nur die gesamte Zeit offenzulassen, sondern auch immer wieder irgendwelche Abfragen über diese zu senden. Dann war Ruhe im Karton.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
' schrieb:Ich habe mal eine ähnliche Erfahrung mit einem USB-Seriell-Controller gemacht.
Lösung war, die Schnittstelle nicht nur die gesamte Zeit offenzulassen, sondern auch immer wieder irgendwelche Abfragen über diese zu senden. Dann war Ruhe im Karton.
Gruß, Jens
also wenn ich es richtig verstanden habe: Ab und zu wäre es gut, die Verbindung nicht ständig offen zu lassen und von Zeit zu Zeit zu schließen? So ca. alle 30 Minuten z.B.? (Abfragen an den Controller werden ca alle 50ms geschickt...).
@IchSelbst:
Wie kann es passieren, dass ein USB-Handle sich abmeldet? Mein Programm hat auch eine interne Fehlerkorrektur, dass sobald ein Fehler auftritt, die Schnittstelle neu gesucht und initialisiert wird.
Wie meinst du das mit dem nachschauen auf dem USB-Kabel ob Daten gesendet werden? Über VISA geht es definitiv dann nicht mehr. Auch über HyperTerminal reagiert der Controller nicht mehr...Wie gesagt, das alles passoert erst nach einer Programmlaufzeit > 2 Stunden...
Danke euch schon mal für die Ideen! Werde alles probieren, was möglich ist!
' schrieb:also wenn ich es richtig verstanden habe: Ab und zu wäre es gut, die Verbindung nicht ständig offen zu lassen und von Zeit zu Zeit zu schließen? So ca. alle 30 Minuten z.B.? (Abfragen an den Controller werden ca alle 50ms geschickt...).
Nein, da hast du mich falsch verstanden.
Mein Problem war: Ich hatte für längere Zeit gar keine Kommunikation auf dem RS-232 Bus, und dann war plötzlich die Schnittstelle in LV nicht mehr ansprechbar. Grund ist mir unbekannt. Habe das Programm dann dahingehend geändert, dass immer periodisch irgendetwas abgefragt wird, auch wenn ich es gerade eigentlich nicht nötig hatte, dann war Ruhe.
Wenn du eigentlich schon kontinuierlich alle 50ms was sendest und empfängst, dass sollte nach meiner Erfahrung Ruhe sein.
Ja das ist eine gute Idee, das hab ich jetzt auch probiert, da die Treiber, die ich hatte schon etwas älter waren.
Momentan läuft das Gerät und funktioniert einwandfrei. Ich hoffe, dass es bis mindestens Montag so bleiben wird (denn erst dann wäre der Langzeittest bestanden aus meiner Sicht).
Danke Dir!
Brauche aber noch mehr inputs, falls es doch nicht im Langzeitversuch klappen sollte).
Viele Grüße,
Martin
PS: Was ich noch in der Hinterhand habe, ist ein Programm, mit dem ich die serielle Kommunikation überwachen kann. Das werde ich dann nächste Woche ausprobieren.
' schrieb:Wie kann es passieren, dass ein USB-Handle sich abmeldet?
z.B. Durch einen Fehler in der Firmware des Treibers.
Zitat:Wie meinst du das mit dem nachschauen auf dem USB-Kabel ob Daten gesendet werden?
Das USB-Kabel hat zwei Pins, über die die Daten übertragen werden. Hier kann man mit einen Oszilloskop messen.
Geht die DÜ nicht mehr und man sieht auch auf dem Kabel keine Daten => PC ist schuld. Sonst: Endgerät ist schuld.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Häng mal das Oszi auf die Spannungsversorgung vom USB und triggere es auf negative Flanke.
Ich habe schon sehr schlechte USB-Hubs erlebt, auch Onboard... da half nur ein grösserer Kondensator gegen den Spannungseinbruch.
' schrieb:Häng mal das Oszi auf die Spannungsversorgung vom USB und triggere es auf negative Flanke.
Ich habe schon sehr schlechte USB-Hubs erlebt, auch Onboard... da half nur ein grösserer Kondensator gegen den Spannungseinbruch.
PS: Ich habe auch ein FTDI (http://www.LabVIEWforum.de/VISA-Resource...1562.html) wie sprecht ihr den an ?
Also Spannungsspitzen können nicht der Grund für den Verbindungsabbruch sein, da dies bereits durch Kondensatoren auf der Platine des Gerätes abgefangen werden.
Ich versuche jetzt über die serielle Schnittstelle von .NET das Gerät zu betreiben und bin gespannt, ob dort auch alle 3-4 Stunden die Verbindung abbricht.
Das mit der .NET Schnittstelle funktioniert prima. Ich weiß nicht warum, aber das Problem mit den Verbindungsabbrüchen habe ich jetzt nicht mehr (das Gerät läuft seit mehr als 48 Stunden). Dazu sei erwähnt, dass ich die Ansteuerung 1:1 kopiert habe, also Fehler die zu einem Pufferüberlauf oder Ähnliches hätten führen müssen, wären dann mit der .NET Ansteuerung ebenfalls passiert.
Vielleicht war es ja etwas spezifisches, was ich falsch gemacht habe und womit das VISA nicht zurechtgekommen ist und das .NET besser...