У меня есть старый генератор функций 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?
источник
s.readline()
функция (я отредактировал свой вопрос, спасибо).Ответы:
Самый простой способ отладки SCPI через RS-232 - использовать терминальную программу с существующим последовательным интерфейсом. Просто введите команду и посмотрите, что получится. Терминал позволяет довольно легко управлять символами скорости передачи, рукопожатия, эха и завершения, не полагаясь на некоторую неизвестную библиотеку последовательной связи между ними (что вы печатаете, то, что вы отправляете, то, что принимается, это то, что показывается).
* IDN? не нуждается ни в каком специальном триггере или подсказке для ответа. Если команда поддерживается (в соответствии с руководством, так и есть), если символ завершения является правильным (что, по-видимому, так, поскольку ваша предыдущая работа над Python имела некоторый успех), и если рукопожатие является правильным, инструмент должен немедленно ответить с помощью идентификационная строка.
Как только вы точно определите, что ожидает и что вернет инструмент, вы сможете с легкостью создать свой скрипт на Python.
источник
Это позже, но ...
Попробуйте подключить DSR к положительному напряжению. Мой 33120A отвечает, только если я сделаю это вместо привязанного к отрицательному напряжению.
Я использую RealTerm с конвертером FTDI USB-RS232 и подключаю CTS (ПК) к DSR (33120a), но управляю (и держу) напряжение CTS через RealTerm во время обмена данными (в программе есть возможность сделать это).
С уважением.
источник