Saltar al contenido principal

Configuración

Resumen​

En esta sección se explica la configuración del smartCORE por parte del usuario.

Estructura de la configuración​

La configuración del software smartCORE consta básicamente de dos archivos de configuración almacenados en el Edge Device,

  • la configuración estática /sdi/config/smartcore.json, así como
  • la configuración dinámica (o configuración de medición específica de la aplicación) /sdi/config/smartcore_dynamic.json

Ambos archivos de configuración son JSON en cuanto a su contenido y responden básicamente a la siguiente estructura

{
"timeout": 10000,
"plugins":
[
"SomePluginFactory",
"AnotherPluginFactory",

...
],
"modules":
[
{
"module": "SomePluginInstance",
"factory": "SomePluginFactory",
"config":
{
"someKey": "someValue",

...
}
},
{
"module": "AnotherPluginInstance",
"factory": "AnotherPluginFactory",
"config":
{
"anotherKey": 42,

...
}
},

...
]
}

Aquí, timeout representa un intervalo de tiempo dentro del cual se espera a la inicialización de los módulos. De lo contrario, la inicialización de cada módulo se considera fallida. El valor predeterminado de este parámetro es de 10.000 ms (10 s).

En la lista "plugins" deben enumerarse las factories (clases) de todos los módulos utilizados.

En la lista "modules" se configuran entonces todas las instancias de módulo utilizadas en forma de objetos JSON. Para la configuración de un módulo rige siempre la siguiente estructura

{
"module": <Name der Modulinstanz>,
"factory": <Factory bzw. Klasse der Modulinstanz>,
"config" :
{
<Parameter>: <JSON-Wert des Parameters>,

...
}
}

El valor JSON de un parámetro puede representar no solo escalares de distintos tipos de datos, sino también objetos JSON (estructuras) o arrays JSON (listas).

La configuración estática /sdi/config/smartcore.json contiene además parámetros globales.

Archivos de configuración externos (configFile)​

Además del objeto "config", una instancia de módulo puede hacer referencia a un archivo JSON externo mediante el parámetro opcional "configFile". El contenido de este archivo se lee antes que el "config" en línea y se fusiona con él; en caso de conflicto, el "config" en línea siempre prevalece.

{
"module": "motor1",
"factory": "modbus",
"configFile": "motor_base.json",
"config":
{
"address": 5
}
}

El archivo motor_base.json contiene directamente un objeto JSON con la misma sintaxis que "config":

{
"baudrate": 19200,
"parity": "none",
"stopBits": 1
}

El resultado de la fusión equivale a:

"config":
{
"baudrate": 19200,
"parity": "none",
"stopBits": 1,
"address": 5
}

Resolución de rutas: la ruta se resuelve en relación con el directorio de configuración /sdi/config/. Se admiten subdirectorios ("subfolder/motor_base.json"); las rutas absolutas se utilizan sin modificar.

Finalidad de uso: los parámetros base comunes (p. ej., las propiedades del bus) pueden guardarse en un archivo y ser referenciados por varias instancias de módulo, sin duplicarlos en cada smartcore_dynamic.json.

Comportamiento de la fusión:

  • Escalares y objetos: el valor de "config" sobrescribe el valor del archivo.
  • Arrays: las entradas del archivo y de "config" se concatenan.

Gestión de errores: si el archivo no existe o contiene JSON no válido, se escribe una advertencia en el registro y se omite el archivo. El inicio del smartCORE no se interrumpe por ello.

Canal de estado ConfigValid: en cuanto una instancia de módulo utiliza "configFile", crea además un canal Bool:

System.<factory>.<modulinstanz>.ConfigValid
ValorSignificado
trueTodos los archivos referenciados se han leído y fusionado
falseAl menos un archivo faltaba o contenía JSON no válido y se ha omitido

El canal sigue el mismo esquema de nombres que el canal ConfigVersion. Se escribe una sola vez al iniciarse el módulo y después ya no cambia. Los módulos sin "configFile" no crean el canal.

De este modo, también más adelante puede comprobarse en el archivo de medición si una medición se ha realizado con la configuración completa; el archivo de registro por sí solo no responde de forma duradera a esta pregunta.