FUNCTION FC50:void
VAR_INPUT
f:BOOL;
END_VAR
VAR_OUTPUT
e:byte;
end_var
VAR_TEMP
byt:byte;
flag:BOOL;
temp1:BOOL;
temp2:BOOL;
k:INT;
result:byte;
s:S5TIME;
start:BOOL;
cik:BOOL;
END_VAR
BEGIN
IF f=true THEN
k:=0;
END_IF;
IF k>=7 THEN
k:=k; flag:=1;
ELSIF k=0 THEN
flag:=0;
END_IF;
byt:=1;
result:=0;
start:=false;
IF start=0 & cik=0 THEN // timer kısır döngü
start:=1;
END_IF;
/////////////////// zaman gecikmesini timer döngüsü ile elde ediyoruz ///////////
s:= S_ODT(T_NO:=t5, S:=start, TV:= t#200ms, q:=cik);
IF cik=1 THEN // sayıların sıçrama yapmaması için düşen ve yükselen kenar kontrolü
temp1:=1; start:=0;
ELSIF cik=0 & start=0 THEN
temp2:=1;
END_IF;
IF temp1=1 & temp2=1 & k<=7 & flag=0 THEN
e := SHL (IN:=byt, N:=k); // byt daki sayıyı k kadar sola ötele (in ve e) byte yada word olabilir çıkışa göre
k:=k+1; temp1:=0;
temp2:=0;
END_IF;
IF temp1=1 & temp2=1 & flag=1 THEN // sağa ötelenmesi gerekirken yine sola öteleniyor sonra bit sağa kaydırılıyor
e := SHL (IN:=byt, N:=k);
k:=k-1; temp1:=0;
temp2:=0;
END_IF;
END_FUNCTION