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!
Ich habe versucht mir mal einige Dinge von meiner VI in ein Word-File ausgeben zu lassen. Also das FrontPanel das Blockdiagramm und ein Diagramm vom FrontPanel.
Also die ersten zwei Dinge funktionieren gut, aber bei dem Diagramm (Waveform Chart) hapert es ein wenig.
Das wo das Protokoll erzeugt wird ist ne SubVI. Ich hab um das Diagramm da irgendwie reinzukriegen, im Hauptprogramm eine Reference vom Diagramm erstellt. Danach ne Stacked Seqence Sturcture über die Reference. Daraus ne SubVi gebastelt und somit habe ich ein Ding das ich in die SubVi(Protokoll) geben kann und dort an die Ctrl-Reference anhängen kann. Die erzeugte VI, wo die jetzt Reference-Controll drinnen ist hab ich wieder gelöscht. So dachte ich zumindest könnte das funktionieren.
Nur leider schreibt er mir da einen Fehler hin und zwar:
Error 1055 occurred at Invoke Node in Word_Insert_Control.vi->Append Control Image to Report.vi->my_Protokoll.vi->3dig_smallest_Test_newPWM_Tabed_PIDc.vi
Possible reason(s):
LabVIEW: Object reference is invalid.
Also nur zur Erklärung: "My_Protokoll" ist die Vi wo die ganzen Protokoll sachen drinnen sind, und die "3dig_smallest..." ist meine Haupt-VI.
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Protokoll erzeugen (Diagramm ist das Problem)
Lade doch am besten mal Deine VIs hoch, damit man das nachvollziehen kann.
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Ich hab das Problem jetzt mal "umgangen". Also ich hab einfach ne Reference vom Diagramm gebaut. Dann hab ich in der SubVI (my_Protokoll.vi) einfach ne ctrl reference gebastelt. Diese hab ich dann als Connector herausgeführt, und im Hauptprogramm geh ich dann mit meiner Reference vom Diagramm auf diesen Connenctor und schon funktionierts. Also ich denke es müsste anders auch gehen, also ohne dass ich da extra einen Connector brauche, aber ja, ich kann ja mal die Vi hochladen.
Also ich wollte gerne haben, dass ich diesen Reference Eingang nicht mehr brauch, sondern dass ich von irgendeiner anderen VI da drinnen die Reference reingeb ohne Connector zu brauchen. Also dass der Eingang (Ctrl Reference) sich schon auf das Diagramm von der anderen VI bezieht und ich ihm das nicht erst durch den Connector sagen muss.
Hallo,
korrigiert mich, wenn ich falsch liege, aber so weit ich weiß gibt es keine Möglichkeit, eine Reference in ein Sub-VI zu übertragen, ohne sie entweder über einen Connector oder über globale Variablen zu übergeben.
@theodrin: Gibt es einen besonderen Grund, warum Du die Reference nicht im Connector des Sub-VIs haben willst?
Na ja, im Moment gibt es den Grund noch nicht, aber ich dachte nur daran, falls die ProtokollVi wächst und ich da mehrer References reingebe. Dann muss ich ja sehr viele Connectors machen. Nur so mal als Überlegung.
Und ich wollte es vor allem so machen, weil ich gedacht hab, dass es geht und das wär ja irgendwie viel elleganter als so wie ich es jetzt mache. Aber ich denke es müsste gehen. Ich klemm nicht noch mal dahinter und probier was aus und falls ich es zusammenkrieg schreib ich wie ich es gemacht hab.
Falls ihr keine Antwort erhalten habts, dann hab ichs nicht geschafft, oder ich habs lassen, weil ich eh so zufrieden bin.
lg
Norbert
20.01.2007, 18:04 (Dieser Beitrag wurde zuletzt bearbeitet: 20.01.2007 18:21 von lynx.)
Wenn Du nicht genau weißt, wie viele Referenzen dem Sub-VI übergeben werden sollen, definier doch einen Konnektor des Typs Array von Referenzen auf die Diagramme.
Im SubVI selbst lässt Du dann eine For-Schleife über das Array laufen und erzeugst Dir damit dann die Bilder, die hintereinander in die Datei eingehängt werden.
Im Hauptprogramm werden dann die benötigten Referenzen zu einem Array zusammengepackt und dem SubVI übergeben.
Ist nicht schön, behebt aber das Problem, dass irgendwann das Konnektor-Feld ausgeht.
Experimentiere gerade ein bisschen mit den FrontPanel-Eigenschaften herum, müsste eigentlich gehen, sich die Graphen rauszusuchen...
EDIT: Habe mal was zusammengestümpert, das alle Graphen aus einem VI raussucht und die Referenzen in ein Array übergibt.
Dieses VI kann auch direkt in einem Sub-VI eingesetzt werden, dann muss der Pfad auf das Haupt-VI übergeben werden, aber die Referenzen sind nicht mehr im Konnektor. Siehe VI
Das ursprüngliche VI enthält ein Paar Fehler. Im Anhang eine verbesserte Version und eine Demonstration, wie Du es auf Dein Problem anwenden kannst.
Die Selektion, welche Art von Anzeigeelement gedruckt werden soll, wird jetzt durch den Klassennamen vorgenommen. Geht schneller, als ein Typecast mit Fehlerabfangen.
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Protokoll erzeugen (Diagramm ist das Problem)
Hallo Lynx,
muss man die VI-Referenz nicht auch schließen, oder geht das mit dem "Dispose Report"?
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Stimmt, sollte man natürlich auch wieder schließen; habe ich mal wieder vergessen.
Unter normalen Umständen macht dies keinen Unterschied; wenn das VI terminiert (wie in der Demonstration) wird die Referenz dann sowieso wieder zu. Ist aber schlechter Programmierstil, gebe ich offen zu.
Die geöffneten Referenzen auf die Controls werden intern vom Report-VI, das die Bilder erzeugt, wieder vernichtet, um die anderen Referenzen muss sich natürlich das andere VI kümmern.
Im Anhang eine verbesserte Version, die auch hinter sich aufräumt.
In den Testphasen hatte ich des Öfteren schon Fälle, wo Referenzen nicht geschlossen wurden, diese hat dann aber LabVIEW immer geschlossen.