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 

Lokale Variablen wie in textbasierten Sprachen nutzen



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.05.2014, 11:10
Beitrag #1

RobBoss Offline
LVF-Neueinsteiger


Beiträge: 1
Registriert seit: May 2014

2013
2014
DE



Question Lokale Variablen wie in textbasierten Sprachen nutzen
Hallo,

ich programmiere seit vielen Jahren in textbasierten Sprachen, wie Java und PHP. Die Umstellung auf das Datenflussmodell von Labview war denkbar groß. In meinem Programm zur Anlagenüberwachung und Steuerung laufen viele Prozesse nebeneinander ab und benötigen Werte aus anderen Teilen wie z.B. Temperaturen auslesen, die dann von mehrern anderen Codeteilen genutzt werden. Damit mein Code nicht wie ein Sprinnennetz aussieht verwendete ich eine Menge lokaler Variablen. Wie ich jetzt weiß klappt das irgendwann nicht mehr, da nicht sicher ist, welcher Codeteil wann ausgeführt wird. Ganz anders als bei textbasierten Sprachen. Dem entsprechende Probleme treten in meinem Programm nun auf. Nun meine Fragen:

Gibt es eine Möglichkeit lokale Variablen so zu nutzen, wie man es aus textbasierten Sprachen her kennt? Also das der Wert erst gelesen wird, wenn er an andere Stelle beschrieben wurde?
Welche Strategien sind erfahrungsgemäß am besten, um sicher zu stellen, das Fragmente vor anderen ausgeführt werden?

In einem Teil habe ich durch eine logische Schaltung sichergestellt, das ein ansonsten unabhängiges Fragment aus mehreren SubVIs garantiert vor einem anderen ausgeführt wird. Das allgemein zu machen macht das Programm aber sehr komplex und unübersichtlich. Die direkte Verkabelung sähe noch schlimmer aus.

PS: Geschwindigkeit und Speicherbedarf sind für die Problemlösung absolut irrelevant.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.05.2014, 11:50 (Dieser Beitrag wurde zuletzt bearbeitet: 27.05.2014 11:59 von th13.)
Beitrag #2

th13 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 178
Registriert seit: Oct 2013

2020 SP1
2013
EN


Deutschland
RE: Lokale Variablen wie in textbasierten Sprachen nutzen
Hi Rob,

Wenn du von mehreren Stellen auf Daten zugreifen möchtest, bieten sich Funktional Globale Variablen (FGV) an. Wenn du parallel ausführbare Programmteile hast, musst du trotzdem noch selber darauf achten, dass du Werte erst verwendest wenn sie gültig sind. Das ist in textbasierten Sprachen auch nicht anders. Da benutzt man für Parallelität Threads. In LabVIEW muss man "nur" den Datenfluss verzweigen.

Es gibt auch andere Möglichkeiten, zB Queues oder eine eigene Klasse für Datenhaltung wenn du OOP benutzt.

Thomas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.05.2014, 11:52
Beitrag #3

NoWay Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 241
Registriert seit: Jul 2013

LV-2019
2013
EN


Deutschland
RE: Lokale Variablen wie in textbasierten Sprachen nutzen
(27.05.2014 11:10 )RobBoss schrieb:  Welche Strategien sind erfahrungsgemäß am besten, um sicher zu stellen, das Fragmente vor anderen ausgeführt werden?

Meinst du das im Sinne von Interrupts oder im Sinne von sequentiellen Abläufen? Dafür gibts eine fertige Schleife (Sequence Loop). Andernfalls eventuell über eine Event Structure? Das sind jetzt die mir auf Anhieb bekannten Möglichkeiten und ich bin ebenfalls noch ziemlicher Anfänger. Da gibt es sicherlich noch weitere Methoden.

Gruß
NoWay
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.05.2014, 11:57 (Dieser Beitrag wurde zuletzt bearbeitet: 27.05.2014 12:02 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Lokale Variablen wie in textbasierten Sprachen nutzen
Hallo,

Zitat:Also das der Wert erst gelesen wird, wenn er an andere Stelle beschrieben wurde?
Weitere Möglichkeiten:
- Melder/Notifier, wenn es um Einzelwerte (ohne Historie) geht
- Queues, wenn Daten verlustfrei von einem Producer zu einem Consumer transportiert werden sollen
- die schon angesprochenen FGVs
- Key-Value-Pairs (die innerhalb einer FGV verwaltet werden): dazu gibt es Implementierungen bei NI, z.B. diese hier

Zitat:Welche Strategien sind erfahrungsgemäß am besten, um sicher zu stellen, das Fragmente vor anderen ausgeführt werden?
- wichtigster Punkt: durchgehende Nutzung des DATAFLOW durch Verdrahtung unter Verzicht auf lokale Variablen! THINK DATAFLOW! (Das steht ziemlich am Anfang in der LabVIEW-Hilfe…)
- State machines (da gibt es ein Beispiel-Projekt zu)
- Producer-Consumer-Schema (da gibt es ein Beispiel-Projekt zu)
- Queued Message Handler (da gibt es…)
- quasi jedes vernünftige Softwaredesign, welches man sich vor dem eigentlichen Programmieren überlegt hat…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
27.05.2014, 12:02
Beitrag #5

LogMAN Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Apr 2014

2011 SP1
2008
EN


Deutschland
RE: Lokale Variablen wie in textbasierten Sprachen nutzen
Die Verwendung von lokalen Variablen als Datenspeicher sind eine denkbar schlechte Lösung, wie du bereits richtig erkannt hast. Welcher Codeteil wann ausgeführt wird hängt bei LabVIEW genauso wie bei textbasierten Systemen von deiner Programmierung ab. In LabVIEW ist es nur sehr viel einfacher "mal eben" einen neuen Thread zu starten.

Um deine Fragen zu beantworten:
Lokale Variablen können nicht serialisiert werden. Um Daten innerhalb derselbe Schleife zu puffern sind Schieberegister eine gute Lösung. Zum Senden von Daten aus einer Schleife in eine Andere eignen sich Queues. Wenn du den Zugriff auf Resourcen sperren möchtest gibt es Semaphoren.

Ich gehe davon aus, dass du alle Funktionen in ein VI geschrieben hast (wg. lokaler Variablen). Du solltest dein Programm nach logischen Einheiten und Schrittfolgen untersuchen und diese in einzelne Sub-VIs untergliedern (unter Verwendung der oben genannten Tools, um Daten auszutauschen).
Wenn deine Programmteile immer in einer bestimmten Folge, bzw. abhängig von dem Ergebnis des aktuellen Schrittes verarbeitet werden, solltest du dir die Funktionsweise eines Zustandsautomaten in LabVIEW näher ansehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
28.05.2014, 11:59
Beitrag #6

Kiesch Offline
LVF-Stammgast
***


Beiträge: 415
Registriert seit: Mar 2009

2019, 2018, 2016
2009
DE

04519
Deutschland
RE: Lokale Variablen wie in textbasierten Sprachen nutzen
Zwei wichtige Sachen vielleicht noch:

Es ist meist hilfreich SubVIs mit nem Fehlercluster (in und out) auszustatten, selbst wenn die intern gar keine Fehler werfen. Potentiell sollen die das zum einen eventuell irgendwann doch und zum zweiten bietet es sich in der Regel an genau über diesen Fehlercluster die sequentielle ausführung zu Steuern (da man die Fehler halt in der Regel einfach von Anfang bis ende durchschleift).

Außerdem: Um Kabelgewirr zu vermeiden gibt es Cluster. Da kannst du deine Kabel Bündeln und du kannst sogar die einzelnen Clusterelemente mit Namen versehen. Das verhält sich grundsätzlich wie ein Kabel das du durchziehst und mit einem unbundle by name kannst du dir anschließend jeweils "Einzelelemente" rausnehmen (ähnlich wie du es mit Variablen machen würdest) ohne den kompletten Cluster immer aufzuziehen.

P.S: Es wird btw. von NI angeraten maximal eine Monitorfläche pro VI zu benutzen damit die VIs übersichtlich bleiben. Wenn du das einhälst, kann es normalerweise nicht zu unübersichtlichem Kabelgewirr kommen Big Grin Wenns größer wird sollte man schauen wie man geschickt in SUBVIs gliedern und welche eingabedaten man entsprechend Bündeln kann.

Ansonsten, andere Varianten wie man Prozesssteuerung und Parrallelläufigkeit handhabt wurden ja schon weiter oben genannt.

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
  Lokale Variablen eliminieren / Signale Zusammenfassen Philipp841 8 5.296 30.09.2019 09:51
Letzter Beitrag: Philipp841
  Wie kann man Lokale Variablen sauber verpacken? Tobzn 10 7.895 04.03.2018 12:02
Letzter Beitrag: IchSelbst
  Lokale Variable galilio 5 4.896 09.02.2017 22:20
Letzter Beitrag: Trinitatis
  Viele Variablen in SubVI nutzen chrisw 3 3.837 02.12.2016 11:35
Letzter Beitrag: GerdW
  Python Code in LabVIEW nutzen n4f3ts 7 12.424 17.03.2016 09:23
Letzter Beitrag: n4f3ts
  Schleifenkommunikation: Melder und Benutzer-Ereignisse oder lokale Variablen lumaxo 7 6.520 19.03.2015 17:49
Letzter Beitrag: lumaxo

Gehe zu: