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 

Liste mit events abarbeiten



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!

25.09.2010, 17:36
Beitrag #1

Chem_e Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Sep 2010

8.5
2010
de


Deutschland
Liste mit events abarbeiten
Hallo zusammen,

um mehrere Instrumente per VISA zu steuern, habe ich ein LabView Programm geschrieben. In einer Timed loop sind alle Instrumente angesteuert, so dass man Sollwerte vorgeben und Meßwerte auslesen kann. Das fdunktioniert auch so weit.

Nun habe ich eine Liste erstellt, bei der die Sollwerte nach einer gewissen Zeit geändert werden. In einer stacked sequence lese ich die Sollwerte aus einer Tebelle aus und übergebe sie an die entsprechenden VIs in der timed loop. Leider geht das überhaupt nicht.

Kann mir da jemand helfen? Oder hat jemand eine Idee, wie man so etwas realisieren könnte?

Danke!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.09.2010, 18:12
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Liste mit events abarbeiten
Hallo Chem,

"Kann mir da jemand helfen?"
Sicherlich. Und nachdem du mal ein VI hier einstellst, sicherlich auch viel effektiver...

"Oder hat jemand eine Idee, wie man so etwas realisieren könnte?"
Ja. Ohne StackedSequence. Dafür mit Producer-Consumer-Struktur...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.09.2010, 18:22 (Dieser Beitrag wurde zuletzt bearbeitet: 25.09.2010 18:58 von jg.)
Beitrag #3

Chem_e Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Sep 2010

8.5
2010
de


Deutschland
Liste mit events abarbeiten
Hier ist das VI:
Lv85_img


Angehängte Datei(en)
Sonstige .vi  Komplett_VI_mit_timelist.vi (Größe: 235,52 KB / Downloads: 269)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.09.2010, 18:47 (Dieser Beitrag wurde zuletzt bearbeitet: 25.09.2010 18:49 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Liste mit events abarbeiten
Hallo Chem,

wow, what a mess...

Dein Problem könnte mit der Unmenge lokaler Variablen zusammenhängen. Leider ist mein Laptop-Bildschirm eher klein, und ich habe keine Lust ständig zu scrollen...

-Warum liest du aus lokalen Variable und schreibst den Wert direkt wieder in's Terminal zurück? Und dies für diverse Terminals? Warum nutzt du dann keine Controls statt Indicators? So kann die Datenübergabe per zweiter lokaler Variable gar nicht funktionieren - du hast dir nur eine RaceCondition geschaffen...
-Wieso arbeitest du mit lauter Einzelwerten? Dein VI wäre viel übersichtlicher, wenn du Arrays verwenden würdest (z.B. SP1-SP8 und MFC1-8 in jeweils ein Array)!
-Die Werte aus der Tabelle könnte man auch wesentlich übersichtlicher wandeln: erste Zeile indizieren, komplette Zeile nach Zahl wandeln, ein IndexArray, um die Einzelwerte zu erhalten...
   
-Wieso packst du Werte in ein Cluster, wandelst den Cluster nach Array, SubVI, Array nach Cluster wandeln, Cluster entbündeln? Warum nicht einfach BuildArray vor dem subVI und danach ein IndexArray? (Wenn du schon mit Arrays [s.o.] arbeiten würdest, könntest du dir hier viel Arbeit sparen...)
-Wozu die TimedWhileLoop, wenn sie nach genau einem Durchlauf wieder beendet wird? Schleife entfernen, eine Wartefunktion in die übergeordnete While-Loop packen...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.09.2010, 13:08
Beitrag #5

Chem_e Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Sep 2010

8.5
2010
de


Deutschland
Liste mit events abarbeiten
Hallo Gerd!

Vielen Dank für deine Antwort! Ich habe deine Tipps umgesetzt (while-Schleife weg....Clusters...Controls statt indicators...)..... aber es geht immer noch nicht.
Und...ja, dass es eine mess ist gebe ich gerne zuSad.

Was ist eigentlich eine race-condition, die du erwähnt hast?

Oder die producer-consumer-Struktur?

Wie gesagt, die time-Schleife funktioniert und liest auch alle Werte aus, wenn ich die case-Struktur komplett weglasse. Aber wie könnte ich denn noch Werte in einer Tabelle vorgeben, die dann nach einer definierten Zeit innerhalb der time-Schleife übernommen werden?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.09.2010, 14:28
Beitrag #6

Matze Offline
LVF-Team
LVF-Team

Beiträge: 1.027
Registriert seit: Apr 2010

20xx
2010
DE_EN

7xxxx
Deutschland
Liste mit events abarbeiten
' schrieb:Was ist eigentlich eine race-condition, die du erwähnt hast?
Frei definiert: Race Condition bedeutet, dass du keinen festen Ablauf deiner SubVIs programmiert hast, der dazu führen kann, dass dein Code fehlerhaft ausgeführt wird. D.h. es kann vorkommen, dass bei dir ein SubVI vor einem anderen ausgeführt wird oder dass du Werte zu früh in Variablen einliest. Was nicht der Fall sein darf, da sonst irgend etwas schief geht. D.h. du kannst - je nach Situation - z.B. den Anschluss des Error-Clusters verwenden, um eine definierte Ablaufreihenfolge zu bestimmen.
Oft treten Race-Condition dann auf, wenn irgendetwas parallel programmiert ist, was nicht parallel ausgeführt werden darf. Oder bei der Verwendung lokaler/globaler Variablen. Diese werden z.B. eingelesen und haben so einen altern Wert statt einen neuen.
Wikipedia erklärt das Ganze ausführlicher.

' schrieb:Oder die producer-consumer-Struktur?
Die zu dt. Erzeuger-Verbraucher-Struktur besteht aus 2 parallelen Schleifen, die über Queues miteinander kommunizieren (in LabVIEW gibt es dafür eine Vorlage).

Beispiel: Es gibt eine Ereignisstruktur. Der dort auszuführende Code braucht recht lange und in der Zeit wäre die Oberfläche nicht benutzbar, da nicht auf neue Ereignisse reagiert werden kann.
Sauber programmiert geht das mit der angesprochenen Producer-Consumer-Struktur.
Die Erzeuger-Schleife enthält eine Ereignisstruktur und reagiert auf Benutzereingaben. Diese werden per Queues an die Verbraucherschleife weitergeleitet, die den eigentlichen Code ausführt. Da beide Schleifen parallel ablaufen, bekommt die Erzeuger-Schleife die Benutzeraingaben auch dann (für den Anwender sichtbar) mit, wenn die Verbraucher-Schleife noch arbeitet.
Näheres findest du z.B. auf ni.com (englisch).

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
26.09.2010, 20:24
Beitrag #7

Chem_e Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Sep 2010

8.5
2010
de


Deutschland
Liste mit events abarbeiten
Super....das habe ich nun verstanden.

Ich muss folgendes regeln:

8 Massenflussregler, 4 Ventile und 2 Temperaturkontroller müssen geregelt werden.
Die Meßwerte sollen alle 10 Sekunden in eine Datei gespeichert werden.
Und zusätzlich werden die Sollwerte in einer Tabelle vorgegeben, die dann zu einer definierten Zeit an die Geräte gesendet werden sollen.

Wie würden Sie das mit einer Ihrer beschriebenen Strukturen umsetzen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.09.2010, 08:30
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Liste mit events abarbeiten
Hallo Chem,

wie wir das umsetzen würden, haben wir schon gesagt... Du erwartest doch wohl nicht, dass wir deine Haus-/Projektarbeit übernehmen?

Auf Arbeit habe ich einen FullHD-Monitor - trotzdem ist dein VI mehrere Bildschirme groß. Das Aufräumen kannst du gefälligst selbst übernehmen. Alles, was nicht in deiner Steuersequenz liegt, kommt übrigens ohne lokale Variablen aus - einfach mal ein paar Drähte ziehen! Dann LV-typische Funktionen verwenden (keine großen Case-Strukturen, wo auch einfache Select-Funktionen ausreichen...) Dann haben wir dich schon auf die Examples und Templates hingewiesen, selber reinarbeiten schadet da auch nicht...

Wenn du all das umgesetzt hast, bin ich gern bereit, mal wieder in dein VI reinzuschauen!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.09.2010, 19:38
Beitrag #9

Chem_e Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Sep 2010

8.5
2010
de


Deutschland
Liste mit events abarbeiten
Hallo zusammen,

ich will keinesfalls, dass jemand hier meine Arbeit macht. Auch handelt es sich hier nicht um eine Hausarbeit, sondern um eine reale Steuerung meiner Forschungsanlage.

Ich habe alle Tipps von Gerd_W zwecks übersichtlicher machen, Variablen ändern....umgesetzt. Jedoch funktioniert das immer noch nicht.

Daher wäre meine Frage, wie ich so eine Producer/Consumer-Struktur am besten angehe....also die 2 Schleifen mit Daten-Queue habe ich schon....aber in welche Schleife muss ich die Sollwert-Tabelle, in welche die Steuer-VIs umsetzen?

Danke!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.09.2010, 20:19
Beitrag #10

Falk Offline
ja, das bin ich...
***


Beiträge: 343
Registriert seit: Jan 2006

8.0 :: 201x ::202x
2006
DE_EN


Deutschland
Liste mit events abarbeiten
Wenn ich dich richtig verstanden habe geht es um folgendes. Die versuchst mit P/C-Design deine Prozesssteuerung möglichst autonom und von allen Benutzeraktionen ungelöst laufen zu lassen. Die Steuerung benötigt aber Parameter, die du über die Zeit kontinuierlich nach irgendeinem Muster ändern bzw. anpassen musst. Diese neuen Parameter müssen somit der Prozesssteuerung mitgeteilt werden? Das heißt du produzierst Daten, welche mittels Queue dem Verbraucher übergeben werden. Konkret auf deinen Fall. Deine Steuer-VIs laufen relativ ungeachtet vor sich hin und bilden die Verbraucher. Der Produzent der Daten kann entwender ein Benutzer sein oder irgend ein anderer parallel laufender Prozess, der beispielsweise irgend ein Gerät ausliest, über eine Formel die neuen Sollwerte berechnet und anschließend diese in die Queue stopft. Die Verbraucher warten nun ständig auf neue Werte in der Queue und sollte einer getunnelt kommen wird deine Prozesssteuerung mit diesen neuen Parametern in Gang gesetzt. Richtig?


Schöne Grüße
Falk

Currently: zzzZZZZZZZZ
Webseite des Benutzers besuchen 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
Question NI-DCPower; Events bei Sequenz GI 0 3.046 22.08.2017 11:23
Letzter Beitrag: GI
  Seriell auf Events warten J. S. 1 4.321 15.01.2010 16:58
Letzter Beitrag: Y-P

Gehe zu: