# S7-1200 FT\_PIWL

**URL:** <https://oscat.discourse.group/t/s7-1200-ft-piwl/2496>\
**Category:** oscat.lib fuer Step 7\
**Created:** [16. Dezember 2025 um 05:43 UTC](https://oscat.discourse.group/t/s7-1200-ft-piwl/2496 "2025-12-16T05:43:55Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![mg1](https://yyz2.discourse-cdn.com/free1/user_avatar/oscat.discourse.group/mg1/32/134_2.png) [@mg1](https://oscat.discourse.group/u/mg1)\
**Post date:** [16. Dezember 2025 um 05:43 UTC](https://oscat.discourse.group/t/s7-1200-ft-piwl/2496/1 "2025-12-16T05:43:55Z")

</div>

(\* initialize at power\_up _)  
IF NOT #init OR #RST THEN  
 #init := TRUE;  
 #in\_last := #IN;  
 #t\_last := “T\_PLC\_US”();  
 #i := 0.0;  
 #tc := 0.0;  
ELSE  
(_ read last cycle time in Microseconds _)  
 #tx := “System\_Time\_DB”.us\_dw;  
 #tc := 1000.0/1024.0_DINT\_TO\_REAL(DWORD\_TO\_DINT(#tx) - DWORD\_TO\_DINT(#t\_last));  
#t\_last := #tx;

```
(* calculate proportional part *)
#p := #KP * #IN;

(* run integrator *)
#i := (#IN + #in_last) * 5.0E-7 * #KI * #tc + #i;
#in_last := #IN;

(* calculate output Y *)
#Y := #p + #i;

(* check output for limits *)
IF #Y >= #LIM_H THEN
    #Y := #LIM_H;
    IF #KI <> 0.0 THEN  
        #i := #LIM_H - #p; 
    ELSE
        #i := 0.0;
    END_IF;
    #LIM := TRUE;
ELSIF #Y <= #LIM_L THEN
    #Y := #LIM_L;
    IF #KI <> 0.0 THEN 
        #i := #LIM_L - #p; 
    ELSE
        #i := 0.0;
    END_IF;
    #LIM := TRUE;
ELSE
    #LIM := FALSE;
END_IF;

```

END\_IF;

(\* revision history  
hm 13. jun. 2008 rev 1.0  
original version

hm 27. oct. 2008 rev 1.1  
integrator will not be adjusted when ki = 0

hm 25. jan 2009 rev 1.2  
module will also work with negative K

hm 11. mar. 2009 rev 1.3  
real constants updated to new systax using dot  
\*)
