Saltar al contenido principal
Artículos técnicos

Controlar un Lake Shore 336 por Ethernet desde Python


Leer temperaturas y lanzar una rampa por red es sencillo. Lo que da guerra es todo lo demás: cuántos programas pueden hablar con el equipo a la vez, qué pasa cuando no responde y cómo se termina cada comando.

El Lake Shore 336 es uno de los controladores de temperatura más habituales en ensayos térmicos y de vacío. En el banco de ensayos de las cámaras de PLATO funcionaban tres a la vez. Esto es lo que conviene saber para manejarlo desde un programa en lugar de desde el panel frontal.

La conexión: un socket TCP en el puerto 7777

Por Ethernet, el 336 escucha en el puerto TCP 7777. No hace falta ninguna librería: basta un socket, enviar el comando como texto y leer hasta el final de línea. Lo primero que se envía es *IDN?; si la respuesta no empieza por LSCI, no estamos hablando con un Lake Shore.

import socket

class LakeShore336:
    def __init__(self, host, port=7777, timeout=3.0):
        self.sock = socket.create_connection((host, port), timeout=timeout)
        self.pendiente = b""

    def write(self, comando):
        self.sock.sendall((comando + "\r\n").encode("ascii"))

    def query(self, comando):
        self.write(comando)
        while b"\r\n" not in self.pendiente:
            trozo = self.sock.recv(1024)
            if not trozo:
                raise ConnectionError("el controlador ha cerrado la conexion")
            self.pendiente += trozo
        linea, self.pendiente = self.pendiente.split(b"\r\n", 1)
        return linea.decode("ascii").strip()

ls = LakeShore336("192.168.1.50")
if not ls.query("*IDN?").startswith("LSCI"):
    raise RuntimeError("no es un Lake Shore")
print(float(ls.query("KRDG? A")))   # temperatura del canal A, en kelvin

KRDG? devuelve la lectura en kelvin y CRDG? en grados Celsius, seguidos del canal (A, B, C o D).

Tres detalles que cuestan horas

Pon siempre un tiempo de espera al conectar. Si el equipo está apagado o la IP es otra, una conexión sin timeout puede quedarse colgada un par de minutos antes de fallar. Con tres segundos el programa avisa enseguida.

Termina todos los comandos. Cada comando debe ir seguido del fin de línea. El equipo no procesa nada hasta recibirlo, así que una consulta sin terminar se queda sin respuesta y el programa esperando. Revisando un driver real encontramos justo eso: una consulta que salía sin él. Centralizar el envío en un solo método, como write() arriba, evita que se escape uno.

Solo admite dos conexiones a la vez. Es el que más sorprende. Si una interfaz gráfica, un registrador de datos y un script de ensayo intentan conectarse cada uno por su cuenta, el tercero falla. La solución que se usó en PLATO, y la que recomendamos, es que un único proceso sea el dueño del equipo y que el resto le pida las lecturas o las órdenes a él.

Rampas y consignas

Para un ciclo térmico se fija la velocidad de rampa, la consigna y el rango del calefactor de la salida que corresponda:

ls.write("RAMP 1,1,2.0")    # salida 1: rampa activada, 2 K/min
ls.write("SETP 1,250.0")    # consigna de la salida 1: 250 K
ls.write("RANGE 1,3")       # calefactor de la salida 1 en rango alto

Antes de dar potencia hay que tener configurado el calefactor (resistencia y corriente máxima, con HTRSET) y unos PID razonables; el 336 tiene autoajuste (ATUNE) para encontrarlos. Después, el programa solo tiene que leer cada pocos segundos, guardar los datos y comprobar que la temperatura sigue a la consigna.

Del script al banco de ensayo

Con esto se tiene un script que funciona. Para un banco de ensayo de verdad falta lo que hace que se pueda dejar solo: reconectar si se corta la red, registrar las temperaturas junto a las del resto de equipos, avisar si algo se sale de rango y encadenar el ciclo térmico con la adquisición. Eso es lo que hacemos a medida para cada laboratorio.

Cuéntanos tus ensayos


Qué equipos tenéis, qué ensayos hacéis y qué os gustaría que hiciera el software. Con eso te decimos cómo lo plantearíamos.

Contactar

Lake Shore, Thorlabs, Keithley, Energetiq, Standa, EKSMA Optics, Symétrie, Pfeiffer Vacuum y el resto de marcas citadas pertenecen a sus respectivos titulares. BLASAI Software no tiene relación comercial con ellos; se nombran solo para indicar con qué equipos hemos trabajado.