P-Regler mit SCL in Step 7

xjohnnyp

Level-1
Beiträge
8
Reaktionspunkte
0
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
 

Anhänge

  • P-Regler-SCL.zip
    152,3 KB · Aufrufe: 36
Zuletzt bearbeitet:
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... 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
 
dank' dir Larry für deine schnelle Antwort, jetzt habe ich schonmal keinen Fehler mehr in der Syntax :ROFLMAO:

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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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;
 
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?
 
Hi,

also ist es doch ganz einfach.

Regelabweichung berechnen:
Regelabweichung = Sollwert - Istwert
e = w - x

Stellgröße berechnen:
Stellgröße = Regelabweichung * Verstärkungsfaktor
y = e * Kp

zum schluss vielleicht noch die Stellgröße begrenzen z.b. auf -100 - 100%.

Gruss Daniel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hey, vielen dank :)
...aber was ist bei dir der verstärkungsfaktor? 27648?
und darf/kann die Normierung von Soll- und Istwert im FB1 stehen bleiben?

zum schluss vielleicht noch die Stellgröße begrenzen z.b. auf -100 - 100%.

Das vorherige ist mir soweit klar, nur wie begrenze ich die Stellgröße und wieso?
 
Zuletzt bearbeitet:
Hallo,
der Verstärkungsfaktor ist bei Daniel immer Kp.
Die 27648 sind der maximale Wert auf einem PEW (also 100%) von Skalierung_max.

Gruß
Larry

Ach ja ... und die Begrenzung deshalb damit du keine Übersteuerung erhältst ...
Das geht dann mit "if y > 100 then ..."
 
Zuletzt bearbeitet:
Warum man immer über die 27648 skaliert, ist mir rätselhaft.

Es gibt doch eine schöne Geradengleichung, die kann man doch
wunderbar in SCL verwenden.

Code:
OUT := ((OUT_HIGH - OUT_LOW) * (IN - IN_LOW) / (IN_HIGH - IN_LOW) + OUT_LOW);

Natürlich alles REAL, daher braucht es für dein Eingangswert noch ein

INT_TO_REAL

Gruß

Frank
 
Zurück
Oben