Zjištění seznamu definovaných alarmů

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

Zjištění seznamu definovaných alarmů

Postby kmpc » Tue 21. May 2024 10:43:36

Dobrý den,

(mám verzi 9.0.27.0)

Pro uživatelské nastavení podmnožiny komunikovaných alarmů přes SMS bych potřeboval získat seznam všech definovaných (i dosud nikdy neaktivních) alarmů, tj, všech, které mám definované pomocí datového rozšíření v hlavní položce Data u každé proměnné. Z těch si pak uživatel bude vybírat, co půjde nebo nepůjde přes SMS.

Hned na začátku mě zastavil problém s funkcí GetStateData, která mi nevrací pole.
Vytvořil jsem testovací skript jako metodu pmaRoot a volám si ji tlačítkem v panelu. Na obrázku je vidět metoda, definice proměnných v Data s datovým rozšířením Alarm, aktuální stav alarmů a výstup Debug po zavolání metody v pmaRoot.

Alarmy.png
Alarmy.png (126.3 KiB) Viewed 2044 times


Jakékoli volání nad polem, např. a.GetSize(1); končí chybou,...

Zjistil jsem, že GetStateCount mi vrací jen alarmy, které již někdy nastaly, nedostanu všechny definované alarmy.

Co je ve skriptu špatně?
Předpokládám, že použité metody mi vrátí pouze již někdy aktivované alarmy, je to tak?
Jak zjistím počet a seznam všech definovaných alarmů, abych s nimi mohl pracovat?
Potřebuji nasměrovat, jak to celé správně uchopit.

Předem děkuji za radu.

Prachař
kmpc
 
Posts: 32
Joined: Thu 12. May 2016 6:39:20

Re: Zjištění seznamu definovaných alarmů

Postby Pavel Klimíček » Wed 22. May 2024 14:23:16

Dobrý den.
Pokud chcete pouze seznam alarmů které jsou definovány v datovém rozšíření (a né ty, které se mohou vyvolat skriptové),
pak to lze řešit takto:

Code: Select all
var oData = pMe.Pm("../Data");
var nItems = oData.Count;
var nAl = 0;

for (var iTm = 0; iTm < nItems; iTm++)
{
   var oVar = oData.Item(iTm);
   if (oVar.Extension("al"))
   {
      Pm.Debug("Alarm Extension Name = " + oVar.Name + ", Value = " + oVar.Value);
      nAl++;
   }
}
Pm.Debug("Celkem alarmu v datovem rozsireni : " + nAl);


Ve Vašem skriptu máte chyby v metodě Pm.Debug.
Snažíte se tam k hodnotě metody která vrací pole ještě přidat string.
Pokud v proměnné "a" očekáváte že bude pole pak ho otestujete takto:
Code: Select all
Pm.Debug("----- Test pole a (oAl.GetStateData) ----");
Pm.Debug(a, 1);
Pavel Klimíček
 
Posts: 75
Joined: Thu 13. Dec 2012 15:35:59

Re: Zjištění seznamu definovaných alarmů

Postby Pavel Klimíček » Thu 23. May 2024 11:21:56

Pokud má jedna proměnná více alarmních datových rozšíření můžete použít tento skript:
Identifikátory datového rozšíření ale musí mít tuto posloupnost "al", "al0", "al1", ....
Code: Select all
var oData = pMe.Pm("../Data");
var nItems = oData.Count;

for (var iTm = 0; iTm < nItems; iTm++)
{
   var sInd = "al";
   var nCount = -1;
   var oVar = oData.Item(iTm);
   
   while (oVar.Extension(sInd))
   {
      Pm.Debug("Alarm Extension id = '" + sInd + "', Name = '" + oVar.Name + "', Value = " + oVar.Value);
      nCount++;
      sInd = "al" + nCount;
   }
}
Pavel Klimíček
 
Posts: 75
Joined: Thu 13. Dec 2012 15:35:59


Return to Nevím jak...

Who is online

Users browsing this forum: No registered users and 6 guests

cron