TIA Zyklischer Aufruf bzw zyklisches Einlesen von Analogwerten >= 30 Min

Wegy81

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

ich bin neu in der SPS Programmierung und bin ein wenig was am ausprobieren wo ich denke mal nicht die richtigen Worte zum suchen finde.

Ich möchte eine Steuerung aufbauen, welche sich nach der Aussentemperatur richtet. dazu habe ich mir eine Schiebung gebaut und auch alles andere ist mir logisch wie ich es realisieren muss.

damit sich in miner Schiebung nicht ständig der Sollwert für miene Regelung ändert möchte ich den Temperaturwert des Fühlers nur ca. alle 30 Minuten in mienen DB schreiben um ihn von dort dann zu verarbeiten. gibt es da eine Möglichkeit bei einer S7 300 mit TIA Portal programmiert, ohne die CPU zu stark zu fordern (zeit gesteuerter Inerrupt oder ähnliches)? Oder muss ich es über einen zeitgesteuerten Script im "WinCC" realisieren (was ich aber vermeiden möchte)?

es ist nicht gerade einfach von "C-Script" Programmierung auf S7 zu wechseln :ROFLMAO:

Danke bereits im Voraus für eure Ideen.

Gruss

Wegy
 
Mehrere Möglichkeiten:

1. Du nutzt einen Zeit-OB, das findest du in der Hardwarekonfig.
Dort kannst du ein Zeitintervall einstellen.
Dann legst du den OB im Programm an.
Dieser OB wird dann in dem Intervall jeweils einmal aufgerufen, das du eingestellt hast.
In dem OB liest und schreibst du die Daten. (oder eben schieben)

2. Du progammierst einen SE-Timer.
Den Ausgang des Timers auf einen Merker (z.B. M100.0)
Auf den Eingang des Timers als UN (UND Nicht) diesen M100.0
Der Timer bekommt als Zeitwert 30min.
Dann wird alle 30 Min. für genau enen Zyklus der M100.0 True.
Mit dem Merker kannst du dann z.Bsp einen Move versorgen, der dann deine Werte schiebt.
 
Hallo Ralle,

Danke für den Tip mit dem in Zyklen denken.
da hätte ich selbst drauf kommen können.
jetzt läuft es wie ich es haben wollte.

Gruß

Wegy

Damit machst du Regelungstechnisch aber das schlechtest mögliche.
Das Ergebnis ist eine sprunghafte Änderung einer Momentaufnahme.

Hier wäre es wesentlich besser den Wert über 30 Minuten zu mitteln.
 
@MSB
Das bringt aber nur wirklich etwas, wenn der Wert um einen bestimmten Mittelwert schwankt. Wenn er langsam absinkt, wie am Abend, dann liegt er über den Mittelwert nach 30Min. auch nicht gerade richtig. Oder sehe ich das falsch?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@MSB
Das bringt aber nur wirklich etwas, wenn der Wert um einen bestimmten Mittelwert schwankt. Wenn er langsam absinkt, wie am Abend, dann liegt er über den Mittelwert nach 30Min. auch nicht gerade richtig. Oder sehe ich das falsch?
Es geht bei dem Wert auch nicht unbedingt um "richtig", sondern um eine möglichste sanfte Änderung als Berechnungsgrundlage für Sachen wie Vorlauftemperatur und Co.
Selbst die Tatsache das der Wert dann natürlich zeitverzögert ist, ist dabei ein durchaus erwünschter Nebeneffekt.
 
ohne die CPU zu stark zu fordern
Egal, ob Dein Code alle 100 ms oder alle 30 Minuten ausgeführt wird: Du forderst die CPU nicht zu stark.
Eine SPS-CPU läuft immer auf "Hochtouren", auch wenn keine Ereignisse abzuarbeiten sind.
Einen kompletten PID-Regler mit Statistik auszuführen fordert die CPU nicht mehr als alle 30 Minuten auf einen bei der Abfrage womöglich zufällig verfälschten Temperaturwert zu reagieren.

es ist nicht gerade einfach von "C-Script" Programmierung auf S7 zu wechseln :ROFLMAO:
Es erfordert insbesondere ein Umdenken von ereignisorientierter Programmierung auf zustandsorientierte Programmierung. Man muß verinnerlichen, daß das ganze Anwenderprogramm im OB1 pausenlos immer wieder abgearbeitet wird (zyklisch, quasi in einer While-Schleife). Wird das Programm länger, dann dauert die Abarbeitung länger, die Auslastung der CPU bleibt aber die selbe, weil nach dem Ende eines Durchlaufs gleich wieder oben angefangen wird. Die CPU schafft nur nicht mehr so viele Durchläufe (Zyklen) pro Sekunde.

Harald
 
Hallo Ihr,

Vielen lieben Dank für die vielen Anregungnen.
Hier mien Lösungsansatz wie ich die Sache ran angehe:

ich habe mir eine lineare, negative Schiebung gebastelt, was bedeutet in einem Temperaturbereich aussen von -8°C bis +10°C bewegt sich meine Vorlauftemperatur zwischen 45°C und 60°C (je kälter es aussen ist, desto wärmer wird die Vorlauftemperatur).
diesen Errechneten Wert (Y_ERG) runde ich und nehme ihn als Sollwert für meinen PID Regler, dessen Aussgang ich auf einen Dreipunktregler setze um mein Mischventil anzutreiben.
in der Schiebung kann ich die Schrittweite anpassen um somit das Verhältnis wie sensibel die Schiebung reagiert zu variiren ( je häher der Wert desto kleiner die Sprünge bei X Wert Änderungen).
mit dieser Variante denke ich das ich den Einganswert vom Aussenfühler stark genug glätte um keine zu Sprunghaften Änderungen am Regelventil zu bekommen.
das ist momentan alles noch reine Theorie und nur im Simulator getestet :grin:.

sobald ich richtige Erfahrungswerte habe, werde ich hier die Lösung nochmals genauer erläutern und ein paar Bilder der Lösung anhängen.

Gruß

Wegy
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Harald hat es Dir schon gesagt, CPU- Ressourcen sparen kannst Du sowieso nicht.
Also lass den Regler laufend mit dem aktuellen Istwert regeln und gut ist es.
Was ich aber noch machen würde ist, dem Stellwert eine Totzone zu verpassen, das heisst erst eine Stellsignaländerung wenn der Stellwert sich zB um +/-3% geändert hat. Das schont das Stellorgan und deep down denke ich, ist es ja das, was Du EIGENTLICH erreichen willst.
 
Zurück
Oben