PID Control Beispiel gesucht

buffi4711

Level-2
Beiträge
301
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich würde gerne mal die PID Funktionen einer S7 ausprobieren (SFB41)
Habe es versucht, aber es funktioniert nicht, der Ausgang ist und bleibt bei null.

Kann mir einer von Euch da weiterhelfen und z.b ein Beispielprogramm erstellen?

Danke und ein erflgreiches Jahr 2007

Gruß Buffi4711
 
Der häufigste Fehler ist, dass man die Cycle-Time vergisst zu setzen.
In meinem Beispiel sind nur die Grundbedingungen gesetzt.
Die P, I und D Parameter werden mittels PID-Control (Siemens Zusatzprogramm) live gesetzt und erst, wenn alles perfekt läuft übertragen. Mit diesem Tool lassen sich auch die Grössen aufzeichnen wie SOLL-, IST-, Regeldifferenzen, Störgrösse, etz.

Nun ma hier das Beispiel:

Und nicht erschrecken, war ma KOP :D
Code:
      UN    "m_Freigabe_PID"
      =     L    136.1
      BLD   103
      UN    "m_aktiv"       // m_aktiv = Merker, der immer eins ist
      =     L    136.2
      BLD   103
      U     "m_aktiv"
      =     L    136.3
      BLD   103
      U     "m_aktiv"
      =     L    136.4
      BLD   103
      UN    "m_aktiv"
      =     L    136.7
      BLD   103
      CALL  "CONT_C" , "db131_PID"
       COM_RST :=
       MAN_ON  :=L136.1
       PVPER_ON:=L136.2
       P_SEL   :=L136.3
       I_SEL   :=L136.4
       INT_HOLD:=
       I_ITL_ON:=
       D_SEL   :=L136.7
       CYCLE   :=T#20MS
       SP_INT  :="md_SOLL"
       PV_IN   :="md_IST"
       PV_PER  :=
       MAN     :=2.000000e+001
       GAIN    :=
       TI      :=
       TD      :=
       TM_LAG  :=
       DEADB_W :=
       LMN_HLM :=
       LMN_LLM :=
       PV_FAC  :=
       PV_OFF  :=
       LMN_FAC :=
       LMN_OFF :=
       I_ITLVAL:=
       DISV    :=
       LMN     :=
       LMN_PER :="aw_OUT"
       QLMN_HLM:=
       QLMN_LLM:=
       LMN_P   :=
       LMN_I   :=
       LMN_D   :=
       PV      :=
       ER      :=
      NOP   0
Hier geht's um einen Applikator, der Etiketten auf ein Paket klebt ;) Soll und Ist-Wert kommen als mm-Grösse (Gleitpunkt) rein, werden verglichen, mit dem GAIN entsprechend auf die richtige Grösse gestreckt und anschliessend mit den PID-Faktoren verarbeitet (die man hier nicht sieht, da nur im DB gespeichert). Anschliessend wird das Resultat nochmal begrenzt und mit einem Offset versehen.
Btw. mit F1 auf den Block kommt nen hübsches Funktions-Diagramm des Reglers.

Gruss und nen frohes neues Jahr
Reto
 
Wenn ich Beispielsweise den SFB41 im OB35 alle 100ms aufrufe, muss dann bei Cycle auch 100ms eingetragen werden oder kann dort ein beliebiger Wert stehen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da meine Regelung nicht Zeitkritisch ist, hab ich den Baustein direkt ins Programm gesetzt ... aber ich würd's auch ma mit 100ms versuchen.

Gruss Reto
 
Im OB35 steht die Aufrufzeit auch in einer Lokalvariable. #OB35_EXC_FREQ
Wenn du die benutzt, brauchst du dir keine Gedanken über die richtige Anagbe für Cycle machen !
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich komm eine fach nicht weiter.

Wen ich den FB 41 mit Datenbaustein aufrufe (im OB 35) mit dem gleichen cycle wie der OB35 ist mein PV immer gleich groß wie der PV in. Sprich das Ding regelt nicht, sondern es wird der Istwert direkt durchgeleitet.
Wenn ich mir die Werte im PID-Control auf dem Schreiber anschaue, ist der Ausgang angeblich null?

Wer kann helfen?

Gruß buffi4711
 
Man_on auf False

Was auch immer gern übersehen wird (wenn der Regler nicht über PID-Control initialisiert wird) ist, das der Parameter Man_on auf True steht, d.h., der Regler regelt nicht!
Im Instanz-DB steht bei man_on dann auch True.Einfach auf False setzen.
Evtl. ist die Lösung ja auch mal simpel...
 
Zurück
Oben