Master-Slave Regler in Twincat 3

MZo

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

folgendes Szenario:
Im Anhang befindet sich eine „Zeichnung“. Hoffe das ist soweit verständlich.
Ich habe ein bestimmtes Modul, die über eine Heizpatrone auf eine bestimmte Solltemperatur erhitzt werden soll.

Zum Programm:
Ich habe einen Master-Regler der globale PID-Werte übergeben bekommt und eine Solltemperatur (240°C) die erreicht und gehalten werden muss.
Der Slave-Regler ist eigentlich nur für das Pulsen der Heizung zuständig hat eine eigene Temperaturbegrenzung (bei 550°C) und muss den Sollwert der Master-Slave erreichen und halten.

Zu meiner Frage:
Den Master-Regler habe ich schon programmiert. D.h. er bekommt seine PID-Anteile, die PID-Werte werden berechnet und zusammengeführt (inkl. Anti-Windup & Begrenzung der Regelausgangsgröße).
Einen Funktionsblock für die Pulsweitenmodulation zur Steuerung der Heizung habe ich auch (wurde getestet, funktioniert).

Doch ich weis nicht wie ich über den Slave-Regler die Temperatur des Master-Reglers auf die Solltemperatur regeln und halten soll und zugleich die Temperatur des Slave-Reglers überwachen soll (da max. zulässige Temp. hier: 500°C). Weil im Endeffekt ist der Slave-Regler kein Regler, sondern Temperaturüberwachung und Heizvorgang und hat auch keine PID Anteile. Bei Annäherung auf die Solltemperatur soll ja nur runtergeregelt werden von 500°C damit das Heizen nicht mehr so stark ist.

Ich hoffe Ihr könnt mir da weiterhelfen, vielen Dank schon mal im Voraus :)

Grüße
Muzaffer

Zeichnung.JPG
 
Ich verstehe nicht, warum ein Slave-Regler, der laut Deiner Beschreibung kein Regler ist (!?)
Greift die TemperaturÜberwachung durch diesen Slave-Regler, dann pfuscht sie dem Master-Regler ins Handwerk und der Master-Regler hat nichts besseres zu tun, als dieser Störung seines Regel-Kreises entgegenzuarbeiten und dann muss der Slave-Regler noch stärker eingreifen . . .
Warum soll denn der Slave-Regler die Temperatur besser überwachen können als der Master-Regler? Hat er einen genaueren oder schneller aktualisierten Istwert zur Verfügung als der Master-Regler? Wenn ja, warum??? Weisst Du denn, auf welchen TemperaturIstwert der Slave-Regler die Heizpatrone bringen muss, damit die IstTemperatur von was auch immer (lt. Zeichnung "RegelFühler") erreicht wird?
Bei Annäherung auf die SollTemperatur soll ja nur runtergeregelt werden? Welche SollTemperatur? Die der Heizpatrone? Du meinst das Überschwingen soll vermieden werden? Genau dafür sorgt der D-Anteil (des Master-Reglers), wenn er denn passend zur RegelStrecke dimensioniert ist.
Es geht anscheinend darum, primär die Heizpatrone zu schützen und sekundär die IstTemperatur von was auch immer zu halten.
Wann könnte der Fall auftreten, dass die Heizpatrone an ihre Grenzen geführt wird?
Beim "Hochfahren" der ausgekühlten Anlage? Beim Nachfüllen von aufzuheizendem Material? Beim Anwählen eines höheren Sollwertes?
Nicht den Master-Regler künstlich verlangsamen, sondern die Veränderung des Sollwertes.
Ich denke, den Sollwert an einer Rampe hochzufahren, wäre das Mittel der Wahl. So, dass die Heizpatrone bestenfalls geringfügig "überfordert" wäre.
Wenn sie dennoch zu heiss zu werden droht, den Sollwert des Master-Reglers "manipulieren", nämlich geringfügig zurücknehmen.

Gruss, Heinileini
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für deine Antwort. :)

Also das alles ist ein Hochschulprojekt an dem ich arbeite. Ich habe vor kurzem als Einstieg einen PI-Regler mit einer PWM-Ausgang entworfen, der eine träge Heizung auf eine bestimmte Solltemperatur regeln soll. Nach vielen versuchen und Hilfestellungen hat das auch geklappt und wurde auch getestet.

Nun ist meine Aufgabe einen PID-Regler für eine Lötbarkeitstester zu programmieren. Dazu habe ich ein Badmodul. Das Modul wird über eine Heizpatrone erhitzt mit einer max. Temperatur von 500°. Doch das Modul an sich hat eine Solltemperatur von 240° die erreicht werden soll. Ich habe die Zeichnung selber entworfen um es auch für mich bisschen übersichtlich zu machen. Master und Slave war meine Überlegung (kann auch falsch sein). Der eigentliche PID-Regler ist der "Master". Slave ist eigentlich nur dafür zuständig, die eigene Temperatur (Heizpatrone 500°) zu überwachen und nicht zu überschreiten und auch die SSR so zu takten, dass die Solltemperatur vom Master erreicht und gehalten wird.

Die Isttemperatur des Slave-Reglers steht in abhängigkeit zum Master-Regler.
Da habe ich folgendes gemacht:
- Ich habe den prozentualen Anteil des Regelfehlers (Soll-Ist) vom Master Regler ausgerechnet (BSP: 240-60=180 -> 18000/240 = 75%)
- Dann diesen Anteil als Solltemperatur für den Slave-Regler bewertet mit max. Temperatur 500° (BSP: 75*500/100 = 375°)

Ich weis nicht ob das so richtig ist und ob ich wirklich einen "Slave-Regler" bauen muss oder ob man das auch so Umsetzen kann dass der Slave nur als Überwachung dient, wie der eigentliche Zusammenhang ist und wie ich das programmtechnisch umsetzen soll..
 
Zuletzt bearbeitet:
Moin MZo,
Dein Beispiel für den prozentualen Anteil des Regelfehlers ist leider "Murx".
Wenn Soll = 240 und Ist = 180, dann ist die Differenz 240 - 180 = 60 die Abweichung bzw. der Fehler. Die Abweichung 60 vom Sollwert 240 ist somit 25% von Sollwert.
Aber viel schlimmer ist, dass dies nur für die willkürlich festgelegte Einheit °C zahlenmässig so hinkommt und somit nichts aussagt.
In Wirklichkeit hast Du einen Sollwert von 513 K (273 K + 240) und die Abweichung von 60 ist dann - oh Wunder - nur noch 11,7% von 240 °C entsprechend 513 K.
Aber eine Relevanz des prozentualen Regelfehlers scheint mir ohnehin nicht gegeben.
- Welche maximale AnstiegsGeschwindigkeit erreichst Du für die OberflächenTemperatur des Lots, ohne in/an der HeizPatrone die 500 °C zu überschreiten?
- Wieviel % der Zeit ist dabei die HeizPatrone eingeschaltet?
- Wie stark sinkt die OberflächenTemperatur des Lots pro LötVorgang maximal?
- Wie stark sinkt sie, wenn eine "übliche" Menge Lot nachgefüllt wird?
- Hast Du eine AnzeigeFunktion (z.B. grünes Lämpchen, wenn 240 °C erreicht)?
- Hast Du z.B. 1 Taster, mit dem Du dem System sagen kannst "Ich habe jetzt Lot nachgefüllt"?

Gruss, Heinileini
 
Zuletzt bearbeitet:
Hi Heinileini,

Verstehe, dachte könnte evtl so rechnen aber macht Sinn was du da sagst..

Problem ist ich bin garnicht so tief im
Geschehen, diese ganzen Daten habe ich nicht, mir wurde lediglich nur gesagt es muss ein Temperaturregler programmiert werden ( so im Bild gezeichnet). An sich finde ich is das alles verständlich, kurzgefasst: master temperatur ist solltemperatur (240) muss erreicht werden, slave is die „heizsteuerung“ muss den ssr so takten dass solltemperatur vom master erreicht wird und zugleich hat slave eine max. Temperatur von 500C.

Ich weis nur nicht wie ich das alles in abhg. Zusammensetzen soll..
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Problem ist ich bin garnicht so tief im Geschehen,
Moin MZo,

mach Dir keine Hoffnung, Du steckst schon mittendrin ;)
diese ganzen Daten habe ich nicht,
Das ist schlecht, wenn man so ganz auf's GerateWohl etwas planen muss und das GeräteWohl dabei nicht vernachlässigen darf ;)
Wenn man vorher nicht "experimentieren" darf/kann, wie sich einzelne Zusammenhänge bzw. Abhängigkeiten ungefähr verhalten, dann bleibt die Möglichkeit, das Programm im "EchtBetrieb" die Daten sammeln und aufzeichnen zu lassen, auf denen man später noch eine Optimierung aufbauen könnte.

Um es etwas bunter zu treiben, führe ich mal 3 Phasen ein: grün, gelb und rot.

Phase rot (T_Lot<230°C):
Der TemperaturRegler ("Master") hat Pause und kümmert sich um gar nichts.
Die Überwachung der HeizPatrone ("slave") hat jetzt die Aufgabe, das Lot möglichst zügig auf eine Temperatur von 230°C aufzuheizen und muss dafür sorgen, dass die HeizPatrone dabei keinesfalls überhitzt wird.

Phase gelb (T_Lot>=230°C, jedoch nicht 240±1°C):
Der TemperaturRegler ("Master") übernimmt die Regie und strebt an, die 240°C zu erreichen und in einer vorgegebenen Toleranz zu halten.
Weil der TemperaturRegler schlimmstenfalls nur für eine geringe Aufheizung sorgen muss, sollte eine Überhitzung der Patrone eigentlich nicht auftreten.
Die Überwachung der HeizPatrone bleibt aber wachsam und schaltet ggfs die Heizung ab und das Gerät auf Störung.

Phase grün (240-1 °C <= T_Lot <= 240+1°C):
Wie Phase gelb, aber das Ergebnis liegt im "grünen Bereich".

Die o.g. Zahlen sind nur als Beispiel bzw. ArbeitsHypothese zu verstehen.

Ich hoffe, die Grenze zwischen rot und gelb lässt sich so festlegen, dass . . .
- einerseits ein Betrieb an der Grenze zum Überhitzen der Patrone in den Phasen gelb und grün nicht stattfindet und
- andererseits die Temperatur des Lötbades beim Übergang von rot auf gelb nicht dazu neigt, über 240°C hinauszuschiessen.

Ob es Sinn macht, aus dem Zustand Störung bei Quittierung nur in die Phase rot zu schalten, wenn das LötBad 230°C und die HeizPatrone z.B. 300°C unterschreitet oder ob die Quittierung auch einen Wechsel in die Phase gelb oder grün zulassen soll? Keine Ahnung.

Häwenaissuiikend! Gruss, Heinileini
 
Zuletzt bearbeitet:
Hi Heinileini,

danke für den Tipp, sehr guter Einwand.
Den Zusammenhang verstehe ich vollkommen, aber ich denke so werde ich auch Probleme haben, denn bis ich auf die 230° komme, bin ich schon unten (Slave) schon längst bei 500°.
Auserdem wüsste ich nicht, wie ich das programmtechnisch umsetzen soll, also so wie ich das verstehe, meinst du zum Beispiel

-> Regeln
If(SlaveTemperatur => 500°), dann stoppen. Weis nicht ob das so richtig ist..
 
-> Regeln
If(SlaveTemperatur => 500°), dann stoppen. Weis nicht ob das so richtig ist..
Gut wäre das nicht für die einzuhaltenden 240°C des Lötbades, aber die LebensRettung für die HeizPatrone - die in dem Fall Vorrang hat.

Ich weiss nicht, wie ich es besser formulieren soll.
Ich spekuliere einfach darauf, dass der Master nie so viel Leistung anfordert, solange die LötbadTemperatur "in der Nähe" von 240°C liegt.
Beim Aufheizen von z.B. 20°C auf "fast" 240°C - ich hatte mal 230°C genannt - ist es eher störend, dem Master bereits die Kontrolle zu überlassen.
Ziel ist hier, die Wartezeit bis "Einsatz-bereit" kurz zu halten, also die Patrone "im GrenzBereich" zu betreiben.
Mir geht es hauptsächlich darum, NICHT zwei Regler gegeneinander arbeiten zu lassen.
Mir schwebt vor, nur 1 Regler zu haben, der
- "in Phase rot" die HeizPatronenTemperatur hoch "aber nicht zu hoch" treibt, ohne Rücksicht auf ein stabiles Halten der LötbadTemperatur. Letztere bestimmt lediglich rechtzeitig, wann "Phase rot" beendet wird und "Phase gelb" übernimmt.
- "in den Phasen gelb und grün" nur das tut, was nötig ist, um die LötbadTemperatur zu halten. Eine Überschreitung der HeizPatronenTemperatur führt nur zu einem "Not-Aus", geht aber nicht in die Regelung ein.
In wie weit das nur Wunschdenken bleiben muss, kann ich nicht sagen. Ich habe keine Vorstellung davon, wie schnell die HeizPatrone in die "GefahrenZone" gelangen kann und wie schnell das Betreiben der HeizPatrone bei 500°C sich auf den Anstieg der LötbadTemperatur auswirkt, u.s.w. . . .
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mir schwebt vor, nur 1 Regler zu haben

Ich habe mir das auch so überlegt, ich will es "eigentlich" vermeiden zwei Regler zu bauen.
Laut meiner Vorstellung sollte ich nur einen Regler (Master) haben, der Slave ist eigentlich nur dazu da, um die Temperatur der Heizpatrone abzulesen und diese zu überwachen (deswegen meinte ich am Anfang ich sehe eig den "Slave-Regler" nicht als Regler sondern eher als Überwacher vllt.)

Ich will eigentlich auch vermeiden dass ich einen hard-cut mache indem ich einfach die temperatur regele und wenn die solltemperatur erreicht wird oder die maximale heizpatronen temperatur erreicht wird alles abgeschalten wird, denn das is ja dann eigentlich kein Regler..

Eine Lösung wäre ja wie du schon geschrieben hast: die Temperatur der Heizpatrone auf Grenzbereich zu pulsen und zu halten bis zur Annäherung der Solltemperatur des Masters. Sobald die Temperatur nah an der Solltemperatur liegt muss dann der Master dem Slave sagen "runterregeln, ich erreiche meine Solltemperatur"..

Doch wie genau muss ich das im Programm dann umsetzen das "Runterregeln ich erreiche meine Solltemperatur" genau da hänge ich nämlich..
 
Zuletzt bearbeitet:
Sobald die Temperatur nah an der Solltemperatur liegt muss dann der Master dem Slave sagen "runterregeln, ich erreiche meine Solltemperatur"..

Doch wie genau muss ich das im Programm dann umsetzen das "Runterregeln ich erreiche meine Solltemperatur" genau da hänge ich nämlich..
Grob skizziert:
Code:
IF T_Pat_Ist > 500 THEN 
    Stoerung := TRUE ;
ELSIF T_Pat_Ist < 300 AND Quittierung THEN 
    Stoerung := FALSE ;
END_IF ; 

// X: Abstand zur BetriebsTemperatur z.B. 10  
// H: Hysterese z.B. 1 
IF T_Lot_Ist > T_Lot_Soll - X + H THEN 
    Aufheizen := FALSE ;
ELSIF T_Lot_Ist < T_Lot_Soll - X - H THEN 
    Aufheizen := TRUE ;
END_IF ; 

IF Stoerung THEN
    IstWert  := 20 ; // ?
    SollWert := 20 ; // ?                   
    // I-Anteil von PID-Regler unwirksam machen !!!
ELSIF Aufheizen THEN
    IstWert  := T_Pat_Ist ;
    SollWert := 480 ;                   
    // PID-Parameter für "Aufheizen" vorbesetzen
    // I-Anteil von PID-Regler unwirksam machen !!!
ELSE // Lot auf BetriebsTemperatur halten     
    IstWert  := T_Lot_Ist ;
    SollWert := T_Lot_Soll ; // z.B. 240
    // PID-Parameter für "Temperatur halten" vorbesetzen
END_IF ; 
. . .
// PID-Regler
. . .
// ReglerAusgang --> PWM (inkl. Disable bei Störung)
. . .
 
Guten Abend Heinileini,

danke für deine Starthilfe, ich werde am Donnerstag versuchen dein Code bei mir umzusetzen und zu testen 😊
 
Zurück
Oben