Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Conectar tu software

Cada instrumento del banco es un socket TCP en 127.0.0.1, en su puerto. Para VISA, el recurso es:

TCPIP0::127.0.0.1::<puerto>::SOCKET

Terminación: los mensajes acaban en salto de línea (\n, 0x0A) en los dos sentidos. Con recursos ::SOCKET, VISA no la pone por defecto: configúrala en tu sesión, o tu software se quedará esperando una respuesta que Crucible no procesa hasta recibir el salto de línea.

PyVISA

Con pip install pyvisa pyvisa-py basta; no hace falta NI-VISA. Este script habla con la fuente y el multímetro del banco de ejemplo:

import pyvisa

rm = pyvisa.ResourceManager("@py")  # o ResourceManager() si usas NI-VISA
opciones = dict(read_termination="\n", write_termination="\n")

fuente = rm.open_resource("TCPIP0::127.0.0.1::5025::SOCKET", **opciones)
dmm = rm.open_resource("TCPIP0::127.0.0.1::5026::SOCKET", **opciones)

print(fuente.query("*IDN?"))
fuente.write("VOLT 5")
fuente.write("OUTP ON")
print(fuente.query("MEAS:CURR?"))  # 5 V sobre la carga de 10 ohmios
print(dmm.query("MEAS:VOLT?"))
$ python3 conectar.py
Crucible,FUENTE-DC,SIM0001,1.0
0.50001
+3.300139E+00

La fuente tiene conectada una carga simulada de 10 Ω, así que a 5 V da medio amperio. El multímetro mide 3,3 V porque el banco de ejemplo se lo fija al arrancar (capítulo 5). El último decimal es ruido gaussiano, que se repite igual cada vez que arrancas el banco (capítulo 7).

NI MAX y LabVIEW

No verificado en este manual.

Añade el instrumento en NI MAX como VISA TCP/IP Resource → Manual Entry of Raw Socket, con host 127.0.0.1 y el puerto del banco. En LabVIEW, al abrir la sesión VISA, activa el carácter de terminación \n (0x0A) para la lectura (Termination Character Enabled) y acaba cada escritura con \n.

Windows, sin instalar nada

Desde PowerShell. Es la misma prueba con la que la integración continua comprueba el instalador de Windows en cada versión:

$c = New-Object Net.Sockets.TcpClient('127.0.0.1', 5025); $s = $c.GetStream()
$w = New-Object IO.StreamWriter($s); $w.AutoFlush = $true; $w.WriteLine('*IDN?')
(New-Object IO.StreamReader($s)).ReadLine(); $c.Close()

Si tu software apunta a las IP del banco real

El software que hoy abre TCPIP0::192.168.1.10::5025::SOCKET, TCPIP0::192.168.1.11::5025::SOCKET… tiene que abrir TCPIP0::127.0.0.1::5025::SOCKET, TCPIP0::127.0.0.1::5026::SOCKET… Cambia las direcciones en su configuración; los puertos los decides tú en el banco.yaml.

Si usa recursos ::INSTR (VXI-11), puedes dejarlos: declara el transporte vxi11 en el banco (ver más abajo) o, si prefieres no complicarte, cámbialos por ::SOCKET.

VXI-11 (::INSTR)

Si tu software no puede cambiar de recurso, pon tipo: vxi11 en el transporte y dale a cada instrumento su IP, como en el banco real:

- id: generador
  perfil: perfiles/n5171b.yaml
  transporte: { tipo: vxi11, host: 127.0.0.2, puerto: 5025, device: inst0 }

- id: fuente
  perfil: perfiles/n5767a.yaml
  transporte: { tipo: vxi11, host: 127.0.0.3, puerto: 5025, device: inst0 }
TCPIP0::127.0.0.2::inst0::INSTR
TCPIP0::127.0.0.3::inst0::INSTR

Que es exactamente la forma del banco físico: cada equipo es una caja con su IP, su portmapper en el UDP 111 y su device inst0. Del banco real al simulado solo cambian las direcciones, ni el puerto ni el device.

En Linux todo 127.x.x.x es local y no hay que configurar nada. En Windows solo responde 127.0.0.1. Allí pon los instrumentos en esa IP, con el mismo puerto, y distínguelos por el device:

transporte: { tipo: vxi11, host: 127.0.0.1, puerto: 5025, device: inst0 }
transporte: { tipo: vxi11, host: 127.0.0.1, puerto: 5025, device: inst1 }

Esa segunda forma es la de un chasis VXI o una pasarela LAN/GPIB: una sola dirección para varios instrumentos. Funciona igual de bien, pero obliga a tocar los recursos de tu software.

Hace falta el puerto UDP 111, que es privilegiado. En Linux, una vez:

sudo setcap 'cap_net_bind_service=+ep' /ruta/a/crucible

En Windows, arranca como administrador. Si no, el banco no arranca y te dice exactamente esto: prefiere no arrancar a anunciar instrumentos que luego no encuentra nadie.

Anvil

El secuenciador Anvil habla SCPI por socket, así que se conecta a Crucible sin nada especial. La guía Anvil mide contra un instrumento de Crucible lo recorre de punta a punta.