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 das Problem dass ich einen booleschen Wert habe und diesen überprüfen möchte. Die Anforderung ist einfach, dass ich egal welchen Status er hat, bei einem Wechsel ein Ereignis ausgeführt wird.
Heisst es wird 10 Mal True gesendet und nix passiert, dann kommt False und es soll was passieren. Anderherum natürlich dann auch.
Damit möchte ich die Inhalte einer Anzeige löschen, damit dieses neu beschrieben wird.
Ich habe es schon mit einem Vergleich (Gleich?) gefolgt von einem Formelknoten verscucht, allerdings entsteht damit ein Kreis, der ja nicht erlaubt ist. Gibts vielleicht ne Möglichkeit das zu bewältigen. Ist bestimmt nicht schwer, aber irgendwie macht es einfach nicht Klick.....
Ja danke, an sowas hatte ich auch gedacht, ich habs jetzt so gelöst. Aber irgendwie will der den neuen Wert aus dem Schieberegister nicht annehmen und damit ist der Vergleich natürlich total statisch. Was hab ich falsch gemacht? Ich dachte der Initailwert wird halt nur zum Anfang einmal genommen und dnach nur noch dder Wert aus dem Register.
12.06.2008, 09:36 (Dieser Beitrag wurde zuletzt bearbeitet: 12.06.2008 09:37 von Achim.)
Offenbar verwendest du die Schleife innerhalb einer weiteren (umgebenden Lebens-) Schleife. D.h. die innere Schleife wird jedes Mal neu aufgerufen, wenn die äußere Schleife einen neuen Durchlauf macht...dann wird natürlich auch immer der Init-Wert am Schleifenanfang verwendet!
Du hast drei Möglichkeiten:
1. Entweder du machst diese Überprüfung in der äußeren Schleife direkt, dann wird der Init nur beim ersten Mal von außen genommen, danach immer der Wert aus dem Schiebergister
2. Du machst den Init innerhalb der inneren Schleife mit einem zusätzlichen booleschen Eingang an der Schleife, der das Init aus der äußeren Schleife vorgibt und zwar nur bei deren ersten Durchlauf (i=0: TRUE oder FALSE) ...das wäre doppelt gemoppelt...
3. Du nimmst direkt in der äußeren Schleife statt des Schiebergisters einen Feedback-Node und vergleichst dessen Wert mit deinem aktuellen/neuen Wert, damit hast du den gleichen Effekt wie mit einem Schieberegister. Vorteil: Du sparst die Verdrahtung über die Schleife hinweg, das macht es übersichtlicher. Nachteil: Das ist später evtl. mal schwerer wieder nachzuvollziehen.
A.
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
12.06.2008, 09:45 (Dieser Beitrag wurde zuletzt bearbeitet: 12.06.2008 09:55 von Only08.)
Ach man, stimmt, danke. Immer diese Schusselfehler.
Also die erste Möglichkeit geht nicht da es sich dabei um ein immer wider aufgerufenes SUBVI handelt und deshalb immer der Initwert verwendet wird.
Die zweite Varinate ist mir etwas kryptisch geraten. Also ist mir nicht gnaz klar.
Die dritte hört sich vielversprechend an, auch wenn ich noch nie mit Feedback-Nodes gearbeitet hab. Muss ich mir mal anguckne was das sein sollen? Hast du da nen Beispiel für?
EDIT: Habs versucht, aber er übernimmt den neuen wert nicht
Das was du da gemacht hast, ist doch das selbe in grün. Wenn du diese oder deine vorhergehende Variante in ein SubVI auslagerst, kann es nicht gehen (Stichwort "Schusselfehler")
Wenn du das im SubVI machen willst, dann kannst du das Init einfach weglassen:
Beim ersten Aufruf dieses SubVIs wird ein Wert ins Schieberegister geschrieben. Solange deine Software läuft, bleibt dieser Wert im Register und steht beim nächsten Aufruf zur Verfügung. Stichwort "Nicht initialisiertes Schieberegister" (such mal nach "Funktionaler globaler Variable" im LVF). Evtl. hast du am Anfang halt einen unzulässigen Vergleich, weil ein nicht definierter Wert im Schieberegister steht.
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
jupp verstanden, dachte nur ein Register braucht ein Initialwert. Sonst vergleich er beim ersten mal ja mit... NIX.
Aber danke funzt jetzt einwandfrei und wird direkt mal umgesetzt.
FRAGE: Weiss einer wie ich das mit dem Löschen von Inhalten eines Anzeigeelementes über das Blockdiagramm realisiere?
Ich habe ein Array, dass die Dezimalwerte für die Asciizeichen speichert. Diese würde ich gerne beim Auftreten von TRUE komplett löschen, damit es neu gefüllt wird. Aber in meiner Lösung macht er das zwar, aber wenn TRUE nicht mehr aktiv ist, hat er tortzdem wieder die alten Werte drin. Hab ich also nicht viel erreicht ausser, dass für ganz kurze Zeit nichts da steht und dann wider das alte Zeug...
Was erwartest du denn? Sobald wieder der False-Fall eingetreten ist, wird halt wieder der Inhalt des oberen Array in deine Anzeige geschrieben...Die Überprüfung klappt ja offenbar jetzt...nun musst du genau definieren, wann was in die Anzeige geschrieben werden soll...Warum ist es denn nicht mehr True? Was soll denn geschrieben werden, wenn es False ist?
Es läuft vermutlich darauf hinaus, dass du deinen Code anders aufbauen musst...wenn du dazu Hilfe brauchst, solltest du mal dein gesamtes VI posten und nicht immer nur Ausschnitte aus dem BD...
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Ach man, manchmal denke ich anscheinend echt nicht nach, wenn ich was in LabVIEW progge. Also ich hab das ganze jetzt ins Schieberegister verschoben und damit das gewünschte ergebnis erzielt. Vielen dank nochmal und sorry, wegen der depperten Fragen :-(