Deklaracja w plikach
Warunki archiwizacji są definiowane przy pomocy wyrażeń umieszczanych w pliku. Każde wyrażenie musi być zdefiniowane w odrębnej linii. Nazwa warunku podana w pliku jest następnie umieszczana w definicji zmiennej w polu Parametry archiwizacji. Nazwę pliku z warunkami archiwizacji należy zadeklarować w: programie Architekt > Obszary i komputery > Dane archiwalne > zakładka Standardowe > opcja Warunki
Wartości i argumenty wyrażeń są stałymi lub zmiennymi wartościami zmiennoprzecinkowymi, maskami 32-bitowymi, lub wartościami logicznymi. Argumentami wyrażeń mogą być inne wyrażenia, czyli można definiować wyrażenia złożone. Nazwy wyrażeń nie mogą się powtarzać.
Jeżeli wartość wyrażenia nie jest wartością logiczną, a zostanie użyta bezpośrednio jako warunek, to jest dokonywana konwersja:
maski 32-bitowe, w których wszystkie bity są zerowe są konwertowane na fałsz, inne na prawdę,
liczby z zakresu (-0.5;0.5) są konwertowane na fałsz, inne na prawdę.
Linia wyrażenia ma następującą strukturę:
Nazwa_wyrażenia, Operator, Arg1, Arg2, ...
gdzie:
Nazwa_wyrazenia - identyfikator wyrażenia zawierający do 15 znaków; nazwa wyrażenia może się powtarzać; nazwy wyrażeń stanowią odrębną grupę, dzięki czemu nie dochodzi do konfliktu np. z identyczną nazwą zmiennej;
Operator - nazwa jednego z dopuszczalnych operatorów;
Arg1, Arg2, ... - argumenty wyrażenia.
Argumenty mają postać:
[u][$]źródło
gdzie:
u i $ - są opcjonalne i oznaczają:
u - jest jednym z operatorów jednoargumentowych:
- - oznacza zmianę znaku z wcześniejszą konwersją do postaci liczby zmiennoprzecinkowej,
~ - oznacza negację bitów maski z wcześniejszą konwersją do postaci maski 32-bitowej,
! - oznacza negację z wcześniejszą konwersją do postaci wartości logicznej.
$ - oznacza pobranie wartości wyliczonej przy poprzednim wartościowaniu warunku dla danej zmiennej i zachowanie aktualnej wartości do przyszłych wyliczeń.
Źródło danych źródło ma jedną z następujących postaci:
liczba_dziesiętna - wartość liczbowa zmiennoprzecinkowa (np. 9999);
0xliczba_szesnastkowa - maska 32-bitowa zakodowana szesnastkowo (np. 0xFFFF);
>> - plus nieskończoność;
<< - minus nieskończoność;
@nazwa_zmiennej - wartość zmiennej procesowej;
@ - wartość zmiennej procesowej, dla której aktualnie wyznaczany jest warunek; taki warunek ma różne wartości w zależności od tego, dla której zmiennej jest wyznaczany;
?nazwa_wyrażenia - wartość innego, wcześniej zdefiniowanego wyrażenia. Można w ten sposób definiować wyrażenia złożone.
Deklaracja in-line warunku archiwizacji
W skład definicji zmiennej może wchodzić warunek archiwizacji tej zmiennej. Warunek umieszczany jest w polu Archiwizacja zmiennej, w parametrze War.
Ponieważ większość warunków ma prostą jednowierszową postać, to w wielu aplikacjach pozwoli to uniknąć tworzenia pliku warunków.
Takie warunki można wprowadzać w edytorze bazy definicji zmiennych Architekta. Nie można ich stosować z wcześniejszymi wersjami Architekta, gdyż nieprawidłowo interpretuje on dodatkowe przecinki w definicji zmiennej.
Deklarację in-line można zdefiniować na 2 niżej opisane sposoby.
Warunek jako wyrażenie w deklaracji zmiennej
Zamiast nazwy warunku można wpisać bezpośrednio wyrażenie, zgodne ze składnią definicji warunku w pliku warunków, ujęte w nawiasy (). W takim wyrażeniu pomija się pierwszy parametr określający nazwę warunku.
Przykłady
Archiwizuj, gdy bit 4 zmiennej AAA jest równy 1:
(BAND, @AAA, 0x10)
Archiwizuj, gdy bity 4 lub 8 zmiennej AAA zmieniły stan:
(BNE, @AAA, $@AAA, 0x110)
Archiwizuj, gdy bit 0 zmiennej archiwizowanej zmienia stan z 0 na 1:
(BGT, @, $@, 0x1)
Archiwizuj, gdy wartość zmiennej archiwizowanej jest poza przedziałem (20,80):
(IN, @, <<, 20, 80, >>)
Warunek jako argument w deklaracji zmiennej
Zamiast nazwy warunku można wpisać bezpośrednio wyrażenie, zgodne ze składnią argumentu warunku w pliku warunków. Takie wyrażenie musi się zaczynać od !, -, ~, $, @ lub ?.
Przykłady
Archiwizuj, gdy zmienna AAA jest poza przedziałem (-0.5; 0.5):
@AAA
Archiwizuj, gdy zmienna AAA jest w przedziale (-0.5; 0.5):
!@AAA
Archiwizuj, gdy poprzednia wartość zmiennej AAA była poza przedziałem (-0.5; 0.5):
$@AAA
Archiwizuj, gdy warunek QQQ nie jest spełniony:
!?QQQ