TIA Aufheizkurven programmieren

Deine Rampe ist doch durch die Kurve festgelegt die du abfahren möchtest.
In deinem Fall 1 sind es 2,5°C/Minute, wenn du die Sollwertaktualisierung auf eine Minute festlegst oder 0,04167°C/Sekunde bei Sekundentakt.
Den Wert musst du jetzt nur im Takt (jede Minute bzw. jede Sekunde) zu deinem Sollwert addieren, dann hast du deine Rampe als Sollwert für den PID-Regler.
Wenn es deine Zwischenprüfung ist, gehe ich mal davon aus du weißt wie du im TIA Flanken erstellen und auswerten, sowie Werte addieren kannst.
 
Wie kann ich das denn mit der Kurve 2 machen? Bei der ich die Temperatur halte? Also wie unterbreche ich die Flanke und lasse sie dann weiter laufen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie kann ich das denn mit der Kurve 2 machen? Bei der ich die Temperatur halte? Also wie unterbreche ich die Flanke und lasse sie dann weiter laufen
also TIA funktioniert recht gut objektorientiert.

Du kannst z.B. einen Baustein schreiben, der als Eingang einen Enable, Taktgeber, einen K-Faktor und einen Offset, vielleicht noch einen Zielwert hat und als Ausgang einen Stellwert.

Dann kannst du den Baustein optional mehrfach aufrufen, je nach Gusto. Und jedesmal mit unterschiedlichen Werten anfüttern.

edit: für Leute, die nicht gern das Rad neu erfinden gibt es auch Bibliotheken mit getesteten Modulen. Z.B. hier
1647795127616.png
 
Zuletzt bearbeitet:
Meinst du die 3 Kurven(Fall)
War bisher immer auf dem Gedanken das ich eine Rezeptur benötige um die Kurven auch schnell ändern zu können.
Oder das ich einen bestimmten Baustein brauche der nicht unter den Basisbausteinen ist.
Aber jetzt versuche ich mich mal.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie kann ich das denn mit der Kurve 2 machen? Bei der ich die Temperatur halte? Also wie unterbreche ich die Flanke und lasse sie dann weiter laufen
Was hast du denn bisher übrehaupt für das Projekt vorbereitet? Du hast mir zwar geschrieben du hättest eine komplette Visualisierung vorbereitet, allerdings habe ich bei deinen Fragen mehr und mehr den Verdacht du hast noch nie wirklich etwas im Bereich SPS projektiert. Was hast du denn an Programm für deine Aufgabe vorbereitet?
Davon das du die Kurven auch schnell ändern willst war bisher nie die Rede
 
Zuletzt bearbeitet:
Wie kann ich das denn mit der Kurve 2 machen? Bei der ich die Temperatur halte? Also wie unterbreche ich die Flanke und lasse sie dann weiter laufen
Meinst du die 3 Kurven(Fall)
...
Aber jetzt versuche ich mich mal.
Es sollen 3 Aufheizkurven existieren:
1- aufheizen des Mauerwerkes - innerhalb von 8h stetiger anstieg auf 1200°C-> 150°C/h
2- warmhalten des Ofens - 1200°C halten
3- trocknen des Mauerwerkes - innerhalb von 12h auf 600°C-> 50°C/h, dann 6h -> 600°C halten, innerhalb von 9h auf 1200°C-> 66,7°C/h
... innerhalb von 12h auf 600°C-> 50°C/h, dann 6h -> 600°C halten (Fall 3), ist nichts anderes als Fall 1 mit direkt anschliessendem Fall 2 (und danach anschliessendem Fall 1, jetzt allerdings mit neuen Werten für die Anfangs- und End-Temperatur und neuer AnstiegsGeschwindigkeit).
Ich schlage vor, dass Du einen RampenBaustein verwendest, der auch wunschgemäss den ausgegebenen Wert begrenzen kann.
Ggfs kannst Du diesen Baustein auch selbst programmieren (ist kein Hexenwerk und fördert hoffentlich das Verständnis der Wirkungsweise) oder die Begrenzung auch extern hinzufügen, wenn Du einen RampenBaustein ohne Begrenzung verwenden willst.

Code:
// "manipulierten" Sollwert berechnen
If irSetpIn > iorSetRmp Then      // Ansteigen des Sollwertes
    iorSetRmp := Min(IN1:=iorSetRmp + irPosGrd, IN2:=Min(IN1:=irMaxVal, IN2:=irSetpIn)) ;
ElseIf irSetpIn < iorSetRmp Then  // Abfallen des Sollwertes
    irSetRmp := Max(IN1:=iorSetRmp + irNegGrd, IN2:=Max(IN1:=irMinVal, IN2:=irSetpIn)) ;
End If ;
// StatusBits bilden
oxUppLim  := iorSetRmp >= irMaxVal ;                             // upper limit
oxRising  := irSetpIn - iorSetRmp > 0 And iorSetRmp < irMaxVal ; // rising
oxFalling := irSetpIn - iorSetRmp < 0 And iorSetRmp > irMinVal ; // falling
oxLowLim  := iorSetRmp <= irMinVal ;                             // lower limit
Dies müsste z.B. im SekundenTakt durchlaufen werden.
'irSetpIn' ist der Temperaturwert, der angestrebt werden soll.
'iorSetRmp' ist der vom Baustein ausgegebene, aktuelle TemperaturSollwert, der einerseits an den Regler weitergeleitet wird und andererseits von dem hier angedeuteten Baustein nach Ablauf der Sekunde wieder eingelesen und aktualisiert wird.
'irPosGrd' ist der gewünschte Anstieg der Temperatur pro Sekunde.
'irNegGrd' (negativer Wert!) ist der gewünschte Abfall der Temperatur pro Sekunde.
'irMaxVal' ist die Obergrenze der Temperatur, die nicht überschritten werden soll.
'irMinVal' ist die Untergrenze der Temperatur, die nicht unterschritten werden soll.

Um z.B. den Fall 3 zu realisieren, könntest Du ...
- Als Obergrenze 600 °C vorgeben und als anzustrebenden Temperaturwert 1200 °C und als AnstiegsGeschwindigkeit 0,0139 °C/s.
... und warten, bis 600 °C erreicht wird
... und dann warten, bis 6 h bei 600 °C abgelaufen sind
- dann Als Obergrenze 1200 °C und eine AnstiegsGeschwindigkeit von 0,0185 °C/s vorgeben
... und dann warten, bis die 1200 °C erreicht sind
... und dann - keine Ahnung - das geht aus Deinem Fall 3 nicht hervor ...
Deine AnstiegsGeschwindigkeiten habe ich nicht nachgerechnet, sondern nur in °C/s umgerechnet.
 
Was hast du denn bisher übrehaupt für das Projekt vorbereitet? Du hast mir zwar geschrieben du hättest eine komplette Visualisierung vorbereitet, allerdings habe ich bei deinen Fragen mehr und mehr den Verdacht du hast noch nie wirklich etwas im Bereich SPS projektiert. Was hast du denn an Programm für deine Aufgabe vorbereitet?
Davon das du die Kurven auch schnell ändern willst war bisher nie die Rede
Selber habe ich auch bisher nie richtig programmiert.
Ich bin 25 Jahre jung, Elektroniker für Betriebstechnik und habe sehr viel mehr mit Instandhaltung zu tun als neue Anlagen aufzubauen und zu programmieren.
Hinzu kommt das die Anlagen an denen ich arbeite sehr veraltet sind und noch viele mit S5 und S7 laufen, anstatt mit TIA.
Programmtechnisch kann ich wohl einen ES hinzufügen oder mal etwas Störungsbedingt beschalten, aber richtig programmieren hab ich so direkt und ausführlich leider noch nicht lernen dürfen. das machen bei uns im Unternehmen halt die Techniker... und den mache ich nebenbei in der Abendschule.

Sonst würde ich auch garnicht (leider) so "doof" fragen.

Die Visualisierung habe bereits erstellt anhand eines beispielprojektes was ich umgeschrieben habe, da konnte ich aber immer schauen wie das in dem bestehendem projekt gemacht wurde und so habe ich das dann "kopiert" bzw. gemacht.
Das habe ich auch alles verstanden.
Dort oder in anderen Projekten die ich mir angeschaut habe ist halt nirgends so eine Regelung die ich brauche.

Würde mich dennoch freuen wenn die bisherige Hilfsbereitschaft anhält :/
Tut mir leid.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Doofe Fragen gibt es nicht, vielleicht nur doofe Antworten. Allerdings wenn die Informationen die du dem Forum gibst, nur unzureichend sind, kannst du auch keine passenden Antworten bekommen.
Du hast geschrieben diese Regelung wäre für eine Zwischenprüfung deiner Techniker-Abendschule, dann müsst ihr doch wenigstens die basics von TIA und der SPS-Programmierung durchgenommen haben. Als erstes Projekt gleich so eine Regelung zu machen ohne irgendwelche Vorkentnisse wäre schon heftig.
Hier hat es ja schon viele Hinweise gegeben wie du die Regelung umsetzen kannst, wie die Sollwertrampe berechnet wird etc.
Habt ihr denn das TIA-Portal im Unterricht gehabt? Hast du in deinem Projekt schon was vorbereitet oder erwartest du hier eine fertige Lösung?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Selber habe ich auch bisher nie richtig programmiert.
Ich bin 25 Jahre jung, Elektroniker für Betriebstechnik und habe sehr viel mehr mit Instandhaltung zu tun als neue Anlagen aufzubauen und zu programmieren.
Hinzu kommt das die Anlagen an denen ich arbeite sehr veraltet sind und noch viele mit S5 und S7 laufen, anstatt mit TIA.
Programmtechnisch kann ich wohl einen ES hinzufügen oder mal etwas Störungsbedingt beschalten, aber richtig programmieren hab ich so direkt und ausführlich leider noch nicht lernen dürfen. das machen bei uns im Unternehmen halt die Techniker... und den mache ich nebenbei in der Abendschule.

Sonst würde ich auch garnicht (leider) so "doof" fragen.

Die Visualisierung habe bereits erstellt anhand eines beispielprojektes was ich umgeschrieben habe, da konnte ich aber immer schauen wie das in dem bestehendem projekt gemacht wurde und so habe ich das dann "kopiert" bzw. gemacht.
Das habe ich auch alles verstanden.
Dort oder in anderen Projekten die ich mir angeschaut habe ist halt nirgends so eine Regelung die ich brauche.

Würde mich dennoch freuen wenn die bisherige Hilfsbereitschaft anhält :/
Tut mir leid.
Alles gut.

Ich war 11 Jahre im technischen Kundendienst unterwegs und es gab nichts schlimmeres als Instandhalter mit gefährlichem Halbwissen und Programmiergerät. Die Jungs kriegen alles hin...
Ansonsten besser die Steuerung in Ruhe lassen, in der Regel geht im Programm ja nichts kaputt. Eher irgendwas drum herum .

Also ein Tipp von meiner Seite: wenn du echt an die Steuerungen ran willst und da gut sein willst, dann musst du dich einfach intensiv damit auseinandersetzen. Und wenn neue Anlagen kommen, mit dazuhocken, erklären lassen, ggf. Doku einfordern usw.

Es gibt auch nichts cooleres als Instandhalter mit echten Kenntnissen und Programmiergerät, die liefern uns Herstellern echtes Feedback und Verbesserungsvorschläge vom Endanwender.
 
Alles gut.

Ich war 11 Jahre im technischen Kundendienst unterwegs und es gab nichts schlimmeres als Instandhalter mit gefährlichem Halbwissen und Programmiergerät. Die Jungs kriegen alles hin...
Ansonsten besser die Steuerung in Ruhe lassen, in der Regel geht im Programm ja nichts kaputt. Eher irgendwas drum herum .

Also ein Tipp von meiner Seite: wenn du echt an die Steuerungen ran willst und da gut sein willst, dann musst du dich einfach intensiv damit auseinandersetzen. Und wenn neue Anlagen kommen, mit dazuhocken, erklären lassen, ggf. Doku einfordern usw.

Es gibt auch nichts cooleres als Instandhalter mit echten Kenntnissen und Programmiergerät, die liefern uns Herstellern echtes Feedback und Verbesserungsvorschläge vom Endanwender.
Ich versuche es schon sehr immer mit dabei zu sein wenn programmierer bei uns etwas machen, allerdings wird ja auch noch erwartet das ich die anderen Aufgabe erledige und da hab ich dann nie richtig puffer mich da während der Arbeitszeit neben zu setzen oder zu beschäftigen.
Schichtdienst/ Störungsdienst mache ich auch noch nebenbei.
Aber ja, da möchte ich irgendwie hin kommen und ohne Techniker wird das hier im Unternehmen nichts mit dem Programmiergerät :D
Bisherige Lösung für Kurve 1 folgt.
 
Moin Paul,

das Studieren von FUP-Programmen fällt mir anscheinend so schwer, wie Dir das Lesen von SCL.
Was mir jetzt ins Auge gesprungen ist: die Überschrift von NW3.
"Temporäre Static Variable" ist ein Widerspruch in sich. Eine temporäre ist eine nicht-statische Variable und eine statische Variable ist eine nicht-temporäre.
Ich bin da so pingelig, weil es ganz wichtig ist, beides zu unterscheiden bzw. den Unterschied zu kennen und vor allem, den Unterschied zu verstehen.
Eine statische Variable behält ihren Inhalt/Zustand beim/nach dem Verlassen des Bausteins und beim nächsten Aufruf des Bausteins ist der "alte" Inhalt/Zustand noch unverändert erhalten.
Eine temporäre Variable ist sozusagen ein Schmierzettel, der beim Verlassen des Bausteins in die Tonne getreten wird. Beim nächsten Aufruf des Bausteins kann sich der Baustein nicht erinnern, was auf dem Zettel gestanden hat.
Dort, wo nur eine temporäre Variable benötigt wird, kann man natürlich stattdessen eine statische Variable verwenden, das kostet lediglich ein Bisschen mehr SpeicherPlatz, bringt aber keinen Vorteil.
Dort, wo eine statische Variable benötigt wird, kann man sie aber nicht durch eine temporäre Variable ersetzen.
Eine typische Anwendung für statische Variablen sind "FlankenMerker", d.h. Speicher, in denen man sich den vorherigen Zustand von irgendetwas merkt, um ihn mit dem aktuellen Zustand zu vergleichen und um so feststellen zu können, ob/wann sich etwas geändert hat.
Stichwort "FlankenErkennung". Vermutlich benötigst Du dies, um Dein TaktSignal auzuwerten.

Du addierst immer den Wert, den Du für den gewünschten Anstieg ermittelt/vorgegeben hast?
Das kann bei der letzten Addition zu viel sein. Bei der letzten Addition dafür sorgen, dass maximal die Differenz Sollwert - Rampenwert addiert wird.
In meinem Beispiel hatte ich diese Funktionalität in der Ermittlung der MIN- bzw. MAX-Werte "versteckt", wo ich zusätzlich noch die Begrenzung auf einen minmalen bzw. maximalen Ausgangswert untergebracht hatte.
Wenn Du auf diese Anpassung des zu addierenden Wertes verzichtest, kann es passieren, dass Du nie den Endwert erreichst, sondern ständig um diesen Wert herumpendelst und abwechselnd einen zu grossen und einen zu kleinen Wert ausgibst.
U.U. stört dieses Verhalten gar nicht und wird nicht einmal bemerkt. Aber, wenn ich z.B. an einen Motor denke, der ständig unter Strom gehalten wird, nur um seine SollPosition zu erreichen (die er eigentlich längst erreicht hat) und an die entsprechende Erhitzung des Motors und die EnergieVerschwendung ...

Gruss, Heinileini
 
Soweit wäre ich jetzt mit der Rampe für die Kurve 1...
Würde das so hin hauen?
Ich werde das ja nicht aufbauen, deswegen nur in der Theorie...
Es hat etwas gedauert bis ich deine Ansatz nachvollziehen konnte. Dein Sollwert geht auch immer vom Startwert 0°C aus, dein Ofenkammer wird ja aber sicherlich nie 0°c erreichen.
Du musst doch nur beim Start der Erwärmung deinen aktuellen Temperaturwert in den Sollwert schreiben und danach 0,04167°C/Sekunde auf den Sollwert aufaddieren. Das ist dann dein Sollwert an den PID-Regler.
Der steuert dann dein Heizelement.
Nach der Addierung musst du dann nur kontrollieren, dass dein Sollwert nicht größer wird als die Zieltemperatur. Ist die Zieltemperatur, also dein Ausgangswert größer, dann schreibst du deine Zieltemperatur in den Ausgangswert und schon bleibt dein Sollwert an den Regler konstant.
 
Zurück
Oben