PmAlarmEvent a metoda GetHistoryData

Toto je hlavní technické fórum pro diskusi o problémech při vytváření PROMOTIC aplikací a jejich řešení.

PmAlarmEvent a metoda GetHistoryData

Postby ondra.bi » Thu 04. Apr 2013 12:33:19

Dobrý den,
mám dvě aplikace na dvou PC. Na jednom mám PmAlarmEvent jako Web Server na druhém jako klienta. Chtěl bych na klientovi použít metodu GetHistoryData, ale stále vrací prázdné pole ( nefunguje ani na serveru). Zkoušel jsem i GetStateData, na serveru funguje, na klientovi pouze, když mám otevřen prohlížeč stavů.
Potřeboval bych vyčíst alarmy(události) z jiných PC a dále je zpracovat, ne jen zobrazit v prohlížeči alarmů. Lze to výše popsaným způsobem, nebo doporučujete jiný způsob.
Děkuji
ondra.bi
 
Posts: 14
Joined: Thu 14. Mar 2013 11:05:16

Re: GetHistoryData

Postby Tomáš Bräuer » Fri 05. Apr 2013 7:21:15

Dobrý den!
GetHistoryData funguje ve verzi 8.2.6 i na serverovém i na klientském (vzdálené napojení přes web) PmAlarmEvent. Je ovšem potřeba uvést ve filtračním řetězci všechny povinné části, aby mohlo hledání proběhnout. Toto jsem si i pro jistotu ověřil, že to funguje. Pokud funguje řetězec na serveru, bude fungovat i na klientu.
GetStateData na klientu skutečně nevyčte nová data, ale bere ty, co tam teď jsou. A data se občerstvují jenom při otevřené prohlížečce stavů alarmů. Aby byly při čtení vyčteny čerstvá data, musel bych udělat změny v implementaci. Zkusím se na to podívat, jestli to bude schůdné, tak to opravím.

Fungující příklad u mne, který čte stejná data ze 2 navzájem propojených PmAlarmEvent objektů:
Code: Select all
dim a1, a2
a1 = Pm("/AlServer").GetHistoryData("Desc,TimeOn,TimeOff,TimeAck", "source:System;from:time(2013-01-30_00:00:00.000);timerange:1d;records:100;scanrecords:1000;")
a2 = Pm("/AlClient").GetHistoryData("Desc,TimeOn,TimeOff,TimeAck", "source:System;from:time(2013-01-30_00:00:00.000);timerange:1d;records:100;scanrecords:1000;")
Pm.FileCsvWrite "$path.app:alserver.csv", "filecols:all;appnames:Desc,TimeOn,TimeOff,TimeAck;", "colnameheader:yes;", a1
Pm.FileCsvWrite "$path.app:alclient.csv", "filecols:all;appnames:Desc,TimeOn,TimeOff,TimeAck;", "colnameheader:yes;", a2
Tomáš Bräuer
Administrátor
 
Posts: 153
Joined: Thu 13. Dec 2012 9:13:13

Re: GetHistoryData

Postby ondra.bi » Fri 05. Apr 2013 10:03:16

Dobrý den,
tak už mi to funguje, ale nechápu, proč mi nefungovala i původní verze.

původní NEfunkční kód:
Code: Select all
a = ev.GetHistoryData("Source,Desc,TimeOn","to:now;timerange:3m;")

nový funkční kód:
Code: Select all
a = ev.GetHistoryData("Source,Desc,TimeOn","to:now;timerange:3m;records:100;")
ondra.bi
 
Posts: 14
Joined: Thu 14. Mar 2013 11:05:16

Re: GetHistoryData

Postby Tomáš Bräuer » Fri 05. Apr 2013 10:43:42

Dobrý den!
Chybí tam ta položka records:n; Je to bezpečnostní omezení, které omezí maximální počet zaslaných vět, protože nemůžete vědět, kolik vět v daném čase leží. Může být žádná, ale také milión. U GetHistoryData to je povinná část dotazu. Není špatné užít i parametr scanrecords , aby se omezilo procházení nedopatřením do velké historie.
Tomáš Bräuer
Administrátor
 
Posts: 153
Joined: Thu 13. Dec 2012 9:13:13

Re: GetHistoryData

Postby ondra.bi » Fri 05. Apr 2013 11:29:29

K čemu slouží filtr records, jsem se dočetl v helpu, ale také jsem se tam dočetl, že je NEpovinný. Protože jsem věděl, že tam nikdy "milion" alarmů nebude, tak jsem to nepoužil a pak marně hledal chybu.
ondra.bi
 
Posts: 14
Joined: Thu 14. Mar 2013 11:05:16

Re: GetHistoryData

Postby Tomáš Bräuer » Fri 05. Apr 2013 12:47:17

Uvedl jsem v soulad dokumentaci a implementaci. Dokumentace zůstala a parametr records už skutečně není povinný, ale uživatel by skutečně měl zajistit buď omezení pomocí records nebo pomocí rozumného časového rozsahu (a doufat, že tam není nečekané obrovské množství alarmů/eventů v zadaném časovém intervalu). Bude ve verzi 8.2.7.
Tomáš Bräuer
Administrátor
 
Posts: 153
Joined: Thu 13. Dec 2012 9:13:13

Re: GetHistoryData

Postby Tomáš Bräuer » Fri 05. Apr 2013 12:56:21

GetStateData na klientovi. Implementoval jsem u vzdálených alarmů napojených přes web vyčtení aktuálního stavu ze serveru při zavolání GetStateData. Je to nyní podobné, jako u GetHistoryData, kde každé zavolání funkce, vyčte data ze serveru. Bude ve verzi 8.2.7.
Tomáš Bräuer
Administrátor
 
Posts: 153
Joined: Thu 13. Dec 2012 9:13:13

Re: PmAlarmEvent a metoda GetHistoryData

Postby jonnblaze » Sat 01. Jun 2013 11:41:59

K čemu slouží filtr records???? :?:
gHost rIdEr
jonnblaze
 
Posts: 1
Joined: Sat 01. Jun 2013 11:30:55

Re: PmAlarmEvent a metoda GetHistoryData

Postby Tomáš Bräuer » Tue 04. Jun 2013 10:04:02

"records:xx;" (nepovinné) - Umožňuje zadat (omezit) počet požadovaných alarmů, splňujících filtrační kritéria. Po dosažení zadaného počtu nalezených alarmů se prohledávání alarmů ukončí. Spolu s určením časového intervalu umožňuje omezovat prohledávaní alarmů na omezenou část alarmů. Normální filtrace by totiž procházela všechny alarmy ve všech zálohách. Z praktických důvodů je tedy vhodné filtraci omezit pouze na nutnou a užitečnou část historie alarmů.
viz http://www.promotic.eu/cz/pmdoc/Appendix/OpenView.htm
Tomáš Bräuer
Administrátor
 
Posts: 153
Joined: Thu 13. Dec 2012 9:13:13


Return to Nevím jak...

Who is online

Users browsing this forum: No registered users and 4 guests