воскресенье, 25 мая 2025 г.

Добавление не-SCPI устройства в Test Controller

 Ранее я писал обзор на программу Test Controller в котором в качестве примера была добавлена поддержка устройства, которое поддерживает управление через протокол SCPI. В этот раз я добавлю поддержку настольного мультиметра Agilent U3402A в котором поддержка SCPI протокола отсутствует. Точнее не так - она доступна при условии наличия модуля расширения GPIB, но в моём экземпляре такого модуля нет.

В документации на Test Controller есть раздел посвящённый поддержке не-SCPI устройств. А пример рекомендуется смотреть в файле конфигурации HP3478A.

Для начала указываю метаданные конфигурации

#idString Agilent Technologies,U3402A,
#name Agilent U3402A
#handle U3402A
#port com
#driver Ascii
#eol \r\n

Мультиметр подключается к компьютеру через последовательный порт, а драйвер будет использоваться Ascii, т.к. общение с мультиметром идёт через тестовые команды.

Описание данных, которые поддерживает мультиметр. Несколько режимов могут выдавать один и тот же вид данных - например двухпроводное (2W_Resistance) и четырёхпроводное (4W_Resistance) измерение сопротивления или прозвонка (Continuity)

#value VoltageDC V D6 DC_Voltage,Diode
#value CurrentDC A si DC_Current
#value VoltageAC V D6 AC_Voltage
#value CurrentAC A si AC_Current
#value Resistance ohm si 2W_Resistance,4W_Resistance,Continuity
#value Frequency Hz si Frequency
#value VoltageACDC V D6 AC+DC_Voltage
#value CurrentACDC A si AC+DC_Current

Не уверен что мне потребуется регистрировать данные сопротивления, диодов или прозвонки, но добавил их на всякий случай. Поймал себя на мысли что ещё ни разу не использовал измерения "AC+DC" для напряжения или тока и пока не особо представляю где это требуется.

Далее описание команд которые переключают режимы измерений

#scpiCmd DCV txrx S100
#scpiCmd ACV txrx S110
#scpiCmd 2WO txrx S120
#scpiCmd 4WO txrx S130
#scpiCmd DCI txrx S140
#scpiCmd ACI txrx S150
#scpiCmd DIOD txrx S160
#scpiCmd FREQ txrx S170
#scpiCmd ACDCV txrx S180
#scpiCmd ACDCI txrx S190
#scpiCmd CONT txrx S1A0

Эти команды как бы эмулируют SCPI - например "#scpiCmd DCV txrx S100" - объявляем команду "DCV" которая передаётся в мультиметр в виде команды "S100" и считывается ответ, но значение не возвращается. Эти команды можно выполнять на вкладке "Commands".

Далее описание команд для получения статуса мультиметра и запроса данных

#scpiCmd READ:FUNCTION? txrx? R0
:string:
:readmath: substring(value, 6, 7)

#scpiCmd READ:RATE? txrx? R0
:string:
:readmath: substring(value, 5, 6)

#scpiCmd READ:DATA? txrx? R1

В отличии от команд переключения режимов нам нужно получить данные (вместо txrx используется txrx?) а также сделать их интерпретацию (substring()).

Чтобы программа не пыталась общаться с "неправильным" устройством добавлю получение информации о модели и её проверку

#scpiCmd model? txrx? RV
:readmath: getMatchGroup(value, "^(.+),(.+)$", 2)

#scpiCmd getDeviceSW? txrx? RV
:readmath: getMatchGroup(value, "^(.+),(.+)$", 1)

#verifyDevice 6 model?

Если устройство неверно ответит на команду RV или в ответе будет указана другая модель, то общение с ним прекратится.

Блок описание команд управления режимом работы

#cmdModeLayout 2 6

#cmdMode DC_Voltage 0
DCV

#cmdMode AC_Voltage 1
ACV

#cmdMode AC+DC_Voltage 8
ACDCV

#cmdMode AC+DC_Current 9
ACDCI

#cmdMode DC_Current 4
DCI

#cmdMode AC_Current 5
ACI

#cmdMode 2W_Resistance 2
2WO

#cmdMode 4W_Resistance 3
4WO

#cmdMode Frequency 7
FREQ

#cmdMode Diode 6
DIOD

#cmdMode Continuity 10
CONT

В итоге становится активным меню "Mode" в котором можно выбрать режим работы

Для меню "Setup" добавил отображение текущего режима работы и частоты измерений

#cmdSetup info Mode
:read: READ:FUNCTION?
:readmath: getElement("DC Voltage;AC Voltage;2W Resistance;4W Resistance;DC Current;AC Current;Diode;Frequency;DC+AC Voltage;DC+AC Current;Continuity",listIndex(value, "0 1 2 3 4 5 6 7 8 9 A", " "), ";")
:updatemodechange:
:tip: Primary display mode

#cmdSetup info Rate
:read: READ:RATE?
:readmath: getElement("Slow;Medium;Fast", listIndex(value, "S M F", " "), ";")
:updatemodechange:
:tip: Measurement rate

Само меню выглядит так

Чем больше пользуюсь этой программой, тем больше она мне нравится своей расширяемостью. В планах разобраться в документации и добавить переключение диапазонов и частоты измерений (одно зависит от другого и нужно подумать как это реализовать).

Комментариев нет:

Отправить комментарий