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!
14.07.2009, 09:51 (Dieser Beitrag wurde zuletzt bearbeitet: 14.07.2009 09:51 von TSC.)
ich bin dabei für eine automatische Regelung einer Lüftungsanlage ein entsprechendes VI zu strukturieren. Angehängt habe ich mal ein Flussdiagramm der obersten Ebene.
Es gibt drei Kriterien die berücksichtigt werden müssen:[list=1]
[*]Regen (ja/nein)<>
[*]Außentemperatur (zu kalt, ok, zu warm)<>
[*]Innentemperatur (zu kalt, ok, zu warm)<>
[st]daraus ergeben sich dann am Ende 18 Fälle die ich unterschiedlich behandlen muss. Momentan habe ich viele ineinander geschachtelte Case-Strukturen. Das finde ich persönlich ziemlich häßlich. Habt ihr schöne Alternativen, Ideen oder Sonstiges.
Vielen dank für alle Anregungen,
Torsten
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Wieso verschachtelt? Du kannst hier ruhig das State Machine Design Pattern anwenden. Findest in LabVIEW Getting Started Auswahlfenster->VI from Template->Standard State Machine.
Statemachine ist immer gut. Da sind Änderungen einfach zu machen.
Du kannst auch folgendes machen: Generiere aus den drei Bedingungen - eine hat zwei Zustände => 1 Bit (ja/nein), zwei haben drei Zustände => 2 Bits (<,ok,>,nc) eine Zahl X-XX-XX im Bereich 0 bis 0x1F und gib die auf eine Case-Struktur.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
14.07.2009, 21:56 (Dieser Beitrag wurde zuletzt bearbeitet: 14.07.2009 21:57 von Lucki.)
Schlage Dir die hauptsächliche Verwendung der Funktion "Schwellert (1D-Array)" vor, um die Fälle zu selektieren. Dann wird alles recht übersichtlich. Habe es mal ungefähr skizziert. Die Array-Konstanten mit den entsprechenden Schwellwerten mußt Du natürlich selbst erstellen. (Und auch sonst ist noch Feinarbeit angesagt)
Doch, ich habe es mir doch anders überlegt. Da ich State Machines in dem Sinne nicht für gut finde, würde ich es mit verschachtelten Case-Strukturen machen, also LabVIEW nativ.
' schrieb:Du kannst auch folgendes machen: Generiere aus den drei Bedingungen - eine hat zwei Zustände => 1 Bit (ja/nein), zwei haben drei Zustände => 2 Bits (<,ok,>,nc) eine Zahl X-XX-XX im Bereich 0 bis 0x1F und gib die auf eine Case-Struktur.
Das verfahren kenne ich noch von Delphi, da hatte man bei dialogboxen ein argument, welches die angezeiten buttons und gleichzeitig das symbol in einem meldungsfenster angab. werde ich mal drüber nachdneken. damit könnte man quasi alle abfragen vorher machen und dann direkt die 18 cases aufschlüsseln.
gegen eine statmachine spricht für mich, dass ich so viele ähnmlcihe cases habe. also vom case regen würde ich weitergehen zum case "außen zu warm" genauso würde ich aber auch vom case "kein regen" zum case "außen zu warm" gehen und es müsste etwas völlig anderes passieren. da sehe ich auch noch keine übersichtliche struktur. aber evtl fällt mir ja noch was ein.
' schrieb:Schlage Dir die hauptsächliche Verwendung der Funktion "Schwellert (1D-Array)" vor, um die Fälle zu selektieren. Dann wird alles recht übersichtlich. Habe es mal ungefähr skizziert. Die Array-Konstanten mit den entsprechenden Schwellwerten mußt Du natürlich selbst erstellen. (Und auch sonst ist noch Feinarbeit angesagt)
auf den ersten blick schaut das interessant aus. werde ich zumindest an vielen stellen verwenden können.
jungs, vielen dank schonmal. es lohnt sich doch immer wieder auch mal einfacherer dinge nachzufragen. es kommen oft ideen, die einem völlig fern lagen.
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
@eg: das ist meine momentane struktur. da finde ich es halt ziemlich doof, dass man die innerste case quasi 6 mal anlegen muss. also fürs programmieren nicht so schlimm, aber für die übersicht mag ich sowas nciht so gerne. um zu einem bestimmten case zu kommen, muss man drei strukturen richtig einstellen. hat natürlich auch den vorteil, dass man generelle aufgaben für alle untercases nur einmal machen muss. z.b. wenns regnet, fenster schließen.
;-)
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
darauf geb ich nur mal die kyptische antwort:
wenn die cases alle fast gleich sind und sich die Abarbeitung der Fälle nur durch den Wert von Eingangsgrößen ändert, dann würde ich vorschlagen du suchst die Schleifeninvariante und baust den entsprechenden Code dazu und sparst dir somit geschachtelte Cases ...
inhaltlich sind die cases leider völlig verschieden. es müssen andere geräte angesprochen werden, andere werte berechnet werden, andere prozesse eingeleitet werden. also die 18 cases sind tatsächlich 18 deutlich verschiedene.
LG
Torsten
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)