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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: P-Regler mit SCL in Step 7

  1. #1
    Registriert seit
    29.01.2011
    Beiträge
    8
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    ich wende mich an euch, weil ich es als letzte Lösung für mein Problem sehe, ich hoffe ihr könnt mir helfen

    Ich soll einen P-Regler mit SCL in Step 7 zu programmieren.
    Die Normierung von Soll- und Istwert habe ich bereits in dem FB1 gemacht.

    Normierung Sollwert
    L #EW_1
    ITD
    DTR
    L 2.764800e+004
    /R
    L 1.000000e+001
    *R
    T #Sollwert

    Normierung Istwert

    L #EW_2
    ITD
    DTR
    L 2.764800e+004
    /R
    L 1.000000e+001
    *R
    T #Istwert
    Mein Anfang in in SCL sieht bisher so aus (da ich Grunderfahrungen in c++ besitze):


    FUNCTION_BLOCK FB1

    VAR_INPUT
    sollwert :REAL;
    istwert :REAL;
    p_wert :REAL;
    END_VAR

    VAR_TEMP
    reg_dif :REAL;
    END_VAR

    VAR_OUTPUT
    stellwert :INT;
    END_VAR

    BEGIN
    sollwert-istwert=reg_dif;
    reg_dif*p_wert=stellwert;

    IF stellwert > 27648 THEN
    stellwert=0;
    ELSE
    stellwert=p_wert;
    END_IF;

    END_FUNCTION

    END_FUNCTION_BLOCK
    Ist die Funktion richtig?
    Ich hoffe ihr könnt mir helfen, idas Programm ist im Anhang.

    Grüße und vielen Dank im Voraus,
    xjohnnyp
    Angehängte Dateien Angehängte Dateien
    Geändert von xjohnnyp (29.01.2011 um 13:53 Uhr)
    Zitieren Zitieren P-Regler mit SCL in Step 7  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    ich habe jetzt mal nicht deinen Code selbst kontrolliert ... allerdings :
    Berechnung funktioniert so :
    Code:
    Ergebnis := Operand_1 + Operand_2 ;
    ... man beachte auch die verwendeten Satzzeichen - die sind sehr wichtig.
    Zuweisung entsprechend :
    Code:
    zugewiesene_Var := Quell_Var ;
    und wenn du oben einen Funktion_Block "beginnst" dann solltest du ihn auch unten zumachen. Das "End_Function" ist hierbei über - die könntest du auch nicht ineinander verschachtelt öffnen.

    Gruß
    Larry

  3. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    xjohnnyp (29.01.2011)

  4. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    ... und noch eins :
    Du kannst natürlich nur Variablen gleichen Typs aufeinander zuweisen.
    "Stellwert" ist als INT deklariert, "P_Wert" als REAL. Hier mußt du dann eine Typ-Umwandlung machen (dabei verlierst du dann allerdings die Nachkommastellen - vorausgesetzt auch, dass die Zahlen ineinander passen).
    Code:
    Stellwert := REAL_to_INT (p_Wert) ;
    Aber das ist alles bei SCL im Grund so wie bei C++ ...

    Gruß
    Larry

  5. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    xjohnnyp (29.01.2011)

  6. #4
    xjohnnyp ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.01.2011
    Beiträge
    8
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard

    dank' dir Larry für deine schnelle Antwort, jetzt habe ich schonmal keinen Fehler mehr in der Syntax

    FUNCTION_BLOCK FB1

    VAR_INPUT
    sollwert :REAL;
    istwert :REAL;
    p_wert :REAL;
    END_VAR

    VAR_TEMP
    reg_dif :REAL;
    END_VAR

    VAR_OUTPUT
    stellwert :INT; <--- soll dieser Integer wert ersetzt werden durch

    Stellwert := REAL_to_INT (p_Wert) ; leider kommt dann ein Fehler..
    END_VAR

    BEGIN

    ;
    END_FUNCTION_BLOCK

  7. #5
    xjohnnyp ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.01.2011
    Beiträge
    8
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ...was wäre denn wenn ich den Stellwert auch einfach als "REAL" deklariere?

  8. #6
    Registriert seit
    11.08.2009
    Ort
    Bei Hamburg
    Beiträge
    100
    Danke
    19
    Erhielt 30 Danke für 18 Beiträge

    Standard

    VAR_OUTPUT
    stellwert :INT; <--- soll dieser Integer wert ersetzt werden durch

    Stellwert := REAL_to_INT (p_Wert) ; leider kommt dann ein Fehler..
    END_VAR
    Diese Zuweisung bitte nicht in der Variablendeklaration durchführen, sondern dort wo die Zuweisung erfolgt:


    IF stellwert > 27648 THEN
    stellwert=0;
    ELSE
    stellwert=REAL_to_INT (p_Wert) ;
    END_IF;

  9. Folgender Benutzer sagt Danke zu NochEinProgrammierer für den nützlichen Beitrag:

    xjohnnyp (29.01.2011)

  10. #7
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von xjohnnyp Beitrag anzeigen
    ...was wäre denn wenn ich den Stellwert auch einfach als "REAL" deklariere?
    Da spricht erstmal nichts dagegen.
    Kommt halt auf dein Programm an was du weiter mit dem Wert machen möchtest.
    Da du aber von einem Regler geschrieben hast, würde ich auch Real empfehlen.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  11. Folgender Benutzer sagt Danke zu Paule für den nützlichen Beitrag:

    xjohnnyp (29.01.2011)

  12. #8
    xjohnnyp ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.01.2011
    Beiträge
    8
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard

    auch dir vielen Dank

    Wir haben i.d. Schule einen 3-Punkt-Regler mit AWL und FUP programmiert, dieser soll jetzt in SCL erweitert werden.
    Der Regler soll nicht mehr nur die Schaltzustände 0V, 5V und 10V erkennen, sondern "flüssig" überschalten.

    Die Variablendeklaration hat jetzt soweit ohne Fehler funktioniert, soweit so gut..^^
    Doch jetzt geht es um das Eingemachte, die Funktion...

    BEGIN
    reg_dif := sollwert-istwert;
    stellwert := reg_dif*p_wert;

    IF stellwert > 27648 THEN
    stellwert=0;
    ELSE
    stellwert=REAL_to_INT (p_Wert);
    END_IF;

    END_FUNCTION_BLOCK
    Unser Lehrer hat gesagt, dass dies mit einer Regeldifferenz zu lösen ist, jedoch habe ich von der Funktion nicht die leiseste Ahnung, kannst du/könnt ihr mir da weiter helfen?

  13. #9
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi,

    http://de.wikipedia.org/wiki/Dreipunktregler

    was soll das werden ein Dreipunktregler oder ein stetiger Regler?

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  14. #10
    xjohnnyp ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    29.01.2011
    Beiträge
    8
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Es soll ein stetiger Regler werden, wir haben vorher nur einen 3-Punkt-Regler mit AWL gemacht..

Ähnliche Themen

  1. Funktionsaufrufe Online step by step ansehen
    Von snowleopard1702 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 03.05.2011, 07:41
  2. split range regler und step 7
    Von WIX im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 15.04.2011, 22:27
  3. Antworten: 10
    Letzter Beitrag: 29.10.2010, 17:06
  4. Antworten: 2
    Letzter Beitrag: 24.01.2006, 06:01
  5. PID-Regler in STEP 7-Micro/WIN 4.0
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 29.09.2005, 08:56

Lesezeichen

Berechtigungen

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