journal journal_name; rem = string; bubble = string; timer = timer_name; owner = owner_name; position = integer, integer, integer, integer; win_disable = [ identifier, ... ]; win_title = string; access = integer; tab_select = integer; driver_exception = driver_name; file_name = string; file_type = identifier; file_length = integer; file_start = integer, integer, integer, integer; file_history = integer; file_name_type = identifier; file_mask_expression = real_expression; file_delete = boolean_expression; cache = integer; date_item name = string; expression = real_expression; disable; end_date_item; time_item name = string; expression = real_expression; disable; end_time_item; record_structure = [ identifier, ... ]; odbc enable; dsn = string; user_name = string; password = string; file_extension = string; end_odbc; condition = boolean_expression; initialize = boolean_expression; register_login; item text = string; expression = any_expression; condition = boolean_expression; plus_hysteresis = real; minus_hysteresis = real; text_for_true = string; text_for_false = string; end_item; item ... end_item; mask_item text = string; expression = any_data_element; condition = boolean_data_element; plus_hysteresis = real_data_element; minus_hysteresis = real_data_element; text_for_true = string; text_for_false = string; end_mask_item; mask_item ... end_mask_item; array_item index_range = integer, integer; text = string; expression = any_array_data_element; condition = boolen_array_data_element; plus_hysteresis = real_array_data_element; minus_hysteresis = real_array_data_element; text_for_true = string; text_for_false = string; end_array_item; array_item ... end_array_item; colors text = color; background = color; top_shadow = color; bottom_shadow = color; select = color; button_up_background = color; button_up_top_shadow = color; button_up_bottom_shadow = color; button_down_background = color; button_down_top_shadow = color; button_down_bottom_shadow = color; end_colors; end_journal;
Podrobný popis parametrů pro definici archivních souborů je uveden v kapitole Databáze a archivace dat.
Definici pomocí těchto položek je výhodné používat všude tam, kde je potřeba nadefinovat řadu položek pro různé datové elementy, které však odpovídají nadefinované masce. Jako zástupný znak se používá hvězdička (*).
Například jsou definovány následující kanály
channel chrTH01 = real, 201, virtual, input, 'Tank č.01 - hladina'; chTH02 = real, 202, virtual, input, 'Tank č.02 - hladina'; ... chrTH10 = real, 210, virtual, input, 'Tank č.03 - hladina'; chbTV01 = boolean, 301, virtual, output, false, 'Tank č.01 - ventil'; chbTV02 = boolean, 302, virtual, output, false, 'Tank č.02 - ventil'; ... chbTV10 = boolean, 310, virtual, output, false, 'Tank č.03 - ventil'; end_channel;
maska chrTH* vyhovuje pro následující kanály
chrTH01, chrTH02 až chrTH10
Masku pro datové elementy mohou obsahovat položky expression, condition, plus_hysteresis a minus_hysteresis.
Položka text může obsahovat i speciální kombinaci znaků, tzv. makra. Tato makra budou při spuštění aplikace nahrazena odpovídajícími texty.
\$ - toto makro bude nahrazeno jménem datového elementu
\# - toto makro bude nahrazeno číslem kanálu
\@ - toto makro bude nahrazeno komentářem, uvedeným u datového elementut>
Příklad:
journal Sample; ... mask_item text = '\@ změněna (vstup č.\#)' expression = chrTH* end_mask_item; end_journal;
odpovídá zápisu
journal Sample; ... item text = 'Tank č.01 - hladina změněna (vstup č.201)' expression = chrTV01 end_item; item text = 'Tank č.02 - hladina změněna (vstup č.202)' expression = chrTV01 end_item; ... item text = 'Tank č.10 - hladina změněna (vstup č.210)' expression = chrTV01 end_item; end_journal;
Definici pomocí těchto položek je výhodné používat všude tam, kde je potřeba nadefinovat řadu položek pro datové elementy typu pole. Obdobně jako u mask_item je potom tato položka rozvinuta do jednotlivých položek odpovídajících jednotlivým prvkům pole.
Parametr index_range obsahuje rozsah indexů pole.
Parametr text může obsahovat i makra (viz popis parametru mask_item).
Parametry expression, condition, plus_hysteresis a minus_hysteresis musí obsahovat pole, která výhovují zadanému rozsahu indexů.
Vzhled a ovládání přístroje
Při vložení samotného přístroje journal do aplikace se zobrazí v podobě uvedené na obrázku:
Bude mít tlačítko a prostor pro zobrazování názvu právě aktuálního archivního souboru. Kliknete-li myší na tlačítko (ikona pro otevření souboru), zobrazí se dialogové okno, ve kterém jsou zobrazeny dostupné archivní soubory. Data vybraného souboru lze prohlížet nebo zpracovávat dostupnými DataView nebo soubor zkopírovat do jiného adresáře nebo jej uložit pod jiným jménem.
Některé parametry mají implicitní nastavení
position = 0, 0,150, 28; access = <none> tab_select = <none> file_type = relative; file_length = hour; file_start = 0, 0, 1, 1; file_history = 10; file_access = 4294967295; file_name_type = new_code; date_item name = 'DATE'; end_date_item; time_item name = 'TIME'; end_time_item; record_structure = text, old_value, new_value, operator;
Příklad definice parametrů přístroje
journal Journal; timer = 1; owner = background; position = 10, 20, 174, 28; access = 0; file_type = relative; file_length = day; file_name = 'DJ_'; file_history = 7; record_structure = text, old_value, new_value, operator; condition = WriteToJournal; initialize = JournalInitialize; item text = 'Změna parametru X12'; expression = value_X12; end_item; item text = 'Otevření/Zavření ventilu V2'; expression = ValveV2State; end_item; end_journal;
Initialize()
Inicializace srovnávacích hodnot, neboli srovnávací hodnoty nastaví na srovnávané hodnoty.
Notify( Text : string; OldValue, NewValue : value; PlusHysteresis, MinusHysteresis : number; DifferentOnly : boolean )
Přidá záznam o události do archivního souboru.
Popis parametrů:
Text - textový popis události
OldValue - původní (stará) hodnota
NewValue - aktuální (nová) hodnota
PlusHysteresis - plus hystereze pro numerickou veličinu
MinusHysteresis - minus hystereze pro numerickou veličinu
DifferentOnly - záznam bude přidán jen tehdy, pokud jsou hodnoty OldValue a NewValue různé.
Show()
Zobrazení skrytého přístroje.
Hide()
Skrytí viditelného přístroje.
Přístroj může volat standardní událostní procedury:
OnActivate() OnMouseDown( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean ) OnMouseDoubleClick( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean ) OnMouseUp( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean ) OnMouseMove( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean ) OnSelect() OnDeselect() OnShow() OnHide() OnNewPosition( RectX, RectY, RectW, RectD : integer ) OnWindowMinimize() OnWindowMaximize() OnWindowRestore( WasMinimized, WasMaximized : boolean ) OnWindowClose()
Podrobnější informace k těmto procedurám lze nalézt v kapitole Programování a procedury.
OnChange( Text, NewValue, OldValue : string )
Procedura je volána při vyhodnocené změně.
Text - textové hlášení spojené s touto změnou
NewValue - nová hodnota
OldValue - předchozí hodnota