Saltar al contenido principal

smiocan

Configuración de los módulos smartIO a través de CAN​

Por lo general, los módulos smartIO se programan y se configuran a través de la interfaz USB integrada. La programación se realiza en producción con las herramientas adecuadas; la configuración, mediante optiCONTROL o un programa de terminal.

Para la familia de dispositivos smartIO basada en un controlador ESP, estas funciones están ahora disponibles también en campo a través del bus CAN. Para ello se utiliza el programa auxiliar

smiocan <options>

disponible desde la línea de comandos en Yocto. El programa requiere una interfaz socket-CAN y, por ello, está disponible también para otras distribuciones de Linux previa solicitud.

¡Solo puede y debe establecerse una única conexión administrativa con el dispositivo al mismo tiempo! El establecimiento de la conexión está protegido mediante un procedimiento seed-key y la password-key del dispositivo, de modo que al menos se puedan validar los componentes de software implicados.

Cualquier intervención administrativa mediante SCPI (serie-USB o CAN) o una carga de firmware puede afectar al procesamiento de datos en el smartIO al que se accede. ¡No se puede garantizar que, mientras dure la comunicación, se respeten exactamente la velocidad de datos ajustada o la cadencia de salida de los mensajes CAN!

Opciones de la línea de comandos​

Mediante las opciones que se pasan al programa en la línea de comandos se pueden invocar ajustes y funciones obligatorios y también opcionales.

ShortLongParámetroDescripciónEjemplo
-h--helpMuestra las opciones de la línea de comandos-h
-p--port<str>Obligatorio: nombre del puerto CAN para establecer la conexión
p. ej. can0, can1, can2, ...
-p can1
-B--baud<uint>[k]Ajuste de la velocidad en baudios; la letra k puede utilizarse para la escala ⋅1000\cdot 1000-B 500k
-G--gpio<uint>Establece el GPIO para activar el hardware CAN
auto: automático según el tipo de dispositivo y el puerto
0x<c><p><l>: con codificación para el chip de E/S <c>, el pin de E/S <p> y la lógica <l>,
p. ej. 0x251 - chip 2, pin 5, logic 1
-G auto
-U--utc<uint>CAN id para la difusión (broadcast) de la hora UTC
(def.: 0x10)
desactivado: 0x0
-U 0x10
-T--txid<uint>Canal ISO-TP+ hacia el smartIO
(def.: 0x11)
-T 0x11
-R--rxid<uint>Canal ISO-TP+ desde el smartIO
(def.: 0x12)
-R 0x12
-d--dump<uint>Vuelca los mensajes CAN en el library-log, máscara de bits combinada con OR de
0x0001: enviados
0x0010: recibidos, interpretados
0x0020: recibidos, desconocidos
0x0100: ISO-TP
0x0200: ISO-TP, ampliación
0x0400: difusión (broadcast) de la hora UTC
-d 0xF00
-E--liblog<str>Salida de los mensajes de la biblioteca a este archivo
(en lugar de cout/cerr)
-E smiocan.log
-e--liblevel<str>Umbral de salida para los mensajes, 0..7 o bien
DEBUG, DUMP, SCPI, SYSTEM, INFO, WARNING, ERROR, FATAL
-e DUMP
-D--devlog<str>Registro de las salidas del dispositivo y de los comandos SCPI-D device.log
-Q--queryConsulta y muestra todos los sistemas smartIO ESP del bus CAN seleccionado
-k--pwkey<uint>Password-key para establecer (automáticamente) la conexión con los dispositivos indicados-k 123456
-H--hello<serno> <pwkey>Abre la conexión con el dispositivo con número de serie y password-key1
Se puede indicar varias veces
-H 24006200025 123456
-c--command<str>Añade un comando a la lista de comandos
Se puede indicar varias veces
-c "*idn?"
-s--script<str>Envía los comandos del archivo de script-s batch.txt
-x--xfwimage<str>Secuencia ampliada para la actualización automatizada del firmware del dispositivo-x newFW.bin
-i--interactiveInicia el modo interactivo para configurar el dispositivo

Para la ejecución de secuencias de comandos rige el siguiente orden:

  1. Todos los comandos definidos con -c
  2. Todos los comandos del archivo de script / batch indicado con -s
  3. La secuencia de comandos para la actualización del firmware -x
  4. Cambio al modo interactivo -i

Comandos de ejecución​

En el modo interactivo y en el script se pueden utilizar comentarios después de // en cada línea.

Todos los comandos de la opción -c, del archivo de script -s o del modo interactivo se envían al smartIO como comando SCPI, siempre que no pertenezcan al conjunto de comandos reservados que se enumera a continuación:

ComandoParámetroDescripción
helpMuestra los comandos de ejecución disponibles con su descripción
quitCierra la conexión y finaliza la aplicación
queryEjecuta la consulta de dispositivos, como '-Q'
open[<serno> [<pwkey>]]Abre un smartIO determinado, como '-H',
los parámetros omitidos se completan con el valor utilizado anteriormente.
select(help/[:<term>:])Consultas de selección sobre la respuesta del dispositivo a *idn?,
help solo puede ejecutarse si existe una conexión con un dispositivo.
close[<serno>]Cierra la conexión actual o una conexión determinada
nextEstablece la conexión con el siguiente dispositivo de la lista ('-Q', '-H').
reset[<serno>]Ejecuta un RESET en todos los dispositivos smartIO o en un dispositivo determinado.
upload<path> [<mode>]Carga una nueva imagen de firmware en el dispositivo y, para mode =
flash: solo grabar en flash
active: grabar en flash y activar
auto: grabar en flash, activar y reset (def.)
sleep<uint>Retrasa la ejecución posterior el tiempo definido en milisegundos, p. ej. para un reinicio del dispositivo que se haya desencadenado
filter[:<code>:]Lista de filtros para las salidas de depuración

Telegrama de hora UTC​

Durante el acceso administrativo al dispositivo conviene ajustar correctamente la hora del dispositivo. Esto se hace automáticamente mediante el telegrama de hora UTC, que smiocan distribuye periódicamente a todos los smartIO tras el inicio, primero 10 veces a ritmo de un segundo y después una vez por minuto. Al establecer el ID del telegrama en 0, la función se desactiva.

Modo interactivo​

En el modo interactivo se pueden enviar directamente al smartIO comandos SCPI para consultar y ajustar las funciones del dispositivo. Esto equivale a la interfaz de terminal a través de la conexión USB, salvo por la función de edición y el historial de la línea de comandos, que no están disponibles.

Para ello, los comandos se envían como bloque al smartIO a través de la interfaz ISO-TP+ al finalizar la entrada de la línea. La respuesta se recoge allí y se devuelve en bloque a smiocan. Por este motivo, no se admiten a través de esta interfaz comandos SCPI especiales, como p. ej. *REPeat, que generan una salida continua en el terminal.

El prompt de la línea de comandos contiene la interfaz CAN utilizada y el estado de la conexión (si no hay conexión) o bien el número de serie y la versión de firmware del dispositivo seleccionado.

Un ejemplo1 de consulta y ajuste interactivos del tipo de medición y del rango de medición de un módulo smartIO 8x24:

root@smartrail-8037:~# smiocan -p can1 -H 24006200011 123456 -i
can1[24006200011,1.35]: *idn?
optiMEAS, smartIO, 8X24, 1, 24006200011, 1.35, 0, Dec 5 2024 13:52:28, 202400301
can1[24006200011,1.35]: adc:cur? all
0: 0
1: 0
2: 0
3: 0
4: 0
5: 0
6: 0
7: 0
can1[24006200011,1.35]: adc:cur 4, 1; adc:cur 5,1
OK
OK
can1[24006200011,1.35]: adc:cur? all
0: 0
1: 0
2: 0
3: 0
4: 1
5: 1
6: 0
7: 0
can1[24006200011,1.35]: adc:gai? all
0: 1
1: 1
2: 1
3: 1
4: 1
5: 1
6: 1
7: 1
can1[24006200011,1.35]: adc:gai 1,8; adc:gai 3,4; adc:gai 6,8
OK
OK
OK
can1[24006200011,1.35]: adc:gai? all
0: 1
1: 8
2: 1
3: 4
4: 1
5: 1
6: 8
7: 1
can1[24006200011,1.35]: close
can1[csDisabled]: quit
root@smartrail-8037:~#

Selección de dispositivos para la administración «select»​

En cuanto se seleccionan varios o todos los smartIO desde la línea de comandos mediante -Q y -k o -H, los comandos definidos o el archivo de script se aplican uno tras otro a todos los dispositivos. Esto hace necesario volver a restringir mediante un filtro los dispositivos que se van a administrar, p. ej. según el número de serie, la versión de firmware o la fecha de producción.

Para ello, el comando select ejecuta primero una consulta *idn? en el dispositivo. La respuesta podría tener el siguiente aspecto:

optiMEAS, smartIO, 8X24, 1, 24006200011, 1.35, 0, Dec 5 2024 13:52:28, 202400301

Los distintos campos de datos de la respuesta se asignan de la siguiente manera:

KeyValueTipoDescripción
compoptiMEAS<str>Fabricante
fwdDec 5 2024 13:52:28<datetime>Fecha del firmware
fwv1.35<float>Versión del firmware
hwv0<float>Versión del hardware
model8X24<str>Denominación del modelo
prod202400301<datetime>Fecha de producción
serno24006200011<uint>Número de serie
typesmartIO<str>Familia/tipo de dispositivo
var1<uint>Variante del dispositivo

El comando select recibe ahora una lista de argumentos individuales, que deben separarse entre sí con espacios o tabuladores.

Si el primer argumento es help, se muestra como ayuda la asignación de la respuesta actual de los dispositivos disponibles junto con la sintaxis aquí descrita.

can1[24006200011,1.35]: select help
optiMEAS, smartIO, 8X24, 1, 24006200011, 1.35, 0, Dec 5 2024 13:52:28, 202400301
select [:<terms>:]
Process the <terms> list finding a positive decision to continue the script.
Therefore <terms> are implicitly connected with && (AND) unless an || (OR) is placed.
If the condition fails, the command sequence is terminated and execution is restarted
on the next device
The command first request the device idn-string and parses it for its components:
e.g.: 'optiMEAS, smartIO, 8X24, 1, 24006200011, 1.35, 0, Dec 5 2024 13:52:28, 202400301'
<key> = <value> interpreted as...
----- ---------------- -----------------
comp 'optiMEAS' <string>
fwd 'Dec 5 2024 13:52:28' <date[time]>
fwv '1.35' <float>
hwv '0' <float>
model '8X24' <string>
prod '202400301' <date[time]>
serno '24006200011' <unsigned int>
type 'smartIO' <string>
var '1' <unsigned int>
A term is either
- of the format <key> <op> <value> (use always white space as sep!)
- a single '||' to logically OR the implicit &&-sequences
- a single '&&' which is ignored being the default link of the comparing terms anyhow.
For strings <op> is one of '==', '!=', value is a case insensitive regular expression
For all numeric types <op> is one of '<' '<=' '==' '!=' '>=' '>', value is of same type as key
Valid <date> formats are any of: 'Oct 28 2024', '10/28/2024', '28.10.2024', '2024-10-28', '20241028'
Valid optional time extensions are: '<date> 13:29:37', '<date> 132937', '<date> 13:29', '<date> 1329'

Un argumento puede ser un operador booleano && (Y) o || (O). El operador || enlaza los términos unidos con && (forma normal disyuntiva).

Tres argumentos consecutivos forman términos de comparación de valores que dan un resultado booleano (false/true). Un término de este tipo tiene siempre la siguiente estructura:

<term> := <key> <op> <value>

Se pueden indicar varios términos uno tras otro. Los resultados individuales se enlazan implícitamente con && si no se indica ningún operador booleano.

La clave <key> debe tomarse de la tabla anterior (o de la ayuda) y es el marcador de posición del valor correspondiente de la consulta *idn?.

Para el tipo de datos <str> solo deben utilizarse como operador <op> los operadores de comparación == (igual) y != (distinto). Para ello, <value> se considera una expresión regular2 (sin distinguir mayúsculas de minúsculas), que debe ir entre comillas.

Para todos los demás tipos de datos se admiten los operadores habituales <, <=, ==, !=, >= y >, y <value> corresponde al tipo de datos de la clave.

Las fechas válidas son: Oct 28 2024, 10/28/2024, 28.10.2024, 2024-10-28 y 20241028, que, después de un espacio, se pueden completar opcionalmente con una hora de la forma 13:29:37, 132937, 13:29 o 1329. Si esta fecha u hora contiene a su vez un espacio, debe ir entre comillas.

En cuanto el resultado de las comparaciones y de los operadores booleanos da un resultado unívoco, si es true se ejecuta el siguiente comando de la secuencia de comandos; si es false, se interrumpe la ejecución de la secuencia de comandos y se cierra la conexión con el dispositivo. Se establece la conexión con el siguiente smartIO encontrado (-Q) o listado (-H) para ejecutar de nuevo la misma secuencia de comandos. Encadenando varios comandos select, la selección para la administración puede restringirse cada vez más.

Ejemplos de instrucciones select:

// alle Geräte mit Firmware-Version vor 1.3
select fwv < 1.3

// alle Geräte mit 8 Kanälen und Produktionsdatum vor Juni 2024
select model == "8x.*" prod < 20240601

// alle "smartIO" mit Hardwareversion ab 2 oder Firmware ab 1.60
select type == "smartIO"
select hwv >= 2 || fwv >= 1.6

Actualización del firmware del dispositivo «-x, --xfwimage»​

Para cargar un nuevo firmware en un dispositivo smartIO se necesita, por un lado, la nueva imagen de firmware, que se suministra en forma de archivo *.bin y se guarda temporalmente, p. ej., en la tarjeta SD externa o en la unidad temporal, y, por otro, una conexión CAN estable con el dispositivo. La transmisión del firmware se supervisa, de modo que no puedan instalarse en el dispositivo software incompleto, defectuoso o no validado. Sin embargo, como la transmisión puede durar algunos minutos, conviene disponer de una conexión estable.

Durante la transmisión pueden continuar el resto del funcionamiento de medición y la comunicación a través del bus CAN. Todos los ajustes del dispositivo y la calibración de fábrica se conservan tras la actualización, a menos que, por cambios en el conjunto de funciones del nuevo firmware, algunos ajustes resulten superfluos o se implementen de otra forma.

Se recomienda registrar en un archivo de registro la comunicación con cada dispositivo durante la actualización del firmware, p. ej. -D fwUpdate.log

Con la opción -x o --xfwimage se ejecuta la siguiente secuencia de comandos para instalar el firmware en el dispositivo y registrar la información de estado antes y después del proceso de actualización:

*idn?
update:info?
system:admin 1,<pwkey>
upload "<path>" active
update:info?
reset <serno>
sleep 1500
open
update:info?
close // only non-interactive mode
next // only non-interactive mode

Ejemplos de aplicación​

Actualización del firmware de todos los dispositivos​

El ejemplo carga una nueva imagen de firmware theNewFirmwareImage.bin en todos los dispositivos del bus CAN can1 y registra el resultado en el archivo fwUpdate.log

smiocan -p can1 -Q -k 123456 -D fwUpdate.log -x theNewFirmwareImage.bin

Configuración para sensores individuales​

Para un smartIO 8x24 se prepara un archivo comentado para configurar los ajustes de los canales y del bus CAN. Para asegurarse de que este archivo se aplique exclusivamente en el sistema montado en el armario de control, se comprueba el número de serie al principio.

Los comentarios contienen indicaciones sobre los rangos de medición, la linealización, o también denominaciones o números de serie de los sensores conectados.

Contenido del archivo config_target24006200011.txt:

// no other device!
select serno == 24006200011

// Clear all channel settings
adc:cur all, 0 // Voltage mode
adc:gai all, 1 // Gain 1 -> +-160V
adc:pol all, 0 // no linearization
adc:uni all, - // use default units 'V', 'mA'

// [0] channel 1: Voltage +-10V, no linearisation
adc:cur 0, 0; adc:gai 0, 16

// [1] channel 2: Volumetric Sensor, Voltage +-10V,
// linearization from datasheet: V = 0.5 u^2 + 3.16 u - 0.889
adc:cur 1, 0; adc:gai 1, 16; adc:pol 1, 0.5, 3.16, 0.889; adc:uni 1, "m^3"

// [2] channel 3: Current, LEM connector, 400 A at 150 mA
// scale := 400 A/150 mA = 2.6667 A/mA, offset := 0
adc:cur 2, 1; adc:gai 2, 1; adc:pol 2, 2.6667, 0; adc:uni 2, "A"

// [3] channel 4: Current, LEM connector, 1500 A at 100 mA
// scale := 15.0 A/mA, offset := 0
adc:cur 3, 1; adc:gai 3, 2; adc:pol 3, 15.0, 0; adc:uni 3, "A"

// [4] channel 5: High Voltage, 0 .. 5V -> 10 .. 25 kV
// scale := 5.0 kV/V,
// offset at 0 V-input := 10.0 kV
adc:cur 4, 0; adc:gai 4, 32; adc:pol 4, 5.0, 10.0; adc:uni 4, "kV"

// [5] channel 6: Pressure Sensor, 4 .. 20mA -> 0 .. 25 hPa
// scale := 25 hPa/16 mA = 1.5625 hPa/mA,
// offset at 0 mA-input := -4 mA * scale = -6.25 hPa
adc:cur 5, 1; adc:gai 5, 8; adc:pol 5, 1.5625, -6.25; adc:uni 5, "hPa"

// Filter Settings:
adc:tau 0.05

// Default (factory) Setup for CAN Messages
can:fac 0x636C7246

// Query and Log settings:
adc:cur? all
adc:gai? all
adc:pol? all
adc:uni? all
adc:tau?
can:msg? all

Transmisión del archivo de configuración al dispositivo:

smiocan -p can1 -H 24006200011 123456 -D devConfig.log -s config_target24006200011.txt

Footnotes​

  1. La password-key se puede obtener de optiMEAS previa solicitud y debe tratarse de forma confidencial. La clave puede modificarse posteriormente. ↩ ↩2

  2. Aquí se encuentra una útil herramienta para construir expresiones regulares. ↩