Dobrý deň,
Pokial ide o výpočet priemeru tak toto by sa dalo riešiť rôzne podľa toho, čo presne potrebujete:
1. Ak by Vám stačilo počítať priemer z aktuálnej hodnoty a z predchádzajúcej hodnoty, tak pre výpočet môžete použiť událosť objektu PmData onItemBeforeWrite, v ktorej máte k dispozícii celú premennú pred vlastným zápisom a parameter pEvent.NewValue, v ktorom je prednastavená novo prečítaná hodnota. A do tohoto parametru by ste kľudne mohol zapísať priemer týchto dvoch uvedených hodnôt, čiže zápis by mohol byť následujúci:
- Code: Select all
pEvent.NewVal = (pEvent.Item.Value + pEvent.NewVal)/ 2
Tento postup má výhodu v tom, že nepotrebujete žiadnu dodatočnú premennú. Nevýhodou tohoto postupu je skutočnosť, že môžete počítať vždy priemer len z dvoch hodnôt: z predchádzajúcej (čiže predchádzajúci priemer) a novej hodnoty. Okrem toho nemáteuchovanú hodnotu, ktorú ste získal z komunikácie, príp. pre takéto výpočet by bolo potrebné si napr. vypočítaný priemer zapisovať do inej premennej.
Takisto v tomto prípade asi nemá veľký zmysel tento výpočet vynulovať.
2. Ak potrebujete počítať priemer z viacerých hodnôt od určitého času, tak pre každú takúto premennú si potrebujete zapamätať dva pomocné údaje: počet vzoriek a ich súčet. A tento priemer by sa zasa mohol počítať v události onItemAfterWrite, kde by ste v tejto události:
a) zväčšil počet vzoriek
b) pripočítal hodnotu k predchádzajúcej sume
Toto by sa dalo spraviť asi následujúco:
- Code: Select all
sName = pMe.Item.Name
pMe.Item(sName & "_sum").Value = pMe.Item(sName & "_sum").Value + pMe.Item.Value
pMe.Item(sName & "_count").Value = pMe.Item(sName & "_count").Value + 1
Reset sa dá potom spraviť jednoduch tak, že do príslušných premenných zapíšete 0. Uvedený príklad predpokladá, že pre každú premennú, ktorú takto chcete prepočítávať budete mať v tom isto PmDat aobiekte pripravené dve ďalšie premenné s názvom doplneným koncovkou "_sum" pre uloženie súčtu, resp. "_count" pre uloženie počtu premenných.
Takisto je dôležité si pri premenných, ktoré takýmto spôsobom chcete spracovávať, si vytvoriť dátové rozšírenie typu WriteAction, ktorá by sa volala PRED (v prvom prípade) resp. PO (v druhom prípade) zápise do premennej. A ďalšia informácia, ak používate dátové rozšírenia typu WriteAction je vždy potrebné ošetrovať, pre akú premennú k danej události došlo.
Dúfam, že uvedené informácie Vám pomôžu.