Richtiger einsatz von Timer ereignissen

Peter1977

Level-1
Beiträge
15
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Möchte meinen Heizungsmischer "Automatisieren"

Leider habe ich für mich ungenügende Informationen gefunden. Was ich Benötige ist der Timer TP.

Mein Code Beispiel sieht folgender massen aus

Code:
PROGRAM PLC_PRG
VAR
    DO_Pumpe_FBH_Mischer    AT %QX0.3    : BOOL :=FALSE;
    DO_Pumpe_FBH            AT %QX0.4    : BOOL :=FALSE;

    AI_Temp_FBH_Vor_Ist            AT %IW6     : INT;
    AI_Temp_FBH_Retour_Ist        AT %IW7     : INT;

    Var_Auto_Mischer_FBH    :BOOL:=FALSE;

    Var_Temp_FBH_Vor_Soll        :INT:=33;

    TP_Inst:TP;
    Bool1: BOOL:=FALSE;
    Bool2: BOOL:=FALSE;

END_VAR
Code:
IF Var_Auto_Mischer_FBH=TRUE THEN
    IF AI_Temp_FBH_Vor_Ist<Var_Temp_FBH_Vor_Soll THEN
        Bool1:=TRUE;
    ELSE
        Bool1:=FALSE;
    END_IF
    IF Bool1=TRUE THEN
        TP_Inst(IN:=Bool1, PT:=T#5s);
        Bool2:=TP_Inst.Q;
    END_IF
    IF Bool2=TRUE THEN
        DO_Mischer_FBH_Auf:=TRUE;
    END_IF
    IF Bool2=FALSE THEN
        DO_Mischer_FBH_Auf:=FALSE;
    END_IF
END_IF

Wie soll es Funktionieren

Wenn Variable Var_Auto_Mischer_FBH=True dann soll die IST Temperatur des Vorlaufes mit der Soll Temperatur verglichen werden
ist diese Gleich soll nichts unternommen werden sind diese unterschiedlich soll je nachdem der Mischer für 5 Sekunden auf oder zu gefahren werden.
Wenn das auffahren funktioniert wird dies erweitert mit Zufahren und mit einer 15Minuten Pause zwischen den Prüfungen.

Im Moment ist mir nur dieser eine Timer wichtig.

Hoffe es kann mir einer Helfen

Danke Peter.
 
Ich habe mal als Zeitvertreib ein paar Zeitfunktionen programmiert und in ne Bibliothek gepackt. Die Bibliothek kommt ohne jegliche anderen Bibliotheken aus.

Kannst die die Bibliothek gerne hier herunterladen.

Den Baustein den du suchst ist der mit der Bezeichung "IMP". Viel Erfolg bei deinem Projekt.
 
@Peter1977,

was Manuel Dir mit "weitgehend sinnfreien IF..THEN..Dickicht" sagen möchte, Deinen ganzen obigen Code kannst Du auf 4 Zeilen zusammenkürzen:
Code:
[FONT=courier new]    IF Var_Auto_Mischer_FBH THEN
        TP_Inst(IN:= AI_Temp_FBH_Vor_Ist < Var_Temp_FBH_Vor_Soll, PT:=T#5s);
        DO_Mischer_FBH_Auf:= TP_Inst.Q;
    END_IF;[/FONT]
Wenn Du dann noch seinen 2. Rat beherzigst, dass Timer möglichst in jedem Zyklus ausgeführt werden sollen (also nicht überspringen), könnte z.B. sowas hier raus kommen:
Code:
[FONT=Courier New]    TP_Inst (IN:= Var_Auto_Mischer_FBH AND (AI_Temp_FBH_Vor_Ist < Var_Temp_FBH_Vor_Soll), PT:=T#5s);
    DO_Mischer_FBH_Auf:= SEL (G:= Var_Auto_Mischer_FBH, In1:= TP_Inst.Q, In0:= False);[/FONT]
Da sollten für die gewünschte Funktion eigentlich keine weiteren Bibliotheken notwendig sein.
Und wenn's Dich dann vlt. nicht stört, das der Mischer beim Abschalten der Automatik eventuell noch 5 Sekunden nachläuft, kannst Du die letzte Zeile auch noch vereinfachen:
Code:
[FONT=Courier New]    TP_Inst (IN:= Var_Auto_Mischer_FBH AND (AI_Temp_FBH_Vor_Ist < Var_Temp_FBH_Vor_Soll), PT:=T#5s);
    DO_Mischer_FBH_Auf:= TP_Inst.Q;[/FONT]
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...
Und wenn's Dich dann vlt. nicht stört, das der Mischer beim Abschalten der Automatik eventuell noch 5 Sekunden nachläuft, kannst Du die letzte Zeile auch noch vereinfachen:
Code:
[FONT=Courier New]    TP_Inst (IN:= Var_Auto_Mischer_FBH AND (AI_Temp_FBH_Vor_Ist < Var_Temp_FBH_Vor_Soll), PT:=T#5s);
    DO_Mischer_FBH_Auf:= TP_Inst.Q;[/FONT]

Und wenn man das dann noch sowas in FUP macht, dann ist die Funktion noch einfacher ersichtlich:

FUP.JPG
 
Hallo,

Habe das Heute mal Umgesetzt soweit
Code:
VAR
    DO_Mischer_FBH_Auf        AT %QX0.7    : BOOL :=FALSE;
    DO_Mischer_FBH_Zu        AT %QX0.8    : BOOL :=FALSE;
    AI_Temp_FBH_Vor_Ist            AT %IW6     : INT;
    AI_Temp_FBH_Retour_Ist        AT %IW7     : INT;
    Var_Temp_FBH_Vor_Soll        :INT:=33;
    (* Mischer FBH Oeffnen und Schliessen sowie Pruefzeit *)
    Inst_FBH_Timer_Auf:TP;
    Inst_FBH_Timer_Zu:TP;
    Var_FBH_Timer_Aufzu:TIME:=T#5s ; (* 5Sekunden auf oder zu fahren *)

    Inst_FBH_Timer_Pruef_Intervall:TP;
    Var_FBH_Timer_Pruef_Intervall:TIME:=T#60s; (* Pruefen der Temperatur alle 1 Minute *)
END_VAR
Code:
(* FBH Mischer Automatik Betrieb *)
IF Var_Auto_Mischer_FBH THEN

    (* Mischer Auffahren *)
    Inst_FBH_Timer_Auf(IN:=Var_Auto_Mischer_FBH AND (AI_Temp_FBH_Vor_Ist < Var_Temp_FBH_Vor_Soll) AND NOT DO_Mischer_FBH_Zu AND NOT Inst_FBH_Timer_Pruef_Intervall.Q, PT:=Var_FBH_Timer_Aufzu );
    DO_Mischer_FBH_Auf:=Inst_FBH_Timer_Auf.Q;
    (* Mischer zufahren *)
    Inst_FBH_Timer_Zu(IN:=Var_Auto_Mischer_FBH AND (AI_Temp_FBH_Vor_Ist > Var_Temp_FBH_Vor_Soll) AND NOT DO_Mischer_FBH_Auf AND NOT Inst_FBH_Timer_Pruef_Intervall.Q, PT:=Var_FBH_Timer_Aufzu );
    DO_Mischer_FBH_Zu:=Inst_FBH_Timer_Zu.Q;

    (* Verweilzeit *)
    Inst_FBH_Timer_Pruef_Intervall(IN:=TRUE AND Inst_FBH_Timer_Zu.Q OR Inst_FBH_Timer_Auf.Q , PT:=Var_FBH_Timer_Pruef_Intervall);
END_IF


Wieso ich das über eine IF Abfrage mache ist wenn kein Automatik Betrieb vorhanden ist so sollen diese Ausgänge Manuell Schaltbar/Tastbar sein

mfg Peter
 
Wieso ich das über eine IF Abfrage mache ist wenn kein Automatik Betrieb vorhanden ist so sollen diese Ausgänge Manuell Schaltbar/Tastbar sein
Dann ist es trotzdem besser, wenigstens die Timer aus dem IF raus zu nehmen und nur die Zuweisungen an die Ausgänge darin zu behalten.
Timer sollten möglichst in jedem Zyklus aufgerufen werden, weil sie sonst oft Schwierigkeiten haben, ihre Ein-/Ausschaltbedingungen (Flanken) mit zu bekommen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zu deinem Code dann doch noch einige Anmerkungen:
Auf := ( Auto AND Anforderungen_Auto_Auf ) OR ( Hand AND Taster_Hand_Auf) ;
Wie du siehst, ganz ohne IF ... weiterer Vorteil: Es gibt genau eine Stelle an der der Ausgang beschrieben wird ... unheimlich freundlich zum Beobachten,
weil man nicht darauf achten muss, welcher der If-Zweige denn jetzt wo in welchen Baustein gelten könnte.

Zweite Anmerkung:
Dein Vergleicher rund um die Solltemperatur ist auch nur bedingt zu ende gedacht,
deine Vorlauftemperatur schwankt um 0,05°C und dein Mischer taktet munter auf und zu,
sprich du brauchst ein Fenster innerhalb dem die Temperatur OK ist, z.B. +- 1°C.
Ist letzten Endes auch für die angehängte Klappertechnik schonender .

Zu Timern innerhalb von IF hast du halt das Problem, das du einen absolut zufälligen Zustand beim Einschalten von Auto fabrizierst.

Mfg
Manuel
 
Zurück
Oben