System SZARP - dokumentacja techniczna: SZARP v.3.1 | ||
---|---|---|
Poprzedni | Rozdział 6. Składnia formuł parametrów definiowalnych | Następny |
Parametry definiowalne LUA są odpowiednikiem parametrów definiowalnych pozwalającym na zapisanie formuł parametrów w postaci skryptów języka LUA. Skrypt może mieć dowolną zawartość, np. można używać zmiennych pomocniczych (co nie jest dostępne w 'zwykłych' definiowalnych), pętli, wyrażeń warunkowych etc. Celem skryptu jest przypisanie wartości zmiennej v, która jest interpretowana jako wartość wyliczonego parametru. Dokładne odbywa się to poprzez wywołanie poniższego kodu:
return function () local p = szbase local PT_SEC10 = ProbeType.PT_SEC10 local PT_MIN10 = ProbeType.PT_MIN10 local PT_HOUR = ProbeType.PT_HOUR local PT_HOUR8 = ProbeType.PT_HOUR8 local PT_DAY = ProbeType.PT_DAY local PT_WEEK = ProbeType.PT_WEEK local PT_MONTH = ProbeType.PT_MONTH local PT_CUSTOM = ProbeType.PT_CUSTOM local szb_move_time = szb_move_time local state = {} return function (t,pt) local v = nil .... skrypt zawierający formułę .... return v end end
Kolejną cechą parametrów definiowalnych LUA jest to, iż zawsze operują na liczbach zmiennoprzecinkowych w podwójnej precyzji, co jest udogodnieniem w stosunku do 'zwykłych' definiowalnych. Cecha ta występuje zarówno na poziomie parametrów definiowalnych programu przeglądającego, jak i programu parcook.
Parametry definiowalne LUA na poziomie programu przeglądającego pozwalają na znacznie większą swobodę niż 'zwykłe' definiowalne. Między innymi dostępna jest zmienna z przypisanym czasem, dla którego wyliczana jest właśnie próbka, co umożliwia wykorzystanie jej do obliczeń. Dodatkowo dostępne są dwa tryby wyliczania wartości próbki. Próbka może być wyliczona jako średnia z zastosowania formuły do każdej próbki oraz jako wynik zastosowania formuły dla średnich. Przykładowo, jeżeli wyliczamy wartość parametru definiowalnego LUA dla średniej godzinowej, to w pierwszym przypadku zostanie wyliczona wartość każdej średniej z dziesięciu minut i wynik zostanie uśredniony, a w drugim będzie wyliczona będzie tylko wartość dla średniej godzinowej.
Poniżej zamieszczona jest przykładowa formuła parametru definiowalnego LUA:
local tmp = 2 v = p("swid:Sieć:Sterownik:temperatura z tabeli", t, pt, 0) * tmpFormuła ta przypisuje zmiennej v (czyli wartości zwracanej przez formułę) wartość parametru swid:Sieć:Sterownik:temperatura z tabeli pomnożoną przez 2. Funkcja p służy do zwrócenia wartości zadanego parametru. Kolejne argumenty to: nazwa parametru, czas próbki (w tym przypadku równy czasowi próbki wyliczanej formułą), typ średniej oraz okres średniej w przypadku średniej typu PT_CUSTOM (obecnie nie jest wykorzystywany). Zmienne tymczasowe są poprzedzone słowem kluczowym local. Powoduje to, iż są one zmiennymi lokalnymi dla tej formuły. Można używać zmiennych globalnych, ale jest to niezalecane ze względów wydajnościowych.
W skryptach LUA są dostępne następujące predefiniowane zmienne:
v - zmienna, pod którą ma być zapisana wyliczona wartość formuły.
t - zmienna przechowuje czas, dla którego jest wyliczana wartość formuły. Niedostępne na poziomie parcook.
pt - zmienna przechowuje typ próbki, dla której jest wyliczana wartość formuły. Niedostępne na poziomie parcook.
state - jest to tablica, która zachowuje zawartość między kolejnymi wywołaniami skryptu. Przykładowe użycie:
if state['prev'] == nil then v = 1 state['prev'] = 1 elseif state['prev'] == 1 then v = 2 state['prev'] = 2 else v = nan() state['prev'] = nil endOpis funkcji nan dostępny jest w Sekcja 6.4.2
PT_SEC10 - stała opisująca typ próbki.
PT_MIN10 - stała opisująca typ próbki.
PT_HOUR - jak wyżej.
PT_HOUR8 - jak wyżej.
PT_DAY - jak wyżej.
PT_WEEK - jak wyżej.
PT_MONTH - jak wyżej.
PT_CUSTOM - jak wyżej.
Poprzedni | Spis treści | Następny |
Przykłady formuł definiowalnych DRAWDEFINABLE | Początek rozdziału | Wykaz dostępnych funkcji |