En el banco de ensayos de PLATO, el DAQ6510 medía temperaturas con sondas PT100 a cuatro hilos. Aquí va lo necesario para hacer lo mismo desde Python, sin más librerías que un socket.
La conexión: SCPI sobre TCP, puerto 5025
El equipo acepta comandos SCPI en el puerto TCP 5025, uno por línea y terminados en salto de línea:
import socket
class DAQ6510:
def __init__(self, host, port=5025, timeout=60):
self.sock = socket.create_connection((host, port), timeout=timeout)
self.lector = self.sock.makefile("rb")
def write(self, comando):
self.sock.sendall((comando + "\n").encode("ascii"))
def query(self, comando):
self.write(comando)
return self.lector.readline().decode("ascii").strip()
daq = DAQ6510("192.168.1.60")
print(daq.query("*IDN?"))
Configurar los canales
Cada ajuste se aplica a una lista de canales. Para cinco PT100 a cuatro hilos en los canales 101 a 105 de la tarjeta:
canales = "(@101:105)"
daq.write("*RST")
daq.write(f'SENS:FUNC "TEMP", {canales}')
daq.write(f"SENS:TEMP:TRAN FRTD, {canales}") # RTD a cuatro hilos
daq.write(f"SENS:TEMP:RTD:FOUR PT100, {canales}")
daq.write(f"SENS:TEMP:UNIT CELS, {canales}")
Con termopares cambia el transductor (SENS:TEMP:TRAN TC) y se indica el tipo (SENS:TEMP:TC:TYPE K, por ejemplo). El resto del flujo es igual.
Escanear y leer el buffer
Las lecturas no se piden una a una: se define un escaneo (qué canales, cuántas veces y cada cuánto), se lanza y después se recoge todo del buffer.
daq.write('TRAC:MAKE "ensayo", 10000')
daq.write('ROUT:SCAN:BUFF "ensayo"')
daq.write(f"ROUT:SCAN:CRE {canales}")
daq.write("ROUT:SCAN:COUN:SCAN 10") # 10 pasadas...
daq.write("ROUT:SCAN:INT 5") # ...cada 5 segundos
daq.write("INIT")
daq.write("*WAI")
n = int(daq.query('TRAC:ACT? "ensayo"'))
datos = daq.query(f'TRAC:DATA? 1, {n}, "ensayo", CHAN, TST, READ')
# canal, marca de tiempo y lectura, separados por comas
Los errores típicos
El timeout tiene que cubrir el escaneo entero. *WAI hace que el equipo no conteste a nada hasta terminar. Con 10 pasadas cada 5 segundos, la consulta siguiente tarda casi un minuto: si el programa espera menos, da error aunque todo vaya bien. La regla es timeout > pasadas × intervalo + lo que dura una pasada.
Un buffer con un nombre que ya existe da error. Si el programa crea siempre el mismo buffer al arrancar, la segunda vez el panel muestra el error 1115. O se borra antes (TRAC:DEL "ensayo") o se reutiliza vaciándolo (TRAC:CLE).
Una respuesta vacía no es una temperatura. Si la red se corta a mitad de lectura, lo que llega puede estar incompleto. Hay que comprobar cada respuesta antes de guardarla y reintentar, en lugar de registrar un valor falso.
Del script al banco de ensayo
En un banco real, este escaneo corre en bucle durante horas o días, sus datos se guardan junto a los de los controladores de temperatura y el resto de equipos, y alguien tiene que enterarse si un canal se dispara. Eso es lo que construimos a medida.