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!
11.02.2016, 22:31 (Dieser Beitrag wurde zuletzt bearbeitet: 11.02.2016 22:33 von GerdW.)
auf deinem Bild ist leider kaum etwas zu erkennen.
Aber WriteToSpreadsheetFile hat ja mehrere Inputs und die Hilfe erläutert jeden dieser Inputs…
- Die Zeit würde ich immer in die erste Spalte packen.
- Man kann ja 2D-Arrays in der Schleife aufbauen und "gesammelt" abspeichern anstatt jede Zeile einzeln…
Eines noch:ebenfalls off-topic aber da du mir ja bereits so hilfreich bist...
also: bisher steuere ich die Stromrichtungen ja als "Zwischenlösung) via true/false schalter. bei false wird entladen, bei true geladen.
Nun möchte ich den Schalter ersetzen und die beiden Fälle abhängig von der gemessenen Spannung "auslösen". Und zwar so: Überschreitet die Spannung einen eingegebenen oberen Wert, so wird die case-struktur auf "entladen" gestellt. Sinkt die Spannung unter einer eingegebenen Minimalspannung, so soll wieder geladen werden.
Klingt eigentlich recht einfach und in Matlab oder C# etc. würde ich einfach schreiben eine switch-/case -Abfrage schreiben.
Die Case-Struktur in Labview ist aber eine If-Else-Abfrage, kann also nur Ereignis und Gegenereignis. Wie bekomme ich das hin in Labview???
Im Anhang ist nochmal mein Programm zu sehen. Also ich möchte den Schalter "Laden" ersetzen und die case-struktur eben abhängig vom ausgelesenen Spannungswert ansteuern, aber eben eher als "case"-Abfrage, nicht als if-else. Weil wenn ich sage über 5V= FALSE=entladen würde der ja nie wieder umswitchen zu TRUE=Laden... bzw wenn gerade eine Spannung <5V gemessen wird wird angenfagen zu laden dabei soll erst abeer bspw 1V geladen werden...
ich hoffe mein Problem ist verständlich erklärt? Google brachte bisher nichts ein
13.02.2016, 18:48 (Dieser Beitrag wurde zuletzt bearbeitet: 13.02.2016 18:52 von GerdW.)
Zitat:Die Case-Struktur in Labview ist aber eine If-Else-Abfrage, kann also nur Ereignis und Gegenereignis.
Falsch, die Case-Struktur kann auch als switch-case eingesetzt werden. Einfach mal die LabVIEW-Hilfe dazu lesen!
Pseudocode:
Code:
IF Spannung > Max_Limit THEN
State := Entladen
ENDIF
IF Spannung < Min_Limit THEN
State := Laden
ENDIF
Wo benötigst du hier eine Switch-Case-Anweisung?
(Du musst nur eine hinreichende Hysterese zwischen Max_Limit und Min_Limit einstellen…)
Was mich beim letzten Mal schon an deinem VI gestört hat: Warum muss man boolsche Werte mit TRUE/FALSE vergleichen?
P.S.: Bitte keine Doppelposts, und schon gar nicht ohne entsprechenden Hinweislink im Post!
Ich habe deinen Doppelpost einfach mal gelöscht! Und da du ja den anderen Thread gelesen haben solltest, hättest du jetzt eigentlich wissen müssen, dass die Case-Struktur durchaus als switch-case benutzt werden kann! Grrr...
Also ich habe in dem anderen Thread nicht herauslesen können wie ich mein Problem löse. :/
Mit ENUM/ Ring komme ich nicht weiter da ENUM ein Bedienfeld ist und ich dieses nicht an die Spannungswerte ankoppeln kann... zumindest weißß ich nicht wie das geht, bin halt noch Neuling...
Ich werde es mit einer verschachtelten Case-Struktur versuchen, bei nur zwei Fällen ist das ja noch im Rahmen. Trotzdem unelegant meiner Meinung nach
Die T/F-Abfrage ist einfach nur um auf dem Frontpanel LEDs leuchten zu lassen je nach Schalterstellung... Werde das aber noch dahingehend ändern dass die abhängig sind vom Steuerstrom (If Steuerstrom>0 dann "an", sonst aus)
Hm verschachtelte case-struktur ist auch nicht gut da dann beide auf false stehen wenn die Spannung eben zwischen den Maximal- und Minimalwert liegt.
anbei habe ich ein kleines Test-VI angehängt, vl kannst du das ein wenig bearbeiten/ kommentieren wie ich da weiter vorgehen muss um eine switch-case zu schaffen? Ich verzweifle da echt gerade dran die case-struktur richtig zu "bedienen"...
Es soll ja kontinuierlich ge- bzw entladen werden, also immer im wechsel bis man auf stop drückt (oder nach einer voreingestellten zeit)
(14.02.2016 00:29 )Flenzelot schrieb: Es soll ja kontinuierlich ge- bzw entladen werden, also immer im wechsel bis man auf stop drückt (oder nach einer voreingestellten zeit)
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Aber jetzt mal im Ernst: von alleine wäre ich da im Leben nie drauf gekommen das so umzusetzen. Dieses Initialisierungs-VI ist mir neu und auch das ganze mit der "abfrage" zu verschachteln wobei das ja logisch ist und eben auch meinem gewünschten "switch-case" entspricht. Trotzdem
Was geschieht denn da genau bei der Initialisierung. Falls du noch ein paar Minuten Zeit aufbringen könntest könntest du vl ein paar Kommentare dazu schreiben oder generell eine kleine Beschreibung? Ich will das ja verstehen damit ich das in Zukunft selber anwenden kann. Ich habe nämlich durchaus Blut geleckt was LV angeht
(14.02.2016 12:41 )Flenzelot schrieb: von alleine wäre ich da im Leben nie drauf gekommen
Wie auch, dein bisheriges Leben ist dafür zu kurz ...
Zitat:Was geschieht denn da genau bei der Initialisierung.
Was meinst du mit Initialisierung? Meinst du den Rückkopplungsknoten?
Ein Rückkopplungsknoten bewirkt, dass der Ausgang gegenüber dem Eingang um einen(1) Programm-Takt (= einen Algorithmus-Durchlauf) verzögert wird. Das bewirkt dann, dass du zu einem (nämlich dem jetzigen, aktuellen) Zeitpunkt sowohl den aktuellen Wert, als auch den letzten Wert zur Verfügung hast. Den letzten Wert brauchst du für deine Funktion "Wenn Wert zwischen Max und Min, dann den letzten Zustand beibehalten". Der Rückkopplungsknoten wird, wenn nichts am Reset-Eingang hängt, mit dem Standardwert vorbesetzt. Bedenke: Beim ersten Programmdurchlauf gibt es keinen "letzten Wert" - da muss die Initialisierung herhalten.
Zitat:könntest könntest du vl ein paar Kommentare dazu schreiben oder generell eine kleine Beschreibung?
Eigentlich müsstest du nur zu jedem Element die Beschreibung (Hilfe) lesen ...
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Das Programm ist nun quasi fertig und läuft- theoretisch- einwandfei!=) Vielen Dank an das Forum für eure Hilfe!=)
Es gibt allerdings ein Problem: Beim Wechsel von "Laden" auf "Entladen", wenn also der obere Grenzwert (bei mir 4.2V) überschritten wurde, wird (aufgrund des? "nur" während des? Schaltvorganges/ Wechsels) eine Spannung nahe 0 gemessen, wodurch das Programm Planmäßig wieder in den Lademodus übergeht...
Ich nehme aufgrund meiner Beobachtungen an, dass die Spannungsmesskarte bereits einen Wert misst, während die Stromquelle noch einen Schleifendurchgang durchläuft oder so etwas in der Art so dass da eben "0" gemessen wird... (also fast 0... es sind 0.14, 0.22 sowas in der Richtung)...
Meine Idee war es nun, den Task bzw die Erstellung des AI-Arrays, also die gemessene Spannung, ebenfalls in die Sequenz zu packen so dass die Spannung erst gemessen wird wenn die Ströme umgestellt haben. Das geht so aber nicht da die Spannungsmessung ja wiederum als "Signalgeber" für das Umschalten und somit für die Ströme darstellt. LV gab auch gleich eine Fehlermeldung "Sequenz befindet sich in einer Endlosschleife" heraus als ich das umsetzen wollte...
Hat jemand da ähnliche Erfahrungen und/ oder eine gute Idee?
ich nehme an, du hast mittlerweile eine Statemachine aufgebaut.
Dann ist die Lösung recht einfach: als zweite Umschaltbedingung für die States kommt dann noch hinzu, dass der State für mindestens x Sekunden gehalten wird…