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 

Problem bei Typ-Einstellung mit Variant



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!

29.07.2009, 07:51 (Dieser Beitrag wurde zuletzt bearbeitet: 29.07.2009 08:45 von rolfk.)
Beitrag #7

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Problem bei Typ-Einstellung mit Variant
Also die korrekte und beste Weise ist um am SubVI einen Eingang zu haben an den man den Wert direkt anschliesst und dann einen Ausgang an dem der neue Wert wieder rauskommt. Diesen Ausgang schliesst man dann z.B. an eine lokale Variable des Kontrolls.

Wahrscheinlich denkst Du jetzt aber nein, das ist doch viel aufwendiger weil die Daten in einen Draht durch das ganze Diagramm, ins VI hinein und dann wieder hinaus, geschaufelt werden müssen. Aber nichts ist weniger wahr!

Erstens LabVIEW ist ziemlich gut im Wiederverwenden von Datenbuffern. Es gibt da ein paar Dinge die man beachten muss und die können manchmal auch eingewickelt werden, aber grundsätzlich ist die einzige richtige Art um Daten in LabVIEW zu transportieren eben durch einen Draht für die Daten selber. Nur einer der Tipps in diesem Zusammenhang, man sollte bei einem SubVI die Input und Output Terminals solcher Elemente im Diagram immer ausserhalb aller Strukturen (Loops, Cases, etc) plazieren und dann gegebenenfalls systematisch durchverdrahten um die optimale Performance zu gewähren.

Zweitens ermöglichen Referenzen sehr einfach Race-Konditionen zu produzieren. Da ist kein sauberer Datenfluss mehr und sobald Du auf ein Kontroll von mehr als einer Stelle über Referenzen zugreifst ist die Reihenfolge der Zugriffe, wenn keine anderen Datenflussabhängigkeiten vorhanden sind, völlig zufällig. Spätestens wenn Du ein paar mal eine Race-Kondition debuggen musstest wirst Du Dir schwören Referenzen nie mehr unnötig zu verwenden.

Last but not least. Die Property Nodes die auf Referenzen arbeiten werden immer synchron und im UI Thread ausgeführt. Terminals und lokale Variablen werden asyncron geupdated. Das hat zwei weitreichende Folgen.
Erstens wenn Du in einer Loop ein Kontroll schnell updatest wird das mit einem Terminal oder einer lokalen Variablen ohne weiteres 100000 Iterationen pro Sekunde erreichen. Bei einem Update über eine Referenz wirst Du kaum über 100 Iterationen pro Sekunde kommen. Der Grund ist folgender: Wenn Du einen Wert in ein Terminal oder eine lokale Variable schreibst werden diese Daten in einen Buffer geschrieben und ein Flag wird gesetzt dass das Kontroll ein Update nötig hat. Der UI Thread kommt regelmässig (~50 mal pro Sekunde) vorbei und zeichnet alle Kontrolls wo das Flag gesetzt ist neu. Ja das hat als Folge dass lange nicht alle 100000 Werte die Du in der Loop geschrieben hast auch auf dem Panel sichtbar werden, aber ein Mensch ist nicht mal im Stande die nur 50 Updates pro Sekunde die der UI Thread macht sinnvoll zu verarbeiten!!!

Und da die Property Node im UI Thread ausgeführt wird muss LabVIEW jedesmal einen Kontext Switch dorthin machen den Wert (und das Kontroll updaten) und dann zurück zum Diagram switchen um die Loop weiter auszuführen. Solche Kontextswitches sind recht kostbar und das Zeichnen des Kontrolls jedesmal mindestens so viel.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Nachrichten in diesem Thema
Problem bei Typ-Einstellung mit Variant - rolfk - 29.07.2009 07:51

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Wert des Variant ermitteln LV-New 8 5.132 23.02.2022 09:09
Letzter Beitrag: LV-New
  Variant in Grundtypen zerlegen LV-New 6 4.133 10.01.2022 10:55
Letzter Beitrag: LV-New
  Timing Einstellung DAQ-assistent bachatero18 6 4.018 26.02.2019 15:11
Letzter Beitrag: bachatero18
  Fehlermeldung 91 bei 2D Array umwandeln zu Variant und wieder zurück Tobzn 4 4.605 31.03.2018 21:05
Letzter Beitrag: Tobzn
  Variant-Attributsliste Hasenfuss 2 3.361 27.06.2016 15:10
Letzter Beitrag: Freddy
  Variant Attribute initialisieren NoWay 6 5.849 27.10.2015 08:56
Letzter Beitrag: IchSelbst

Gehe zu: