LabVIEWForum.de
Programm zickt - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Programm zickt (/Thread-Programm-zickt)

Seiten: 1 2 3


Programm zickt - havetodo - 11.07.2009 22:44

Hallo,
ich habe meinen ersten "Bastelversuch" fertig, aber an manchen Eckenklappt es noch nicht wirklich. Vielleicht kann mir jemand sagen, was ich da falsch gemacht habe und warum die Fehler passieren.
Zu Anfang springt das Programm auf eine falsche Registerseite, und später werden die Aktionen nicht mehr angezeigt oder wecheseln ständig ungewollt hinundher.

Lv86_img
[attachment=19680]


Programm zickt - schrotti - 12.07.2009 13:51

Am Anfang deines Programms ist unklar, ob die Registerkarte zuerst auf den Standartwert oder auf Messablauf gesetzt werden soll. Damit das klappt hast du zwei Möglichkeiten.

1. Die Reihenfolge der Aufrufe durch Datenabhängigkeit oder Sequenz festlegen.
2. Den Tab Messablauf als Standardwert definieren. (Rechtklick -> Datenoperation -> Aktuellen Wert als Standard.

Deine Aktionen werden nicht richtig angezeigt, da die Ringkonstante in der Casestruktur nicht der gleiche Ring wie das Anzeigeelement ist. Kopier die Konstante und wandel sie in ein Anzeigeelement um. Damit du später nicht mehr dieses Problem hast, kannst du das Anzeigeelement danach als Typdefinition abspeichern. Wenn du die Typdefiniton dann noch als Konstante einsetzt, kann nichts mehr schiefgehen. Außerdem würde ich statt eines Rings einen Enum verwenden.


Programm zickt - havetodo - 12.07.2009 14:21

Danke!

Was ist der Vorteil oder Unterschied bei Enum statt Ring?
Wie speichere ich etwas als Typdefinition?

Ansonsten habe ich noch die Schwierigkeit, dass das Programm bei geschlossener Bypassleitung (momentan sind die beiden "Meßeingänge" noch als numerische Bedienelemente auf dem Panel) nichts macht und ich neu starten muß, wenn ich den Bypass nachträglich schließe.
Ich würde es aber gern so haben, dass es mir in diesem Fall eine Fehlermeldung ausspuckt und eine gewisse Zeit in der Warteschleife in diesem Case bleibt und weiterhin rpüft ob die Leitung geschlossen wird, um dann auch bei geschlossenem Bypass weiterarbeiten zu können. Wie bekomm ich das hin?


Programm zickt - schrotti - 12.07.2009 15:42

Mit einem Enum lässt sich einch und sicher arbeiten. Beispielsweise kann einem Enum nicht der Wert eines zweiten, unterschiedlichen Enums zugewiesen werden. Und ein Textring sollte imo nur für das GUI benutzt werden. Auch dann benutz ich ein Textring nur, wenn sich die Einträge zur Laufzeit ändern sollen. Wird bei dir aber nicht der Fall sein.

Mach ein rechtsklick auf das Element -> Fortgeschritten -> Anpassen
Es öfnnet sich ein Fenster. Dort Typ-Def auswählen und speichern.

[attachment=19682]

Edit: Deine zweite Frage kann ich nicht beantworten, da du das SubVI nicht hochgeladen hast.


Programm zickt - havetodo - 12.07.2009 16:09

OK,
ich hab es überarbeitet. Danke für deine Tipps und Erklärungen!

Kannst du bitte nochmal drüberschauen, ob ich es so richtig umgesetzt habe?


Lv86_img
[attachment=19684]

edit: Hab das fehlende sub noch eben eingebunden


Programm zickt - schrotti - 12.07.2009 16:47

Ein paar Punkte wären da schon noch.

1. Du schreibst Werte signalisierend in Eigenschaftsknoten, obwohl dies nicht nötig wäre. So wie ich das sehe schreibst du da rein, um einen Zustand des Automaten zu setzen. Stattdessen könntest du auch direkt ins Schieberegister schreieben und damit direkt den Zustand setzen. Den Wert am besten über lokale Variablen setzen.
2. Setz Messablauf als Standardwert und schmeiß die lokale Variable raus.
3. Schmeiß die Sequenzstruktur raus und schaff Datenabhängigkeit, indem du das Fehlercluster des Methodenknoten zur Whileschleife führst. Die Schleife wird erst dann ausgeführt, wenn der Methodenknoten seinen Code abgearbeitet und die Daten, also das Fehlcluster, übergeben hat.
4. Ganz wichtig, bevor ich Augenkrebs bekommen. Werkzeuge -> Optionen -> Blockdiagramm -> "Frontpanel-Elemente als Symbole darstellen " bitte deaktivierenSmile


Programm zickt - schrotti - 12.07.2009 16:50

' schrieb:Ansonsten habe ich noch die Schwierigkeit, dass das Programm bei geschlossener Bypassleitung (momentan sind die beiden "Meßeingänge" noch als numerische Bedienelemente auf dem Panel) nichts macht und ich neu starten muß, wenn ich den Bypass nachträglich schließe.
Ich würde es aber gern so haben, dass es mir in diesem Fall eine Fehlermeldung ausspuckt und eine gewisse Zeit in der Warteschleife in diesem Case bleibt und weiterhin rpüft ob die Leitung geschlossen wird, um dann auch bei geschlossenem Bypass weiterarbeiten zu können. Wie bekomm ich das hin?

Du könntest einfach nach einem Timeout im Zustand "check" wieder in den Zustand "Bypass geschlossen" wechseln. Natürlich nur, wenn die Überprüfung vorher negativ verlaufen ist.


Programm zickt - havetodo - 12.07.2009 18:26

Hi Julius,

zu 1)
Ich hab das geändert und die Schieberegister direkt aufgerüfen. Das mit den lokalen Variablen hab ich allerdings noch nicht verstanden.

zu 2)
Ich hab das erstmal so gelassen, da das Programm später alle Registertabs durchlaufen muß und ich dann dort die lokalen Variablen brauchen werde. Oder?

zu 3)
sorry, ich versteh kein WortWacko

zu 4)
sofort erledigt Smile


Programm zickt - schrotti - 12.07.2009 18:57

' schrieb:zu 3)
sorry, ich versteh kein WortWacko

[attachment=19685]


Du könntest dir auch überlegen, die Casestruktur nicht über Strings, sondern über einen typdefinierten Enum zu steuern. Der Vorteil wäre eine geringere Fehleranfälligkeit, da duch nicht verschreiben kannst. Wenn ich mir dein Programm so anschaue empfehle ich dir aber zusätzlich eine Zustandsmaschine nach dem Producer-Consumer Prinzip. Du findest Beispiele im Examplefinder und design pattern unter "Neu.." im Menüpunkt Datei.


Programm zickt - havetodo - 12.07.2009 19:31

oh mann, ist das frustrierend O

grad hatte ich das Gefühl ich hätte schon was verstanden, da komm ich mir wieder vor wie der Oberdoofkopp

also nochmal langsam..... welche Sequenz soll ich rauswerfen? Und worauf bezieht sich der Methodenknoten? was ist ein Fehlercluster?
Die beiden beiden Entwurfsmuster unter "neu..." verstehe ich nicht, gibt es da nicht irgendein kleines konkretes Programm, aus dem man ersehen kann, was da genau passiert und wozu das gut sein soll? und wo finde ich den Examplefinder?

noch eine Sache, die mir so eingefallen ist: Wie kann man auf dem Frontpanel ein Bedienelement "gestrichelt" markieren, so dass man dieses beim Drücken der Entertaste drücken würde?