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!
24.10.2009, 15:24 (Dieser Beitrag wurde zuletzt bearbeitet: 24.10.2009 18:19 von jg.)
Zwecks programmierung einer Motorinduzierung habe ich ein SUB-VI erstellt, welches mir die erwarteten Signale des Motors liefert. Da die Signale kontinuierlich sind habe ich die Signalgeneratoren in eine Whileschlaufe gepackt. Als ich nun im Main-VI die Werte des "Motors" auslesen wollte kam nichts raus. Nach einigem pröbeln fand ich heraus, dass es etwas mit der Whileschlaufe zu tun haben muss:
Ich habe ein einfaches Beispiel einer Mutiplikation in ein SUB-VI gepackt und wollte dieses in ein anderes VI einbinden, dies funktioniert solange man im SubVi keine Whileschlaufe hat, macht man aber eine ist der Effekt derselbe wie der obengenannte, es werden keine Daten von den Anschlüssen empfangen.
Kann mir Jemand weiterhelfen? Ich wäre sehr froh darüber...
Du hast Dir die Antwort doch schon selbst gegeben.
Lass die Schleife im subvi weg und pack das Haupt-vi in die while-Schleife.
Dann läuft es so, wie von Dir geplant.
@Andreasser:
Bitte LVF-Regeln lesen und beachten, in deinem Fall Punkt 4. Screenshots oder VIs bitte hier im Forum hochladen, nicht über externe Links.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Danke für deine Antwort Peter
Im falle des einfachen Beispieles funktioniert dies schon, ist aber nicht ganz in meinem Sinne, ich möchte in meinem MainVI einen Block haben der Motor heisst und einen Eingang für die gewünschte Drehzahl und drei Ausgänge für die gewünschten Signale hat und kontinuierlich diese Signale abgibt, genau so wie es der reale Motor später auch tun wird.
Das erste Problem stellt sich schon wenn ich die Whileschlaufe im SUBVI weglasse, dann läuft dieses nurnoch ca 0.1s und dann beginnt das Blockdiagramm schwarzweiss zu blinken, könnte etwas mit den eingebauten Datenverlaufsdiagrammen zu tun haben, denn wenn ich nur diese in eine Whileschlaufe packe, blinkt es nicht mehr, allerdings ist dann das Signal auch nur bis ca 0.1s und somit nicht kontinuierlich.
Was die Ausgänge anbelangt habe ich einmal probeweise nur das Signal der Drehzahl wieder hinauszuziehen, doch auch das geht nicht, ich hänge mal das Bild des SUBVI an, vielleicht hilft dies mein Problem zu verstehen.
@jens
Tschuldigung, wird natürlich in Zukunft so gehandhabt
also ganz kann ich dein Problem nicht nachvollziehen.
Bei meinem kleinen gebauten Nachbau läuft es so, wie geplant.
Soweit möglich vermeide ich while-Schliefen im sub. Ansonsten musst Du Dich mit Meldern, Queues... beschäftigen.
Peter
25.10.2009, 12:53 (Dieser Beitrag wurde zuletzt bearbeitet: 25.10.2009 13:03 von IchSelbst.)
' schrieb:Im falle des einfachen Beispieles funktioniert dies schon, ist aber nicht ganz in meinem Sinne, ich möchte in meinem MainVI einen Block haben der Motor heisst und einen Eingang für die gewünschte Drehzahl und drei Ausgänge für die gewünschten Signale hat und kontinuierlich diese Signale abgibt, genau so wie es der reale Motor später auch tun wird.
"Kontinuierlich" im Sinne eines analogen Signales, bei dem idealerweise dT=0 ist, gibt es in Software nicht. In Software bist du immer an ein Raster, sei es noch so klein, gebunden. Willst du ein SubVI machen, das einen Motor simuliert, dann würde ich folgendes Vorgehen vorschlagen.
Mach ein SubSI, das unabhängig vom (Rest des) MainVI läuft. Im MainVI brauchst du zwangsläufig eine While-Schleife, weil hier ja ständig das selbe gemacht werden soll: nämlich kucken, was der Motor gerade macht. Das Motor-SubVI platzierst du außerhalb der While-Schleife, also parallel zu dieser. Im Motor-SubVI läuft auch eine While-Schleife, die nichts weiter macht, als die drei Werte in Abhängigkeit der Drehzahl zu berechnen. Und jetzt kommts: Diese drei Werte schreibst du in einen Cluster, den du in eine QUEUE schreibst (es würde auch ein MELDER gehen). Im MainVI, respektive innerhalb der While-Schleife liest du die Queue aus. Die Motor-SubVI-Whileschleife kannst du mit einer beliebigen Geschwindigkeit laufen lassen: von 1 bis 100ms, ist total unabhängig vom MainVI. Eben wie der reale Motor auch. Ich empfehle vorerst ein Raster von 1ms.
Die While-Schleife im MainVI liest nun die Queue aus und gibt die Daten z.B. an einen Graph weiter. Hier siehst du gleich: Dieser While-Schleife ist es egal, ob die Daten, weil sie in einer Queue stehen, vom Motor-Simulator kommen oder vom richtigen Motor (der später das Simulator-SubVI ersetzen wird). Die While-Schleife im MainVI kannst du mit einer beliebigen Geschwindigkeit laufen lassen. Hier empfehle ich ca. 250ms, weil ein schnellerer Refresh des Graphen nicht sinnvoll ist. Folge: Pro 250ms werden 250 Werte aus der Queue gelesen!
Mit der Drehzahlvorgabe verfährst du im übrigen genauso: Drehzahl in eine Queue schreiben und diese Queue im Motor-SubVI auslesen.
Noch ein Hinweis:
LV arbeitet nach dem Prinzip des Datenflussen. Das bedeutet letztendlich, dass an den Ausgängen eines SubVIs erst dann Daten anliegen, wenn das SubVI beendet wird. Und das geschieht eben erst dann, wenn eine While-Schleife im SubVI beendet wurde. Um letzteres zu umgehen, verwendet man eben Queues/Melder. Genauso heißt das auch: Solange das SubVI läuft, steht der entsprechende Datenfluß im aufrufenden VI.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
@Peter: Danke, da bin ich dran... Vielleicht gelingt es mir dochnoch..
@IchSelbst: Besten Dank für deine ausführliche Anleitung, isch habe mich nun Stundenlang darin versucht, bringe es aber nicht hin, ich vermute ein Verständnisproblem beim initiieren von Clustern und Queues, kannst du dir mein Screenshot diesbezüglich betrachten? Ich wäre froh, wenn du mir einen Tipp geben könntest.
Besten Dank für das kleine Beispiel, ich muss zugeben, dass ich noch etwas Mühe habe es nachzuvollziehen, aber werde mir Morgen in der Bibliothek noch das eine oder andere Buch holen (hab gemerkt dass mein Einsteigerbuch sogut wie keine Infos liefert) und mich intensiv damit auseinandersetzen, ich melde mich auf jeden Fall wieder.
Ich bin nun durch mit der Thematik und habe so einiges über Cluster und Queues aus deinem Beispiel gelernt IchSelbst, Besten Dank für die nette und kompetente Unterstützung!