TIA TON pausieren

SanjaDO

Level-1
Beiträge
177
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute ich brauche dringend eure Hilfe!

Ich möchte einen Funktionblock in SCL erstellen, der den TON um einen Boolschen Eingang erweitert und zwar so dass man diesen pausieren kann. D.h. wenn der neue Eingang true ist müsste der FB die Restzeit vom TON abspeichern und das Zählen somit pausieren. Wenn das Resetsignal (oder besser Pausesignal) "false" ist, soll der TON mit der Restzeit weiterzählen.

Vielleicht hat das schon einer?

Danke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn dann müsste ich den TONR_X nehmen weil ich eine 314CPU nutze. Ich werde aus der Beschreibung für den TONR_X nicht schlau. Da gibt es ja nur ein Reset, so wie ich das verstehe wird PT wieder auf den alten Wert gesetzt oder?
 
hier ist mein erster Versuch dazu:

Code:
FUNCTION_BLOCK "TON_pausiert"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
   VAR_INPUT 
      IN : Bool;
      PT : Time;
      pause : Bool;
   END_VAR

   VAR_OUTPUT 
      Q : Bool;
      ET : Time;
   END_VAR

   VAR 
      mein_TON {OriginalPartName := 'TON'; VersionGUID := 'b966b86b-3345-49ba-8b4b-c930e1b67fde'} : TON;
      PT_new : Time;
   END_VAR


BEGIN
    
    
    
    IF NOT #pause THEN
      IF #PT_new = 0 THEN
        #mein_TON.PT:=#PT;
      ELSE
        #mein_TON.PT:=#PT_new;
      END_IF;
      #mein_TON.IN:=#IN;
      #mein_TON.PT:=#PT;
      #PT_new:=#mein_TON.PT-#mein_TON.ET;
    ELSE
      #mein_TON.IN:=0;
      #mein_TON.PT:=#PT_new;
    END_IF;
    
    #ET:=#mein_TON.ET;
    
END_FUNCTION_BLOCK

Der TON zählt aber nicht....
 
Wenn dann müsste ich den TONR_X nehmen weil ich eine 314CPU nutze.
Dann ja, kommt aber auf's Gleiche raus:
Code:
[FONT=courier new]TONR_X (TMR_EN:= #Start AND NOT #Halt, RESET:= NOT #Start,
            PV:= #Zeitvorgabe, DELTA_T:= #OB1_PREV_CYCLE,
            Q=> #Ausgang, ET:= #Andauer );[/FONT]
Den #OB1_PREV_CYCLE gibt's als INT bei den Temps des OB1.
 
Ist 'n FC.

ET ist zwingend erforderlich und muss statisch sein, da darin die Zeit akkumuliert wird. Könnt's daran liegen?
Und zwingend zyklisch aufrufen, wenn der Timer läuft, da er immer die Zykluszeit DELTA_T zur letzten Laufzeit ET hinzu addiert und in dieser speichert.
 
Jau das war der Fehler! Das ist genau das was ich gesucht habe! YEA!

Danke! Danke! Danke! Danke hucki!!!!!
 
Zurück
Oben