ObjApi - flags archivneho objektu

Dobry den,
Ohladom Flags v struct _Row (archivne data):
Pre bezne hodnoty mi chodia Flags = 33280 a pre zmazanu hodnotu Flags = 33296.
Ake su vsetky mozne hodnoty tychto Flags? A preco sa v trezore/archive ukladaju ako zaporne cislo?
Ďakujem.

Dobry den.

“Pre bezne hodnoty mi chodia Flags = 33280 a pre zmazanu hodnotu Flags = 33296.”

33280 = binarne 1000 0010 0000 0000

33296 = binarne 1000 0010 0001 0000

Teda rozdiel je v priznaku “Deleted”, co je 5. priznak. Vid help GETARCHVAL - D2000 V12 Dokumentácia - Ipesoft Confluence

archFlagsIdent_Int out Identifikátor typu Int - archívne príznaky, nepovinný parameter

presmeruje na Obsah so štítkom - D2000 V12 Dokumentácia - Ipesoft Confluence kde je tabulka so vsetkymi ZDOKUMENTOVANYMI archivnymi priznakmi.

Co sa tyka pristupu PRIAMO do archivnej/trezorovej databazy:

Takyto pristup nie je odporucany. Odporucany pristup k archivnym datam je cez rozhrania, ktore idu cez D2000 Archiv (OBJAPI, D2000 JAPI, VBAPI, D2000 Workbook…).

Data jedneho objektu v archive mozu byt v 1 tabulke alebo viacerych (casove rezy).

Data v trezoroch su v jedinej tabulke, ale od verzie 22 je implementovana nova a pomerne zaujimava vlastnost “komprimovane trezory”. Pokial je zapnuta (volitelny parameter), tak su naplnene trezory skomprimovane. Kompresia spociva v zmene struktury, takze je uz uplne ina ako v sucasnosti. Po kompresii sa zmensi velkost trezora (bezne aj viac ako 10x).

Data statistickych a periodickych vypocitanych archivov su ukladane na zmenu. Ak sa teda dlhsie hodnota nemeni, do archivnej/trezorovej databazy sa neukladaju stale tie iste cisla, co setri disk aj I/O. Na druhej strane, ked sa data citaju, tak sa chybajuce duplicity doplnia, s archivnym priznakom “K” (ako ‘kopy’). Ak citate tento typ dat, musite si doplnanie riesit vo vlastnej rezii.

Ak pouzivate izochronnu cache archivu, tak ta je schopna drzat v pamati poslednych N hodin/dni, co zvysuje vykon archivu pri citani a odlahcuje DB. Zaroven, ak by ste “odboku” nieco vlozili, zmenili alebo zmazali v archivnej/trezorovej databaze, tak D2000 Archiv o tom netusi a uzivatelom sa zmena neprejavi, kedze sa ide cez cache.

V archive v tabulkach s datami je stlpec STATUS, ktory obsahuje:

stavy hodnoty (Invalid, ProcAlarm, NoAckPAlarm, PrAlSilent, Weak, NoAckValue, Transient, Default, Manual, PrAlCrit)

limity (Limitný stav hodnoty: InLimit, VL_Limit, L_Limit, H_Limit, VH_Limit, LimitsProblem)

archívne príznaky: START, STOP, BLOCK, UNBLOCK, DELETED, USERMODIFY, OLDVAL, PROCESMODIFY, LOADDATA, MONO_TIME, K.

Stĺpec Status je definovaný ako Integer (32 bitov), takze ak je nastaveny najvyssi bit, tak hodnota moze byt zaporna. D2000 Archiv ju interpretuje ako sadu bitov (Typ INTEGER bol pouzity z dovodov kompatibility s SQL databazami, nie kazda ma UNSIGNED a D2000 Archivu je to srdecne jedno). Mimochodom, najvyssi bit je vnutorny archivny priznak “Ver1”, tj. hodnota je vo formate uvedenom vyssie. Ak by bit nebol nastaveny, jedna sa o “prehistoricke” archivy, kde je stav v starsom, nekompatibilnom formate.

V trezore v tabulke DATA su separatne stlpce:

STATUS (stavy hodnoty)

LIMIT_STATUS (limity)

ARCHIV_STATUS (archívne príznaky)

Stĺpce sú definované ako short Integer (16 bitov), takze ak je nastaveny najvyssi bit, tak hodnota moze byt zaporna. D2000 Archiv ju interpretuje ako sadu bitov.

Ďakujem za podrobné vysvetlenie.