У мене є старий генератор функцій Hewlet Packard 33120A (він повинен бути того ж типу, що і Agilent 33120A ), і я хотів би керувати ним за допомогою MCU (ATMega). Генератор має RS232 і використовує команди SCPI.
Я зробив простий перетворювач RS232 в TTL з MAX232, просто з лініями RX і TX. Відповідно до посібника користувача (глава 4, розділ протоколу рукостискання DTR / DSR), я прив'язав DSR до логічної TRUE (негативна напруга), а 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()
функція (я відредагував своє запитання, дякую).