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 |