automatische Auswahl der VISA Adresse - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA) +---- Thema: automatische Auswahl der VISA Adresse (/Thread-automatische-Auswahl-der-VISA-Adresse) Seiten: 1 2 |
automatische Auswahl der VISA Adresse - Jenni - 27.03.2017 10:19 Hallo Labview-Community, ich hoffe ihr habt eine Idee, wie ich weiter verfahre. Es geht darum, dass ich eine Programmierung erstellt habe, in der man unterschiedliche Geräte auswählen kann. Zu Beginn meines Programms kann man unter Einstellungen das Gerät auswählen, welches man benutzt. Dadurch werden dann die richtigen Treiber in meinen Programmablauf implementiert (durch einen entsprechenden Case einer Case Struktur). Allerdings müsste man nun auch noch die Visa Adresse auswählen (Geräte sind über GPIB mit dem PC verbunden), was so zu sagen doppelt gemoppelt ist. Nun zu meiner Frage: Habt ihr eine Idee, wie ich dieses eleganter lösen kann. Am Ende soll nur noch das Gerät ausgewählt werden und es soll dadurch automatisch die richtige, dem Gerät entsprechende VISA Adresse gewählt werden. Meine Idee war es bisher, alle Ports abfragen zu lassen, dann die Geräte nach der Identität zu fragen und so irgendwie die Adresse automatisch festzulegen bzw zu bestimmen. Allerdings scheitere ich an der Ausführung. Hoffe ihr habt Anregungen für mich! Habe schon das Forum durchforstet, aber nichts entsprechendes gefunden. Liebe Grüße, Jenni RE: automatische Auswahl der VISA Adresse - GerdW - 27.03.2017 10:30 Hallo Jenni, Zitat:Am Ende soll nur noch das Gerät ausgewählt werden und es soll dadurch automatisch die richtige, dem Gerät entsprechende VISA Adresse gewählt werden.Dein entsprechender Gerätetreiber geht die Liste der vorhandenen Ports durch und prüft, ob/auf welchem Port sein Messgerät antwortet… Zitat:Meine Idee war es bisher, alle Ports abfragen zu lassen, dann die Geräte nach der Identität zu fragen und so irgendwie die Adresse automatisch festzulegen bzw zu bestimmen. Allerdings scheitere ich an der Ausführung.Genau so würde ich es auch machen. Woran scheitert denn deine Ausführung? RE: automatische Auswahl der VISA Adresse - Jenni - 27.03.2017 10:40 Hallo Gerd, danke schon einmal für die Antwort. Ich habe gerade bemerkt, dass das Problem wohl daran liegt, dass mein Gerät mir manchmal antwortet und manchmal nicht. Manchmal ist der read buffer leer und manchmal gibt er mir die Identität zurück. Dann gilt es jetzt erstmal diesen Fehler zu beheben.. Dies ist wahrscheinlich eher dem Gerät zu verschulden und nicht Labview oder? Allerdings: In den Fällen, in denen ich eine Rückmeldung bekomme, kann ich ja nicht einfach den String als Visa Adresse angeben. Wie mache ich das? Wenn ich dort eine Konstante angebe und sich zwischenzeitlich der Name ändert oder die Adresse, wenn ich keinen Namen vergebe, funktioniert es nicht. RE: automatische Auswahl der VISA Adresse - GerdW - 27.03.2017 11:46 Hallo Jenni, Zitat:Dies ist wahrscheinlich eher dem Gerät zu verschulden und nicht Labview oder? Das könnte an deinem VI liegen. Oder am Gerät. Oder am Kabel. Oder… Zitat:In den Fällen, in denen ich eine Rückmeldung bekomme, kann ich ja nicht einfach den String als Visa Adresse angeben.Warum kannst du das nicht? VISAFindResource gibt dir zwar Strings zurück, die kannst du aber problemlos als VISAAdresse verwenden! RE: automatische Auswahl der VISA Adresse - Jenni - 27.03.2017 11:56 Ach ok stimmt, ich kann den String einfach mit dem Eingang der VISA Adresse verbinden! Danke! Wie könnte ich das am elegantesten aufbauen? Ich habe 6 Ports, die ich abfrage. Ich könnte also 6 ineinander verschachtelte Case Strukturen nehmen. Wenn der abgefragte Name gleich dem ist, den ich haben möchte, wird der String mit dem Eingang der VISA Adresse verbunden. Wenn das falsch ist, baue ich eine weitere Case Struktur in die vorhandene ein, u. s. w.. Ist das die beste Möglichkeit, oder könnte ich das geschickter machen? Edit: Nun habe ich ein weiteres Problem. Habe es mit den verschachtelten Case Strukturen lösen wollen. Allerdings wird ein Fehler angezeigt, wenn nicht an jedem Port ein Gerät angeschlossen und angeschaltet hängt. Dadurch entsteht ein Timeout in VISA Read. Ich dachte man würde eher einen leeren String als Antwort erhalten. RE: automatische Auswahl der VISA Adresse - GerdW - 27.03.2017 12:50 Hallo Jenni, Zitat:Ich habe 6 Ports, die ich abfrage. Ich könnte also 6 ineinander verschachtelte Case Strukturen nehmen.Du könntest auch eine FOR-Loop nehmen, die einfach (für ein Gerät) die 6 Ports nacheinander prüft… Zitat:Nun habe ich ein weiteres Problem. … Dadurch entsteht ein Timeout in VISA Read.Wieso ist das ein Problem? Über den Timeout-Fehler lässt sich doch prima feststellen, dass das gesuchte Gerät NICHT an diesem Port hängt! Fehlermeldungen sind dazu da, dass der/die Programmierer/in sie auswerten kann… Zitat:Ich dachte man würde eher einen leeren String als Antwort erhalten.Bekommst du den leeren String denn etwa nicht? RE: automatische Auswahl der VISA Adresse - Jenni - 28.03.2017 08:31 Guten Morgen, ich stehe etwas auf dem Schlauch, wie ich den Timeout Fehler "behebe". Wie schaffe ich es, dass das Programm zur nächsten Case Struktur übergeht, wenn der Timeout Fehler angezeigt wird (nach Möglichkeit sollte dieser dem Anwender später nicht ersichtlich sein). Und wie gestalte ich alles mit For Schleifen um? An den Schleifenzähler würde die Anzahl der Ports kommen, also in meinem Fall 6? Und wie bestimme ich, dass ein Port nach dem anderen geprüft wird? Mit einem Shift Register? Ich hänge mal einen Screenshot von meiner jetzigen Gestaltung an. Im Screenshot ist auch mein SubVi zu sehen, in dem ich die Identität der Geräte abfrage, die ggf an den Ports hängen. Hier taucht auch der Timeout Fehler auf. Liebe Grüße, Jenni RE: automatische Auswahl der VISA Adresse - GerdW - 28.03.2017 08:43 Hallo Jenni, Zitat:Wie schaffe ich es, dass das Programm zur nächsten Case Struktur übergeht, wenn der Timeout Fehler angezeigt wirdIndem man zumindest etwas rudimentäre Fehlerbehandlung programmiert: "IF error THEN do something"! Ich schrieb doch oben schon mal: "WENN Timeout-Fehler DANN Gerät nicht gefunden"… Zitat:nach Möglichkeit sollte dieser dem Anwender später nicht ersichtlich seinBisher bekommt der Anwender diese Fehlermeldungen zu sehen, weil DU bisher keine Fehlerbehandlung programmiert hast! Zitat:Und wie gestalte ich alles mit For Schleifen um? … wie bestimme ich, dass ein Port nach dem anderen geprüft wird?Anstatt nach dem VISAFindResource das Array per IndexArray in seine Elemente aufzudröseln, verbindet man das Array lieber mit einer FOR-Loop - die dann per Autoindexing einzeln abarbeitet… Die "Autoindizierung" gehört zu den LabVIEW-Grundlagen! (Die Links in meiner Signatur hast du bemerkt und auch durchgelesen?) RE: automatische Auswahl der VISA Adresse - Jenni - 28.03.2017 09:06 Hallo Gerd, die habe ich bemerkt und auch schon durchgelesen (manche Stellen genauer als andere ). Mache mich aber sofort an die Fehlerbehebung. Danke für die Tipps! Hast mir sehr geholfen! RE: automatische Auswahl der VISA Adresse - Jenni - 28.03.2017 11:05 Hallo Gerd und alle anderen, ich bekomme den Umgang mit dem Fehler nicht wirklich hin.. Ich habe die ganze Zeit an den Case Strukturen rumgebastelt. Es wird aber nur die erste Case Struktur abgearbeitet. Wenn dort direkt ein Timeout Fehler auftritt wird der Rest nicht mehr geprüft. Ich habe versucht, das über weitere Case Strukturen zu lösen. Und wenn ich das über die For Schleifen lösen will weiß ich nicht, wie ich es schaffe, dass nur die VISA Adresse weitergeleitet wird, die von dem erwarteten Gerät ist und die anderen verworfen werden. Wie schaffe ich es, dass der nächste Port geprüft wird, wenn entweder ein Timeout Fehler vorliegt, oder die Antwort des Gerätes nicht der erwarteten entspricht? Liebe Grüße |