INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

VISA Kommunikation mit queues



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!

10.03.2011, 13:39 (Dieser Beitrag wurde zuletzt bearbeitet: 11.03.2011 10:20 von onsight8c.)
Beitrag #1

onsight8c Offline
Schwerionenschubser
*


Beiträge: 16
Registriert seit: Mar 2011

2012 12.0f3
2009
DE


Deutschland
VISA Kommunikation mit queues
Hallo zusammen

Ich sitze momentan an folgendem Projekt:

Über eine RS485/VISA Kommunikation werden verschiedene Messgeräte und Ventile angesteuert. Mittels an das jeweilige Gerät gesendete Befehle werden verschiedene Eigenschaften eingestellt oder abgefragt, als Beispiel Gerät mit der Adresse xyz:

Auslesen: @xyzST?;FF Gerät xyz wird mittels "ST?" nach Status gefragt, ;FF ist das Stopzeichen
Beschreiben: @xyzUT!#;FF Gerät xyz wird mittels "UT!" mit dem Usertag # beschrieben, dieser kann alles mögliche sein ("#"= ......)

Bedeutet bspw für die Messgeräte, wenn ich Daten auslesen will, muss ich kontinuierlich den Auslesebefehl senden - kein Befehl, Gerät tut nix und schweigt. Bei den Ventilen ist es ähnlich - Befehl auf/zu und kurze Rückmeldung über den aktuellen Status.

Folgende Funktionalitäten soll das Steuerprogramm nun haben:

- GUI mit Anzeigen und Steuerelementen (Schalter, Buttons, etc)
- Auslesen und Anzeige der Messgerät-Daten
- Ansteuern (auf/zu) der Ventile mittels Schalter, Buttons..
- Auslesen des Ventilstatus (alle paar Sekunden bis Minuten)
- Abfrage weiterer Daten von zukünftigen Geräten (also modularer Aufbau)

Dachte zuerst an ein Procuder/Consumer-Design wie in diesem Falle: Beitrag #8 Allerdings macht mir die ständige Befehle-Senderei Bauchschmerzen.

Habt ihr nen Tip für mich, wie ich das Programm von der Struktur her aufbauen könnte? Ggf über verschiedene States wie beim angehängten VI?

Danke euch schonmal sehr!

Grüße,
Boris

*************
Habe die Datei nochmal für Version 8.2 gespeichert!!!!


Angehängte Datei(en)
2010 .rar  Course Project.rar (Größe: 192,56 KB / Downloads: 300)

8.2 .rar  Course Project v8.2.rar (Größe: 192,89 KB / Downloads: 237)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
11.03.2011, 09:21
Beitrag #2

toaran_ Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 237
Registriert seit: Feb 2007

2012
2006
EN

90763
Deutschland
RE: VISA Kommunikation mit queues
Hi

also ein Producer Consumer Design ist auf jeden fall passend ... Zum anfangen würde ich das Producer/Consumer Design(Events) Template von Labview nehmen ... dazu gibts auch Beispiele...

in der Eventstruktur behandelst du alle Buttons und in der Consumer Schliefe das senden der jeweiligen Befehle...

Das alle paar Sekunden bis Minuten Ventilstatus abfragen kannst du mit einem User Event (siehe Beispiele dazu in LV) realisieren.


T
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.03.2011, 10:31
Beitrag #3

onsight8c Offline
Schwerionenschubser
*


Beiträge: 16
Registriert seit: Mar 2011

2012 12.0f3
2009
DE


Deutschland
RE: VISA Kommunikation mit queues
Moin toaran!

Danke für deine Rückmeldung! Dann bin ich schonmal nicht komplett auf dem Holzweg.

Ich versuche jetzt die Geschichte so aufzuziehen:

- Producer-Loop liest mir die Daten aus der VISA aus
- Packt diese auf ne Queue
- Consumer Loop arbeitet mit verschiedenen States:

0. Abholen eines Datenelements aus der Queue
1. Analyse + Verarbeitung der Daten
2. Weitergabe und Darstellen der verarbeiteten Daten auf der GUI
3. Daten loggen
4. ggf. weiter Spielereien
5. Stop-State für einige ms um danach nächstes Datenelement aus Queue abzurufen und wieder mit state (1) zu beginnen

Kann ich dann dort trotzdem noch Event-Cases einbauen, bpsw. wenn ein Schalter betätigt wird, um ein Ventil zu fahren? Und dass nach Abschluss der Interaktion wieder nur die Daten ausgelesen werden?

Oder muss ich den Weg gehen, dass ich über ne Case-Struktur in der Producer-Loop anwähle ob Daten gelesen oder Befehle gesendet werden?

greetz
Boris
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.03.2011, 10:48
Beitrag #4

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.697
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: VISA Kommunikation mit queues
(11.03.2011 10:31 )onsight8c schrieb:  - Producer-Loop liest mir die Daten aus der VISA aus
- Packt diese auf ne Queue
- Consumer Loop arbeitet mit verschiedenen States:
Prozesse, also Module, durch Queues zu entkoppeln, ist immer ein richtiger Weg.
In deinem Falle würde ich in den (ersten) Producer-Prozess bereits folgendes einbinden: Hier kann man möglicherweise eine Vorfilterung der Daten machen, insofern, dass ein Queue-Element ein sinnvoll zu bearbeitendes Datenpaket darstellt. Ein Zwischenschritt (also ein Zwischenmodul), das den VISA-Stream in sinnvoll zu bearbeitende Datenpakete umwandelt, würde ich im ersten Ansatz nicht vorsehen.
Zwischen den Zeilen kannst du lesen, dass es ohne weiteres sinnvoll sein kann, wenn sich ein Verarbeitungsweg über mehrere Queues erstreckt.

Zitat:Kann ich dann dort trotzdem noch Event-Cases einbauen, bpsw. wenn ein Schalter betätigt wird, um ein Ventil zu fahren? Und dass nach Abschluss der Interaktion wieder nur die Daten ausgelesen werden?
Gehen tut alles (nur die Frösch' hüpfen).
Man kann einen Ablauf (siehe deine Beschreibung) als Case-Struktur (also Schrittkette) in einer While-Schleife programmieren. Jeder einzelne Schritt sollte dann nur ganz kurz dauern. Nach der Case-Struktur (in der While-Schleife) kann man die Event-Struktur sequenziert einbauen und mit einem Timeout von (z.B. 5ms) laufen lassen. Wenn ein Event eintritt, kann man den synchron in die Case-Sequenz einführen.
Nichtsdestoweniger kann man natürlich auch eine eigenständige Event-Struktur nehmen und per Lokaler Variablen oder auch per Queue Daten an die Case-Struktur senden.

Zitat:Oder muss ich den Weg gehen, dass ich über ne Case-Struktur in der Producer-Loop anwähle ob Daten gelesen oder Befehle gesendet werden?
Das hängt von der Applikation und dem Aufbau des Programmes ab.

Ich mach's immer so (und das ist unabhängig von der Schnittstelle, also ob VISA oder DaqMX etc):
Es gibt ein Modul, das die komplette Schnittstelle bedient. Dieses Modul läuft kontinuierlich, ist also nicht in einen expliziten Datenfluss eingebunden. Gesteuert wird dieses Modul über eine Queue. Daten nach außen geben kann dieses Modul über Queues, Melder oder auch FGVs.
Über die Steuer-Queue kann man dem Modul mitteilen, was es jetzt machen soll: VISA initialisieren, Daten lesen, Daten schreiben, et. etc. Beachte, dass das Modul selbstsicher ist, und genau weis, was es gerade tut und was es daher gerade nicht tun kann: Liegt gerade ein laufender Lese-Zyklus an, muss ein Daten-Schreiben natürlich noch warten - das heißt aber nicht, dass der Befehl hierfür nicht angenommen wird.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  LabVIEW Queues Schrankwand 3 4.372 14.12.2023 13:41
Letzter Beitrag: Schrankwand
  Bool Werte über Queues maxil 52 24.686 12.07.2019 14:00
Letzter Beitrag: GerdW
  CANopen VISA kommunikation MarkusS 5 4.776 21.06.2019 14:17
Letzter Beitrag: GerdW
  Queues? flizzer82 14 30.639 23.05.2017 19:58
Letzter Beitrag: jg
  Queues VI übergreifend verwenden mdu 12 16.781 14.03.2015 15:34
Letzter Beitrag: Lucki
  Queues mit FGVs in Polymorphen VI Andre_A 7 7.357 17.05.2014 07:39
Letzter Beitrag: cb

Gehe zu: