2x CONT_C Regler1 greift auf 2 über

Jelly

Level-1
Beiträge
217
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!

Wollte mal was über die CONT_C Regler in Erfahrung bringen:

Hab ne CPU 314 und soll 2 Flussmengen regeln, 0-20 m3/h.

Wenn ich jeden einzelnen Regler simuliere, also nach Regler 1 [BEA], funzt es ganz gut, aber wenn ich beide zusammen laufen lasse, passiert folgendes:

Ich simulier am PEW 256, also die Flussmenge 1 weniger also SOLL, demnach steigt der Stellwert von Regler 1, soweit richtig.
Aber das Problem ist, der Stellwert von Regler 2 steigt ebenfalls mit, nur langsamer...

Das gleiche ist andersrum auch. Ich erhöhe zB Flusswert 2, PEW 258 -->Regler 2 Stellwert erhöht sich gut, aber Stellwert vom Regler 1 geht ebenfalls langsam mit!

Muss ich da noch was beachten, zwecks DB-Aufruf oder kann mir da jemand nen Tipp geben?

Code:
      UN    "AS: DosPu1"
      L     0.000000e+000
      SPB   M101
      L     "DB_GET_AE".R32.DosPu1_Meng //<== Istwert [REAL]
      L     1.000000e+001
      /R    
      T     "PID-DATA".Reg_C_001_GET.X
      L     "Sollwert_DB".DosPu_1.Menge_Foerder    // <==  Sollwert [REAL]
      UN    "PID-DATA".Reg_C_001_PUT.w_ext_int    // w intern/extern (Regler)
      SPB   M101
      L     "PID-DATA".Reg_C_001_PUT.W_intern
M101: T     "PID-DATA".Reg_C_001_GET.W
      CALL  "CONT_C" , DB41
       COM_RST :="PID-DATA".Reg_C_001_PUT.Restart
       MAN_ON  :="PID-DATA".Reg_C_001_PUT.Y_Hand_Ein
       PVPER_ON:=FALSE
       P_SEL   :="PID-DATA".Reg_C_001_PUT.P_Ein    // P-Anteil einschalten
       I_SEL   :="PID-DATA".Reg_C_001_PUT.I_Ein    // I-Anteil einschalten
       INT_HOLD:="PID-DATA".Reg_C_001_PUT.I_Hold    // I-Anteil einfrieren
       I_ITL_ON:="PID-DATA".Reg_C_001_PUT.I_Set    // I-Anteil setzen
       D_SEL   :="PID-DATA".Reg_C_001_PUT.I_Set    // D-Anteil einschalten
       CYCLE   :=T#100MS
       SP_INT  :="PID-DATA".Reg_C_001_GET.W    // Sollwert
       PV_IN   :="PID-DATA".Reg_C_001_GET.X    // Istwert Eingang
       PV_PER  :=
       MAN     :="PID-DATA".Reg_C_001_PUT.Y_Hand    // Handwert
       GAIN    :="PID-DATA".Reg_C_001_PUT.P    // Proportionalbeiwert
       TI      :="PID-DATA".Reg_C_001_PUT.TI    // Integrationszeit
       TD      :="PID-DATA".Reg_C_001_PUT.TD    // Differenzierzeit
       TM_LAG  :=T#1M                   // Verzögerung D-Anteil
       DEADB_W :="PID-DATA".Reg_C_001_PUT.Totzone    // Totzonenbreite
       LMN_HLM :="PID-DATA".Reg_C_001_PUT.Y_HLIM    // Stellbegrenzung oben
       LMN_LLM :="PID-DATA".Reg_C_001_PUT.Y_LLIM    // Stellbegrenzung unten
       PV_FAC  :=1.000000e+000          // Istwert Faktor
       PV_OFF  :=0.000000e+000          // Istwert Offset
       LMN_FAC :=1.000000e+000          // Stellwert Faktor
       LMN_OFF :=0.000000e+000          // Stellwert Offset
       I_ITLVAL:="PID-DATA".Reg_C_001_PUT.I_Start    // Initialwert I-Anteil
       DISV    :=0.000000e+000          // Störgröße
       LMN     :="PID-DATA".Reg_C_001_GET.Y    // Stellwert
       LMN_PER :=
       QLMN_HLM:="PID-DATA".Reg_C_001_GET.Y_HLIM    // Stellbegrenzung oben erreicht
       QLMN_LLM:="PID-DATA".Reg_C_001_GET.Y_LLIM    // Stellbegrenzung unten erreicht
       LMN_P   :=#dummy_p
       LMN_I   :=#dummy_i
       LMN_D   :=#dummy_d
       PV      :=#dummy_pv
       ER      :=#dummy_er
      L     "PID-DATA".Reg_C_001_GET.Y
      T     "SW: DosPu 1"

Code:
      UN    "AS: DosPu2"
      L     0.000000e+000
      SPB   M102
      L     "DB_GET_AE".R32.DosPu2_Meng //<== Istwert [REAL]
      L     1.000000e+001
      /R    
      T     "PID-DATA".Reg_C_002_GET.X
      L     "Sollwert_DB".DosPu_2.Menge_Foerder    // <==  Sollwert [REAL]
      UN    "PID-DATA".Reg_C_002_PUT.w_ext_int    // w intern/extern (Regler)
      SPB   M102
      L     "PID-DATA".Reg_C_002_PUT.W_intern
M102: T     "PID-DATA".Reg_C_002_GET.W
      CALL  "CONT_C" , DB41
       COM_RST :="PID-DATA".Reg_C_002_PUT.Restart
       MAN_ON  :="PID-DATA".Reg_C_002_PUT.Y_Hand_Ein
       PVPER_ON:=FALSE
       P_SEL   :="PID-DATA".Reg_C_002_PUT.P_Ein    // P-Anteil einschalten
       I_SEL   :="PID-DATA".Reg_C_002_PUT.I_Ein    // I-Anteil einschalten
       INT_HOLD:="PID-DATA".Reg_C_002_PUT.I_Hold    // I-Anteil einfrieren
       I_ITL_ON:="PID-DATA".Reg_C_002_PUT.I_Set    // I-Anteil setzen
       D_SEL   :="PID-DATA".Reg_C_002_PUT.I_Set    // D-Anteil einschalten
       CYCLE   :=T#100MS
       SP_INT  :="PID-DATA".Reg_C_002_GET.W    // Sollwert
       PV_IN   :="PID-DATA".Reg_C_002_GET.X    // Istwert Eingang
       PV_PER  :=
       MAN     :="PID-DATA".Reg_C_002_PUT.Y_Hand    // Handwert
       GAIN    :="PID-DATA".Reg_C_002_PUT.P    // Proportionalbeiwert
       TI      :="PID-DATA".Reg_C_002_PUT.TI    // Integrationszeit
       TD      :="PID-DATA".Reg_C_002_PUT.TD    // Differenzierzeit
       TM_LAG  :=T#1M                   // Verzögerung D-Anteil
       DEADB_W :="PID-DATA".Reg_C_002_PUT.Totzone    // Totzonenbreite
       LMN_HLM :="PID-DATA".Reg_C_002_PUT.Y_HLIM    // Stellbegrenzung oben
       LMN_LLM :="PID-DATA".Reg_C_002_PUT.Y_LLIM    // Stellbegrenzung unten
       PV_FAC  :=1.000000e+000          // Istwert Faktor
       PV_OFF  :=0.000000e+000          // Istwert Offset
       LMN_FAC :=1.000000e+000          // Stellwert Faktor
       LMN_OFF :=0.000000e+000          // Stellwert Offset
       I_ITLVAL:="PID-DATA".Reg_C_002_PUT.I_Start    // Initialwert I-Anteil
       DISV    :=0.000000e+000          // Störgröße
       LMN     :="PID-DATA".Reg_C_002_GET.Y    // Stellwert
       LMN_PER :=
       QLMN_HLM:="PID-DATA".Reg_C_002_GET.Y_HLIM    // Stellbegrenzung oben erreicht
       QLMN_LLM:="PID-DATA".Reg_C_002_GET.Y_LLIM    // Stellbegrenzung unten erreicht
       LMN_P   :=#dummy_p
       LMN_I   :=#dummy_i
       LMN_D   :=#dummy_d
       PV      :=#dummy_pv
       ER      :=#dummy_er
      L     "PID-DATA".Reg_C_002_GET.Y
      T     "SW: DosPu 2"

Danke!
 
Du hast als Instanz-DB für beide Regler den DB41 genommen, das geht nicht, nimm für den 2.Regler einen eigenen Instanz-DB.
 
In dem Instanz-DB werden alle Variablen des FB abgelegt, IN-, OUT-, INOUT-, STAT- und TEMP-Variablen. Wenn du den gleichen Instanz-DB mehrmals anparametrierst, werden die Werte im DB teilweise überschrieben bzw. weiterverarbeitet. Deshalb hat dann auch der eine Regler "Einfluß" auf den Anderen. Wenn du den Intanz-DB öffnest, siehst du, was da alles so drinsteht. Die Daten, die du außerhalb an den FB anlegst, können durchaus in verschiedenen Bereichen eines DB stehen.
 
Zurück
Oben