5.2.8. Element define

W skład opisu parametru może też wchodzić element define. Jego obecność oznacza, że wartość parametru ma być wyliczana na podstawie podanej formuły. Jeżeli parametr, w którym element define wystąpił, występuje w elemencie defined (lista parametrów definiowalnych parcooka) lub drawdefinable (parametry definiowalne przeglądającego), to wartość parametru jest po prostu wyliczana na podstawie podanej formuły. Jeżeli zaś parametr jest "normalnym" parametrem ze sterownika (występuje w elemencie unit), to obecność formuły oznacza, że parametr jest niejako przedefiniowany - w bazie i na wykresach będzie obecna jego wartość wyliczona na podstawie formuły, zamiast tej otrzymanej ze sterownika. Konstrukcja taka jest używana najczęściej do wprowadzania różnego rodzaju poprawek do wartości parametrów.

Element define ma następujące atrybuty:

Kolejne atrybuty wykorzystywane są tylko jeśli atrybut type ma wartość LUA :

Ewentualnie zawarty w elemencie define element potomny script nie ma żadnych atrybutów, a formuła zapisana jest jako tekstowa zawartość elementu. Aby uniknąć konieczności zastępowania encjami XML znaków o specjalnych znaczeniach (takich jak & czy <) całą zawartość można zawrzeć w sekcji CDATA, np.

<script><![CDATA[
	if (p("gcie:Kocioł 4:Sterownik:Wydajność kotła", t, pt) < 0.25) then
		v = nan()
	else
		v = 4.0
]]></script>

Element define, podobnie jak wiele innych elementów w konfiguracji IPK, dopuszcza dodawanie elementów i atrybutów z obcych przestrzeni nazw (zobacz Sekcja 5.2.18). W szczególności w elemencie można umieścić element doc z przestrzeni nazw http://www.praterm.com.pl/SZARP/ipk-extra. Jego zawartość będzie wyświetlana jako część dokumentacji parametru w przypadku korzystania z serwera dokumentacji parametrów. Przykład:

<param name="Sieć:Sterownik:zmodyfikowana temperatura zewnętrzna" short_name="Tzew" draw_name="Temp. zewnętrzna"
	unit="°C" prec="2" xmlns:doc="http://www.praterm.com.pl/SZARP/ipk-extra">
	<define type="DRAWDEFINABLE" formula="(*:*:temperatura zewnętrzna) 150 -">
		<doc:doc>Pomiar temperatury zewnętrznej skorygowany o 1,5 stopnia ze względu na złe 
			umiejscowienie czujnika temperatury.</doc:doc>
	</define>
	<draw name="Temperatury sieciowe" min="-30" max="50"/>
</param>
<define type="DRAWDEFINABLE"