Bagaimana cara menggunakan SCPI pada HP33120A via RS232?

9

Saya memiliki generator fungsi Hewlet Packard 33120A lama (harus sama dengan Agilent 33120A ) dan saya ingin mengendalikannya dengan MCU (ATMega). Generator memiliki RS232 dan menggunakan perintah SCPI.

Saya membuat RS232 to TTL converter sederhana dengan MAX232, hanya dengan jalur RX dan TX. Menurut panduan Pengguna (bab 4, bagian DTR / DSR Handshake Protocol) saya mengikat DSR ke logika TRUE (tegangan negatif) dan DTR tidak terhubung. Konfigurasi ini harus menonaktifkan jabat tangan perangkat keras.

Sekarang, saya dapat menghubungkan konverter ke MCU atau ke komputer. Untuk percobaan pertama saya, saya menggunakan komputer dan skrip Python ini:

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()

Ini berfungsi tanpa masalah. Generator menetapkan output ke 30kHz seperti yang diharapkan. Masalahnya adalah, ketika saya mencoba membaca beberapa respons dari generator. Misalnya, ini harus mengembalikan nama perangkat:

        s.write('*IDN?\n')
        print s.realine()

Saya cukup yakin responsnya disimpan dalam buffer output generator tetapi tidak ada data yang benar-benar dikirim.

Apakah ada perintah untuk memicu pengiriman data dari buffer? Atau apakah saya perlu mengaktifkan jabat tangan perangkat keras?

Adakah yang punya generator ini? Apakah Anda menggunakannya dengan RS232 dan SCPI?

vasco
sumber
Saya tidak bisa menjawab pertanyaan ini, tetapi saya tertarik dengan jawaban itu sehingga Anda mendapatkan suara saya
Andy alias
Bagaimana Anda tahu itu tidak mentransmisikan? Anda tidak memiliki kode di sana untuk membacanya. Sudahkah Anda mencoba program terminal atau monitor port serial? Atau osiloskop?
Jeanne Pindar
Saya memiliki penganalisa logika Saleae yang terhubung ke pin RX / TX dan dalam skrip Python, ada s.readline()fungsi (saya mengedit pertanyaan saya, terima kasih).
vasco
Mungkin pertanyaan terkait: stackoverflow.com/questions/1093598/…
Szymon Bęczkowski
Di komputer Anda, Matikan buffer serial, dan atur ukuran buffer serial ke nol. Apakah pemblokiran readline tanpa batas? (Itu harus dari apa yang telah Anda uraikan)
david

Jawaban:

3

Cara termudah untuk men-debug SCPI melalui RS-232 adalah dengan menggunakan program terminal dengan antarmuka serial yang ada. Cukup ketik perintah dan lihat apa yang muncul kembali. Terminal memungkinkan Anda untuk dengan mudah mengutak-atik baud rate, jabat tangan, gema dan karakter terminasi tanpa bergantung pada beberapa perpustakaan komunikasi serial yang tidak dikenal di antaranya (apa yang Anda ketik adalah apa yang Anda kirim, apa yang diterima adalah apa yang ditampilkan).

* IDN? tidak memerlukan pemicu atau prompt khusus untuk respons. Jika perintah didukung (sesuai dengan manual, itu benar), jika karakter terminasi benar (yang tampaknya, karena pekerjaan Python Anda sebelumnya berhasil) dan jika jabat tangan benar, instrumen harus segera merespons dengan string identifikasi.

Setelah Anda mengetahui dengan tepat apa yang diharapkan dan dikembalikan instrumen, Anda kemudian dapat membuat skrip Python Anda dengan mudah.

Adam Lawrence
sumber
1
Info yang berguna untuk saya tuan guruman +1. Apa yang terjadi pada OP?
Andy alias
1

Ini nanti tapi ...

Cobalah untuk mengikat DSR ke voltase positif. 33120A saya hanya merespons jika saya melakukan itu di tempat yang terikat pada tegangan negatif.

Saya menggunakan RealTerm dengan konverter FTDI USB-RS232, dan melampirkan CTS (PC) ke DSR (33120a) tetapi mengelola (dan menahan) tegangan CTS melalui RealTerm selama komunikasi (Ada pilihan untuk melakukan itu dalam program).

Salam.

jm sc
sumber