- Beiträge
- 2.643
- Reaktionspunkte
- 774
-> Hier kostenlos registrieren
Hallo zusammen,
Ich hab mir ein PT1 Glied programmiert und stelle fest das der Wert Null nicht gültig ist.
Das ist wenn Mann die mathematische Formel anschaut auch kein Wunder.
Die Eingangssignalen des PT1 Glieds gehen bei mir vom Minus bis Plus Werten.
Im Moment hab ich mir so geholfen.
In Prinzip sein Zwischenspeicher nicht auf Null gehen lassen.
Jetzt ist das Glied nicht mehr Lückenlos. Das ist auch nicht so schlimm.
Mir ist trotzdem die frage gekommen ob ich das schöner umsetzen kann.
Ich hab schon die Berechnung in diese variant gemacht.
Dan bekomme ich aber Sprüngen wenn das Signal von z.b. eine Hohe Wert direkt Null wird.
Bei der beispielvarianten von Siemens sehe ich das die einfach ein Bit setzen das sagt " not valid"
Mache ich jetzt Erbsezählerei oder ist meine erste Umsetzung o.k.?
Bin gespannt auf euer Meinung.
Bram
Ich hab mir ein PT1 Glied programmiert und stelle fest das der Wert Null nicht gültig ist.
Das ist wenn Mann die mathematische Formel anschaut auch kein Wunder.
Die Eingangssignalen des PT1 Glieds gehen bei mir vom Minus bis Plus Werten.
Im Moment hab ich mir so geholfen.
Code:
FUNCTION_BLOCK "PT1"
VERSION : '0.1'
AUTHOR : 'v.Berkel'
VAR_INPUT
IN_REAL : Real; // IN REAL
Time_0_100 : Real; // Zeit von 0 bis 100% AUSGANG zu EINGANG
OB_Zyklus_mS : Real; // OB Zykluszeit in mS
END_VAR
VAR_OUTPUT
OUT_REAL : Real; // OUT REAL
END_VAR
VAR
Cache_Berechnung : Real; // Cache_Berechnung
Cache_IN : REAL;
END_VAR
BEGIN
// Cache IN darf nicht null werden
IF IN_REAL<=0.001 AND IN_REAL >=-0.001 THEN
Cache_IN := 0.001;
ELSE
Cache_IN := IN_REAL;
END_IF;
// PT1 Berechnung
OUT_REAL:=(( Cache_IN-Cache_Berechnung)/((Time_0_100*100.0)/OB_Zyklus_mS))+Cache_Berechnung;
Cache_Berechnung := OUT_REAL;
END_FUNCTION_BLOCK
In Prinzip sein Zwischenspeicher nicht auf Null gehen lassen.
Jetzt ist das Glied nicht mehr Lückenlos. Das ist auch nicht so schlimm.
Mir ist trotzdem die frage gekommen ob ich das schöner umsetzen kann.
Ich hab schon die Berechnung in diese variant gemacht.
Code:
IF IN_REAL <> 0.0 THEN
OUT_REAL:=((IN_REAL-Cache_Berechnung)/((Time_0_100*100.0)/OB_Zyklus_mS))+Cache_Berechnung;
Cache_Berechnung := OUT_REAL;
ELSE
OUT_REAL := IN_REAL;
END_IF;
Dan bekomme ich aber Sprüngen wenn das Signal von z.b. eine Hohe Wert direkt Null wird.
Bei der beispielvarianten von Siemens sehe ich das die einfach ein Bit setzen das sagt " not valid"
Mache ich jetzt Erbsezählerei oder ist meine erste Umsetzung o.k.?
Bin gespannt auf euer Meinung.
Bram