FUNCTION_BLOCK PWM_simple VAR_INPUT PwmVal :LREAL; PwmTimeBase :LREAL; PwmValMax :LREAL; PwmValMin :LREAL; END_VAR VAR_OUTPUT PwmOutput :BOOL; END_VAR VAR PwmPause : TON; PwmPulse : TON; PwmValPause : LREAL; PwmValPulse : LREAL; END_VAR (*PWM only for slow PMW: periode time must be at least > 1000ms*) IF PwmVal > PwmValMax THEN PwmVal := PwmValMax; END_IF IF PwmVal < PwmValMin THEN PwmVal := PwmValMin; END_IF PwmValPause := PwmTimebase * (100 - PwmVal) /100; PwmValPulse := PwmTimebase * PwmVal /100; PwmPause(IN:= NOT PwmPulse.Q, PT:= LREAL_TO_TIME (PwmValPause)); PwmPulse(IN:= PwmPause.Q, PT:= LREAL_TO_TIME (PwmValPulse)); IF PwmVal > 0 THEN PwmOutput := PwmPause.Q; ELSE PwmOutput := FALSE; END_IF