Configurazione
Riepilogo
Questa sezione illustra la configurazione di smartCORE da parte dell'utente.
Struttura della configurazione
La configurazione del software smartCORE è composta essenzialmente da due file di configurazione salvati sull'edge device,
- la configurazione statica
/sdi/config/smartcore.json, e - la configurazione dinamica (ovvero la configurazione di misura specifica dell'applicazione)
/sdi/config/smartcore_dynamic.json
Entrambi i file di configurazione sono in formato JSON e seguono essenzialmente la struttura seguente
{
"timeout": 10000,
"plugins":
[
"SomePluginFactory",
"AnotherPluginFactory",
...
],
"modules":
[
{
"module": "SomePluginInstance",
"factory": "SomePluginFactory",
"config":
{
"someKey": "someValue",
...
}
},
{
"module": "AnotherPluginInstance",
"factory": "AnotherPluginFactory",
"config":
{
"anotherKey": 42,
...
}
},
...
]
}
timeout rappresenta un intervallo di tempo entro il quale si attende l'inizializzazione dei moduli. In caso contrario l'inizializzazione dei singoli moduli viene considerata non riuscita. L'impostazione predefinita di questo parametro è 10.000 ms (10 s).
Nell'elenco "plugins" devono essere indicate le factory (classi) di tutti i moduli utilizzati.
Nell'elenco "modules" vengono poi configurate tutte le istanze di modulo utilizzate sotto forma di oggetti JSON. Per la configurazione di un modulo vale sempre la struttura seguente
{
"module": <Name der Modulinstanz>,
"factory": <Factory bzw. Klasse der Modulinstanz>,
"config" :
{
<Parameter>: <JSON-Wert des Parameters>,
...
}
}
Il valore JSON di un parametro può rappresentare non solo scalari di diversi tipi di dati, ma anche oggetti JSON (strutture) o array JSON (liste).
La configurazione statica /sdi/config/smartcore.json contiene inoltre parametri globali.
File di configurazione esterni (configFile)
Oltre all'oggetto "config", un'istanza di modulo può fare riferimento a un file JSON esterno tramite il parametro opzionale "configFile". Il contenuto di questo file viene letto prima di "config" inline e unito ad esso: in caso di conflitti prevale sempre "config" inline.
{
"module": "motor1",
"factory": "modbus",
"configFile": "motor_base.json",
"config":
{
"address": 5
}
}
Il file motor_base.json contiene direttamente un oggetto JSON con la stessa sintassi di "config":
{
"baudrate": 19200,
"parity": "none",
"stopBits": 1
}
Il risultato dell'unione equivale a:
"config":
{
"baudrate": 19200,
"parity": "none",
"stopBits": 1,
"address": 5
}
Risoluzione del percorso: il percorso viene risolto rispetto alla directory di configurazione /sdi/config/. Sono possibili sottodirectory ("subfolder/motor_base.json"), mentre i percorsi assoluti vengono utilizzati senza modifiche.
Scopo d'uso: i parametri di base comuni (ad es. le proprietà del bus) possono essere salvati in un file e referenziati da più istanze di modulo, senza duplicarli in ogni smartcore_dynamic.json.
Comportamento dell'unione:
- Scalari e oggetti: il valore di
"config"sovrascrive il valore del file. - Array: le voci del file e di
"config"vengono concatenate.
Gestione degli errori: se il file non esiste o contiene JSON non valido, viene scritto un avviso nel log e il file viene ignorato. L'avvio di smartCORE non viene quindi interrotto.
Canale di stato ConfigValid: non appena un'istanza di modulo utilizza "configFile", crea inoltre un canale bool:
System.<factory>.<modulinstanz>.ConfigValid
| Valore | Significato |
|---|---|
true | Tutti i file referenziati sono stati letti e uniti |
false | Almeno un file mancava o conteneva JSON non valido ed è stato ignorato |
Il canale segue lo stesso schema di denominazione del canale ConfigVersion. Viene scritto una sola volta all'avvio del modulo e in seguito non cambia più. I moduli senza "configFile" non creano il canale.
In questo modo, anche in seguito è possibile verificare dal file di misura se una misura è stata eseguita con la configurazione completa: il solo file di log non fornisce una risposta duratura a questa domanda.