Rozšírená syntax pre výrazy počítaných bodov a vypočítaných archívnych objektov

Nasledujúca kapitola popisuje syntax použiteľnú vo výrazoch objektov typu Počítaný bod a výrazoch objektov typu Archivovaná hodnota.

Inicializačná časť


Inicializačná časť začína kľúčovým slovom INIT. V tejto časti je možné používať:

  • deklarácie lokálnych premenných,
  • návestia,
  • príkazy GOTO návestie:
  • príkazy IF podmienka GOTO návestie:
    • pričom návestie musí byť vždy ukončené znakom ":" (aj v príkazoch GOTO),
  • príkazy na základe podmieneného vyhodnocovania:
        IF
    podmienka1 THEN
            akcia1
        ELSIF podmienka2 THEN
            akcia2
        ELSIF podmienka3 THEN
            akcia3
            .....
        ELSE
            akcia
        ENDIF
  • príkaz RETURN ukončí výpočet a priradí výsledku hodnotu (konštantu alebo výraz) za príkazom RETURN,
  • príkaz EXIT spôsobí skok na časť FINALLY.

Inicializačná časť je nepovinná. Ak nie je uvedená, platí pôvodná syntax.
Ak je uvedená, samotný výraz, ktorý určuje hodnotu výrazu objektu, je uvedený za kľúčovým slovom FINALLY.

Obmedzenia


V systéme D2000 je obmedzený počet vykonávaných riadkov. V súčasnosti nie je možné tento počet nastaviť alebo zmeniť.
Počet vykonávaných riadkov (ExecuteRows) závisí od typu procesu.

Pre proces D2000 Calc:

  • ExecuteRows > 1000 - do logovacieho súboru procesu D2000 Calc(calc.log) sa zapíše záznam: "Meno_PocitanehoBodu - executed rows : pocet_riadkov"
  • ExecuteRows > 100 000 - systémová premenná SystemError nadobudne hodnotu: "Meno_PocitanehoBodu - infinite loop"

Pre proces D2000 Archiv:

  • ExecuteRows > 1000 - do logovacieho súboru procesu D2000 Archiv (archiv.log) sa zapíše záznam: "Meno_ArchivovanejHodnoty - executed rows : pocet_riadkov"
  • ExecuteRows > 10 000 - systémová premenná SystemError nadobudne hodnotu: "Meno_ArchivovanejHodnoty - infinite loop"

Ak sa do premennej daného typu priraďuje hodnota iného typu, pri vykonávaní výrazu nastane runtime error, ktorý zastaví vyhodnocovanie skriptu (ďalšie riadky ostanú nevyhodnotené) a ako výsledok vráti vždy hodnotu Invalid. Pre zobrazenie chyby je potrebné mať zapnuté "debug runtime errors".

Výnimkou sú povolené konverzie:

  • vzájomná konverzia HBJ - Integer,
  • vzájomná konverzia Relatívny čas - Real - Integer,
  • jednosmerná konverzia z Boolean na Relatívny čas, Real alebo Integer.

Príklad 1

V uvedenom príklade sa počíta suma hodnôt zo stĺpca A2 štruktúrovanej premennej SV. Do sumy sa zarátavajú len hodnoty z riadkov, v ktorých hodnota v stĺpci A1 je väčšia alebo rovná 3.

INIT

INT _rows
INT _rowNr
REAL _suma

_rows := SV.A\DIM
_suma := 0.0

START:
_rowNr :=1

CYKLUS:
IF SV.A[_rowNr]^A1 < 3 GOTO SKIP:
_suma := _suma + SV.A[_rowNr]^A2

SKIP:
_rowNr := _rowNr + 1

IF _rowNr <= _rows GOTO CYKLUS:


FINALLY
_suma



Príklad 2

V príklade je zobrazované poradie tretiny bežiacej minúty - troma spôsobmi návratu hodnoty.

INIT

INT _tretina

IF Sec <= 20 THEN   
    RETURN 1
ELSIF Sec <= 40 THEN
   _tretina := 2
    RETURN _tretina
ELSE
   _tretina := 3
    EXIT
ENDIF

FINALLY
_tretina

V oboch príkladoch bude časová značka hodnoty výrazu nadobúdať hodnotu času, kedy bol výraz vyhodnotený. Ak má výraz nadobúdať inú hodnotu časovej značky, ako čas vyhodnotenia výrazu, je potrebné ju zadať vo výraze (za vymenovaným slovom FINALLY!) .

Napríklad:

FINALLY
%NtV(_suma, _time)

Pre definovanie užívateľských príznakov výslednej hodnote výrazu, je potrebné definíciu užívateľského príznaku definovať vo výraze.

Napríklad:

FINALLY
%SetFlags(_suma, @A, _boolean)

Napíšte komentár