LabVIEWForum.de - Rampenmuster lässt sich nicht von Array nach DBL konvertieren

LabVIEWForum.de

Normale Version: Rampenmuster lässt sich nicht von Array nach DBL konvertieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo LV-Experten,

ich bin auf eure Hilfe angewiesen.

Vorab:
Ich habe die Suchfunktion benutzt und einige Threads zum Thema Rampenmuster gefunden, jedoch bin ich immer noch nicht schlau draus geworden.

Zielsetzung:
Ich möchte unbedingt dieses Rampenmuster VI benutzen auch wenn es vielleicht andere Lösungen gibt...

Problem:
Mein PID-Regler VI akzeptiert nur einen DBL-Wert und kein Array als Setpoint Variable.

Umsetzung:
Wie kann ich das Rampenmuster in einem stetig steigenden oder fallenden Fließkommawert umwandeln vom Typ Double DBL ?

Ansatz:
Im Anhang ist mein Ansatz, der jedoch nicht funktioniert. Das Problem ist die For-Schleife, welche zur zeitgesteuerten Schleife nicht parallel sondern sequenziell abläuft. Und das verstehe ich überhaupt nicht. LabView sollte doch theoretisch beide Schleifen parallel abarbeiten können...


Solltet Ihr eine Idee haben wie ich ganz unkompliziert,möglichst ohne For-Schleife, mein Rampenmuster in ein Fließkommawert umwandeln kann, wäre ich sehr dankbar.


Gruß
Dennis

Lv09_img2
Meinst Du so? Unsure
[attachment=29193]
Lv80_img

Gruß Markus
Hallo Markus,

vielen Dank für Deine Hilfe aber nach wie vor arbeitet mein VI erst die FOR-Schleife ab und macht dann erst mit mein Hauptprogramm weiter.

Ich habe deine CASE-Struktur samt Inhalt in meine zeitgesteuerte Schleife (Hauptprogramm) eingefügt, der PID Regler und und das Signalverlaufsdiagramm befindet sich jedoch nicht mehr in der FOR-Schleife, sondern in meinem Hauptprogramm.

Setpoint to PID Regler habe ich mit einer globalen Variable verknüpft.

Mein Hauptproblem bleibt leider bestehen:

Erst wird die For-Schleife abgearbeitet und dann wird erst mit der Hauptschleife weitergemacht.

Quintessenz: Aus der Rampe wird eine Sprungantwort! :-( dabei müsste mein Dual Core das doch schaffen in Bezug auf Multitasking.

Gruß
Dennis
Du Whileloop soll alle 50 ms einmal durchlaufen, aber in der Whileloop befindet sich eine Forloop, die meinetwegen 100 mal durchlaufen werden soll und bei jedem Durchlauf 50 ms wartet. Die Abhängigkeit lässt hier eine parallele Ausführung nicht zu. Erzeuge die Rampe in einer zweiten Schleife und übergebe der Schleife mit dem PID das Array. In der Timed Loop iterierst du nun durch das Array. Ein Beispiel zu programmieren möchte ich heute Nacht nicht mehr. Vllt morgen.
Hey Schrotti,

vielen Dank für deine Beteiligung und Hilfe.
Beispiele helfen mir zwar als Anfänger mehr als Texte zum nachvollziehen, jedoch möchte ich den Leuten hier auch keine großen Umstände bereiten.
Die Nacht und das Wochenende sei dir gegönnt.
Solltest du es dennoch morgen schaffen bzw. wollen ein kleines Beispiel zu erstellen, wäre ich wie immer sehr dankbar.

Es ist ja auch nicht so, dass ich anderen die Arbeit machen lassen will und ich beschäftige mich damit nicht...

Ich sitze schon seit insgesamt über 15 Stunden an dieses Problem, dass ist zwar peinlich aber nicht zu ändern.

Dann versuche ich jetzt schon mal dein Vorschlag in der Tat umzusetzen.

Über den aktuellen Status werde ich hier wieder berichten.

Danke an alle und gute Nacht.

' schrieb:Du Whileloop soll alle 50 ms einmal durchlaufen, aber in der Whileloop befindet sich eine Forloop, die meinetwegen 100 mal durchlaufen werden soll und bei jedem Durchlauf 50 ms wartet. Die Abhängigkeit lässt hier eine parallele Ausführung nicht zu. Erzeuge die Rampe in einer zweiten Schleife und übergebe der Schleife mit dem PID das Array. In der Timed Loop iterierst du nun durch das Array. Ein Beispiel zu programmieren möchte ich heute Nacht nicht mehr. Vllt morgen.
Also ich komme nicht weiter,...

im Anhang ist mein neuer Versuch.
Jedoch wird der Wert immer noch nicht übergeben. So viel Aufwand für dieses kleine Rampenmuster und das ist mir unbegreiflich.

Vielleicht könnte nochmal jemand mein VI überarbeiten..

Bevor ich noch irre werde gehe ich jetzt ins Bett.





Lv09_img2
Du hast offensichtlich das Grundkonzept des Datenflusses bei LabVIEW noch nicht verstanden. Hast du dir einmal dein Programm mit aktivierter Highlight-Funktion angeschaut? Mach das einmal und versuche zu verstehen, wieso das nicht klappen kann.

Und dann vergleiche mit dem hier:
Lv09_img2[attachment=29211]
Ist auch nicht gerade optimal, aber zu mehr habe ich gerade keine Lust.

Gruß, Jens
Zitat:Wie kann ich das Rampenmuster in einem stetig steigenden oder fallenden Fließkommawert umwandeln vom Typ Double DBL ?

Genau für diesen Fall gibt es unter Signalerzeugung die Funktionen "Punkt für Punkt". Zwar ist die Rampenfunktion nicht dabei, man könnte aber ersatzweise die Sägezahn- oder Dreieckfunktion verwenden.
Die Frage ist doch ohnehin: Was soll denn mit dem Sollwert geschehen, wenn das Ende der Rampe erreicht ist? Die Rampe liefert doch nur für eine gewisse Zeit den Sollwert, was geschieht danach? Eine Regelung sollte doch wohl dauerhaft funktionieren.
Hallöchen :-)


' schrieb:Du hast offensichtlich das Grundkonzept des Datenflusses bei LabVIEW noch nicht verstanden. Hast du dir einmal dein Programm mit aktivierter Highlight-Funktion angeschaut? Mach das einmal und versuche zu verstehen, wieso das nicht klappen kann.

Und dann vergleiche mit dem hier:
Lv09_img2[attachment=58072:RampeV2.vi]
Ist auch nicht gerade optimal, aber zu mehr habe ich gerade keine Lust.

Gruß, Jens

@Jens, erstmal vielen Dank für deine Grundlage. Ich denke auf dieser Basis kann ich weiter arbeiten.

Du hast recht,.... das Grundkonzept habe ich scheinbar noch nicht verstanden.
Ich lese immer nur Datenfluss heißt wenn alle Signale anliegen wird von links nach rechts ausgeführt. Nun theoretisch klar, was ich aber in der Praxis falsch mache ist mir unklar. Highlight-Funktion,... ähm jaWall
Ich werde jetzt erstmal lesen wie man diese benutzt und auswertet.


' schrieb:Genau für diesen Fall gibt es unter Signalerzeugung die Funktionen "Punkt für Punkt". Zwar ist die Rampenfunktion nicht dabei, man könnte aber ersatzweise die Sägezahn- oder Dreieckfunktion verwenden.
Die Frage ist doch ohnehin: Was soll denn mit dem Sollwert geschehen, wenn das Ende der Rampe erreicht ist? Die Rampe liefert doch nur für eine gewisse Zeit den Sollwert, was geschieht danach? Eine Regelung sollte doch wohl dauerhaft funktionieren.

@Lucki

Deine Frage ist einfach zu beantworten:

Der Startwert von der Rampe soll immer der letzte aktuelle Wert sein, quasi die PV (Process Variable),
Der Sollwert soll in der gannten Rampenzeit erreicht werden und danach gehalten werden, also definitiv nicht auf null zurückgehen.

Das würde für meine Regelung kein Sinn machen.

Bsp.

Motordrehzahl soll in 10 sec von 1000 auf 3000 U/min. steigen, dann die Drehzahl halten!, bis ich z.b. in 5 sec von 3000 auf 2500 reduzieren möchte.

Demnach benötige ich ein nummerisches Bedienelemnt für die Zeitangabe und für die Solldrehzahl, das ganze wird dann über ein Taster gestartet.

Startwert der Rampe soll immer die aktuelle Istdrehzahl sein.


Vielen Dank für eure Hilfen.

Gruß Dennis
Ja, vielleicht möchtest du eine Slew-Raten-Begrenzung bei Änderung des Sollwertes:
Lv86_img[attachment=29215]
(Man könnte das VI auch so ändern, daß bei einem Sprung nicht die Slew-Rate, sondern die Slew-Zeit konstant bleibt)
Seiten: 1 2
Referenz-URLs