Massflowcontroller steuern und bei Bedarf Rampenfahren
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!
RE: Massflowcontroller steuern und bei Bedarf Rampenfahren
Hallo,
schon wieder ich.
Also ich habe das programm in drei Sequenzen geteilt.
1.Sequenz ist initialisieren von FlowDDE treibern, open communucation, checkconversations usw... ( ich bin mir nicht sicher was ich da noch rein pachen soll und wie. Also ob ich einfach die benötigten SubVI`s von bronkhorst einfach in erste Sequenz kopieren soll oder doch nicht...).
2. Sequenz enthält eine Statemaschine wo die MFC`s für die allererste Mischung die gewünschte mengen in mln/min dosieren ( z.B. Der User will 100 mln/min KONSTANTE Brenngasvolumenstrom aus MFC_1 und 10 mln/min KONSTANTE Volumenstrom aus anderen zwei MFC`s ( N2+O2 ZUSAMMEN!) dosieren. Hier kommt das Volumenanteil von Sauerstoff ins Spiel. Wenn der User auf dem Panel Für Sauerstoffanteil 0 Vol.-% gibt dann wird automatisch nur aus dem MFC_N2 10 mln/min gas(N2) dosiert. Wenn der user z.B 5 Vol.% O2 gibt dann wird aus dem MFC_N2 9,5 mln/min gas und aus dem MFC_O2 0,5 mln/min gas ( O2) dosiert, da ja Vol.-% O2 +Vol.%N2 = 100 )). Also in dieser ersten Zustand wird mit dem Messen erst Mal angefangen wenn der User auf starte Messung drückt. Es wird eigentlich hier keine Rampe gefahren, denn die MFC`s die geförderte Mengen sofort dosieren. Allerdings habe ich um diese Zusatnd zu steuern eine event Struktur gebaut, die auf Zündung und Stop reagiert. Aber schaffe ich nicht da die erste Rampen fahrt von MFC_O2 nach dem ersten Zündung zu verwirklichen. Als zweites habe ich das problem, dass ich die sp`s nicht als mln/min sondern als prozent ( 0 bis 100 %) angeben kann. Wie könnte ich da vorgehen?
3.Sequenz ist das Beenden von FlowDDE, leeren von MFC und vielleicht speichern der Ergebnisse, wobei da noch nichts drin steht.
16.10.2013, 16:13 (Dieser Beitrag wurde zuletzt bearbeitet: 16.10.2013 16:17 von rc.)
RE: Massflowcontroller steuern und bei Bedarf Rampenfahren
Hallo rc,
Zitat:ob ich DIESES MAL auf dem richtigen Weg bin, vorallem mit dem State Maschine?
Fast...
Es ist wenig sinnvoll, in einer Statemachine nach der ersten Iteration immer den selben State ("Zündkontrolle") aufzurufen, ohne eine Möglichkeit vorzusehen, mal einen anderen State anzufahren!
Außerdem:
- Zuviele lokale Variablen.
- Zuviele (stacked) Sequenzen. Beispiel: Du hast in der großen Sequenz einen ersten Frame zur Initialisierung des GUI etc. Den könntest du als ersten State einer Statemachine verpacken...
- Einmal Ctrl-U drücken schadet auch nicht, wenn du dein VI anderen zur Begutachtung vorlegst...
RE: Massflowcontroller steuern und bei Bedarf Rampenfahren
Hallo Gerd,
vielen Dank für die deine Antwort. Das programm sieht jetzt so aus. Jetzt muss ich nur noch die States irgendwie bearbeiten denke ich und irgendwie die Werte mit Zeitpunkten speichern so dass ich vernünftig auswerten kann. allerdings schon im ersten State kann ich nicht die initialisierung( übergabe der Werte auf dem Panel) nicht genau machen . irgendwie kann ich nicht dafür sorgen, dass es zwischen den einzelnen states und mit FLOWDDE kommuniziert wird.
RE: Massflowcontroller steuern und bei Bedarf Rampenfahren
Hallo rc,
jetzt hast du folgende Fehler gemacht:
- While-Loop innerhalb einer Event-Struktur: ein Event sollte immer so schnell wie möglich abgearbeitet werden. Eine endlos laufende While-Loop ist da sehr hinderlich...
- Deine Statemachine ist "mangelhaft": Es gibt Fälle, die keinen neuen State ausgeben ("4"). Es gibt Fälle, die immer den gleichen State ausgeben, obwohl du einen Vergleich anstellen willst ("2"). Es gibt Fälle, die bleiben auf ewig in ihrem State ("5"). Ist das alles wirklich so beabsichtigt?
RE: Massflowcontroller steuern und bei Bedarf Rampenfahren
Hallo Gerd,
- While-Loop innerhalb einer Event-Struktur: ein Event sollte immer so schnell wie möglich abgearbeitet werden. Eine endlos laufende While-Loop ist da sehr hinderlich...
ich versuche es so gestalten, dass der User, nach dem er auf dem FP das Vol.-% O2, Änderung der O2 Vol.% PRO minute, das SP von MFC_1 ( Brenngas[mln/min]), SP von (N2+O2 [mln/min]) was ja aus SP_MFC_2 (N2[mln/min]) +[ Vol.% (O2) * SP von (N2+O2 [mln/min]) ] /100 ] besteht und den Rückschrittwert von O2 als Vol.% vorgibt dann auf STARTE MESSUNG drückt. Also das wollte ich ich mit Event-St. machen. Wenn Start gedückt wird, wird State Maschine aktiviert.
Zu dem State Maschine:
In erstem State: Ich habe das Programm von Bronkhorst aus der ersten Seq. rausgenommen und in dieses State hinzugefügt. Ist das falsch? Denn genau da werden die sp`s immer aktualisiert und auch pv`s. Wie schaffe ich da, dass O2 und N2 immer einen konstanten Durchfluss geben, wobei das Vol.%-O2 immer als Rampe variert wird?
Zweite State: Wie kann ich da O2 Vol.% im Gemisch ( in der Kammer mit dem Brenngas) ins Datei speichern, genau in dem Moment der ersten Zündung ( oder eben Zündpeak) und dann ins dritte State übergehen? Oder wird der Wert im dritten State gespeichert?
Dritte state: Ich versuche da Vol.% O2 bisschen reduzieren ( dafür gibt ja der User am Anfang O2 Rückschrittwert als Vol.%). Also aktuelle O2 Vol.% was eben zum zünden reicht - O2 Rückschrittwert und ab diesem resultierenden Wert noch mal mit einem vorgegebem wert ( Änderung der O2 Vol.% PRO minute also die Geschwindigkeit) bis zur zweiten Zündung rampe fahren. Dann iwrd wieder in zweite Stete überspringen und die Zündung abgefragt. Wenn die Zündung stattfindet dann wieder rückschritt und dann wieder Rampenfahrt bis zur dritten zündung. Insgesamt 5 mal Zündung erreichen und mittel Wert von o2 ins Datei speichern. DAS ist mein grösstes Problem
Vierte State: Also falls die Zündung nicht statfindet, dann wird von zweitem State ins vierte State übergangen dann soll O2 Vol.% mit dem vorgegebenem Geschwindigkleitswert bis zur zündung weiter erhöht Werden also rampe fahren. Dementsprechend geht N2 Vol.% zurück, so dass ( N2+O2) Mischung immer konstante Volumenstrom liefert. Laut Benutserhandbücher können die MFC`s Rampen fahren , was " weiche Regelung" genannt wird und auch eine Variation zwischen MFC_N2 und MFC_O2 möglich, so dass sie mit varierenden O2 Vol.% immer konstanten Volumenstrom an ( N2+O2) Mischung ergeben allerdings stehe ich hier total auf dem Schlauch
Fünfte State: Hier versuche ich nach 5 maliger Zündung oder eben wie viel der User will, dass ins Sequenz 3 übergegangen wird und da wird die 'kommunikation mit FlowDDE geschlossen und die MFC`s werden gelehrt. Natürlich auch wenn der User auf STOP drück dass es beendet wird.
Der User ist eben ein Depp so wie ich glaube ich, so dass er nur Werte am Anfang übergibt und dann Startet und am Ende die O2 Vol.% `s zur jeweiligen zündzeitpunkten gespeichert bekommt. Es tut mir leid für die schlechte Ausdrucksweise!
21.10.2013, 14:20 (Dieser Beitrag wurde zuletzt bearbeitet: 21.10.2013 14:21 von GerdW.)
RE: Massflowcontroller steuern und bei Bedarf Rampenfahren
Hallo rc,
Zitat:ich versuche es so gestalten, dass der User, nach dem er auf dem FP das Vol.-% O2 ... vorgibt dann auf STARTE MESSUNG drückt. Also das wollte ich ich mit Event-St. machen. Wenn Start gedückt wird, wird State Maschine aktiviert.
Lass die Event-Struktur hier aus dem Spiel, die ist momentan eher hinderlich...
Mach einen State "0", der auf das Drücken von "Starte Messung" wartet. Wenn "Start" dann "Next state" (mit einer kleinen Wartezeit)...
Die StateMachine dient hauptsächlich als "Aufseher" in deinem VI: sie kontrolliert, wo (in welchem State) man sich befindet und wie es dann weitergeht. Dazu muss sie nicht direkt mit Hardware kommunizieren, dies kann in parallelen Schleifen passieren. Den Datenaustausch kannst du (für's Erste) mit lokalen Variablen machen, sollte aber später/schnellstmöglich auf Notifier/Queues/FGVs umgestellt werden. Um all dies zu erreichen, benötigt die Statemachine 2 Schieberegister: das erste enthält den State (dein Enum). Im zweiten Schieberegister kannst du interne Daten der Statemachine (in einem Cluster) speichern, z.B. den Zähler für die Anzahl der Zündversuche. So kann z.B. State 2 ("Zündung an?") kontrollieren, wie oft die Zündung schon an war...
Wozu hast du bei der Case-Struktur in der Statemachine immer zwei Ausgänge für den nächsten State? Du brauchst nur einen Ausgang, du willst doch genau einen nächsten State aufrufen...
RE: Massflowcontroller steuern und bei Bedarf Rampenfahren
Hallo Gerd,
Mach einen State "0", der auf das Drücken von "Starte Messung" wartet. Wenn "Start" dann "Next state" (mit einer kleinen Wartezeit)...
Ok habe ich gemacht allerdings es wird automatisch ein Ausgang generiert. ich verstehe jetzt nicht wie ich ins nächste Stete übergehe wenn start gedrückt wird. Meinst du als " Next state" dann 1. State bei mir?
Früher konnte ich wenigsten die Sp`s ändern 8 mit dem Bronkhorst Sample Programm9 jetzt seit dem ich das Bronkhorst Programm in zweite Seq. genommen habe sehe bei pv nur " 0 " was mache ich da falsch?
Den Datenaustausch kannst du (für's Erste) mit lokalen Variablen machen, sollte aber später/schnellstmöglich auf Notifier/Queues/FGVs umgestellt werden.
Meinst du hier die erste Zündung?
Um all dies zu erreichen, benötigt die Statemachine 2 Schieberegister: das erste enthält den State (dein Enum). Im zweiten Schieberegister kannst du interne Daten der Statemachine (in einem Cluster) speichern, z.B. den Zähler für die Anzahl der Zündversuche. So kann z.B. State 2 ("Zündung an?") kontrollieren, wie oft die Zündung schon an war...
soll ich hier einfach eine kopierte Enum hinzufügen ? Was zweite Shift Register betrifft bin ich total überfragt. Wie soll ich zähler in einem cluster hierzu anwenden?
RE: Massflowcontroller steuern und bei Bedarf Rampenfahren
Hallo Gerd,
jetzt besteht das Programm aus zwei Sequenzen. Initialisierung GUI habe ich in erste State hinzugefügt und "Starte Messung" ist State 0. Allergings kann ich da bolisches "Starte Messung" nicht anwenden, dass es startet. Also wie soll ich da verdrahten dass, das Programm startet, weil jetzt passiert irgendwie nichts.
Frage zum State Zündabfrage. : Wenn Bolische Wert Zündung True ist dann gehe ich ja zum vierten State: Reduziere O2 und wenn falsch dann zum fünften State: Erhöhe O2. Wie soll ich da den Ausgang von Select verdrahten ? Und auch in diesen vierten und fünften States wie soll ich da reduzierung und erhöhung durchführen und verdrahten? Und das mit dem Speichern und Zähler habe ich immer noch nicht kapiert