Passa al contenuto principale

Modulo di calcolo "math"


INFORMAZIONI PRELIMINARI IMPORTANTI

important

Questo modulo viene fornito senza alcuna garanzia espressa o implicita, comprese, tra l'altro, la garanzia implicita di idoneità del modulo per uno scopo particolare.

In nessun caso optiMEAS GmbH o i collaboratori di questo modulo saranno responsabili per danni diretti, indiretti, accidentali, speciali, esemplari o consequenziali (tra cui l'approvvigionamento di beni o servizi sostitutivi, la limitazione e/o la perdita della capacità di utilizzo, di dati, di profitto o l'interruzione dell'attività), comunque causati e a qualsiasi titolo, sia contrattuale, di responsabilità oggettiva o di atto illecito (inclusa la negligenza), derivanti in qualsiasi modo dall'uso di questo modulo, anche qualora siano stati avvisati della possibilità di tali danni.

note

Si deve presumere che la funzionalità relativa al catalogo delle funzioni, alle interfacce, alla parametrizzazione o simili sia incompleta e possa essere fornita in forma modificata nelle versioni future. L'utilizzo avviene pertanto a proprio rischio.

suggerimento

Siamo estremamente grati per qualsiasi suggerimento di miglioramento e consiglio derivante dall'uso di questo modulo e incoraggiamo gli utenti a contattarci in merito.


Descrizione​

Mediante il modulo di calcolo "math" è possibile applicare a dati diversi un insieme di formule definito dall'utente, che si avvale di molteplici funzioni.

Tra i dati (argomenti, espressioni) rientrano, da un lato, i dati dei canali smartCORE, in genere variabili nel tempo, ai quali si accede tramite i nomi dei canali, e dall'altro espressioni costanti, risorse, dati persistenti e dati messi a disposizione o preparati con l'ausilio di decoder.

Oltre ai dati monodimensionali sono supportati anche quelli multidimensionali sotto forma di vettori e matrici, dove a tutti i componenti di questi dati possono corrispondere tipi di dati diversi e, se necessario, avviene una conversione automatica del tipo.

La descrizione dell'ambito del linguaggio può essere consultata in

Riferimento del linguaggio

Tra le funzioni supportate rientrano, tra l'altro,

  • operatori aritmetico-logici, inclusi precedenza e associatività
  • funzioni matematico-trigonometriche
  • funzioni di filtro temporale (come ad es. la derivazione e l'integrazione di funzioni)
  • algoritmi numerici (ad es. FFT, decomposizione di matrici, interpolazione, predizione)
  • campionamento (sampling) dei dati di misura
  • funzioni di conteggio e timer
  • funzioni di selezione, funzioni orientate ai bit e funzioni di conversione di tipo (type cast)
  • sequenziamento di espressioni e assegnazioni
  • funzioni che operano su stringhe

Riferimento delle funzioni

Esempi​

In generale, nell'ambito della configurazione è opportuno considerare un esempio minimo e adattarlo alle proprie esigenze.

Un esempio minimo che, a partire da due canali di ingresso smartCORE fittizi Spannung e Strom, con l'ausilio dell'equazione tra grandezze fisiche

P=U⋅I⋅[A][mA]P = U \cdot I \cdot \frac{[\rm{A}]}{[\rm{mA}]} W=[kWh][Ws]⋅∫0tP(τ)dτW = \frac{[\rm{kWh}]}{[\rm{Ws}]} \cdot \int_{0}^{t} P(\tau) d\tau

calcola i canali di uscita Leistung e Energie, è riportato di seguito

{
"module":"math1",
"factory":"mathmodule",
"config": {
"math": [
"Leistung = Spannung * Strom * 1e-3; // Strom in mA!",
"Energie = 1/(3600 * 1e3) * integrate(Leistung); // Energie in kWh!"
],
"outputs": [
{
"datatype": "double",
"name": "Leistung",
"physicalUnit": "W"
},
{
"datatype": "double",
"name": "Energie",
"physicalUnit": "kWh"
}
]
}
}

Per calcoli la cui complessità in fase di esecuzione supera i requisiti di tempo reale è consigliabile l'uso di una Lookup Table (LUT). Nell'esempio seguente il volume di carburante in un serbatoio viene determinato per interpolazione dalla Lookup Table in base alla pressione presente sul fondo del serbatoio, dove il contenuto di questa LUT viene messo a disposizione, tramite resources, da un file presente nel file system

{
"module":"math1",
"factory":"mathmodule",
"config": {
"math": [
"Volumen = lookup(Druck, {$ref:'Tank_LUT'});"
],
"outputs": [
{
"datatype": "double",
"name": "Volumen",
"physicalUnit": "l"
}
],
"resources": {
"Tank_LUT": {
"decoder": [
"file"
],
"value": "Tank_LUT.lut"
}
}
}
}

Il contenuto del file Tank_LUT.lut sarebbe quindi, secondo la descrizione della funzione lookup(), il seguente (dove qui non sono riportati tutti i 161 punti di appoggio):

IN kPa 0.0 0.167751 161
OUT l

0
42.942
87.924
134.946
184.008
235.11
288.252
343.434
400.656
459.918
521.22
584.562
649.944
... usw

Motivazione​

L'utilizzo del modulo di calcolo mathmodule consente, tra l'altro, quanto segue

  • Diagnosi e analisi degli stati di processo direttamente sul dispositivo
  • Riduzione del volume di dati da trasmettere concentrandosi su valori caratteristici o trend
  • Misure virtuali sui segnali di misura, ad es. durata del movimento di una porta, ampiezza di un segnale, ecc.
  • Contatori di eventi, contatori di ore di esercizio, integrali
  • Classificazioni (tempo di permanenza, passaggi, rainflow, ...)
  • Elaborazione di grandezze di misura a più componenti (rosette di estensimetri)
  • Rapida implementazione PoC per lo (pre)sviluppo di plug-in
  • Semplici funzioni di controllo

Configurazione JSON​

Una configurazione minima necessaria del modulo di calcolo ha essenzialmente la struttura seguente

{
"module":"math1",
"factory":"mathmodule",
"config": {
"math": [

< MATH >

],
"outputs": [

< OUTPUTS >

]
}
}

Una configurazione completa del modulo di calcolo ha invece essenzialmente la struttura seguente

{
"module":"math1",
"factory":"mathmodule",
"config": {
"packages": [
"some function package",
"another function package",
...
],
"evaluationTimeMs": 1000,
"inputTimeoutS": 15,
"discreteSampleTimeMs": 100,
"math": [

< MATH >

],
"outputs": [

< OUTPUTS >

],
"resources": {
"someTextResource": [

< LINES OF TEXT >

],
"someObjectResource": {

< JSON STYLE Config >

},
"someDecodableResource": {
"decoder": [

< DECODERS >

],
"value": "someInitialStringValue"
},
...
}
}
}

Parametri globali del modulo​

Nell'ambito della configurazione del modulo si possono utilizzare i seguenti parametri

Nome del parametroObbligatorioTipo di datiintervallo di valori ragionevoleValore predefinitoDescrizione
packagesNoJSON Array of STRINGEMPTY JSON ArrayElenco che contiene pacchetti di funzioni opzionali
evaluationTimeMsNoINT100 -1000 (1 s)Intervallo di chiamata del calcolo (polling interval) in ms
inputTimeoutSNoINT10 -15 (15 s)Timeout dopo il quale non si attendono più i dati del canale e il calcolo prosegue con l'ausilio dell'ultimo valore del canale, in s
discreteSampleTimeMsNoINT1 -100 (100 ms)Tempo di campionamento (passo della griglia temporale sottostante) per il calcolo/la valutazione a tempo discreto di parti ricorsive della formula in ms
mathSÌJSON Array of STRING ovvero STRINGStringa, ovvero elenco di stringhe concatenate in un'unica stringa, che rappresenta l'insieme di formule del calcolo (vedere sotto)
outputsSÌJSON Array of JSON Object for Channel ConfigurationElenco di tutti i canali di uscita, ovvero, oltre a questi, anche di tutti i canali di ingresso persistenti (vedere sotto)
resourcesNoJSON Object for Resource ConfigurationOggetto che configura le risorse utilizzate (vedere sotto)
minLogLevelNoENUMOFF, DEBUG, INFO, WARNING, ERROR, FATALINFOFiltro di uscita per i messaggi del modulo Math: nel file di log vengono scritti solo i messaggi con almeno il livello di gravità indicato.

Configurazione dell'insieme di formule "math"​

L'insieme di formule del calcolo da eseguire periodicamente può essere specificato, a seconda della complessità, come un'unica stringa o come elenco di stringhe (sotto forma di JSON Array). Se viene specificato un elenco, tutti gli elementi dell'elenco vengono accodati come righe dell'insieme di formule con il carattere di collegamento \n.

Ulteriori informazioni sono disponibili nelle pagine seguenti:

Di seguito sono riportati esempi di insiemi di formule

{
"module":"math1",
"factory":"mathmodule",
"config": {
"math": "y = 42;"
}
}
{
"module":"math1",
"factory":"mathmodule",
"config": {
"math": [
"c = 42;",
"y = c;"
]
}
}
important

In questa documentazione l'attenzione è posta sul vero e proprio insieme di formule su più righe. Nel trasferire l'insieme di formule nella configurazione JSON, le singole righe dell'insieme di formule devono quindi essere racchiuse in " ... ". Ciò comporta che tutti i caratteri " e di ESCAPE \ nel testo della formula debbano essere resi nuovamente invisibili al parser JSON mediante il carattere di ESCAPE \.

Questa formattazione aggiuntiva non è considerata negli esempi di questo riferimento delle funzioni, perché di regola viene applicata automaticamente dall'editor utilizzato, ad es. in optiCONTROL.

Dal seguente testo di formula con diversi elementi di testo e una configurazione

s1a = '17" (inch)';
s1b = "17\" (inch)";
s2a = "Hat's funktioniert?\t[ja/nein]";
s2b = 'Hat\'s funktioniert?\t[ja/nein]';
fnc = myParameterFunction(x, {"property":"value"});

nella configurazione JSON del modulo Math risulta

"math": [
"s1a = '17\" (inch)';",
"s1b = \"17\\\" (inch)\";",
"s2a = \"Hat's funktioniert?\\t[ja/nein]\";",
"s2b= 'Hat\\'s funktioniert?\\t[ja/nein]';",
"fnc = myParameterFunction(x, {\"property\":\"value\"});"
], ...

Configurazione dei canali di uscita "outputs"​

In generale il modulo di calcolo serve a calcolare valori di uscita che vengono prodotti in canali smartCORE.

Per questi canali deve esistere nell'insieme di formule esattamente un'assegnazione ciascuno e devono essere configurati sotto "outputs" secondo i consueti standard smartCORE.

Le assegnazioni che non vengono pubblicate nell'area "outputs" sono considerate variabili interne e locali dell'insieme di formule.

L'esempio minimo seguente esporta pertanto il canale speed

{
"module":"math1",
"factory":"mathmodule",
"config": {
"math": [
"c = 42;",
"speed = c;"
],
"outputs": [
{
"dataType": "double",
"name": "speed",
"physicalUnit": "m/s"
}
]
}
}

Una configurazione un po' più flessibile, che descrive inoltre ulteriori caratteristiche del canale e una catena di filtri di produzione a uno stadio, avrebbe il seguente aspetto

{
"module":"math1",
"factory":"mathmodule",
"config": {
"math": [
"c = 42;",
"speed = c;"
],
"outputs": [
{
"dataType": "double",
"name": "speed",
"physicalUnit": "m/s",
"bufferSize": 1024,
"channelType": "timestamped",
"filter": [
{
"name": "datareduction",
"absTolerance": 0.0,
"timeoutMs": 60000
}
]
}
]
}
}

Configurazione delle risorse "resources"​

La messa a disposizione di risorse è una componente importante del modulo Math per realizzare anche configurazioni e funzionalità complesse. La relativa descrizione si trova qui.