Hallo zusammen,
in letzter Zeit habe ich einige Programme geschrieben welche mit Gerätschaften per RS232 kommunizieren. Soweit funktionieren auch alle, jedoch will ich jetzt an das ganze etwas "professioneller" herantreten. Im Endeffekt sind alle RS232 Programme ähnlich aufgebaut, Anfrage - Antworte - Auswertung. Deswegen die Frage, hat jemand vlt. eine Vorlage wie den im Grunde ein solches RS232 Prog. aufgebaut sein sollte? Bei mir wuchern sie am Ende in kaum zu erkenende Strukturen aus (leider). Weil von Anfang an kein richtiges Konzept dahinter steckt, bei mir.
Gruß
Hallo LabVIEW2013,
für eine allgemeine Frage gibt es eine allgemeine Antwort: entweder du schreibst pro Gerät einen "Treiber", der sich um die Verwaltung der seriellen Schnittstelle und das Auswerten der Antowrten kümmert - oder du trennst beides voneinander!
Vorlagen findest du mit dem Beispielfinder...
Hi, ne ich meinte gar nicht soo tief in der Materie. Keinen Treiber.
Sondern einfach so wie in den Beispielen auch.
Man frägt die Daten am Port ab, wertet sie aus und schickt dann den nächsten Befehl (für das jeweilige Gerät!).
Aber das, in einer einfachen und erweiterbaren/austauschbaren Struktur.
Zb. neue Befehle hinzufügen, andere löschen oder die Auswertung und die Antwort eines Befehls ändern.
Gruß
Hallo,
Zitat:Aber das, in einer einfachen und erweiterbaren/austauschbaren Struktur. Zb. neue Befehle hinzufügen, andere löschen oder die Auswertung und die Antwort eines Befehls ändern.
Also doch einen Gerätetreiber schreiben...
Schau dir mal die diversen Gerätetreiber bei ni.com/idnet an, zumindest die auf VISA basierenden. Du hast fast immer ein VI pro Gerätebefehl/-einstellung, welches den entsprechenden Befehl sendet und die Antwort auswertet. Dort findest du jede Menge Anregungen...
Ein solcher Treiber ist bei LabVIEW auch mitgeliefert: unter InstrumentIO/Gerätetreiber solltest du ein Verzeichnis mit VIs zum HP34401 finden. Auch dort: ein weiterer Befehl in einem weiteren VI...
Hallo LabView2013,
ich hab´ mal sowas ähnliches gemacht und mir für jedes auszuführende Kommando inkl. Auswertung der Antwort ein VI geschrieben. Jedes, dieser VIs habe ich so benannt, wie das entsprechende Kommando hieß. Beim Starten der Applikation habe ich dann alle VIs aus dem Kommando-VI-Ordner geladen und die Referenzen mit den dazugehörigen VI-Namen in einem Cluster-Array verwaltet. Wenn dann ein Kommando abgearbeitet werden soll, wird das Kommando im Array gesucht, die Eingangsparameter übergeben, das VI mit der hinterlegten Referenz aus dem Array ausgeführt und die Antwort oder ggf. nur der OK / Err.-Status ausgelesen und verarbeitet.
Auf diese Art kann man sich offline ein abzuarbeitendes Script file schreiben, in dem man sich eine Syntax für die zu übergebenden Eingangswerte und die zu erwartende Antwort überlegt. So ist man dann auch flexiebel bei neuen Kommandos. Legt man sich dann noch ein Start-Dummy-VI an, welches schonmal die Kommunikation enthält, kann man recht schnell ein neues Kommando-VI erstellen.
Gruß, Marko
Danke für die Tipps, ok hab jetzt alle Kommunikationselemnte jeweils in einem einzelnen VI. Sie funktionieren auch soweit alleine. Jetzt fehlt eig. nur noch:
Taste A wird gedrückt Kommando A ausgeführt.
Ohne dabei 100 cases in einer while schleife zu verwenden. Stehe grad etwas auf dem Schlauch, wie es sich am elegantesten lösen läst?
Zitat:Kommando-VI-Ordner geladen und die Referenzen mit den dazugehörigen VI-Namen in einem Cluster-Array verwaltet. Wenn dann ein Kommando abgearbeitet werden soll, wird das Kommando im Array gesucht, die Eingangsparameter übergeben, das VI mit der hinterlegten Referenz aus dem Array ausgeführt und die Antwort oder ggf. nur der OK / Err.-Status ausgelesen und verarbeitet.
Das habe ich leider nicht ganz verstanden. Whr. ist das auch die Antwort auf die Frage
Schöne Grüße
Hallo labview2013,
mit meiner Idee meinte ich, für jedes Kommando ein VI zu schreiben. Beim Start der Software werden dann über VI-Server alle verfügbaren Kommando-VIs geladen und die Referenzen auf diese VIs nebst deren Namen in einem Array vorgehalten.
Wenn dann ein Kommando ausgeführt werden soll, brauchst du nur das Kommando im String-Array der VI-Namen zu suchen und hast den Index für das VI-Referenzenarray. Das VI mit der gefundenen Referenz startest du dann einfach und prüfst die Rückgabewerte.
Gruß, marko
Danke für die Erklärung habs jetzt hinbekommen!
Gruß