LabVIEWForum.de - The invisible VI!

LabVIEWForum.de

Normale Version: The invisible VI!
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Servus,

ich habe es irgendwie geschafft, eine leere VI zu erzeugen, die von der ausführenden Labview-Instanz nicht als "VI in memory" erkannt wird Confused...
Genau genommen habe ich die VI nicht selbst erstellt, die genaue Quelle ist mir unbekannt. Mir ist nur irgendwann aufgefallen, dass diese VI weder im "VI hierarchy" Fenster noch unter den "VIs in memory" (application property node) angezeigt wird, was mir sehr merkwürdig vorkam. Die ursprüngliche VI enthielt keinen Code, der das irgendwie erklären konnte und das Entfernen von Code-Teilen hat nichts am Verhalten geändert. Das ging dann soweit, dass ich das komplette Blockdiagramm und Frontpanel gelöscht und alle "VI properties" auf Default-Werte gesetzt habe und die "blanke" VI-Datei als Kopie gespeichert habe.

Aus diesem "unsichtbaren" Template kann man sich dann ein beliebiges Programm basteln... Es verhält sich eigentlich nicht anders als jede andere VI (man kann es als subVI callen, per Referenz mit Dateipfad zugreifen und natürlich ganz normal ausführen), aber es taucht einfach nicht in der Hierarchie auf (und somit auch keine Child-Objekte). Gibt es irgendwelche flags, womit man die VI vor den "VIs in memory" verstecken kann (und das Hierarchie-Fenster baut ja vermutlich darauf auf) oder habt ihr irgendeine Erklärung dafür?

Hier sind ein paar Screenshots von einem Minimalbeispiel. Es ist ein triviales Programm, das die Uhrzeit anzeigt und es enthält den simple error handler, damit im "VI hierarchy" Fenster Child-Objekte angezeigt werden:

[Bild: attachment.php?aid=57140]
Nur "the invisible vi.vi" ist offen, das Hierarchie-Fenster ist leer.

[Bild: attachment.php?aid=57141]
Hier ist ein Vergleich mit einer "normalen" VI. Die clock.vi hat denselben Code wie die invisible, wurde aber normal über FIle -> New VI erstellt (und nur der Code reinkopiert). Zusätzlich zeigt die "Opened VIs.vi" alle "VIs in memory" mit offenem front panel - sie listet nur sich selbst und die clock.vi, aber nicht die invisible. Ebenso zeigt das Hierarchie-Fenster nur die clock.vi mit den Subroutinen sowie die "Opened VIs.vi", aber nicht die invisible.

Die invisible VI ist ca. 4kB größer als die clock.vi. Im Hexeditor sieht es so aus, als hätten die zusätzlichen 4kB der invisible VI was mit dem Icon Editor zu tun (das Icon wurde bearbeitet), währen die clock.vi ein Standard-Icon hat, das nie bearbeitet wurde. Darüber hinaus gibt es keine offensichtlichen Unterschiede, also können es wohl nur irgendwelche flags sein - hat jemand eine Idee?

Alle 3 VIs sind im Anhang (lv16_img). Die Tests wurden unter Win 10 x64 und Labview 2016 32bit gemacht. Ich habe auch versucht die invisible VI als vorherige Version zu speichern (lv14_img), aber sie zeigt dasselbe Verhalten.
Sehr interessant! Was NI wohl dazu zu sagen hat?

Ich hab's auf Windows 7 SP1 und LabVIEW 2016 mit allen aktuellen Updates probiert und kann die Beobachtungen bestätigen.
Das VI wird auch dann nicht angezeigt, wenn es als SubVI in einem normalen VI aufgerufen wird.

Gruß Holger
Ich spekuliere, aber ich denke, ich liege mit meiner Spekulation richtig:

Du hast es offenbar geschafft, eine System-VI der LabVIEW-Entwicklungsumgebung abzuändern. Man bedenke nur, wie groß die Anzeige der "VIs in memory" tatsächlich wäre, wenn immer ALLE VIs angezeigt würden. Extrem viele Komponenten sind schließlich in LabVIEW geschrieben (wie z.B. der Icon Editor uvm.).

Beweis meiner Vermutung: Die versteckte VI-Property "IsSystemVI" zeigt bei deinem Invisible-VI als Wert TRUE, das Clock-VI dagegen FALSE. So etwas ist natürlich nicht über irgendwelche Menüs einstellbar.

Gruß, Jens
Ah, versteckte Properties, die in der Datei gespeichert werden Blink - darauf bin ich nicht gekommen, danke! Top1
Referenz-URLs