Step 7 CFC Programmierung Problem mit Reglertyp

Hacke123

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe folgendes Problem ich soll eine Impuls/Pausen-Regelung implementieren. Ich habe über den FB 42 oder FB 58 (PID-Regler) eine Regelung zwischen Ist und Sollwert hinbekommen und getestet und bekomme am Ausgang (y) ein Signal zwischen 0-100%.

Jetzt kommt mein Problem, ich soll damit ein Ventil ansteuern, welches minimal 4,5s angegesteuert wird und maximal 17,5s in Abhängigkeit von dem Ausgang (0-100%) und danach eine Pause von 160s einlegen soll. Ich hab mit dem FB 43 (PULSEGEN) gesehen, dass ich die Differenz einstellen kann über (INV/100*PER_TM). Das wäre bei einen maximalen Ventilöffnung von 100% gleich 13s als PER_TM. Die Pausenzeit wollte ich über P_B_TM einstellen, war auch nicht das Thema.
Als Frage nun, gibt es die Möglichkeit hierfür einen Offset von 4,5 einzustellen oder eine andere Möglichkeit, das Problem zu realisieren?
Was ich mir auch noch nicht ganz erklären kann, wie die Abtastzeit des PID-Reglers sein muss, da ich bei geringer Abtastzeit sonst viel zu schnell Werte bekomme für den PULSEGEN, obwohl die Periode noch nicht abgelaufen ist?

Vielen Dank schon mal für jegliche Hilfe!

Gruß Hacke
 
Die Regler müssen zwingend in einem Weckalarm aufgerufen werden. Die Abtastzeit ist dann zwingend die die Aufrufzeit des Weckalarms, wird beim uebersetzen aber vom cfc selbst eingestellt. Zum pulsegen kann ich nix sagen muesste ich auch erstmal in der Hilfe lesen. Den offset kannst Du evtl auf das 0...100% Signal drauf addieren.
 
Was man noch beachten muss ist das Abtastverhältnis:

Der Gesamtregler besteht ja aus einem PID-Regler und einem IMPULS-Pause Umformer.(Pulsegen).Setzt man beim PID 100ms an, sollte der Pulsegen ein
Per_Tm >=20 haben.je größer dieser Wert desto genauer die Umsetzung.

Bei 100ms im PID hättest du dann 2 sec im Pulsegen als Periodendauer.
 
Danke für die Hilfe ich hab den OB 33 (500ms) benutzt. Ich hab gelesen, dass der PULSEGEN 100x schneller abgetastet sein muss als der PID, um die Genauigkeit von 1% zu erreichen. Ob 1, 2 oder 5% ist glaube nicht von Relation.

Das mit dem Offset war auch meine Idee, jedoch habe ich bei dem PULSEGEN nichts in der Hilfe dazu gesehen. Ich habe heute den S5 Baustein in S7 als Funktion nachprogrammiert. Werde den morgen mal testen.

Zu meiner Frage nochmal zurück, ist den die Abtastzeit überhaupt so gering nötig, da der Zyklus des Impulsbausteins ja minimal 164,5s geht. An sich kann der PID-Baustein die Berechnung ja schnell ausführen, müsste dann aber sowieso warten auf Ablaufen der Pausenzeit oder sehe ich das falsch?

Gruß Hacke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Abtastzeit muss gleich der Aufrufzeit vom Weckalarm sein, sonst funktionieren die Bausteine nicht... Welchen Weckalarm Du nimmst haengt vom Prozess ab. Schneller Prozess=schneller Weckalarm.
Gruß.
 
Zuletzt bearbeitet:
Also noch mal konkret

Ich hab gelesen, dass der PULSEGEN 100x schneller abgetastet sein muss als der PID, um die Genauigkeit von 1% zu erreichen.

Ich denke das ist Quatsch. Der Pulsegen sollte 100x schneller aufgerufen werden als die Puls-Pause-Zykluszeit. Mit dem PID hat das nichts zu tun. Wenn Du aber Deine 164,4s Puls-Pause-Zykluszeit wirklich auf die Kommastelle genau haben willst, dann solltest Du den PULSEGEN im 100ms Weckalarm aufrufen

Zu meiner Frage nochmal zurück, ist den die Abtastzeit überhaupt so gering nötig, da der Zyklus des Impulsbausteins ja minimal 164,5s geht. An sich kann der PID-Baustein die Berechnung ja schnell ausführen, müsste dann aber sowieso warten auf Ablaufen der Pausenzeit oder sehe ich das falsch?

Der PID wird nicht auf den PULSEGEN warten, er berechnet in jedem Aufruf ein neues Stellsignal. Die Frage ist aber, was macht der PULSEGEN, wenn sich innerhalb der Puls-Pause-Zykluszeit der Stellwert vom öfters ändert. Normalerweise sollte der PULSEGEN damit klarkommen. Mit den Bausteinen hab ich aber schon mehrfach komische Erfahrungen gemacht, von daher solltest Du's einfach ausprobieren.

Also PID und PULSEGEN in 100ms aufrufen. dazwischen einfach den Offset bauen. Ordentliche (langsame) Reglerparameter beim PID einstellen.

Bei 164,5s Puls-Pause-Zykluszeit muss das ja schon ein ordentlich langsamer Prozess sein. Was ist das denn genau? Kennst Du Dich mit Regleroptimierung aus, bzw. wie Du den P, I und D-Anteil berchnest bzw. einstellst?

Gruß.

PS: evtl. geht das ganze auch einfacher ohne den PULSEGEN. Ein zwei Berechnungen und Timer und RS-Flipflops...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich würde für die Pulsausgabe wohl einfach zwei (Rückwärts-)Zähler im OB35 (100ms) nehmen (also einen INT-Wert decrementieren). (Ich hoffe, daß sowas in CFC geht.)
Pausenzeit: 1600
Ventil-Öffnungszeit: Stellwert*1.3 + 45

Harald
 
Ja ich habe mir durchgelesen was der TE machen will.Blos der Sinn erschliesst sich mir nicht.Das ist für mich widersprüchlich.Aber zumindest keine Regelung.
Vielleicht sollte mal erklärt werden, was man damit erreichen will.
 
Aber zumindest keine Regelung.

Naja, ne klassische stetige PID-Regelung ist es vielleicht nicht. Aber per Definition braucht eine Regelung nur einen geschlossenen Kreis (Stellsignal->Prozess->Istwert->Regelalgorithmus->Stellsignal) um so bezeichnet zu werden. Wie der Regelalgorithmus aussieht spielt dafür keine Rolle. Da gibt es alle möglichen Strukturen die aus verschiedensten Gründen verwendet werden. Auch ein Zweipunktregler ist z.B. ein Regler. Also so lange der TE nicht komplett Quatsch macht, sieht das für mich schon nach einem Regelkreis aus.

Gruß.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@TE
Also ich kann irgendwie nicht so ganz nachvollziehen, was du da überhaupt machst, das liest sich für mich alles sehr merkwürdig. Du schreibst FB42...das ist doch aber der CONT_S, also ein Schrittregler. Wie bekommst du da ein Stellsignal 0-100 % raus? Der hat doch nur die Steuerausgänge Up/Down? FB58 (TCONT_CP) kenne ich überhaupt nicht. Was hat der für Vorteile gegenüber dem FB41 (CONT_C)? Und wie wird dein Ventil überhaupt angesteuert? Mit einem analogen Stellsignal 0-100 % oder digital auf/zu?
 
Es wird eine HF-Konzentration gemessen im Bereich von 0-200ppm. Damit sich der Wert überhaupt anpasst, muss so lange gewartet werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es wird der FB58 (PID-Regler) verwendet, der am Ausgang ein Stellsignal von 0-100% ausgibt, danach wollte ich einen Puls/Pausenregelung realisieren, die in Abhängigkeit vom Stellwert einen Puls zwischen 4,5 und 17,5s ausgibt und dann 160s wartet. Ich habe den vorhandenen S5 Baustein nachprogrammiert in AWL, weil ich aus der Hilfe des PULSEGEN Baustein keine Möglichkeit gesehen hatte, dass man einen Offset hinzu addieren könnte.

Jetzt ist mein Problem nur noch die Reglerauslegung des PID´s. Es wäre ja unsinnig den Regler jede Sekunde abzutasten, selbst wenn gewartet werden soll. Meine Idee ist es den PID zu blockieren bzw. die Freigabe weg zu nehmen, wenn der selbstgeschrieben Baustein die Pause durchführt.
 
Sorry, aber ich werde aus deinem Ansatz nicht schlau. Bitte beschreib doch mal, wie deine Regelung genau ablaufen soll. Vor allem, was genau der Puls machen soll...fährt das Ventil für Zeit X komplett auf, wieder zu und wartet? Oder fährt das Ventil eine Zeit X, bleibt dann für die Wartezeit in der Stellung und fährt dann von dort aus weiter auf/zu?
 
Ich denke, das ganze geht in die Richtung Dosierung?

Falls es nicht nur CFC sondern PCS7 ist, gibt's dort nen Dosierbaustein DOSE...irgendwas in der APL. Damit könnte mans probieren...
Für Regelstrecken mit Totzeit gibt's auch spezielle Reglertypen, die sich besser als nen PID eignen, z.B. Smith-Prädiktor. Da gibt's von Siemens auch was für PCS7 (APC) bzw. m.M. auch ne Bibliothek für Step7.
Wenns unbedingt der PID sein soll, würd ich D komplett deaktivieren und I sehr langsam einstellen...

Aber sicherlich keine ganz triviale Regelungsaufgabe.

Und zum dritten mal, den PID-Baustein kann man nicht blockieren. Der muss so oft aufgerufen werden, wie am Eingang Sampletime eingetragen, sonst funktionieren seine ganzen internen Zeitberechnungen nicht mehr...

Gruß
 
Wieso nicht eine Rechtecksignal ereugen mit einem Taktbaustein und dann werden der Dosierzeit die Abweichung Soll/ist in die gewünschten Sekunden umrechnen.Die Abweichung kann man über einen Normierungsbaustein umrechnen in real(sekunden)
Wie rechnet man Real(sekunden)-->in Timeformat sekunden um?
 
Zurück
Oben