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 ... cd definicji typow probek ... local szb_move_time = szb_move_time ... cd definicji dostepnych funkcji ... 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) * 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łą) oraz typ średniej. 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.
Możliwe wartości pt ilustruje tabela.
Tabela 6-1. Typy próbek (pt) - wyjaśnienie
nazwa | czas próbki | zakres danych | rodzaj próbki |
---|---|---|---|
PT_SEC10 | 12:00:10 | <12:00:10> | źródłowa |
PT_MIN10 | 12:10 | (12:00,12:10> | agregat |
PT_HOUR | 12:00 | <12:00, 13:00) | agregat |
PT_HOUR8 | 08:00-15:50 | <08:00, 16:00) | agregat |
PT_DAY | 01.12 | <00:00, 24:00) | agregat |
PT_WEEK | pon-nd | agregat | |
PT_MONTH | 12.2020 | agregat | |
PT_YEAR | 2020 | agregat |
Mając tę wiedzę warto pamiętać, że:
szb_round_time(t, pt) - zaokrągla do początku zakresu agregatu
szb_move_time(t, n, pt) - przesuwa o długość pt
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_YEAR - jak wyżej.
Poprzedni | Spis treści | Następny |
Przykłady formuł definiowalnych RPN-DRAWDEFINABLE | Początek rozdziału | Wykaz dostępnych funkcji |