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 

Dieses Thema hat akzeptierte Lösungen:

val(sgnl) vermeiden



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!

27.07.2011, 12:23
Beitrag #1

Puma Offline
LVF-Neueinsteiger


Beiträge: 8
Registriert seit: Apr 2011

2010
2010
EN



val(sgnl) vermeiden
Hi,
ich habe folgendes Problem: ich möchte ein Event zeitgesteuert ausführen. Dafür benutze ich derzeit die property node val(sgnl). Eigentlich funktioniert das soweit. Nun habe ich aber an mehreren Stellen gelesen, dass property nodes langsam sind und dass die property node val(sgnl) generell vermieden werden soll. In der Tat läuft mein Programm über lange Zeit nicht stabil (die Events werden zwischendurch mal nicht ausgeführt) und ich denke, dass die Art meiner Programmierung daran Schuld ist. Leider weiß ich nicht so recht, wie ich das Problem anders angehen soll.
Im Anhang findet ihr ein Minimalbeispiel für das Problem. Der Benutzer soll die 'Ausgabe' über die 'Eingabe' ändern können. Wird die Zeitsteuerung über 'Start' aktiviert, so sollen sich sowohl 'Eingabe', als auch 'Ausgabe' ändern.

Kann mir jemand einen Rat geben, wie ich das anders machen kann? Die grundlegende Struktur, dass sich 'Ausgabe' über 'Eingabe' ändert sollte beibehalten werden!

Viele Grüße
Carsten


Angehängte Datei(en)
2010 .vi  minimal.vi (Größe: 11,89 KB / Downloads: 170)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
27.07.2011, 13:49
Beitrag #2

Martin Heller Offline
LVF-Stammgast
***


Beiträge: 250
Registriert seit: Feb 2010

2011 SP1
2008
EN

5232
Schweiz
RE: val(sgnl) vermeiden

Akzeptierte Lösung

Hallo Carsten

Du kannst dein Event auch per Dynamic Event Terminals bedienen. Z.b. hier
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.07.2011, 18:49 (Dieser Beitrag wurde zuletzt bearbeitet: 27.07.2011 18:50 von Puma.)
Beitrag #3

Puma Offline
LVF-Neueinsteiger


Beiträge: 8
Registriert seit: Apr 2011

2010
2010
EN



RE: val(sgnl) vermeiden
Vielen Dank, das hat mir weitergeholfen. Kannte Dynamic Event vorher noch nicht! Habe mein Minimalbeispiel jetzt soweit, dass es das tut, was ich möchte, ohne Property nodes zu benutzen.
Kann man die User Events auch anders weitergeben, als über direkte Verbindungen? Am Eingang des "User Event Create" habe ich jetzt meine Eingabe angegeben. Dabei ist ja aber nur ein Dateityp verlangt oder? Dieser wird aber später gar nicht mehr verwendet. Wofür braucht man diesen Dateityp? So ganz bin ich da noch nicht durchgestiegen. Ich habe probiert aus dem "User event out" einen Indicator zu machen und diesen dann an das "User Greate Event" anzuschließen, doch leider gibt LabVIEW dann beim Ausführen dieses "User Greate Event" eine Fehlermeldung aus (An input parameter is invalid).

Hat jemand eine Idee?

Vielen Dank,
Carsten


Angehängte Datei(en)
2010 .vi  minimal.vi (Größe: 12,67 KB / Downloads: 168)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.07.2011, 06:29
Beitrag #4

NWOmason Offline
Simultator
*****


Beiträge: 1.078
Registriert seit: Dec 2010

2012.SP1
2008
EN

93047
Deutschland
RE: val(sgnl) vermeiden

Akzeptierte Lösung

(27.07.2011 18:49 )Puma schrieb:  Kann man die User Events auch anders weitergeben, als über direkte Verbindungen?

Ja, z.b. über Globale Variablen:

Dymanic Events with Global Variable:
http://forums.ni.com/t5/LabVIEW/Can-not-...999/page/2

Die VI's dazu sind auch angehängt.


(27.07.2011 18:49 )Puma schrieb:  Am Eingang des "User Event Create" habe ich jetzt meine Eingabe angegeben. Dabei ist ja aber nur ein Dateityp verlangt oder? Dieser wird aber später gar nicht mehr verwendet. Wofür braucht man diesen Dateityp? So ganz bin ich da noch nicht durchgestiegen.

Habe mal dein Beispiel umgeschrieben, um dir zu verdeutlichen, wie das Ganze funktioniert:

   

Über den Eingang am "User Event Create" legst du sowohl den Datentyp fest, also auch über das Label den Namen des Events. Wenn du nun dieses Event alleine in einem Eventcase aufrufst, kannst du direkt über den Name den neuen Wert benutzen.

Beste Grüße,
NWO

9 von 10 Stimmen in meinem Kopf sagen: Ich bin nicht verrückt,
die andere summt die Melodie von Tetris
.

NI schrieb:To use the abort button is like using a tree to stop a car!

(20.01.2012 11:02 )NWOmason schrieb:  Getting Started with NI LabVIEW Student Training
http://zone.ni.com/devzone/cda/tut/p/id/7466

Introduction to NI LabVIEW - Learn LabVIEW Basics
http://www.ni.com/gettingstarted/labviewbasics/

Top 5 der Empfehlungen für LabVIEW-Einsteiger
http://www.ni.com/newsletter/51735/de/
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.07.2011, 15:58
Beitrag #5

Puma Offline
LVF-Neueinsteiger


Beiträge: 8
Registriert seit: Apr 2011

2010
2010
EN



RE: val(sgnl) vermeiden
Vielen Dank! Habe dabei viel gelernt.
Meine fertige Version habe ich nochmal für Leute, die ein ähnliches Problem haben, angehängt.

Gruß
Carsten


Angehängte Datei(en)
2010 .vi  minimal.vi (Größe: 13,8 KB / Downloads: 161)

2010 .vi  global.vi (Größe: 4,15 KB / Downloads: 149)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.08.2011, 12:58
Beitrag #6

Kiesch Offline
LVF-Stammgast
***


Beiträge: 396
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: val(sgnl) vermeiden
Hmm... hier wird ja angesprochen, dass man val(sgnl) eventuell vermeiden sollte. Was genau ist dabei das Problem?

Ich habe aktuell eine Kommunikation zweier Rechner über TCP / IP realisiert (auf beiden Rechnern sollen möglichst auch verschiedene Labview Versionen laufen können, deswegen habe ich mich gegen shared Variables entschieden). Werteänderungen an einem Rechner frage ich dabei generell über das value Change Event ab, da ich ungern laufend 10 - 20 Variablen auf Wertänderung pollen möchte. Da allerdings einer der Rechner über den anderen Ferngesteuert wird muss ich bei diesem val(sgnl) dafür verwenden. Nun ist mir aber selbst schon aufgefallen, dass das ganze manchmal instabil zu laufen scheint, allerdings hab ich auch erst meine Erste Version ans laufen gebracht...
Kann das grundsätzlich mit den val(sgnl) Eigenschaftsknoten zusammenhängen?
Wie gesagt, ich würde die extrem ungern ersetzen, da die einfach (vom Aufwand her) deutlich handlicher sind als das für jeden internen Schreibvorgang die Variable zum Beispiel über eine Queue gehen zu lassen um die Wertänderung direkt an den zweiten PC zu senden. Auch wollte ich das "ferngesteuerte" VI möglichst wenig umprogrammieren (ist nicht von mir sondern von nem Kollegen geschrieben worden und läuft - never change a running system).

Gruß Kiesch

P.S: Wie gesagt, ich brauch vor allem ne info um einschätzen zu können ob für meinen Zweck (ne intern erzeugte Wertänderung über nen event case "sofort" zu erfassen und weiterzusenden) ausreichend ist (vor allem ausreichend stabil, da das Programm später mehr oder weniger vollautomatisiert laufen soll und sich dabei nicht ständig aufhängen sollte).

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
05.08.2011, 07:18 (Dieser Beitrag wurde zuletzt bearbeitet: 05.08.2011 07:19 von rolfk.)
Beitrag #7

rolfk Offline
LVF-Guru
*****


Beiträge: 2.302
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
RE: val(sgnl) vermeiden
(01.08.2011 12:58 )Kiesch schrieb:  Hmm... hier wird ja angesprochen, dass man val(sgnl) eventuell vermeiden sollte. Was genau ist dabei das Problem?

Alle UI Properties werden grundsätzlich im UI Thread ausgeführt. D.h. wenn Du ein val oder val(signal) Property in Deinem Programmcode ausführst, stellt LabVIEW den Code in eine Warteschleife um durch das Betreibssystem im Kontext des UI Threads aufgerufen zu werden. Nach dem dieser Code von Windows dann angekickt wurde (irgendwann us, ms oder was auch immer später) wird das ganze Spiel nochmals wiederholt, diesmal um den Codeteil wieder zum ursprünglichen Thread switchen zu lassen. Das daaaaaaaaaaaaaauert extrem lang im Verhältnis was normaler LabVIEW Code in der selben Zeit macht.

Wenn solche Properties in Deiner UI Ahandlungsschlaufe sind, wo Du auf Usereingaben reagierst, und zum Beispiel ein weiteres Even ankicken willst wenn ein davon abhängiges Userelement durch den Benützer manipuliert wurde, ist das absolut kein Problem. Die Threadcontextswitches sind unzählige Male schneller dann der meist geavanceerde Kungfu Kämpfer jemals Userelement anklicken kann.

Wenn Du dasselbe aber in Programmlogik in Deiner Applikation machst kann das einen grossen Einfluss auf die Reaktionszeit dieses Codeteiles haben. Oder noch schöner ein Property in einer langen Schlaufe. Einmal ein paar ms Threadswitchkontext ist kaum merkbar aber wenn das jedesmal in einer Schlaufe gemacht wird die 1'000'0000 mal ausgeführt wird macht das einen riesigen Unterschied. Ohne Propertynode läuft die Schleife meist in einigen 100ms durch. Mit Propertynode dauert es schnell mal 1 Minute oder mehr.

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
05.08.2011, 08:18
Beitrag #8

Kiesch Offline
LVF-Stammgast
***


Beiträge: 396
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: val(sgnl) vermeiden
Das heist es würde sich in meinem Fall vermutlich lohnen das ganze auf Queues umzustellen die dann gleich vor Ort den zu versendenden Befehl generieren bzw. die Sendeschleife bedienen (direkt versenden wäre natürlich sicher schneller, aber auch deutlich mehr aufwand als das nur an die Sendeschleife weiterzureichen). Das sollte ja dann deutlich schneller sein (?).

Zitat:Märchen und Geschichten werden erzählt am Lagerfeuer, technischen Fakten werden mitgeteilt (oder so). (Genauso wie Software nicht auf einem Server "herumliegt", die ist dort installiert.)
*Zitat: IchSelbst*
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
  EOF Fehler vermeiden chrissy 6 5.055 13.12.2016 08:26
Letzter Beitrag: chrissy
  Polling von Curser-Position in Waveform Graph vermeiden UFPhC 11 7.686 16.10.2014 12:00
Letzter Beitrag: Trinitatis
  Wie sehr großen Cluster vermeiden? Matze 10 8.227 31.10.2013 17:21
Letzter Beitrag: macmarvin
  Wert von numer. Bedienelement kontinuierlich erhöhen (Sprung vermeiden) lemmo 3 5.316 28.04.2011 18:14
Letzter Beitrag: Lucki
  Express-VIS - Warum sollte man sie vermeiden? Matze 8 7.007 28.04.2010 12:00
Letzter Beitrag: Matze
  Schieberegister vermeiden skywalker 2 3.531 26.01.2010 13:07
Letzter Beitrag: Lucki

Gehe zu: