Składnia instrukcji warunkowych


IF <warunki> THEN <akcje>


Warunki

<warunki> - lista porównań stanów do wartości.

Pojedynczy warunek zapisujemy w następujący sposób: <urządzenie>[:<kwalifikator>] <operator> ”<wartość>„

Za pomocą kwalifikatora : można odwoływać się do czasu trwania stanu: :time

<wartość> może być parametryzowana aktualną (w chwili wykonywania instrukcji) wartością istniejącego stanu.

Parametry definiujemy w następujący sposób: #param:<urządzenie>#<wartość>

Parametry mogą zawierać wyrażenia arytmetyczne (również parametryzowane).

Wyrażenia arytmetyczne definiujemy w następujący sposób: @eq:<wyrażenie>@. W wyrażeniu można stosować operatory: +, -, *, / oraz nawiasy: () np:

@eq:(#param:<urządzenie>#+#param:<urządzenie>#)/7@


Przykład instrukcji gaszącej światło po 2 minutach (120 sekundach) od momentu zapalenia jej na 100%:

IF 
   unimodule.unimodule_1.zarowka.1:time > "119" 
   AND unimodule.unimodule_1.zarowka.1 = "100" 
THEN 
   unimodule.unimodule_1.zarowka.1 = "0";
 

Przykład instrukcji gaszącej światło gdy od 15 sekund brak naruszenia na czujniku ruchu centralki alarmowej satel

IF 
   unimodule.unimodule_1.zarowka.1 > "0" 
   AND satel.satel_integra64.partition.2.zone.6.input.6.zones_violation = "0" 
   AND satel.satel_integra64.partition.2.zone.6.input.6.zones_violation:time > "14" 
THEN 
   unimodule.unimodule_1.zarowka.1 = "0";

Obsługiwane operatory to: =, >, <

Warunki można łączyć ze sobą przy pomocy operatorów logicznych: AND, OR, XOR, NOR, NAND, XNOR

W warunkach można używać jednoargumentowego operatora zaprzeczenia NOT

Warunki można grupować przy pomocy nawiasów.

Kolejność operacji: najwyższy priorytet mają warunki zawarte w nawiasach, następnie sprawdzane są warunki zaprzeczone operatorem NOT, a po nich pozostałe warunki.


Akcje

<akcje> - lista zmian stanów do wykonania przez system gdy spełnione są <warunki>

Pojedynczą akcję zapisujemy w następujący sposób: <urządzenie> = ”<nowa_wartość>„

W sytuacji gdy po spełnieniu wymienionych warunków chcemy wykonać klika zmian stanów, wymieniamy kilka akcji po przecinku: <urządzenie> = ”<nowa_wartość_1>”, …, <urządzenie_n> = ”<nowa_wartosc_n>„

Nowe wartości stanów mogą być parametryzowane aktualną (w chwili wykonywania instrukcji) wartością istniejącego stanu. Parametry definiujemy w następujący sposób: #param:<urządzenie>#.

W każdej akcji można dodawać dowolną liczbę parametrów.

Możemy opóźniać wykonanie akcji o dowolną liczbę sekund lub milisekund stosując przed tą akcją jedno z poleceń: sleep.s=”<liczba_sekund>”, sleep.ms=”<liczba_milisekund>”.

Polecenie sleep.<x> oddzielamy od akcji przecinkiem, np: sleep.s=„5”, unimodule.demo3.10000001.c.5=„1



Przykłady instrukcji warunkowych

Prosta instrukcja

Jeśli został naciśnięty przycisk 1 w unimodule „unimodul_1” to włącz output 5 w centralce „satel_integra64”

IF 
   unimodule.unimodul_1.przycisk.1 = "1" 
THEN 
   satel.satel_integra64.partition.2.output.5.outputs_state = "1";

Prosta instrukcja z parametrami

Jeśli został naciśnięty przycisk 1 w unimodule „unimodul_1” to wyślij smsem na numer 48654987321 informacje o godzinie i o tym, czy jest aktualnie alarm w strefie 5

IF 
   unimodule.unimodul_1.przycisk.1 = "1" 
THEN 
   sms_sender.gsm_1.new_sms = "48654987321: godzina: #param:clock.time.hour#, stan alarmu dla strefy 5: #param:satel.satel_integra64.partition.2.zone.5.partitions_alarm#";

Prosta instrukcja z kwalifikatorami

Jeśli żarówka 1 w unimodule „unimodul_1” jest zapalona na 90% od conajmniej godziny to ją zgaś

IF 
   unimodule.unimodul_1.zarowka.1 = "90" 
   and unimodule.unimodul_1.zarowka.1:time = "3600" 
THEN 
   unimodule.unimodul_1.zarowka.1 ="0";

Złożona instrukcja 1

Jeśli w godzinach 22-8 naciśnięto przycisk 1 w unimodule „unimodul_1” lub przycisk 1 w unimodule unimodul_7 lub nastąpiło naruszenie 4 czujki, to włącz output 5 w centralce „satel_integra64” i wyślij smsa o treści „NAPAD” pod numer 48654987321

IF 
   (unimodule.unimodul_1.przycisk.1 = "1" 
  OR 
   unimodule.unimodul_7.przycisk.1 = "1"
  OR 
   satel.satel_integra64.partition.2.zone.5.input.4.zones_violation = "1")
 AND 
   (clock.time.hour > "21" OR clock.time.hour < "8")
 THEN 
   satel.satel_integra64.partition.2.output.5.outputs_state = "1", 
   sms_sender.gsm_1.new_sms = "48654987321:NAPAD";

Złożona instrukcja 2

Złożona instrukcja z wykorzystaniem zmiennych systemowych (definiowanych przez użytkownika): Ustawianie zmiennej systemowej noc na 1 w godzinach 22-08 w tygodniu i w godzinach 00-11 w weekendy

IF 
   SYSTEM.VARIABLES.noc = "0"
 AND (
   ((clock.time.hour > "21" OR clock.time.hour < "8") AND clock.date.weekday > "0" AND clock.date.weekday < "6") 
 OR
   ((clock.time.hour > "23" OR clock.time.hour < "11") AND (clock.date.weekday = "1" OR clock.date.weekday = "6")) 
    )
 THEN 
   SYSTEM.VARIABLES.noc = "1";

Ustawianie zmiennej systemowej

Ustawianie zmiennej systemowej noc na 0 w godzinach 08-22 w tygodniu i w godzinach 11-00 w weekendy

IF 
   SYSTEM.VARIABLES.noc = "1"
  AND (
   (clock.time.hour > "7" AND clock.time.hour < "22" AND clock.date.weekday > "0" AND clock.date.weekday < "6") 
  OR
   (clock.time.hour > "10" AND clock.time.hour < "24" AND (clock.date.weekday = "1" OR clock.date.weekday = "6")) 
      )
  THEN 
   SYSTEM.VARIABLES.noc = "0";

Instrukcja wykorzystująca zmienną systemową

Instrukcja wykorzystująca zmienną systemową ustawianą przez inną instrukcję: Jeśli jest noc to uzbrój alarm w strefach 1,2,3,4

IF
    SYSTEM.VARIABLES.noc = "1"
THEN 
    satel.satel_integra64.partition.2.zone.1.armed_partitions_really = "1",  
    satel.satel_integra64.partition.2.zone.2.armed_partitions_really = "1", 
    satel.satel_integra64.partition.2.zone.3.armed_partitions_really = "1", 
    satel.satel_integra64.partition.2.zone.4.armed_partitions_really = "1";

Złożona instrukcja 3

Instrukcja zapalająca światła w korytarzu z opóźnieniem pół sekundy przed każdym kolejnym światłem:

IF
    unimodule.demo3.1000001A.e.1="1"
THEN 
    unimodule.demo3.1000001A.c.5="1", 
    sleep.ms="500", 
    unimodule.demo3.1000001B.c.5="1", 
    sleep.ms="500", 
    unimodule.demo3.1000001C.c.5="1", 
    sleep.ms="500", 
    unimodule.demo3.1000001D.c.5="1";