Como usar o SCPI no HP33120A via RS232?


9

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?


Não consigo responder a esta pergunta, mas estou interessado nas respostas, para que você possa obter meu voto positivo
Andy, também conhecido como

Como você sabe que não está transmitindo? Você não tem nenhum código para lê-lo. Você já tentou um programa de terminal ou um monitor de porta serial? Ou um osciloscópio?
precisa

Eu tenho o analisador lógico Saleae conectado aos pinos RX / TX e no script Python, há s.readline()função (editei minha pergunta, obrigado).
vasco

Possivelmente uma pergunta relacionada: stackoverflow.com/questions/1093598/…
Szymon Bęczkowski

No seu computador, desative o buffer serial e defina o tamanho do buffer serial como zero. A linha de leitura está bloqueando indefinidamente? (deve ser a partir do que você descreveu)
david

Respostas:


3

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.


11
Informações úteis para mim senhor guruman +1. O que aconteceu com o OP?
Andy aka

1

É 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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.