Tengo el antiguo generador de funciones Hewlet Packard 33120A (debería ser del mismo tipo que Agilent 33120A ) y me gustaría controlarlo con MCU (ATMega). El generador tiene RS232 y usa comandos SCPI.
Hice un simple convertidor de RS232 a TTL con MAX232, solo con líneas RX y TX. De acuerdo con la Guía del usuario (capítulo 4, sección DTR / DSR Handshake Protocol), relacioné el DSR con la lógica VERDADERO (voltaje negativo) y el DTR no está conectado. Esta configuración debería deshabilitar el protocolo de enlace de hardware.
Ahora, puedo conectar el convertidor a MCU o computadora. Para mi primer experimento utilicé la computadora y este script de Python:
import serial, sys, time
if __name__ == '__main__':
if len(sys.argv) < 2:
print 'Usage: %s <serial_port>' % sys.argv[0]
sys.exit(1)
s = serial.Serial(port=sys.argv[1], baudrate=2400, bytesize=8, parity='N', stopbits=2, timeout=None, xonxoff=0, rtscts=0)
time.sleep(0.5)
s.write('\n*CLS\n')
time.sleep(0.5)
s.write('SYST:REM\n')
time.sleep(0.5)
s.write('APPL:SIN 30E+3, 0.1\n')
s.close()
Esto funciona sin ningún problema. El generador estableció su salida a 30kHz como se esperaba. El problema es que cuando intento leer alguna respuesta del generador. Por ejemplo, esto debería devolver el nombre del dispositivo:
s.write('*IDN?\n')
print s.realine()
Estoy bastante seguro de que la respuesta se almacena en el búfer de salida del generador, pero en realidad no se transmiten datos.
¿Hay algún comando para activar la transmisión de datos desde el búfer? ¿O necesito habilitar el apretón de manos de hardware?
¿Hay alguien que tenga este generador? ¿Lo usas con RS232 y SCPI?
fuente
s.readline()
función (edité mi pregunta, gracias).Respuestas:
La forma más fácil de depurar SCPI sobre RS-232 es utilizar un programa de terminal con su interfaz serial existente. Simplemente escriba el comando y vea qué regresa. El terminal le permite manipular con bastante facilidad los caracteres de velocidad de transmisión, apretón de manos, eco y terminación sin depender de una biblioteca de comunicación serial desconocida en el medio (lo que escribe es lo que envía, lo que se recibe es lo que se muestra).
* IDN? no necesita ningún disparador especial o solicitud de respuesta. Si el comando es compatible (de acuerdo con el manual, lo es), si el carácter de terminación es correcto (lo que parece ser, ya que su trabajo anterior de Python tuvo algún éxito) y si el apretón de manos es correcto, el instrumento debe responder inmediatamente con La cadena de identificación.
Una vez que descubra exactamente lo que el instrumento espera y devuelve, puede crear su script Python con facilidad.
fuente
Es mas tarde pero ...
Intente vincular DSR a voltaje positivo. Mi 33120A solo responde si lo hago en lugar de estar conectado a un voltaje negativo.
Uso RealTerm con un convertidor FTDI USB-RS232 y conecto CTS (PC) a DSR (33120a) pero gestiono (y mantengo) el voltaje de CTS a través de RealTerm durante las comunicaciones (hay una opción para hacerlo en el programa).
Saludos.
fuente