Як користуватися SCPI на HP33120A через RS232?


9

У мене є старий генератор функцій 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?


Я не можу відповісти на це запитання, але мене цікавлять відповіді, тому ви отримали моє голосування
Енді ака

Звідки ти знаєш, що він не передає? У вас немає коду, щоб прочитати його. Ви пробували термінальну програму або монітор послідовного порту? Або осцилоскоп?
Жанна Піндар

У мене є логічний аналізатор Saleae, підключений до штифтів RX / TX, і в Python script є s.readline()функція (я відредагував своє запитання, дякую).
vasco

Можливо , пов'язаний з цим питання: stackoverflow.com/questions/1093598 / ...
Шимон Bęczkowski

На комп’ютері вимкніть послідовну буферизацію та встановіть розмір послідовного буфера на нуль. Чи блокується блокування читання на невизначений термін? (це має бути з того, що ви описали)
Девід

Відповіді:


3

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

* ІДН? не потрібен спеціальний тригер або підказка для відповіді. Якщо команда підтримується (відповідно до посібника, вона є), якщо символ завершення правильний (що, як видається, оскільки ваша попередня робота в Python мала певний успіх) і якщо рукостискання правильне, інструмент повинен негайно реагувати на ідентифікаційний рядок.

Після того, як ви точно зрозумієте, що очікує та повертається інструмент, ви зможете легко виготовити свій скрипт Python.


1
Корисна інформація для мене пан guruman +1. Що б сталося з ОП?
Енді ака

1

Це пізніше, але ...

Спробуйте прив’язати DSR до позитивної напруги. Моя 33120A відповідає лише в тому випадку, якщо я це роблю замість прив’язаного до негативного напруги.

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

З повагою

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.