Eu tenho um antigo gerador de funções Hewlet Packard 33120A (deve ser do mesmo tipo que o Agilent 33120A ) e gostaria de controlá-lo com o MCU (ATMega). O gerador possui RS232 e usa comandos SCPI.
Criei um conversor simples de RS232 para TTL com MAX232, apenas com linhas RX e TX. De acordo com o manual do usuário (capítulo 4, seção DTR / DSR Handshake Protocol), vinculei o DSR à lógica TRUE (tensão negativa) e o DTR não está conectado. Essa configuração deve desabilitar o handshake de hardware.
Agora, eu posso conectar o conversor ao MCU ou ao computador. No meu primeiro experimento, usei o computador e este script 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()
Isso funciona sem nenhum problema. O gerador ajustou sua saída para 30kHz conforme o esperado. O problema é que, quando tento ler alguma resposta do gerador. Por exemplo, isso deve retornar o nome do dispositivo:
s.write('*IDN?\n')
print s.realine()
Tenho certeza de que a resposta é armazenada no buffer de saída do gerador, mas nenhum dado é realmente transmitido.
Existe algum comando para acionar a transmissão de dados do buffer? Ou preciso ativar o handshake de hardware?
Existe alguém que tenha esse gerador? Você o usa com RS232 e SCPI?
fonte
s.readline()
função (editei minha pergunta, obrigado).Respostas:
A maneira mais fácil de depurar o SCPI pelo RS-232 é usar um programa de terminal com a interface serial existente. Basta digitar o comando e ver o que volta. O terminal permite que você brinque facilmente com caracteres de taxa de transmissão, handshake, eco e terminação sem depender de uma biblioteca de comunicação serial desconhecida no meio (o que você digita é o que envia, o que é recebido é o que é mostrado).
* IDN? não precisa de nenhum gatilho ou solicitação de resposta especial. Se o comando for suportado (de acordo com o manual), se o caractere de terminação estiver correto (o que parece ser, já que seu trabalho anterior em Python teve algum sucesso) e se o handshake estiver correto, o instrumento deverá responder imediatamente com a cadeia de identificação.
Depois de descobrir exatamente o que o instrumento espera e retorna, você pode criar seu script Python com facilidade.
fonte
É mais tarde, mas ...
Tente ligar o DSR à tensão positiva. Meu 33120A só responde se eu fizer isso em vez de ligado a tensão negativa.
Uso o RealTerm com um conversor FTDI USB-RS232 e conecto o CTS (PC) ao DSR (33120a), mas gerenciando (e mantendo) a tensão do CTS através do RealTerm durante as comunicações (existe uma opção para fazer isso no programa).
Saudações.
fonte