Crear tu banco
Un banco es una carpeta con esta forma:
mi_banco/
├── banco.yaml ← qué instrumentos hay y en qué puerto
└── perfiles/
├── fuente_xyz.yaml ← un perfil por MODELO de instrumento
└── dmm_abc.yaml
Empezar copiando el de ejemplo
Lo más rápido es partir del banco de ejemplo y cambiarlo:
-
Linux:
$ cp -r /usr/share/crucible/banco ~/mi_banco $ cd ~/mi_banco -
Windows: menú Inicio → Crucible → Abrir carpeta del banco, y edita ahí o copia la carpeta a otro sitio.
Desde esa carpeta, crucible sin argumentos arranca tu banco: es el primer
sitio donde busca.
banco.yaml
Este es el del ejemplo:
# Banco de ejemplo de Crucible.
#
# Un banco es la lista de instrumentos que se simulan a la vez. Cada uno apunta
# a su perfil (qué instrumento es y cómo responde) y dice en qué puerto escucha.
#
# Para tu banco: copia esta carpeta, añade un perfil por cada modelo de
# instrumento y una entrada por cada unidad física. Dos unidades del mismo
# modelo comparten perfil, pero cada una necesita su propio puerto.
#
# Comprueba el banco sin arrancarlo: crucible --validar banco.yaml
# Arráncalo: crucible banco.yaml
banco:
nombre: banco-de-ejemplo
dispositivos:
- id: fuente
perfil: perfiles/fuente_dc.yaml
transporte: { tipo: tcp, puerto: 5025 }
- id: multimetro
perfil: perfiles/multimetro.yaml
transporte: { tipo: tcp, puerto: 5026 }
# Se puede cambiar el estado de arranque de una unidad sin tocar su perfil.
estado_inicial:
tension_entrada: 3.3
- id: smu
perfil: perfiles/keithley_2400_demo.yaml
transporte: { tipo: tcp, puerto: 5027 }
Cada entrada de dispositivos es una unidad:
| Campo | Qué es |
|---|---|
id | Un nombre para ti. Sale en la tabla del arranque y en los errores. |
perfil | El perfil del instrumento, con la ruta relativa a banco.yaml. |
transporte | Por dónde escucha: { tipo: tcp, puerto: 5025 }. Hoy tipo solo puede ser tcp. |
estado_inicial | Opcional. Valores que sustituyen a los de estado del perfil solo para esta unidad. |
Dos unidades del mismo modelo comparten perfil y cambian de puerto, y si
hace falta, de estado_inicial:
- id: dmm_entrada
perfil: perfiles/dmm_abc.yaml
transporte: { tipo: tcp, puerto: 5026 }
- id: dmm_salida
perfil: perfiles/dmm_abc.yaml
transporte: { tipo: tcp, puerto: 5027 }
estado_inicial:
tension_entrada: 12.0
Validar antes de arrancar
$ crucible --validar banco.yaml
banco.yaml es válido:
ID MODELO RECURSO VISA
fuente FUENTE-DC TCPIP0::127.0.0.1::5025::SOCKET
multimetro MULTIMETRO TCPIP0::127.0.0.1::5026::SOCKET
smu KEITHLEY-2400 TCPIP0::127.0.0.1::5027::SOCKET
--validar carga el banco y todos sus perfiles, comprueba patrones, fórmulas y
puertos, y enseña la tabla de recursos sin abrir ningún puerto, así que
puedes usarlo con el banco arrancado. Hazlo cada vez que edites un YAML: los
errores dicen qué fichero, qué comando y qué está mal.
Cada instrumento necesita su puerto. Con este banco, que repite el 5025:
banco:
nombre: dos-fuentes
dispositivos:
- id: fuente_a
perfil: perfiles/fuente_dc.yaml
transporte: { tipo: tcp, puerto: 5025 }
- id: fuente_b
perfil: perfiles/fuente_dc.yaml
transporte: { tipo: tcp, puerto: 5025 }
$ crucible --validar puerto_repetido.yaml
error: 'fuente_a' y 'fuente_b' usan los dos 127.0.0.1:5025; cada instrumento necesita su puerto
Tres reglas que conviene conocer
Si un perfil tiene un error, el banco entero no arranca. Es a propósito: un banco al que le falta un instrumento daría resultados falsos sin que nadie se enterase.
*RST devuelve la unidad a los valores del perfil, no a los de
estado_inicial. El multímetro del ejemplo arranca con 3,3 V en los bornes,
pero tras un *RST mide 0 V (lo verás en el capítulo 8). Si tu software manda
*RST al empezar, fija el valor en el perfil o vuelve a fijarlo por SCPI
después.
Una variable mal escrita en estado_inicial no da error. Aquí
tension_entarda no existe en el perfil del multímetro, y aun así:
banco:
nombre: errata
dispositivos:
- id: dmm
perfil: perfiles/multimetro.yaml
transporte: { tipo: tcp, puerto: 5030 }
estado_inicial:
tension_entarda: 12.0
$ crucible --validar errata.yaml
errata.yaml es válido:
ID MODELO RECURSO VISA
dmm MULTIMETRO TCPIP0::127.0.0.1::5030::SOCKET
El multímetro arrancará midiendo 0 V. Si una unidad no arranca con el valor que esperabas, revisa primero cómo has escrito el nombre.