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.