Как использовать SCPI на HP33120A через RS232?

9

У меня есть старый генератор функций Hewlet Packard 33120A (он должен быть того же типа, что и Agilent 33120A ), и я хотел бы управлять им с помощью MCU (ATMega). Генератор имеет RS232 и использует команды SCPI.

Я сделал простой конвертер RS232 в TTL с MAX232, просто с линиями RX и TX. Согласно руководству пользователя (глава 4, раздел DTR / DSR Handshake Protocol) я связал DSR с логической ИСТИНОЙ (отрицательное напряжение), а DTR не подключен. Эта конфигурация должна отключить аппаратное рукопожатие.

Теперь я могу подключить конвертер к MCU или к компьютеру. Для моего первого эксперимента я использовал компьютер и этот скрипт на 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()

Это работает без проблем. Генератор установил свою мощность на 30 кГц, как и ожидалось. Проблема в том, когда я пытаюсь прочитать ответ от генератора. Например, это должно вернуть имя устройства:

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

Я почти уверен, что ответ хранится в выходном буфере генератора, но данные на самом деле не передаются.

Есть ли команда для запуска передачи данных из буфера? Или мне нужно включить аппаратное рукопожатие?

Есть ли у кого этот генератор? Вы используете его с RS232 и SCPI?

Васко
источник
Я не могу ответить на этот вопрос, но мне интересны ответы, поэтому вы получили мой положительный голос
Энди,
Откуда ты знаешь, что это не передача? У вас нет кода, чтобы прочитать его. Вы пробовали терминальную программу или монитор последовательного порта? Или осциллограф?
Жанна Пиндар
У меня есть логический анализатор Saleae , подключенный к контактам RX / TX, и в скрипте Python есть s.readline()функция (я отредактировал свой вопрос, спасибо).
Васко
Возможно связанный вопрос: stackoverflow.com/questions/1093598/…
Szymon Bęczkowski
На вашем компьютере отключите последовательную буферизацию и установите нулевой размер последовательного буфера. Не блокируется ли readline на неопределенный срок? (это должно быть из того, что вы описали)
Дэвид

Ответы:

3

Самый простой способ отладки SCPI через RS-232 - использовать терминальную программу с существующим последовательным интерфейсом. Просто введите команду и посмотрите, что получится. Терминал позволяет довольно легко управлять символами скорости передачи, рукопожатия, эха и завершения, не полагаясь на некоторую неизвестную библиотеку последовательной связи между ними (что вы печатаете, то, что вы отправляете, то, что принимается, это то, что показывается).

* IDN? не нуждается ни в каком специальном триггере или подсказке для ответа. Если команда поддерживается (в соответствии с руководством, так и есть), если символ завершения является правильным (что, по-видимому, так, поскольку ваша предыдущая работа над Python имела некоторый успех), и если рукопожатие является правильным, инструмент должен немедленно ответить с помощью идентификационная строка.

Как только вы точно определите, что ожидает и что вернет инструмент, вы сможете с легкостью создать свой скрипт на Python.

Адам Лоуренс
источник
1
Полезная информация для меня господин гуруман +1. Что случилось с ОП?
Энди ака
1

Это позже, но ...

Попробуйте подключить DSR к положительному напряжению. Мой 33120A отвечает, только если я сделаю это вместо привязанного к отрицательному напряжению.

Я использую RealTerm с конвертером FTDI USB-RS232 и подключаю CTS (ПК) к DSR (33120a), но управляю (и держу) напряжение CTS через RealTerm во время обмена данными (в программе есть возможность сделать это).

С уважением.

JM Sc
источник