Allgemeine Fragen zum besseren Verständnis
Wenigstens Antwort auf 2 Fragen:
zu 1.)
Problematisch bei lokalen Variablen ist vor allem, daß es zu unerwarteten Resultaten kommen kann, da das Auslesen/Beschreiben manchmal nicht zu dem Zeitpunkt erfolgt, in dem der Programmierer das erwartet hatte. Deshalb die einschlägigen Beispiele für solches Verhalten studieren und verinnerlichen!
Eigenschaftsknoten sind noch langsamer als lokale Variable. Deshalb die Eigenschaft "Wert" statt lokaler Variablen nur verwenden, wenn der Eigenschaftsknoten ohnehin wegen anderer Eigenschaften aufgerufen wurde.
Was man möglichst vermeiden soll:
a) Von einer komplexen Variablen, beispielweise einem Array mit 100000den von Bytes oder einem ebensolchem Cluster, bedenkenlos ein oder mehrere lokale Variable erstellen.
c) noch schlechter ist es, wenn eine solche lokale Variable in der zeitkritischen Hauptausführungsschlefe verwendet wird. Man sollte also z.B. die einmalige Initialisierung über eine lokale Variable vornehmen und das Element selber in der Hauptausführungsschleife verwenden und nicht umgekehrt.
Man vermeide auch die bedenkenlose Verwendung von Eigenschaftsknoten in der Hauptausführungschleife. Es ist schlecht, z.B die Eigenschaft "sichtbar:true" immer wieder auszuführen, wo doch ein einziger Ausruf vor dem Schleifendurchlauf genügt hätte.
Es gibt Techniken - Benutzung von shift-Registern in Verbindung mit State machines - um lokale Variable ganz zu vermeiden. Es gibt Puristen, die mit so einem Apparat loszuschlagen, nur um ein oder einige lokale Variable in einer nicht zeitkritischen Anwendung zu umgehen. Dazu kann man nur sagen, daß in den Beispielen von NI solche Aufstände nicht gemacht werden, und das es von NI oder in mir bekannten Tutorials auch keine Empfehlung zur generellen Vermeidung von lokalen Veriablen gibt.
zu 2)
Das ist immer dann der Fall, wenn das Sub-VI nicht initialisierte Schleifenregister zu Daten-Zwischenspeicherung enthält. Beispiel: in einem Point-to-Point Filter VI bleibt der momentane Status des Filters gespeichert. Wenn das Filter-VI für unterschiedliche Kanäle aufgerufen wird, geht es in die Hose. In diesen Fall muß das Sub-VI auf "reentrant" gesetzt werden.
Ansonsten bestehen die Bedenken nicht. Nach meinen Erfahrungen ist irgendwie dafür gesorgt, daß zwei verschiedene Instanzen desselben SUB-VI nie gleichzeitig abgearbeitet werden.
|