03 – Valori disponibili comuni a KPI Live e Periodici

Nella formula del KPI posso essere utilizzati i valori di qualsiasi impianto accessibile in lettura all’utente connesso, che può utilizzare valori dei segnali, metadati e valori fissi, ed anche altri valori speciali qui di seguito descritti.

@nomeTag

Si riferisce al valore del tag di un impianto.
Nel caso di calcolo live, ogni variazione di @nomeTag genera un datapoint del KPI.
Nel caso di calcolo periodico, il datapoint del KPI è sempre uno solo per ogni periodo, indipendentemente dal numero di variazioni che il @nomeTag ha subito.

@nomeMetadato

Si riferisce al valore del metadato di un impianto.
NOTA: in caso di KPI live, l’eventuale variazione del metadato NON fa scattare il calcolo del KPI, il quale è innescato solamente dalla variazione di una variabile legata a un tag.

Il valore del metadato, essendo un testo libero, deve necessariamente seguire queste regole, per poter essere interpretato correttamente:

  • Deve contenere esclusivamente il numero, senza unità di misura o altro.
  • Non deve contenere separatori delle migliaia.
  • L’eventuale separatore dei decimali può essere sia la virgola che il punto. Entrambi i simboli sono considerati separatori decimali.

@@TS_UTC(@nomeTag)
@@TS_local(@nomeTag)

Rappresentano il timestamp relativo al datapoint del tag, rispettivamente in UTC e nel fuso orario dell’impianto.
Nel caso di calcolo periodico, è l’ultimo timestamp disponibile che non sfori la fine del periodo di calcolo.

Esempio con impianto con fuso orario in ora italiana:
– 2022-12-31 09:05:00 ora italiana: temperatura 20.1°
@@TS_UTC vale ‘2022-12-31 08:05:00’
@@TS_local vale ‘2022-12-31 09:05:00’

@@THIS

Indica il valore precedente del KPI, prima del calcolo in corso.

Esempio:
Ho creato un nuovo KPI, alle 8:59 del 31 dicembre 2022, con la formula:

@contatoreParziale + ISNULL(@@THIS, 0);

– 2022-12-31 09:00:00: @contatoreParziale = 100 → KPI = 100.
– 2022-12-31 09:05:00: @contatoreParziale = 80 → KPI = 180

Al momento del calcolo delle 9:05, @@THIS vale 100, e quindi il KPI delle 9:05 è uguale a 80 + 100 = 180.

@@TS_UTC(@@THIS)
@@TS_local(@@THIS)

Rappresentano il timestamp relativo al calcolo corrente del KPI, rispettivamente in UTC e nel fuso orario dell’impianto.
ATTENZIONE: per i KPI periodici è influenzato dalla direttiva @@TIMESTAMP_POSITION.

Esempio con impianto con fuso orario in ora italiana:
La formula del KPI è:

@@CALCULATE_EVERY = 1 HOUR;
IIF(DATEPART(HOUR, @@TS_local(@@THIS)) < 12, @tOut, @tIn);

Il significato è: se l’ora è tra le 00:00 e le 11:59 prendo la temperatura esterna @tOut, altrimenti prendo la temperatura interna @tIn.

– 2022-12-31 11:00:00 italiane: tOut = 10.1 , tIn = 19.8 → KPI = 10.1
– 2022-12-31 12:00:00 italiane: tOut = 10.3 , tIn = 20.1 → KPI = 20.1

@@PreviousTS_UTC(@@THIS)
@@PreviousTS_local(@@THIS)

Rappresentano il timestamp relativo al calcolo precedente del KPI, rispettivamente in UTC e nel fuso orario dell’impianto.
ATTENZIONE: per i KPI periodici è influenzato dalla direttiva @@TIMESTAMP_POSITION.

Esempio con impianto con fuso orario in ora italiana:
La formula del KPI è:

DATEDIFF(SECOND, @@PreviousTS_local(@@THIS), @@TS_local(@@THIS)) * ((@@PreviousValue(@portataLitriMinuto) + @portataLitriMinuto) / 2) / 60;

Il significato è: voglio calcolare quanti litri sono passati dal canale, a partire dalla portata, che è espressa in litri al minuto. Per fare un calcolo più preciso, calcolo comunque la differenza in secondi (DATEDIFF dà sempre un risultato intero, non frazionale), e poi divido per 60. Come valore di portata, non prendo il valore corrente, ma faccio una media tra il valore corrente e il valore precedente.


– 2022-12-31 09:00:00 italiane: portata l/min: 10
– 2022-12-31 09:05:00 italiane: portata l/min: 18

I singoli componenti per il calcolo delle 9:05 sono:

– @@PreviousTS_local(@@THIS) = 2022-12-31 09:00:00
– @@TS_local(@@THIS) = 2022-12-31 09:05:00
– @@PreviousValue(@portataLitriMinuto) = 10
– @portataLitriMinuto = 18

E quindi il risultato è:
300 * ((10 + 18) / 2) / 60 = 70 litri

Was this helpful?

0 / 0