| SZARP PLC HOWTO | ||
|---|---|---|
| Poprzedni | Rozdział 20. Sprawdzanie poprawności parametrów technologicznych przy pomocy programu narzędziowego checker | Następny |
Poniższa reguła sprawdza czy ciśnienie dyspozycyjne jest w widełkach:
<checker:rule checker:name="Sieć:Przepływy:ciśnienie dyspozycyjne w widełkach">
<![CDATA[
function main()
avg1=0;
avg2=0;
avg3=0;
result=0;
avg1=avgprobe("Sieć:Przepływy:minimalne ciśnienie dyspozycyjne");
avg2=avgprobe("Sieć:Przepływy:aktualne ciśnienie dyspozycyjne");
avg3=avgprobe("Sieć:Przepływy:maksymalne ciśnienie dyspozycyjne");
result=-1;
if avg1~=-32768 and avg2~=-32768 and avg3~=-32768 then
result=0;
end
avg1=avg1-1;
avg3=avg3+1;
if avg2 >= avg1 and avg2 <= avg3 then
result=1;
end
return result;
end
]]>
</checker:rule>
Poniższa reguła sprawdza czy parametr nie przekroczył z góry zadanej wartości:
<checker:rule checker:name="Kocioł 1:Sterownik:stosunek energia / objętość > 4,0">
<![CDATA[
function main()
local avg1=0;
avg1=avgprobe("Kocioł 1:Sterownik:wydajność kotła");
if avg1==-32768 then
return -1;
end
if avg1 < 50 then
return 1;
else
return checklessthan("Kocioł 1:Sterownik:stosunek energia / objętość",4000);
end
end
]]<
</checker:rule>
Można również zdefiniować reguły dużo bardziej skomplikowane np. w regule sprawdzającej poprawność pomiaru prędkości rusztu zastosowano algorytm zmodyfikowanego współczynnika korelacji liniowej Pearsona, zdefiniowanego w następujący sposób:
Pozwala on określić stopień liniowego odwzorowania zbioru danych X w zbiór Y. Im większa wartość współczynnika, tym większa jest zależność liniowa między zbiorami; rxy = 0 oznacza brak liniowej zależności między cechami, rxy = 1 oznacza dokładną dodatnią liniową zależność między cechami, natomiast rxy = -1, oznacza dokładną ujemną liniową zależność między cechami. Dlatego też doskonale nadaje się do sprawdzania poprawności pomiaru prędkości rusztu.
Poniżej przedstawiono dwa wykresy prędkości i wysterowania falownika rusztu. Na pierwszym z nich widać, że prędkość rusztu mimo stałego wysterowania falownika rusztu nie jest stała i ma charakter oscylacyjny:
Na drugim z wykresów przedstawiono sytuację, gdy prędkość rusztu zmienia się tylko, gdy następuje zmiana w wysterowaniu falownika rusztu:
W pierwszym przypadku współczynnik korelacji Pearsona będzie znacznie mniejszy od 1 (rzędu setnych miejsc po przecinku), gdyż nie istnieje liniowa zależność między prędkością a wysterowaniem falownika rusztu. W drugim przypadku zależność między prędkością a wysterowaniem falownika rusztu jest praktycznie liniowa i współczynnik korelacji Pearsona osiągnie wartość w przybliżeniu 1 (około 0,9).Zapis w języku Lua będzie miał następującą postać:
<checker:rule checker:name="Kocioł 1:Sterownik:niezakłócona prędkość rusztu">
<![CDATA[
function main()
local hpr=0;
local xsr=0;
local ysr=0;
local result=0;
local sumn=0;
local sumd1=0;
local sumd2=0;
local sumd=0;
local xdata=0;
local ydata=0;
local ptr=0;
local corr=0;
hpr=howprobes("Kocioł 1:Sterownik:prędkość rusztu");
hprnd=howprobesnd("Kocioł 1:Sterownik:prędkość rusztu");
if hprnd==0 then
return -1;
end
if checkgreaterthan("Kocioł 1:Sterownik:wydajność kotła",50)==1 then
return 1;
end
if checknoconsthyst("Kocioł 1:Sterownik:prędkość rusztu",50)==0 and checknoconsthyst("Kocioł 1:Sterownik:aktualne wysterowanie falownika rusztu",50)==0 then
return 1;
end
xsr=avgprobe("Kocioł 1:Sterownik:prędkość rusztu");
ysr=avgprobe("Kocioł 1:Sterownik:aktualne wysterowanie falownika rusztu");
for i=1,hpr do
ptr=i-1;
xdata=getprobes("Kocioł 1:Sterownik:prędkość rusztu",ptr);
ydata=getprobes("Kocioł 1:Sterownik:aktualne wysterowanie falownika rusztu",ptr);
if xdata~=-32768 and ydata~=-32768 then
sumn=sumn+(xdata-xsr)*(ydata-ysr);
sumd1=sumd1+(xdata-xsr)^2;
sumd2=sumd2+(ydata-ysr)^2;
end
end
sumd=math.sqrt(sumd1)*math.sqrt(sumd2);
corr=sumn/sumd;
if corr>0.50 then
return 1;
end
if checklessthan("Kocioł 1:Sterownik:Czas wypełnienia w regulacji 2 stanowej",0)==1 then
return 1;
end
return 0;
end
]]>
</checker:rule>| Poprzedni | Spis treści | Następny |
| Predefiniowane funkcje | Początek rozdziału | Składnia wywołania programu checker |