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!
08.03.2013, 09:54 (Dieser Beitrag wurde zuletzt bearbeitet: 08.03.2013 09:55 von GerdW.)
(08.03.2013 08:12 )Epicon schrieb: Geschieht über GPIB und ist kein Problem (zumindest bis jetzt hab ich da alles hinbekommen)
Gut. Sonst hätte ich Dir jetzt auch geraten Dir lieber was Anderes zu suchen. :-D
Machen wir weiter mit LV 101, ich rate mal das Dir diese Information fehlt:
Wie so viele Elemente in LV ist auch die Case-Struktur Polymorph. Das bedeutet: Schließt Du einen anderen Datentyp an, wird eine andere Version der Case-Struktur verwendet die zum Datentyp passt. Schließt Du statt eines Bool ein Enum an, kannst Du (Wunder oh Wunder) für jeden Wert des Enum einen eigenen Case einrichten.
(Ja, das funktioniert auch mit anderen Datentypen.)
(08.03.2013 09:54 )GerdW schrieb: Wo bitte ist da von "TRUE" und "FALSE"-Cases die Rede?
Natürlich garnicht. Aber in anderen Zusammenhängen nutzt man doch diese Casestruktur auch für False/True Anwendungen und ich wusste es nicht besser zu formulieren.
Dann war mein Ansatz also doch richtig jedes Enum in einen neuen Case zu setzen?
Da hatte ich aber das Problem, dass das VI immer nur im ersten Case blieb (ich glaube, da fällt mir der Fehler gerade selber auf).
Aber, ich lege ja die Temperatur auch auf ein Schieberegister, damit diese immer hochgefahren werden soll. In dem Case, wo dann aber die Messung stattfinden soll, wird allerdings nur der Strom hochgeregelt und ich habe keine Temperatur, die ich wieder auf das Schieberegister geben kann (das orangene Quadrat hat ein kleines weißes Quadrat) und das VI läuft nicht ..
Gibts da eine Lösung?
08.03.2013, 11:44 (Dieser Beitrag wurde zuletzt bearbeitet: 08.03.2013 11:45 von GerdW.)
man sollte schon alle passenden Ein-/Ausgänge der Casestruktur verdrahten, damit man eben nicht "default if unwired"-Probleme bekommt. Schließlich willst du doch immer die aktuellen Werte weiterreichen und dir auch merken... Schon mal Rechtsklick auf den Tunnel -> "Verknüpfter Eingangstunnel" -> "Offene Cases verbinden" probiert? Ich vergaß: du nutzt ja eine Uralt-Version. Musst du selbst verdrahten...
man sollte schon alle passenden Ein-/Ausgänge der Casestruktur verdrahten
Aber wenn ich doch in einem State keine Ausgabe der Temperatur habe? Nämlich genau da, wo dann die eigentliche Messung des Schwellstroms stattfindet???
(08.03.2013 16:17 )GerdW schrieb: Du hast aber ein Schieberegister zu Verfügung, dessen Wert du durch den Case durchverdrahten kannst.
Achso, ok, verstanden.
Ich hatte nun das VI so entworfen, wie ich dachte, dass es funktionieren könnte. Allerdings lief es immer wieder ins "Init" rein, ohne in einen nächsten State/Case/Zustand zu laufen.
Sollte es nicht eigentlich funktionieren, wenn ich vor der While-Schleife mein Enum mit Init, StartMeas,End benenne und dann im Case in der Whileschleife für Init einen Case habe, für Startmeas einen und für End? Oder muss man da noch ein weiteres Kriterium beachten?
LG,
Epicon
11.03.2013, 10:04 (Dieser Beitrag wurde zuletzt bearbeitet: 11.03.2013 10:05 von GerdW.)
wenn du ein Enum mit mehreren Einträgen definierst, bedeutet es nicht, dass in einer Case-Struktur in einer While-Schleife automatisch jeder dieser Einträge aufgerufen wird. Ein Enum ist kein Array, welches autoindiziert wird!
Du musst schon noch selbst für einen State-Wechsel sorgen, in dem du den nächsten State per Schieberegister in die nächste Iteration schiebst...
Ansonsten gilt immer noch: aktuelle Version deines VIs anhängen, damit wir alle wissen, worüber hier diskutiert wird...
(11.03.2013 10:04 )GerdW schrieb: Ansonsten gilt immer noch: aktuelle Version deines VIs anhängen, damit wir alle wissen, worüber hier diskutiert wird...
Ach, ja natürlich.
Angehängt ist jetzt ein VI, mit dem ich versuche, die Statemachine zu verstehen. Selbst zusammengeklickt und vermutlich grottenschlecht.
Hatte mir überlegt, die Temperaturerhöhung bis zu einem bestimmten Wert mit der SM zu machen. Nur sagt er mir jetzt: "no case for some selector values". Aber warum?
Sorry, für vermutlich sehr dumm anstellen, aber der Ansprechpartner hier im Betrieb ist noch nicht aus dem Urlaub zurück..
11.03.2013, 10:29 (Dieser Beitrag wurde zuletzt bearbeitet: 11.03.2013 10:39 von GerdW.)
auch bei LabVIEW6 solltest du schon die ganzen CoercionDots an deinen Enum-Anschlüssen sehen. Die bedeuten immer eine Warnung...
Ich hatte immer empfohlen, das Enum typdefiniert anzulegen! Das hast du leider nicht gemacht. Dummerweise hast du nicht mal das Enum kopiert, welches du vor der While-Loop mit 3 Einträgen angelegt hast. Und du hast auch kein neues Enum per Rechtsklick -> Erstelle Konstante angelegt, auch dann hättest du weniger Probleme gehabt...
Stattdessen hast du jedesmal ein neues Enum definiert, dummerweise aber mit jeweils nur einem Eintrag. Was soll da wohl passieren? Per CoercionDot wird das dann jeweils zu einer Null (erster Eintrag bekommt bei null-basierter Zählweise die Null zugeordnet!). Und deine Case-Struktur wird dann wohl immer den Case Null aufrufen - logisch oder?
- Also nochmal: Enum als Typdefinition anlegen. Dann immer mit dieser Typdefinition (oder Kopien des Originals) arbeiten!
- Wenn du alle CoercionDots beseitigt hast, zeigt die Case-Struktur auch die Enum-Einträge als Cases an...
Noch was:
Wenn du im Case "Init" (oder vorher "0") bist, solltest du nicht unbedingt "Init" als nächsten State ausgeben. Schließlich willst du doch mal in einen anderen State wechseln...