Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 9 von 9

Thema: Automation Studio : PID Regler

  1. #1
    Registriert seit
    25.09.2011
    Beiträge
    53
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, ich stehe gerade wieder bei AS auf dem Schlauch.

    Ich benötige einen PID-Regler für eine Leistungsreglung eines Brenners.
    Gegeben sind mir Ist-Wert -> actValue, Soll-Wert -> setValue. Der Brenner soll von 0-100% Prozent fahren. Gibt es hierfür eine einfachere Methode (Keine Zweipunktregelung). Der Brenner wird über den Analog Output mittel 0..10V angesteuert.



    Code:
    PROGRAM _INIT
    
    (* Init variables *)
    setValue      := 1000;
    start         := FALSE;
    tuningRequest := LCPID_TUNE_REQU_OFF;
    
    
    (* Parameters for PID tuning *)
    LCPIDTune_0.Y_min          := 0;
    LCPIDTune_0.Y_max          := 32767;
    LCPIDTune_0.Y0             := 6300;
    LCPIDTune_0.Y1             := 11300;
    LCPIDTune_0.X0             := 250;
    LCPIDTune_0.X_min          := -10000;
    LCPIDTune_0.X_max          := 10000;
    LCPIDTune_0.P_manualAdjust := 0;
    LCPIDTune_0.I_manualAdjust := 0;
    LCPIDTune_0.D_manualAdjust := 0;
    LCPIDTune_0.pAddPar        := ADR(addParameter);
    LCPIDTune_0.pOptions_osc   := ADR(oscOptions);
    LCPIDTune_0.pOptions_step  := ADR(stepOptions);
    
    
    (* Parameters for PID controller *)
    LCPID_0.A        := 0;
    LCPID_0.Y_man    := 100;
    LCPID_0.Y_fbk    := 100;
    LCPID_0.hold_I   := FALSE;
    LCPID_0.out_mode := LCPID_OUT_MODE_AUTO;
    
    
    (* Parameters for extruder simulation model *)
    extruderLCRSimModExt.enable   := 1;
    extruderLCRSimModExt.Tt_h     := 900000;	(* microseconds *)
    extruderLCRSimModExt.Tt_c     := 500000;	(* microseconds *)
    extruderLCRSimModExt.k_h      := 39;
    extruderLCRSimModExt.k_c      := 0.012;
    extruderLCRSimModExt.PT2_T1   := 5.0;
    extruderLCRSimModExt.PT2_T2   := 12.5;
    extruderLCRSimModExt.Temp_amb := 250;
    extruderLCRSimModExt.Temp_c   := 250;
    extruderLCRSimModExt.Alpha_c  := 0.0;
    
    
    
    
    END_PROGRAM
    
    
    
    
    PROGRAM _CYCLIC
    
    
    (* Time base counter *)
    baseLCCounter();
    (* PID tuning *)
    LCPIDTune_0.enable   := start;
    LCPIDTune_0.okToStep := LCPIDTune_0.rdyToStep;
    LCPIDTune_0.request  := tuningRequest;
    LCPIDTune_0.basetime := baseLCCounter.mscnt;
    LCPIDTune_0();			(* LCPIDTune function block call *)
    IF LCPIDTune_0.state = LCPID_TUNE_STATE_FINISHED THEN
      tuningRequest := LCPID_TUNE_REQU_OFF;
    END_IF
      
    (* PID controller *)
    LCPID_0.enable   := start;
    LCPID_0.ident    := LCPIDTune_0.ident; (* ident of PIDTune -> provides parameters (Kp, Tn, Tv, ...) *)
    LCPID_0.W        := setValue;
    LCPID_0.X        := actValue;
    LCPID_0.basetime := baseLCCounter.mscnt;
    LCPID_0();			(* LCPID function block call *)
    manipulatedVar := LCPID_0.Y;
    (* Extruder simulation model *)
    extruderLCRSimModExt.Alpha_h := INT_TO_REAL(manipulatedVar) / 327.67;
    extruderLCRSimModExt();		(* LCRSimModExt function block call *)
    actValue := REAL_TO_INT(extruderLCRSimModExt.y);
    
    
    END_PROGRAM
    Zitieren Zitieren Automation Studio : PID Regler  

  2. #2
    Registriert seit
    17.10.2011
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Kam bis jetzt noch nicht in die Verlegenheit mit den Regelalgo. von B&R zu spielen, aber kann es sein das du den falschen Baustein verwendest? Probier mal LCRTempPID() aus, afaik sollte das der PID-Regler für Temp. sein.

    edit: Bzw. guck mal unter LoopConr -LCRTempTune() in der Hilfe nach.

  3. #3
    Registriert seit
    26.11.2008
    Beiträge
    16
    Danke
    2
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Schau dir mal den FUB LCRSlimPID() an.

    Das ist ein vereinfachter PID Regler mit integrierter Tuning Funktion.
    Sollte für deine Anwendung ausreichend sein.

  4. #4
    Registriert seit
    25.09.2011
    Beiträge
    53
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Der sieht wie folgt aus

    Code:
    PROGRAM _INIT(* init program *)
    (* Init variables *)
    setTemp := 50.0;
    tuningRequest := 0;
    (* Parameters for PID controller *)
    tempContLCRSlimPID.enable := TRUE;
    (* Parameters for extruder simulation model *)
    extruderLCRSimModExt.enable   := TRUE;
    extruderLCRSimModExt.Tt_h     := 900000;	(* microseconds *)
    extruderLCRSimModExt.Tt_c     := 500000;	(* microseconds *)
    extruderLCRSimModExt.k_h      := 3.9;
    extruderLCRSimModExt.k_c      := 0.012;
    extruderLCRSimModExt.PT2_T1   := 5.0;
    extruderLCRSimModExt.PT2_T2   := 12.5;
    extruderLCRSimModExt.Temp_amb := 25.0;
    extruderLCRSimModExt.Temp_c   := 25.0;
    extruderLCRSimModExt.Alpha_c  := 0.0;
    
    
    END_PROGRAM
    
    
    
    
    PROGRAM _CYCLIC
    (* cyclic program *)(* PID controller *)tempContLCRSlimPID.W       := setTemp;
    tempContLCRSlimPID.X       := actTemp;
    tempContLCRSlimPID.request := tuningRequest;
    tempContLCRSlimPID.pPar    := ADR(contPara);
    tempContLCRSlimPID();		(* LCRSlimPID function block call *)
    manipulatedVar := tempContLCRSlimPID.Y;(* Extruder simulation model *)
    extruderLCRSimModExt.Alpha_h := manipulatedVar;
    extruderLCRSimModExt();		(* LCRSimModExt function block call *)
    actTemp:= extruderLCRSimModExt.y;
    END_PROGRAM
    In der Simulation schwingt sich actTemp automatisch hoch. Sprich es kommt zum Abgleich mit setTemp. Dabei ändere ich den Ist-Wert überhaupt nicht.

  5. #5
    Registriert seit
    26.11.2008
    Beiträge
    16
    Danke
    2
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Normalerweise gehe ich folgendermaßen vor.
    1.) tuningRequest setzen z.B.: 1 --> Schwingversuch wird durchgeführt
    2.) warten bis Tuning fertig. --> tempContLCRSlimPID.PIDTune_inst.state wird 0
    3.) tuningRequest setzen 4: --> die ermittelten Parameter aus Autotuning werden in Reglerparameter übertragen
    4.) tuniingRequest rücksetzen 0: --> Regler ist betriebsbereit

    Probier diese Vorgehensweise mal aus.
    Dann sollte der Regler schon einmal anständig regeln.

  6. #6
    Registriert seit
    30.01.2013
    Ort
    Weilerswist
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    kann mir mal jemand den Differenziealanteil eines PID Reglers vernünftig erklären?

  7. #7
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Zitat Zitat von Jonny SCL Beitrag anzeigen
    kann mir mal jemand den Differenziealanteil eines PID Reglers vernünftig erklären?
    Hallo,

    hast du dir in Wikipedia schon den Regler durchgelesen?
    Vorallem Punkt 3.3 und 3.7.

    Wo liegen die Probleme?

    godi

  8. #8
    Registriert seit
    22.11.2012
    Beiträge
    16
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    Ich hätte nur die Frage beim einschalten des Reglers.
    Also wenn ich einen warmstart mache und Start auf True setze
    wird der ausgang gesetzt??

    Also um gleich etwas zu erklären, ich habe eine MSR -Anlage mit zwei tanks.
    Es geht darum ein niveau im ersten Tank zu halten. Es funktioniert zwar aber
    mich wundert es das am anfang er meine Elektro-pneumatischen glieder nicht auffährt.
    Deswegen verstehe ich es nicht das er sich die parameter ausrechnen kann.

  9. #9
    Registriert seit
    08.03.2013
    Beiträge
    1
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich kenne die Problematik und es gibt eine sehr einfache Lösung.
    Leider erklärt die AS- Hilfe nicht, dass der PID nach einem Warm- oder Kaltstart seine Tuningparameter wieder verliert.

    Das Vorgehen:

    PID wie beschrieben konfigurieren.
    An "request" Variable anschließen (UDINT)
    An "pPar" Zeiger auf Strukturvariable.
    Nach abgeschlossenem Tuning die Parameter in angeschlossene Struktur auslesen (request 4).
    Werte notieren.
    Zu globale Variablen springen.
    "request" Variable auf Constant setzen. Value 3
    Strukturvariable auf Constant setzen. Value: ausgelesene Werte eintragen.

    Somit liest der PID kontinuierlich seine Parameter aus der angeschlossenen Struktur und regelt nach diesen.
    Ein Rücksetzen von "request" auf 0 ist nicht erforderlich.

    Die Einstellungen bleiben nun auch nach einem Warm- oder Kaltstart erhalten.

Ähnliche Themen

  1. B&R Automation Studio
    Von Lazarus™ im Forum Sonstige Steuerungen
    Antworten: 8
    Letzter Beitrag: 14.04.2011, 10:15
  2. B&R Automation Studio
    Von Aussie im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 13.04.2010, 00:11
  3. Automation Studio .br- Datei
    Von doelckenbeck im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 23.12.2009, 20:48
  4. Automation Studio
    Von DaHoff im Forum Sonstige Steuerungen
    Antworten: 7
    Letzter Beitrag: 27.11.2008, 12:29
  5. B&R Automation Studio
    Von Robin im Forum Suche - Biete
    Antworten: 2
    Letzter Beitrag: 11.01.2008, 10:31

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •