LabVIEWForum.de
Ergebnis Rechnung als "Controller" verwenden - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Ergebnis Rechnung als "Controller" verwenden (/Thread-Ergebnis-Rechnung-als-Controller-verwenden)

Seiten: 1 2 3


Ergebnis Rechnung als "Controller" verwenden - TenaciousB - 17.03.2013 18:52

Hallo LabView-Forum,
bin immer noch blutiger Anfänger, deshalb verzeiht mir folgende Frage, sollte Sie für manch erfahrenen Benutzer doch etwas komisch erscheinen…

Das Problem ist folgendes:

Ich habe mir einen Schrittmotor (mit Endstufe) von Firma Phidgets besorgt.
Diesen möchte ich nun per Knopfdruck nach links und rechts drehen lassen. Da die Schrittmotoren nur verschiedene Positionen (TargetPosition) anfahren können, hab ich mir dies dann so vorgestellt:
Ist ein Schalter auf „True“ soll der Motor die Position z.B. +50000 anfahren. Ist der Schalter auf „False“ soll er die Position -50000 anfahren.

Das Mini-Programm per Knopfdruck +50000 oder -50000 in einer Anzeige erscheinen zu lassen, habe ich schon geschrieben. (PositionTF [attachment=43980]).
Wenn ich dieses in die Schrittmotorsteuerung einpflege, habe ich nun aber das Problem, dass die Schrittmotorsteuerung nur reagiert, wenn die Anzeige (Ergebnis) als „Control“ und nicht als „Indicator“ verwendet wird.


Meine konkrete Frage:
Gibt es eine Möglichkeit das Ergebnis einer Rechnung, welches ja in einer Anzeige als „Indicator“ dargestellt wird, direkt an ein Kontrollfeld weiterzuleiten?
Oder nochmals allgemeiner gefragt: In einem Kontrollfeld soll per Kopfdruck einmal +50000 und einmal -50000 stehen.
Wie könnte man dies noch realisieren?
Sollte ich mich mit meiner Idee total auf dem Holzweg befinden, bin ich für jegliche Vorschläge offen. Smile



Vielen Dank
Beste Grüße


Lv85_img


RE: Ergebnis Rechnung als "Controler" verwenden - NWOmason - 18.03.2013 06:45

(17.03.2013 18:52 )TenaciousB schrieb:  Gibt es eine Möglichkeit das Ergebnis einer Rechnung, welches ja in einer Anzeige als „Indicator“ dargestellt wird, direkt an ein Kontrollfeld weiterzuleiten?
Oder nochmals allgemeiner gefragt: In einem Kontrollfeld soll per Kopfdruck einmal +50000 und einmal -50000 stehen.
Wie könnte man dies noch realisieren?

Im einfachsten Fall erstellst du einfache eine lokale Variabele (Rechtsklick aufs Controll»Create»Lokal Variable). Dann kannst du programmatisch Werte in Controls schreiben:

[attachment=43981]


Alternativen dazu gibts viele (Aufruf der Schrittmotorensteuerung als SubVI + Übergabe des Wertes, usw.) und kommt dann individuell auf die Steuerung des Schrittmotors an und was noch alles zum Programmumfang dazugehört.

Beste Grüße,
NWO


RE: Ergebnis Rechnung als "Controler" verwenden - GerdW - 18.03.2013 09:02

Hallo Tenacious,

Zitat:Wenn ich dieses in die Schrittmotorsteuerung einpflege, habe ich nun aber das Problem, dass die Schrittmotorsteuerung nur reagiert, wenn die Anzeige (Ergebnis) als „Control“ und nicht als „Indicator“ verwendet wird.
Könnte es sein, dass die "Schrittmotorsteuerung" - die du uns, obwohl dort das Problem auftritt, nicht zeigst - eine Eventstruktur verwendet?
Dann wird dir der Tipp von NWO auch nicht viel weiterhelfen! Dann bitte eine "Value signalling"-Property verwenden...


RE: Ergebnis Rechnung als "Controller" verwenden - TenaciousB - 18.03.2013 22:14

Hallo,
ich bedanke mich für eure Antworten!

NWO, ich habe es wie von dir vorgeschlagen versucht. Doch leider funktioniert es nicht.
Aber wahrscheinlich ist es naheliegend, dass meine Herangehensweise falsch ist, da wird GerdW schon recht haben. Wink

Ich wollte es aber auf diese Weise versuchen, da es mir so am einfachsten erschien mein Ziel zu erreichen.
Die Sache ist nämlich die:
Ich habe das Beispielprogramm zur Schrittmotorsteuerung von Phidgets heruntergeladen und nehme dies nun als Grundlage, um es nach meinen Wünschen zu verändern.
Ändern ist einfacher als neu aufbauen.
Anstelle meiner Anweisung (True +50000; False -50000) war vorhin nämlich ein Schieberegler. Meine Idee: Ersetzte (ganz einfach Wink ) das schieben mit der Maus, um eine bestimmte Position zu erreichen mit einem Schalter, der auf Knopfdruck einmal +50000 und einmal -50000 einsetzt.

Ich dachte so kann ich dies lösen und deshalb hab ich auch nicht gleich die ganze Schrittmotorsteuerung hochgeladen… (Schrittmotorsteuerung:[attachment=43988])

Nun möchte ich aber doch noch einen Schritt zurückgehen und erklären was ich eigentlich im Sinn habe:
Bei der Schrittmotorendstufe gibt es auch 4 Eingänge (True; False). Schließt man daran Mikroswitch an, kann man diese z.B. als Endschalter verwenden.

Meine Intention ist es, den Motor zwischen den zwei Endschaltern hin und her laufen zu lassen.
Bedeutet:
Ist ein Endschalter auf True so setzt er ein FlipFlop auf True, ist dieser Wert True so läuft der Motor auf z.B. +50000. Läuft der Motor nun auf den unteren Endschalter so setzt dieses Signal, den FlipFlop auf False. Der Motor muss nun zu TargetPosition -50000. Die 50000 werden natürlich nie erreicht, da die Endschalter physisch zwischen den Werten liegen. Der Motor läuft also undendlich lang zwischen zwei Endschaltern hin und her. Gestoppt wird der Motor durch klatschen. Ein Programm dafür habe ich schon zusammengebaut. (Es funktioniert über Aufnahme und Pegelveränderung).



So jetzt zurück zum Problem:
Ja stimmt die Schrittmotorsteuerung arbeitet mit Events.
Value Signaling Property war vom Schieberegler zuvor schon eingefügt.[attachment=43990] Nur funktioniert dies nun nicht mehr wie gewünscht. Die +50000 und -50000 werden zwar eingesetzt, jedoch reagiert der Motor nur, wenn ich den Kontroller verändere.

Was habe ich falsch gemacht?


Beste Grüße
TenaciousB


RE: Ergebnis Rechnung als "Controller" verwenden - GerdW - 18.03.2013 22:37

Hallo TenaciousB,

ja, die Steuerung arbeitet Event-basiert. Du musst also Events triggern - und das macht man mit der Property "Value (signalling)". Und eben diese sehe ich nirgends in deinem VI...

- Die Property "Value" erzeugt KEIN Event...
- Ein Schreiben in eine "Value signalling"-Property im INIT-Case (wie im Bild angedeutet) würde nur ein einmaliges Event erzeugen...
- Du musst natürlich auch deine Benutzereingaben mittels des Buttons in eine "Value signalling"-Property schreiben, wenn du Events auslösen willst...
- Momentan würde jede Iteration ein Event auslösen, sobald du die lokale Variable durch die genannte Property ersetzt. Das ist nicht der Weisheit letzter Schluss...
- Warum erstellst du nicht einen weiteren Eventcase, welcher durch deinen Button ausgelöst wird? Und in diesem dann das andere Event durch die genannte Property triggern?

Zitat:Value Signaling Property war vom Schieberegler zuvor schon eingefügt. ... Was habe ich falsch gemacht?
Dein Fehler ist in Leseproblemen begründet Big Grin
Ich kann im Bild jedenfalls keine "Value signalling"-Property entdecken (im VI auch nicht)...


RE: Ergebnis Rechnung als "Controller" verwenden - TenaciousB - 19.03.2013 21:52

Hallo GerdW,
also das mit meinem Leseproblem hab ich nun verstanden… „Value“ und „Value Signaling“ ist nicht das Selbe! Wink
Deinen Rat ein weiteres Eventcase ausgelöst durch meinen Taster oder eben nachher durch Input 0 und Input 1 in Kombination mit FlipFlop auszulösen, ist mir auch schon in den Sinn gekommen.
Jedoch erscheint mir der Weg bis dahin noch sehr, sehr steinig! Wink

Also wie du im Bild [attachment=44025] siehst habe ich ein neues EventCase erzeugt. Dieses reagiert auf True und False von Schalter „Boolean“. Dies funktioniert auch soweit. (Ich drücke auf dem Taster und in der Anzeige Target Position erscheint einmal 50000 und einmal -50000). Jedoch funktioniert das mit dem Val(Sgnl) nicht richtig. Vielleicht habe ich es falsch erzeugt? Rechtsclick auf Indicator: „TargetPosition“ dann „Create“, dann „PropertyNode“, dann „Value Signaling“.

Vielleicht ist es an falscher Stelle… in der falschen Schleife?

Das „Value“-Feld, welches ich bei obigen Bild eingekreist habe, hat auch etwas mit dem Ganzen zu tun, da dessen Terminal der Indicator „TargetPosition“ ist. Das Terminal von „Target Position Val(Sgnl)“ ist auch der Indicator „TargetPosition“. Vielleicht doppelt belegt? Ist das, das Problem??

Versteht mich bitte nicht falsch, wenn ich gar zu blöd frage!! Ich geb mir wirklich Mühe. Das Buch „Handbuch für die Programmierung mit LabView“ habe ich mir schon seit längerem besorgt. Jedoch ist es schwierig die Zusammenhänge zu verstehen! Diese Schrittmotorensteuerung ist als Zweitprojekt in LabView doch etwas umfangreich.

Danke
schöne Grüße!


RE: Ergebnis Rechnung als "Controller" verwenden - GerdW - 21.03.2013 09:26

Hallo B,

Zitat:Also wie du im Bild siehst habe ich ein neues EventCase erzeugt. Dieses reagiert auf True und False von Schalter „Boolean“. Dies funktioniert auch soweit. (Ich drücke auf dem Taster und in der Anzeige Target Position erscheint einmal 50000 und einmal -50000). Jedoch funktioniert das mit dem Val(Sgnl) nicht richtig. Vielleicht habe ich es falsch erzeugt?
- Die PropertyNode hast du vollkommen richtig erzeugt, "falsch erzeugen" geht eigentlich auch nicht...
- Was funktioniert nicht richtig? Hast du Debugging gemacht? Bekommst du Fehlermeldungen?
- Nachdem du in diese Property geschrieben hast, sollte im nächsten Schleifendurchlauf das dazu passende Event ausgeführt werden. Passiert das bei dir? (Ich kann dein VI aufgrund der ganzen fehlenden subVIs nicht testen...)
EDIT: Wenn ich aus deinem VI alles rausschmeiße, was nicht mit dem Thema zu tun hat, wird nach jedem Boolean-Event auch ein "Target Position"-Event abgearbeitet...

Anmerkung:
- Wenn du in die Proeprty "Value (signalling)" schreibst, musst du nicht parallel nochmal in das Terminal schreiben. (Oder denkst du "doppelt hält besser"?)
- Wenn dein "Boolean"-Terminal ungenutzt rumliegt, kannst du es auch ins Event legen und dort abfragen (IMHO "sauberer" als "Neuer Wert" zu verwenden, insbesondere bei "Latched"-Schaltern...). Dies gilt auch für andere ungenutzte Terminals...


RE: Ergebnis Rechnung als "Controller" verwenden - Lucki - 21.03.2013 09:35

Sollte man da nicht mal den Titel nachträglich ändern? Ein "Controller" ist etwas ganz anderes als was hier gemeint ist. Also entweder in "Control" oder "Bedienelement" ändern?


RE: Ergebnis Rechnung als "Controller" verwenden - TenaciousB - 24.03.2013 13:53

Hallo GerdW,
soweit es mir möglich war, habe ich die Zeit in den letzten vergangenen Tagen damit verbracht, deine Vorschläge umzusetzen und mich generell mit LabView befasst.

Bin zum Thema FlipFlop einen großen Schritt weitergekommen !!! Smile
Das Flipflop als Unterprogramm eingebaut, reagiert nun auf die Inputs der Endstufe. Auf einem Ausgang des FlipFlops habe ich „Select“ angeschlossen. Bei „True“ gibt es „+ Constant“ weiter, bei False „- Constant“. Welcher Wert gerade ausgegeben wird, steht im Indicator „TargetPosition2“. Damit verbunden „Val(Signl)“ (richtig erzeugt Wink aus „TargetPosition2“)

„Ellipse 1“ im Bild. [attachment=44088]
Wie du siehst befindet sich das Ganze sich in der While-Schleife.

Um doppeltes zu vermeiden, habe ich „Value“ Target Position von Bild „Schrittmotorsteuerung_N4“ gelöscht „Ellipse 2“

Damit die Schrittmotorsteuerung anspricht, habe ich nun ein neues „Event“ erzeugt, welches auf eine Wertänderung („+Constant“; „-Constant“) reagiert.
„Ellipse 3“ im Bild. [attachment=44089]

Und siehe da es funktioniert!! Smile Der Motor reagiert auf die Endschalter und dreht in die entgegengesetzte Richtung sobald der Befehl kommt.
„Val(Signl)“ war also genau das was ich gebraucht habe! Danke Big Grin


Doch leider sind nun neue Probleme aufgetreten:
Während das Programm läuft kann ich keine Tasten oder Schieberegler mehr betätigen! Sad
Pei Programmaufruf fährt der Motor direkt auf den Wert einer der beiden Konstanten, obwohl der Motor gar nicht „engaged“ ist.

An was kann dies liegen?Huh


Hier nochmals das Programm:[attachment=44090]

... auch die RAR-Datei mit den ganzen Unterprogrammen...[attachment=44091] So müsstest du alles öffnen können.. oder?



Auf jedem Fall, vielen Dank für die bis jetzt geleistete Hilfe!Shy


Hallo Lucky,
natürlich, kein Problem! Das wusste ich nicht.
Wahrscheinlich wäre auch ein Bezug auf „Schrittmotorsteuerung“ im Titel angebracht.

Wo kann man das ändern?

Blush


RE: Ergebnis Rechnung als "Controller" verwenden - GerdW - 24.03.2013 20:14

Hallo B,

Zitat:Das Flipflop als Unterprogramm eingebaut
Und warum so kompliziert?
So geht's auch:
[attachment=44092]
Wenn du das Flipflop irgendwann mehr als einmal in einem VI verwenden willst, solltest du es "reentrant" ("Ablaufinvariant") einstellen!

Zitat:Während das Programm läuft kann ich keine Tasten oder Schieberegler mehr betätigen!
In jedem Schleifendurchlauf erzeugst du ein neues ValueChange-Event für TargetPosition - und dieses wird abgearbeitet. Währenddessen sind andere Events blockiert (Standardeinstellung der Event-Struktur!) und du kannst nichts mehr bedienen... Alles so wie du es programmiert hast Big Grin
Es hatte Gründe, warum ich weiter oben schrieb:
Zitat:- Momentan würde jede Iteration ein Event auslösen, sobald du die lokale Variable durch die genannte Property ersetzt. Das ist nicht der Weisheit letzter Schluss...
Jetzt kennst du die Gründe!

Einfache Lösung: nur dann ein Event erzeugen, wenn sich der Wert für TargetPosition (wirklich) ändert...