Heizungen Schalten in einer Reihenfolge und dann bei neuem Impuls wieder dort starten

Gonzo3

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

Ich hab den PID Compact Programmiert von der s7 im Tia Portal. Gebe dem PID DB den Sollwert von 200 °C dann werden über den Ausgang Outpu PWM meine 6 Heizungen geschalten.
Diese kommen beim ERSTEN einschalten nacheinander im 2 Sek.Takt damit nicht alle gleichzeitig schalten (Stromspitze).
Danach bis um auf die ca. 160 °C schalten alle 6 Heizungen zusammen voll ein danach wird getaktet bis 200°C je nachdem wie die Ein- und Ausschaltzeiten programmiert sind.

So nun zum Problem, Wen die Heizungen anfangen zu takten sprechen immer nur die ersten 3 oder 4 Heizungen an, weil er dann wieder ausschaltet wird 5 und 6 nicht angesprochen.
Ich möchte nun das wen es anfängt zu takten und bei 3 aufhört beim nächsten einschalten, wieder bei 3 anfängt und dann mit 5 und 6 durch läuft.

Kann mir jemand einen Tipp geben wie ich dies lösen könnte? Macht es hier sinn mit Sprungbefehle zu arbeiten oder die Schritte zu speichern?

Arbeite mit s7 1214c Tia Portal V11

Bin froh um jede Hilfe.

Danke und Gruss Gonzo3
 
Du könntest dir ja z.B. in einem DB "merken" welches die letzte Heizung war die angesteuert wurde, und beim nächsten durchlauf mit dieser beginnen.

Könntest ja einen vergleich über zwei zählwerte machen welche bis 6 gehn.
Ist der Vergleich nach dem Takt kleiner 6 dannfängst du bei dieser kleineren Zahl an und lässt bis 6 laufen.

Ist der Vergleich gleich sechs dann fängst du wieder von vorne an.

Nur mal so ne Idee auf die schnelle!

Grüße Pico
 
Über ein PWM-Signal sechs Heizungen unterschiedlich ansteuern? Wie geht das denn?
Hallo Dagobert,
so wie ich das sehe schaltet er eigentlich alle gleichzeitig, nur durch sein Zeitversatz erhält er folgendes Muster:
Code:
U #Heizung Ein
= Heizung 1

U #Heizung Ein 
U #Timer 2 Sekunden
= Heizung 2

...
somit würde die 6. Heizung erst nach 10 Sekunden kommen.

@Gonzo, hast du die Zeiten über ein Schieberegister laufen?
Spontan hätte ich da so eine Art Matrix vor Augen die sich bei jedem erneuten Heiztakt ändert und mit dem Schieberegister verodert wird.
 
Zweite Idee:
Du speicherst die Einschaltzeit jeder Heizung in Sekunden.
Nach beendetem Heiztakt werden die Heizung entsprechend ihren Betriebssekunden sortiert > Suchhilfe z.B.: "Bubblesort"
Die Heizung mit der geringsten Betriebszeit wird im nächsten Heizzyklus als erster genommen.

Was mich jetzt ein bisschen erschreckt ist die CPU (1214) die kann doch nur FUP und KOP, oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
..somit würde die 6. Heizung erst nach 10 Sekunden kommen...
Nur mal nebenbei bemerkt. Das ist im wahrsten Sinne des Wortes taktisch unklug. Man könnte einen normalen PID-Regler mit stegigem Ausgang nehmen und Schwellwerte bilden. Wenn es ganz genau werden soll, könnte man die höchste der eingeschalteten Stufen zusätzlich noch takten. Aber das ändert nichts an der Problematik mit dem Führungswechsel.

Ich schreibe bei ähnlichen Fällen die Bits der Stufen in ein ARRAY[1..6] of BOOL und gebe dieses ARRAY anschließend versetzt in einem zweiten ARRAY aus . Also in einer Schleife wird ARRAY[x] nach ARRAY[y] übertragen, wobei X von 1 bis 6 und y abhängig vom Führungsgerät z.Bsp. von 4 über 6 nach 3 verläuft. Der Startwert des Index y entspricht dem Führungsgerät (im Bsp. 4) und wird ereignis- oder zeitabhängig geändert. Das könnte man hier mit einer Flanke des PWM-Signals machen. Um sinnlose Schaltspiele zu vermeiden, ginge es aber auch in festen zeitlichen Abständen wie einer Stunde oder so.


Gruß, Onkel
 
Hallo Dagobert,
so wie ich das sehe schaltet er eigentlich alle gleichzeitig, nur durch sein Zeitversatz erhält er folgendes Muster:
Code:
U #Heizung Ein
= Heizung 1

U #Heizung Ein 
U #Timer 2 Sekunden
= Heizung 2

...

Das ist richtig Paule, ich steuere alle 6 Ausgänge auf einmal nur zeitversetzt.
Habe den Zeitversatz mit Einschaltverzögerungen realisiert und kein Schieberegister verwendet dies kenne ich nicht. Bin leider noch nicht so erfahren in der Programmierung.
Ist dieses Schieberegister einfach zu erklären?

Ich programmiere alles in KOP daher weiss ich nicht ob es in AWL geht.

Deine 2te Idee hört sich auch gut an, werde mich hier im Forum mal schlau machen über Bubblesort.

Gruss Gonzo
 
Hallo Gonzo,

was haben die Heizungen eigentlich für Leistungen? Und über was werden sie geschaltet? Die einfachste und genaueste Regelung wäre, wenn du alle zusammen über das PWM-Signal und mit geringer Taktzeit (500ms) schalten könntest. Ich habe damit beste Ergebnisse erzielt.


Gruß, Onkel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Gonzo,

was haben die Heizungen eigentlich für Leistungen? Und über was werden sie geschaltet? Die einfachste und genaueste Regelung wäre, wenn du alle zusammen über das PWM-Signal und mit geringer Taktzeit (500ms) schalten könntest. Ich habe damit beste Ergebnisse erzielt.


Gruß, Onkel

Ich habe 6 Schütze für die Heizungen Beim L1 von 1 Schütz hab ich 6.2 kw.

Ich schalte alle 6 Heizungen über Output_PWM ( Bool Datentyp) in einem Zeitversatz.

Gruss Gonzo3
 
Habe diese Aufgabenstellung noch nicht lösen müssen. Aber probiere mich gern mal.

In diesem Fall:
Heizung 1 = Heizung Ein
Heizung 2 = Heizung Ein+2s
Heizung 3 = Heizung Ein+4s
Heizung 4 = Heizung Ein+6s
Heizung 5 = Heizung Ein+8s
Heizung 6 = Heizung Ein+8s

Also alles wie bisher. Ich würde diese Zeiten als eine Art Ringspeicher aufbauen und diesen laufzeibezogen z.B. alle 60s weiterschalten. So das Heizung 1 mal als Heizung 2, 3, 4... usw. fungiert.
 
Zuletzt bearbeitet:
Hallo Gonzo,

Ich habe 6 Schütze für die Heizungen Beim L1 von 1 Schütz hab ich 6.2 kw...
Die Heizungen sind jeweils einphasig? D.h., du hast insgesamt knapp 40kW Leistung bei ohmscher Last?

..Die einfachste und genaueste Regelung wäre, wenn du alle zusammen über das PWM-Signal und mit geringer Taktzeit (500ms) schalten könntest...
Was hältst du denn von meinem Vorschlag? Ersetze die sechs Schütze durch zwei dreiphasige Halbleiterschütze bzw. Solid-State-Relais und du bist alle Probleme los.


Gruß, Onkel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was hältst du denn von meinem Vorschlag? Ersetze die sechs Schütze durch zwei dreiphasige Halbleiterschütze bzw. Solid-State-Relais und du bist alle Probleme los.
Vielen Dank für deine Ideen doch leider ist es zu diesem Zeitpunkt nicht mehr möglich dies zu ändern.

Ist es vielleicht möglich das mir einer ein Beispiel geben könnte in KOP wie so ein Schieberegler oder so ein Bubblesort aufgebaut ist?
Ich hab in der Suchfunktion nach geschaut doch nur Beiträge gefunden wo auf Bubblesort hingewiesen wurde.
Oder gehen Schieberegler und Bubblesort nur in AWL? Den dies geht mit meiner CPU 1214c nicht nach Abklärungen die ich gemacht habe.

Gruss Gonzo3
 
Zuletzt bearbeitet:
Ich schreibe bei ähnlichen Fällen die Bits der Stufen in ein ARRAY[1..6] of BOOL und gebe dieses ARRAY anschließend versetzt in einem zweiten ARRAY aus . Also in einer Schleife wird ARRAY[x] nach ARRAY[y] übertragen, wobei X von 1 bis 6 und y abhängig vom Führungsgerät z.Bsp. von 4 über 6 nach 3 verläuft. Der Startwert des Index y entspricht dem Führungsgerät (im Bsp. 4) und wird ereignis- oder zeitabhängig geändert. Das könnte man hier mit einer Flanke des PWM-Signals machen. Um sinnlose Schaltspiele zu vermeiden, ginge es aber auch in festen zeitlichen Abständen wie einer Stunde oder so.


Gruß, Onkel

Dagobert, wie würde dies genau ausschauen mit den 2 ARRAY of Bool in KOP bin leider noch nicht so geübt mit Programmieren kannst du mir ein Beispiel zeigen?

Gruss Gonzo3
 
Ist es vielleicht möglich das mir einer ein Beispiel geben könnte in KOP wie so ein Schieberegler oder so ein Bubblesort aufgebaut ist?
Hallo Gonzo,
also in KOP ist das dann schon eine Herausforderung. ;)
Anderer Weg: Könntest du denn folgendes realisieren?:
Immer wenn die Anforderung zum Heizen kommt einen Zähler mit einer Flanke um 1 erhöhen und wenn er die Zahl 6 erreicht hat wieder von vorne zu beginnen, anschließend diese Variable immer mit einer Konstanten vergleichen?

Hier in AWL (sollte doch in FUP umsetzbar sein):
Code:
     U #Heizen
     FP #Heizen_Ein
     SPBN ENDE
     L MW10
     + 1
     T MW10
     L 6
     <=I
     SPB ENDE
     L 1
     T MW10
ENDE: NOP 0
     L MW 10
     L 1
     ==I
     = M 1.Heizzyklus

     L MW10
     L 2
     ==I
     = M 2.Heizzyklus
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Gonzo,

Dagobert, wie würde dies genau ausschauen mit den 2 ARRAY of Bool in KOP bin leider noch nicht so geübt mit Programmieren kannst du mir ein Beispiel zeigen?..

Tut mir Leid, ich bin in KOP und FUP ein programmtechnischer Embryo. Ich denke, es wird in KOP, wenn überhaupt irgendwie machbar, sehr schwer und aufwändig. Eine Lösung hätte ich aber auch gerne mal gesehen.

Versuche es besser in AWL. Der Vorschlag von Paule ist ist schon mal ein guter Ansatz.


Gruß, Onkel
 
Immer wenn die Anforderung zum Heizen kommt einen Zähler mit einer Flanke um 1 erhöhen und wenn er die Zahl 6 erreicht hat wieder von vorne zu beginnen, anschließend diese Variable immer mit einer Konstanten vergleichen?
Hallo Gonzo,
konntest du die Aufgabe bis dahin lösen?
Oder brauchst du den Rest gar nicht mehr?
 
Hallo Zusammen,

Hatte noch Ferien darum hab ich mich nicht mehr gemeldet. Hab inzwischen versucht mit dem Vorschlag von Paule (Immer wenn die Anforderung zum Heizen kommt einen Zähler mit einer Flanke um 1 erhöhen und wenn er die Zahl 6 erreicht hat wieder von vorne zu beginnen, anschließend diese Variable immer mit einer Konstanten vergleichen?) eine Lösung zu finden. Aber irgendwie stehe ich auf dem Schlauch komme einfach nicht vorwärts.
Wie kann ich den wen der Zähler bei 4 ist die Heizung 4 ansprechen?

Gruss Gonzo3
 
Aber irgendwie stehe ich auf dem Schlauch komme einfach nicht vorwärts.
Wie kann ich den wen der Zähler bei 4 ist die Heizung 4 ansprechen?
Hallo Gonzo,
ich wollte ja nur wissen ob es mit der Zählvariable klappt, der Rest ist sehr Einfach aber viel Tipparbeit ( in FUP / KOP)
Also noch mal zusammenfassend:
Du hast jetzt eine Zählvariable die von 1 bis 6 zählt und je nach Zählerstand einen Merker setzt und je einen Merker der Zeitgesteuert die nächste Heizung dazu schaltet! Sprich 6 Zählmerker und 6 "Heizung Ein" Merker
Wenn dem so ist:
Code:
// Ansteuerung Heizung 1
U #Zahl_1
U #Heizung_1
O
U #Zahl_2
U #Heizung_6
O
U #Zahl_3
U #Heizung_5
O
U #Zahl_4
U #Heizung_4
O
U #Zahl_5
U #Heizung_3
O
U #Zahl_6
U #Heizung_2
= #Schütz_Heizung_1


// Ansteuerung Heizung 2
U #Zahl_1
U #Heizung_2
O
U #Zahl_2
U #Heizung_1
O
U #Zahl_3
U #Heizung_6
O
U #Zahl_4
U #Heizung_5
O
U #Zahl_5
U #Heizung_4
O
U #Zahl_6
U #Heizung_3
= #Schütz_Heizung_2

// Ansteuerung Heizung 3
U #Zahl_1
U #Heizung_3
O
U #Zahl_2
U #Heizung_2
O
U #Zahl_3
U #Heizung_1
O
U #Zahl_4
U #Heizung_6
O
U #Zahl_5
U #Heizung_5
O
U #Zahl_6
U #Heizung_4
= #Schütz_Heizung_3

// Heizung 4 und 5 darfst du selber machen

// Ansteuerung Heizung 6
U #Zahl_1
U #Heizung_6
O
U #Zahl_2
U #Heizung_5
O
U #Zahl_3
U #Heizung_4
O
U #Zahl_4
U #Heizung_3
O
U #Zahl_5
U #Heizung_2
O
U #Zahl_6
U #Heizung_1
= #Schütz_Heizung_6
Wie du siehst, recht einfach (auch in KOP realisierbar) aber es können sich schnell ein paar Tippfehler einschleichen.

Guten Rutsch!
 
Zurück
Oben