# Totzeit kompensieren



## aleXandroW (21 Juli 2011)

Hallo,

Programmiere zur Zeit eine Granulatdosierung. Dabei wird der Trichter in dem sich das Granulat befindet gewogen. Das Granulat wird durch eine Schnecke in ein Extruder gedrückt. Das Gewicht verändert sich also kontinuierlich.
Ich nehme das Gewicht auf und nach 2min neheme ich das neue Gewicht auf. Über die Differenz weiß ich wieviel Gewicht verloren gegangen ist , dadurch ergibt sich mein Durchsatz[kg/h]
Diesen Istwert vergleiche ich mit meinem Soll-Durchsatz und dementsprechend wir die Schnecke langsamer oder schneller.
Da sich der Wert alle 2min ändert habe ich eine Totzeit von 2min.

Meine Idee ist den I-Anteil sehr klein zu stellen, damit er nicht zu starkt am Sollwert schwingt.

Habt ihr eine Idee wie man am besten die Totzeit kompensieren könnte??


----------



## Verpolt (21 Juli 2011)

Hallo,



> Ich nehme das Gewicht auf und nach 2min neheme ich das neue Gewicht auf



Spontan würde ich sagen, mach aus 2min --->10 sec.


----------



## LargoD (21 Juli 2011)

Wenn ich Deine Anlage richtig verstanden habe, hast Du eine nicht-integrierende Regelstrecke. Die Regelung einer solchen Strecke braucht auf jeden Fall einen I-Inteil.
Zur Verbesserung des Regelverhaltens würde ich mal versuchen, einen gesteuerten Anteil proportional zum Sollwert (nicht zur Regelabweichung!) einzukoppeln. Wenn der Faktor dieser Sollwert-Einkoppelung einigermaßen passt, muss die Regelung nur noch den Rest erledigen und hat schneller abgeglichen. Das hilft Dir bei kleinem I-Anteil.
Gruß
Erich


----------



## aleXandroW (21 Juli 2011)

2sek ist nicht möglich weil sich das Gewicht nur sehr langsam ändert

@Largo,  könntest du es mir vielleicht anhand eines Beispiels beschreiben oder einfacher erklären
verstehe das nicht genau wie du das meinst


----------



## LargoD (21 Juli 2011)

Zeig mal was Du schon hast.
Ich sollte erst mal wissen, ob Du fertige Bausteine verwendest oder was selbst geschriebenes.


----------



## aleXandroW (21 Juli 2011)

regler, i-anteil erstmal weggelassen
schrittkette zum ermitteln des durchsatzes

ich habe natürlich noch mehr code, weiß aber net was du noch sehen willst

im prinzip ist es so eine anlage, nur leider nicht mit siwarex ftc sondern mit siwarex cs. 
http://www.youtube.com/watch?v=nzNDeDufzP8


----------



## LargoD (21 Juli 2011)

Du könntest z. B. auf den Eingang DISV ein Signal legen, das sich als

Solldurchsatz*Faktor

berechnet. Dann erst mal die Regelung ausschalten und nur mit diesem Wert fahren. Dann spielst Du mit dem Faktor so lange, bis es auch ohne Regelung einigermaßen passt. Danach Regelung wieder einschalten und Regelparameter optimieren.

ps. Rufst Du den Regler wirklich alle 100ms auf, obwohl sich der Istwert nur alle zwei Minuten ändert?


----------



## aleXandroW (21 Juli 2011)

ja alle 100ms
was empfehlst du denn?


----------



## LargoD (21 Juli 2011)

10 Sekunden sind schnell genug,
Meine Frage hat aber nichts mit Deinem Problem zu tun. Es ist nur CPU-Zeit Verschwendung, mit den aktuellen CPUs ist das aber alles kein Problem mehr.
Probier erst mal die Sache mit der Sollwert-Einkoppelung.
Gruß
Erich


----------



## jabba (21 Juli 2011)

aleXandroW schrieb:


> Hallo,
> 
> Programmiere zur Zeit eine Granulatdosierung. Dabei wird der Trichter in dem sich das Granulat befindet gewogen. Das Granulat wird durch eine Schnecke in ein Extruder gedrückt. Das Gewicht verändert sich also kontinuierlich.
> Ich nehme das Gewicht auf und nach 2min neheme ich das neue Gewicht auf. Über die Differenz weiß ich wieviel Gewicht verloren gegangen ist , dadurch ergibt sich mein Durchsatz[kg/h]
> ...



Also der Regler ist ja nicht das Problem , sondern die Erfassung der Gewichtsabnahme. Ohne eine gravimetrische Waage ist das ein Glücksfall das so ans laufen zu bringen.
Bei einer gravimetrisch Arbeitenden Waage bekommst du automatisch den Durchsatz. Diese Waagen arbeiten mit Filtern und Abtastfrequenzen da träumt jede SPS von.

Wie und womit wird denn gewogen, woher bekommst Du das Gewicht ?


----------



## Proxy (21 Juli 2011)

Hi,
schon mal durch berechnen probiert?

Durch das entschende dV kannst du ja dann die Schnecke langsamer oder schneller drehen lassen.

h=steigung schnecke
µ=füllfaktor der körner in der schnecke
d=durchmesser schnecke 
n = drehzahl


----------



## franzz (21 Juli 2011)

aleXandroW schrieb:


> 2sek ist nicht möglich weil sich das Gewicht nur sehr langsam ändert



Schreibe jede Sekunde das aktuelle Gewicht in ein Array (oder besser einen Ringbuffer). Dann kannst Du auch jede Sekunde eine neue Rate über 2 Minuten ausrechnen, aus dem aktuellen Gewicht und dem historischen Wert aus dem Buffer.

Dann sollte das Regeln einfacher sein.


----------



## Lupo (22 Juli 2011)

Ich sehe das auch so wie FranzZ.
Auf diese Weise könnte man durchaus auch bei kleinen Gewichtsänderungen ein Verhalten erkennen und darauf reagieren. Welche Refresh-Rate hier sinnvoll ist kann man ja ausprobieren - ich würde es aber auf jeden Fall aber auch erstmal so testen.


----------



## aleXandroW (1 August 2011)

ich versuche mal eure tipps umzusetzen und zu testen

@jabba, wiege mit einer siwarex CS . hab schon gesehen dass die anderen baugruppen wie siwarex FTC alles automatisch machen und man kaum programmieren muss
nun muss ich dass leider mit der siwarex CS machen.


----------



## aleXandroW (1 August 2011)

@ franzz: du meinst mit jede sekunde auf 2minuten, dass er beim array nach 2min wieder von vorne anfängt??


----------



## Kai (1 August 2011)

Vielleicht hilft das folgende Programmbeispiel weiter:

Die letzten 10 Messwerte werden in einem FIFO-Speicher gespeichert.

Aus den gespeicherten Messwerten wird dann ein Mittelwert gebildet.

http://www.sps-forum.de/showpost.php?p=217371&postcount=11

Gruß Kai


----------



## franzz (2 August 2011)

aleXandroW schrieb:


> @ franzz: du meinst mit jede sekunde auf 2minuten, dass er beim array nach 2min wieder von vorne anfängt??



In der ersten Sekunde schreibst Du das momentane Gewicht in a[0].
In der zweiten Sekunde in a[1]
in der 120. Sekunde in a[119]

Dann kannst Du die Rate berechnen: (a[119]-a[0]) / 120.

In der 121. Sekunde gibt es zwei Möglichkeiten:

Entweder, Du verschiebst die Werte alle in deinem Array, also a[1] auf a[0], a[2] auf a[1], a[199] auf a[198]. Dann kannst Du wieder den aktuellen Wert in a[199] schreiben und die Rate wie oben berechnen.

Oder, Du schreibst das neueste Gewicht wieder in a[0] und berechnest die Rate aus (a[0]-a[1])/120

Ersteres ist weniger zu denken, aber mehr Arbeit für die CPU.

Franzz


----------



## LT Smash (3 August 2011)

Zur Kompensierung von Totzeiten in Regelstrecken verwende ich die prädiktive Regelung mittels eines Smith Prädiktors.

Diese setzt allerdings die genaue Kenntnis des Streckenmodells vorraus.

Diese Regelstrecke hat die Besonderheit, daß der Benutzer die Totzeit durch geschickte Wahl unmittelbar beeinflussen kann. Daher ist ein Teil der Strecke, nämlich das Totzeitglied gegeben.


----------



## special_1 (10 August 2011)

*Hilfe?*

Hello,

wir haben eine Keksdosierung mit einer Wägezelle und einem Dosiermodul ohne SPS gelöst. Ist zwar nicht deine Intention aber vielleicht hilft´s bei der Lösungsfindung:

Manual Tecsis BD948

LG, Chris


----------

