# PID Regler programmieren, DB erstellen ?



## olitheis (11 August 2005)

Hallo,
ich versuche einen "einfachen" PID Regler zu programmieren. Und zwar habe ich einen Druckaufnehmer 0-10V und ein Proportional Regelventil (Druckluft) als Stellglied ebenfalls 0-10V. Den Sollwert möchte ich über das MMI vorgeben (INT). Ich denke für diese Anwendung kommt der FB41 cont_c in Frage, oder? Jetzt habe ich mich so ein weing da reingelesen, und bin dann auf die Instanz-Datenbausteine gestoßen, und dass FB's immer in Verbindung mit DB's genutzt werden müssen. Ich habe dann in meinem Projekt einen FC8 neu angelegt. In diesem FC8 habe dann aus der Standart Libary den FB41 eigefügt. So, jetzt wußte ich nicht genau, wie das mit dem DB funktioniert und habe also dann im Manager auch noch einen Instanz-DB (41) angelegt, in dem dirkekt die Deklaration für die Variablen vom FB41 schon angelegt waren.
Meine Frage nun: Ist das der Weg, den man geht, um im einfachsten Fall (zur Übung/Testzwecken) einen PID zu programmieren? Wie muß ich denn jetzt FB41, DB41 usw im OB1 aufrufen. Ist es normal, dass automatisch im Simatic Manager ein FB41 erstellt wird? Wie kann ich denn jetzt die Regelparameter ändern, z. B. übers MMI?
Ich weiß, viele Fragen, würde mich aber total freuen, wenn mir jemand etwas helfen könnte   
Gruß
Oli


----------



## Heinz (11 August 2005)

Hallo,
der FB ist in eriner Bibliothek und kann von dort kopiert werden.

Der FB 41 hat einen Parameter Sollwert, dort kannst Du aus dem EmpfangsDB einen Wert antragen und das wars.

Zum Aufruf:
Der Regler braucvht einen festen Takt in dem er aufgerufen wird!!

Daher OB35!!

Sonst passen die Zeiten nicht!


----------



## olitheis (11 August 2005)

Hallo,
also ich brauche grundsätzlich einen OB35, wenn ich den FB41 nutzen will?
Mir ist aber auch noch nicht so ganz klar, wie der DB41 damit zusammenhängt. Und warum automatisch ein FB41 im Simatic Manager erzeugt wird, oder ist das ganz einfach so, wenn man einen FB aus der Bibliothek holt?
Vielen Dank
Oli


----------



## Rayk (11 August 2005)

Hallo, 
die Antworten zu deinen Fragen findest du hier:
http://www2.automation.siemens.com/fea/ftp/module_dt/b03/b03.pdf

nur ganz kurz: 
- der Aufruf im OB 35 ist dazu da, damit du eine Zykluszeitunabhängige Abtastzeit hast
- im Instanz-DB (bei dir DB41) werden die Werte und Zwischenergebnisse, welche der FB41 benötigt, abgelegt

MfG. Rayk


----------



## olitheis (11 August 2005)

Super, Danke,

ich werde mich mal da durch wühlen.
Sollte ich noch Fragen haben, melde ich mich noch Mal.

Vielen dank
Oli


----------



## plc_tippser (11 August 2005)

InstanzDBs werden automatisch erzeugt, wenn man den FB aufruft und die Soll IDB-Nr. angibt.

pt


----------



## Dagobert (11 August 2005)

*FB41 Aufruf*

Hallo Forum,

also ich bin der Meinung, der FB41 ist zyklisch (zum Beispiel im OB1) aufzurufen.

Natürlich braucht ein digitaler Regler ein KONSTANTES Zeitintervall
zwischen den Aufrufen denn ansonsten funktioniert die ganze
Theorie mit Laplace, Z-transformation, Einheitskreis usw usw
in der Praxis nicht, weil die entsprechenden Reglereinstellungen
sich immer auf einen zeitlich konstanten Regleraufruf beziehen.

Aber im Gegensatz zu meinen Vorrednern (besser Schreibern) bin 
ich der Meinung, die Aufrufzeit (Sampletime) wird im Datenwort 2
des Instanzdatenbausteins angegeben.....

Bin mal gespannt, wie die anderen das hier sehen.....

Gruß D. Börgmann


----------



## Heinz (11 August 2005)

@dagobert,
stimmt die cycletime wird angegeben.

MAn kann natürlich auch im OB1 einen "festen" Zeitinterwall programmieren und dann den FB41 aufrufen.

Ich mache dieses nur, wenn die cycletime nicht mit den Zeitobraster passt, oder die Zykluszeit der MAschine recht hoch ist. Nur für einen Anfänger ist der OB doch eine einfache Lösung


----------



## PeterEF (11 August 2005)

Hallo,



> Aber im Gegensatz zu meinen Vorrednern (besser Schreibern) bin
> ich der Meinung, die Aufrufzeit (Sampletime) wird im Datenwort 2
> des Instanzdatenbausteins angegeben.....



Das ist richtig. Aber der Wert der hier steht (Eingang CYCLE des FB41) hat leider nix mit der wirklichen Abtastzeit des Reglers zu tun. Vermutlich wird dieser Parameter für die internen Berechnungen des D- und I-Anteils benötigt. Trägt man hier eine andere als die tatsächliche Abtastzeit ein (und nichts hindert einen daran!  ) funktioniert der ganze Regler nicht richtig (es sei denn man verwendet ihn sowieso nur als reinen P-Regler).

Von daher ist der Aufruf im OB35 schon die sauberste Lösung - wenn man den richtigen Wert der Abtastzeit dann auch dem FB41 mitteilt.

Peter


----------



## Dagobert (11 August 2005)

Hallo Forum,

also ich habe meistens mit Temperatur, Füllstand, Druck, Durchfluss, Drehzahl Regelstrecken zu tun.....
Die beiden erstgenannten sind ja eh langsamere Gesellen....
Bisher rufe ich den FB41 einfach im OB1 auf.
Ich glaube das ist OK weil:

1. die realen Zykluszeiten in S7 Technik so zwischen 10 und 20ms liegen
2. die kleinsten Zeiten der realen Regelstrecken um deutlich mehr als      Faktor 10 höher liegen.

Als Folge dessen erlaube ich mir die Sampletime lediglich im IDB mitzuteilen.
Der Preis meiner Faulheit ist natürlich die schwankende Zykluszeit der S7 und damit kein hunderprozent Konstanter Bausteinaufruf......
Aber die Reglereinstellung kann auch Keiner 100% genau ermitteln denn auch hier treten zwischen Theorie und Praxis deutliche Unterschiede auf.
Aber das ist eine andere Geschichte....
Bei schnellen Regelkreisen (wie Positionierung, Lage usw) sieht die Sache natürlich anders aus.

Gruß D. Börgmann


----------



## olitheis (11 August 2005)

Hallo zuasmmen,
erstmal vielen Dank für die ganzen Infos.
Ich habe eben mal ein paar Versuche mit dem FB/DB41 gemacht. hat auch ganz gut funktioniert. Ein paar problemchen hab ich aber noch:
Irgendwie hängt es etwas mit der Normierung der Werte. Und zwar benutze ich Wago Module, die mit 32767 Einheiten arbeiten. Bei meinem Versuch habe ich einen Druckaufnehmer 0-10 Bar / 0-10V, ein Proportionalventil 0-10V. Der max. Betriebsdruck ist 6 bar. Den sollwert gebe ich über ein MMI ein INT 0-32767 Einheiten. Belegt beim FB41 habe ich PV_PER (PEW260), CYCLE (t#50ms), SP_INT (MD350, normiert auf 0-100), LMN_PER (PAW260). Wenn ich jetzt mit dem MD350 100 vorgebe, dann sollte sich der Druck eigentlich auf 6 Bar einstellen, ich bekomme aber nur max 5 raus  :? Der Druckaufnehmer zeigt so ca. 16000 in der VAT an, das passt ja auch zu den 5bar. Ich mache Morgen mal ein paar screenshots.
Vielleicht hat ja jemand noch ne Idee, würde mich freuen.
Ach ja, der Kurvenschreiber im PID Konfigurator läuft auch irgendwie nicht.
Nochmals Danke
Oli


----------



## Kai (12 August 2005)

Hallo Oli,

Du hast immer noch das Problem, dass Deine Wago-Module einen Bereich von 0 - 32767 haben, Siemens aber einen Bereich von 0 - 27648 braucht.

Wenn Du im FB 41 Deinen Istwert PEW 260 direkt auf den Eingang PV_PER schaltest, dann bekommt der Regler einen falschen Wert.

Dein Istwert hat einen Bereich von 0 - 32767, Siemens rechnet aber den Istwert am PV_PER in ein Gleitpunktformat von - 100 % bis + 100 % nach folgender Formel um:

Eingangswert = PV_PER * 100 / 27648

Du kannst also den Regler nicht direkt mit dem PEW 260 als Istwert beschalten, Du kannst aber folgendes machen:

Normierung des Istwertes auf 0 bis 100 %:

L PEW 260
ITD
DTR
L 3.276700e+004
/R
L 1.000000e+002
*R
T MD 40 (oder ein anderes MD)

Im FB 41 schaltest Du dann das MD 40 auf den Eingang PV_IN.

Damit hast Du zumindest schon einmal ein Problem gelöst.  :wink:

Wie sieht das aber mit Deinem Ausgang aus? Siemes gibt im FB 41 am Ausgang LMN_PER ja auch nur einen Bereich von 0 - 27648 aus. Ist das so in Ordnung, oder brauchst Du auch für Deinen Ausgang einen Bereich von 0 - 32767? Wenn ja, dann kannst Du Deinen Ausgang PAW 260 nicht direkt auf den LMN_PER schalten, sondern musst auch diesen erst umrechnen.

Gruß Kai


----------



## Zottel (12 August 2005)

Dagobert schrieb:
			
		

> Hallo Forum,
> 
> also ich habe meistens mit Temperatur, Füllstand, Druck, Durchfluss, Drehzahl Regelstrecken zu tun.....
> Die beiden erstgenannten sind ja eh langsamere Gesellen....
> ...


Für "langsame" Regelstecken wird das wohl gehen. Eine sauberere Lösung wäre, im OB35 ein Merkerwort oder Zähler hochzuzählen und nur jedes n-te Mal den FB41 aufzurufen, sonst überspringen. Damit kannst du auch gleich die Rechenzeit mehrerer Regler verteilen.
Der Preis deiner "Faulheit" ist, daß die Werte von Tn und Td halt irgendeinen Faktor zwischen 10 und 20 ms haben. Das macht den meisten Regelkreisen nichts aus; man sollte aber einen Gedanken an den "worst case" verschwenden, der irgendwann nach erfolgreicher Inbetriebnahme eintreten könnte.


----------



## Dagobert (12 August 2005)

> Für "langsame" Regelstecken wird das wohl gehen. Eine sauberere Lösung wäre, im OB35 ein Merkerwort oder Zähler hochzuzählen und nur jedes n-te Mal den FB41 aufzurufen, sonst überspringen. Damit kannst du auch gleich die Rechenzeit mehrerer Regler verteilen.
> Der Preis deiner "Faulheit" ist, daß die Werte von Tn und Td halt irgendeinen Faktor zwischen 10 und 20 ms haben. Das macht den meisten Regelkreisen nichts aus; man sollte aber einen Gedanken an den "worst case" verschwenden, der irgendwann nach erfolgreicher Inbetriebnahme eintreten könnte.


Hallo Zottel,
ja klar in S5 habe ich auch immmer "Zeittaktverteiler" programmiert um
a) die Rechenzeit zu verteilen um möglichst gleiche Zykluszeiten zu bekommen
b) um möglichst konstante Beusteinaufrufzeiten zu bekommen
Aber die Werte Tn und Td kann ich auch mit meiner "faulen Methode" prima einstellen. Die schwanken auch nicht.
Das einzige was gering schwankt ist bei der S7 die Zykluszeit.
Und selbst da bin ich mir nicht ganz sicher, ob meine Methode nur ein bisschen Faul oder vielleicht sogar richtig ist?
Also ich bin dem Meinung, wenn man im IDB des Reglers Wandlungszeiten von sagen wir mal > 5*Zykluszeit einträgt, kann man sich die Sache mit dem OB35 sparen.
Und der einzutragende Wert der Samplingtime ist ja wie bekannt Streckenabhägig und sollte naja vielleicht um den Faktor 10 kleiner sein als die kleinste Streckenzeitkonstante.....
Also habe ich keine Bedenken bei allen Strecken mit Zeiten>100 bis 200ms. Und das sind sehr viele ;-)
Natürlich muß man auch den worst case immer in Betracht ziehen.
Die gerösste Herausforderung liegt aber meinens Erachtens meist im optimalen Einstellen des Reglers ;-)

Gruß D. Börgmann


----------



## olitheis (12 August 2005)

@Kai
sowas ähnliches habe ich mir schon gedacht. ich habe also den PEW 260 umgerechnet:
      L     PEW  260              // Druckistwert
      ITD   
      DTR   
      L     3.276700e+004
      /R    
      L     1.000000e+002
      *R    
      T     MD   780              // Istwert normiert auf 0-100

*und statt auf PV_PER auf PV_INT gelegt, und PVPER_ON auf FALSE*, richtig?
Dann habe ich versucht, den Ausgang LMN_PER auf 32767 zu normieren, irgendwie ohne Erfolg?! Ich habe auf den Ausgang LMN_PER ein MW 500
geschrieben und dann versucht, das so auf den analogen Ausgang zu schreiben:
      L     MW   500
      L     1.185149e+000
      *I    
      T     PAW  260
aber wie gesagt, ohne Erfolg! Oder hätte ich den LMN Ausgang nehmen müssen ...und den umwandeln?
Danke nochmal
Oli


----------



## Kai (12 August 2005)

olitheis schrieb:
			
		

> @Kai
> sowas ähnliches habe ich mir schon gedacht. ich habe also den PEW 260 umgerechnet:
> L     PEW  260              // Druckistwert
> ITD
> ...



Das ist alles richtig, es muss aber PV_IN statt PV_INT heißen   :wink: 




			
				olitheis schrieb:
			
		

> Dann habe ich versucht, den Ausgang LMN_PER auf 32767 zu normieren, irgendwie ohne Erfolg?! Ich habe auf den Ausgang LMN_PER ein MW 500
> geschrieben und dann versucht, das so auf den analogen Ausgang zu schreiben:
> L     MW   500
> L     1.185149e+000
> ...



Deine Rechnung ist so nicht ganz richtig, Du musst den Wert folgendermaßen umrechnen:   


```
LMN_PER = MW 500

L     MW   500
ITD   
DTR   
L     1.185149e+000
*R    
RND   
T     PAW  260
```

Gruß Kai


----------



## Kai (12 August 2005)

Nachtrag:

Du kannst natürlich auch den Ausgang LMN nehmen, Du musst den Wert dann aber folgendermaßen umrechnen:   


```
LMN = MD 500

L     MD   500
L     3.276700e+004
*R    
L     1.000000e+002
/R    
RND   
T     PAW  260
```

Gruß Kai


----------



## Onkel Dagobert (12 August 2005)

*Re: FB41 Aufruf*

Hallo Dagobert,



			
				Dagobert schrieb:
			
		

> ..also ich bin der Meinung, der FB41 ist zyklisch (zum Beispiel im OB1) aufzurufen..



ich bin naturgemäß auch faul und spare auch an allen Ecken und Enden. Ich kann jedoch nicht nachvollziehen, was die Bearbeitung im OB1 mit Faulheit zu tun hat, oder was man dabei spart. Was du mit Sicherheit sparst, ist etwas Genauigkeit die du zum Nulltarif haben könntest. Gut, auf das Quäntchen Genauigkeit kann man bei vielen Regelungen verzichten. Aber warum sollte man das tun?


Gruß, Onkel


----------



## Anonymous (12 August 2005)

Wenn man es richtig mach wird ein Regler im OB35 aufgerufen und eigentlich gibt es da auch nicht viel zu diskutieren.

Einfach mal das Handbuch lesen.


netten Gruß

Daniel


----------



## Dagobert (12 August 2005)

Also um die Diskussion zu beenden, korrekte (siehe Handbuch)
Vorgehensweise ist wohl der Aufruf im OB35.....
Sparen kann man sich bei S7 sicher den Zeittaktverteiler wie
er oft bei S5 anzuwenden ist.

Gruß D. Börgmann


----------



## Onkel Dagobert (12 August 2005)

Hallo Namensvetter,



> ...Sparen kann man sich bei S7 sicher den Zeittaktverteiler wie
> er oft bei S5 anzuwenden ist...



Wieso das denn nun jetzt? Bei mir jedenfalls gehört bei so etwas ein Sprungverteiler zum Standard. Zumindest bei einer größeren Anzahl von Reglern und nur einem Weckalarm ist das angebracht!


Gruß, Onkel


----------



## Dagobert (12 August 2005)

weil ich der Meinung bin, dass die Steuerungen
so perfomant (schönes Wort) sind, dass auch 
die Bearbeitung von 40 Reglern keine nennenswerte
Zykuszeitbelastung bringt. 
Zumindest habe ich das bisher nicht beobachtet...

Gruß D. Börgmann


----------



## olitheis (16 August 2005)

Hallo,

wollte mich nur noch einmal bedanken, hab' den Regler zum Laufen gebracht! uff   

Gruß
Oli


----------



## Dagobert (16 August 2005)

*ein gutes Ende*

Na das ist doch Klasse!!

Am Ende wird alles Gut! Fast wie im richtigen Leben ;-)

Gruß D. Börgmann


----------

