TIA IEC Timer in SCL schaltet Q immer instant auf TRUE

meikelneit

Level-2
Beiträge
151
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
SChönen guten Tag,

wie der name schon sagt läuft mein IEC Timer nicht wirklich ab. Ich habe keine weiteren Timer instanzen in dem FB, nur die eine. Der code sieht wie folgt aus:
Code:
IF #sB_FilterStepNr = 10 AND #sB_Safety_FM_IV THEN
    
    #sB_StartTimer := TRUE;

    #IEC_Timer_0_Instance(IN := #sB_StartTimer,
                          PT := T#10000ms,
                          Q => #sB_TimerFinished,
                          ET => #sTIME_Elapsed);
    
    IF #sB_TimerFinished THEN

        #sB_FilterStepNr := 20;
        #sB_StartTimer := FALSE;
        #sB_TimerFinished := FALSE;

    END_IF;
    
END_IF;

Ich habe hier extra eine 10s Zeit eingetragen um definitiv zu sehen das da was abläuft, aber er schaltet immer instant den nächsten Schritt frei. Ich wäre für Ideen was ich falsch mache überaus dankbar.

MfG
Meikelneit
 
Zuletzt bearbeitet:
Einmal ist dein Timer abgelaufen ... also genau einmal nachdem du z.B. die Instanz neu lädst.

Dein Problem ist das du das innerhalb des IF-Konstrucktes stehen hast, so wird dein Timer.IN aus Programmsicht nie mehr FALSE. Du solltest also den Timer "immer" aufrufen, oder mindestens noch einen Zyklus lang mit IN:=FALSE nachdem der Timer abgelaufen ist.

z.B. so:
Code:
IF #sB_TimerFinished THEN

        #sB_FilterStepNr := 20;
        #sB_StartTimer := FALSE;
        #sB_TimerFinished := FALSE;
[B]#IEC_Timer_0_Instance(IN := FALSE ) ;[/B]

    END_IF;

Mfg
Manuel
 
Zuletzt bearbeitet:
MSB war schneller... ;)

Alternativ geht auch (Variante "immer"):

Code:
#IEC_Timer_0_Instance(IN := #sB_StartTimer,                           
                          PT := T#10000ms,
                          Q => #sB_TimerFinished,
                          ET => #sTIME_Elapsed);

IF #sB_FilterStepNr = 10 AND #sB_Safety_FM_IV AND NOT #sB_TimerFinished THEN
    
       #sB_StartTimer := TRUE;
    
ELSIF #sB_TimerFinished THEN

        #sB_FilterStepNr := 20;
        #sB_StartTimer := FALSE;
        #sB_TimerFinished := FALSE;
    
END_IF;
 
Zuletzt bearbeitet:
Zurück
Oben