Одна программа для управления и регистрации данных с различных устройств

в 17:15, , рубрики: Test Controller, измерения, Мультиметр, регистрация данных

Введение

Открыл для себя программу Test Controller которая предназначена для управления и регистрации данных с различных устройств (мультиметры, источники питания, электронные нагрузки). На момент обзора актуальная версия Test Controller V2.58. Пообщаться с автором программы можно в ветке форума EEVblog.

У программы неплохой список поддерживаемого оборудования и возможность добавить поддержку нового устройства через текстовые конфигурационные файлы. Если сравнивать с Sigrok, то не придётся писать код и затем его компилировать. Я уже добавлял минимальную поддержку настольного мультиметра Agilent U3402A в libsigrok и это заняло несколько дней. В случае Test Controller процесс должен быть сильно проще.

Для демонстрации возможностей программы я добавлю поддержку двух устройств:

  • измерителя ёмкости аккумуляторов (схема, корпус, тестирование) который поддерживает протокол SCPI.

  • настольного мультиметра Agilent U3402A который не поддерживает протокол SCPI.

Установка

Команды и пути к файлам приведены для Linux, а точнее Debian 12. Если вы будете устанавливать в Windows или Mac OS, то читайте описание установки от автора программы.

Test Controller написана на Java и будет работать в Windows, Linux и MacOS. Установка с нуля для Debian 12 выглядит так:

$ sudo apt-get update
$ sudo apt-get install openjdk-17-jre
$ java -version
openjdk version "17.0.15" 2025-04-15
OpenJDK Runtime Environment (build 17.0.15+6-Debian-1deb12u1)
OpenJDK 64-Bit Server VM (build 17.0.15+6-Debian-1deb12u1, mixed mode, sharing)

Скачиваю дистрибутив с сайта lygte-info.dk и распаковываю в директрорию ~/.local/ (все сторонние программы я устанавливаю в директорию ~/.local/ вместо /opt/ или /usr/local/):

$ wget https://lygte-info.dk/pic/Projects/TestController/TestController.zip
$ mkdir ~/.local/TestController/
$ unzip -d ~/.local/TestController/ TestController.zip
$ chmod +x ~/.local/TestController/{tcrun,tcrundebug}

Последняя команда не обязательна, если использовать запуск через меню окружения рабочего стола:

$ cat > ~/.local/share/applications/TestController.desktop <<_EOF_
[Desktop Entry]
Name=Test Controller
Path=$HOME/.local/TestController/
Exec=java -jar $HOME/.local/TestController/TestController.jar
Icon=$HOME/.local/TestController/TestController.png
Categories=Development
Version=1.0
Type=Application
Terminal=false
StartupWMClass=dk-hkj-main-Main
_EOF_

SCPI устройства

Измеритель ёмкости аккумуляторов поддерживает команды SCPI. Чтобы добавить его поддержку нужно создать файл ~/TestController/Devices/Power Monitor.txt и добавить в него описание устройства

#idString Andrei Tataranovich,Power Monitor,
#name Power Monitor
#handle PowerMonitor
#port com
#baudrate 9600
#driver SCPI
#eol rn

#value Current A D3
#value Voltage V D3

#askValues MEAS:CURR?;MEAS:VOLT?

#outputOff SYST:OUT OFF

Для начала добавил только получение показаний напряжения (MEAS:VOLT?) и тока (MEAS:CURR?) и отключение выхода (SYST:OUT OFF).

Документация по добавлению нового устройства есть для устройств поддерживающих протокол SCPI и для не-SCPI устройств.

После создания конфигурации для нового устройства нужно запустить программу, добавить устройство "Power Monitor" на вкладке "Load devices" и нажать кнопку "Reconnect"

Одна программа для управления и регистрации данных с различных устройств - 1

Если всё сделано верно, то на вкладке "Commands" появится сообщение ";; Found Power Monitor on USB Serial (ttyUSB0)". Я отправил несколько команд устройству через строку слева от кнопки "Popups" и ответ виден в текстовом поле.

Одна программа для управления и регистрации данных с различных устройств - 2

На вкладке "Current values" можно увидеть текущие показания напряжения и тока которые были настроены в конфигурации устройства

Одна программа для управления и регистрации данных с различных устройств - 3

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

По мере записи данных они появляются в табличном виде на вкладке "Table" и при этом становятся активны вкладки "Chart", "Histogram" и "Range".

На вкладке "Table" можно выбрать какие колонки отображать

Одна программа для управления и регистрации данных с различных устройств - 4

Поддерживается сохранение и загрузка значений а также импорт и экспорт в формате CSV. При импорте/экспорте можно настроить какие колонки сохранить и в каком формате.

На вкладке "Chart" данные представлены в виде графика

Одна программа для управления и регистрации данных с различных устройств - 5

Поддерживается выбор данных которые нужно отображать на графике. Есть возможность ограничить показ части данных (параметры "First sample to display" и "Last sample to display") и сохранить изображение в формате PNG.

На вкладке "Histogram" данные представлены в виде гистограммы

Одна программа для управления и регистрации данных с различных устройств - 6

Можно выбрать какие данные отображать на гистограмме, показать определённую часть данных (аналогично вкладке "Chart") и сохранить изображение в формате PNG.

На вкладке "Scales for chart" настраивается график

Одна программа для управления и регистрации данных с различных устройств - 7

я задал минимальные и максимальные значения для тока и напряжения чтобы график получился более наглядным

Одна программа для управления и регистрации данных с различных устройств - 8

На вкладке "Range" можно проанализировать данные на определённом интервале

Одна программа для управления и регистрации данных с различных устройств - 9

Я выбрал диапазон данных от 2-х часов до конца записи.

На вкладке "Math" можно добавить вычисляемые параметры. Например я добавил вычисление мощности через ток и напряжение

Одна программа для управления и регистрации данных с различных устройств - 10

После этого со всех вкладках появляется новый параметр "PowerMonitorPower"

Одна программа для управления и регистрации данных с различных устройств - 11

Для примера я вывел его на график совместно с напряжением и током.

На вкладке "Remap handles" можно сделать привязку устройств к конкретным идентификаторам. У меня использовалось только одно устройство у которого идентификатор "PowerMonitor", но его можно переназначить к более короткому "pm".

Одна программа для управления и регистрации данных с различных устройств - 12

В случае если у вас несколько одинаковых устройств, то их можно назначить на различные идентификаторы, используя серийный номер.

На вкладке "Configuration" можно настроить основные параметры программы

Одна программа для управления и регистрации данных с различных устройств - 13

Тестер ёмкости аккумуляторов поддерживает три настройки через команды SCPI:

  • включить или выключить выход

  • задать скорость измерений (медленно, средне, быстро)

  • задать режим измерений (двухпроводной или четырёхпроводной)

В программе есть функциональность для конфигурации устройств - добавлю в файл описания устройства дополнительные секции для этого

#cmdSetup buttonsOn Output
:read: SYST:OUT?
:string:
:write: SYST:OUT #
:tip: Turn output ON or OFF
:updatealloff:
Off OFF
On ON

#cmdSetup radio Mode
:read: CONF:MEAS:MODE?
:string:
:write: CONF:MEAS:MODE #
:tip: Setup measurement mode
2W 2W
4W 4W

#cmdSetup radio Rate
:read: CONF:MEAS:RATE?
:string:
:write: CONF:MEAS:RATE #
:tip: Setup measurement rate
Slow S
Medium M
Fast F

После перезапуска программы на вкладке "Commands" нужно нажать кнопку "Setup" и откроется дополнительное меню

Одна программа для управления и регистрации данных с различных устройств - 14

Не-SCPI устроства

Я не засекал время, но по ощущениям добавление нового устройства, которое поддерживает протокол SCPI, заняло около часа. Теперь задача со "звёздочкой" - попробую добавить настольный мультиметр Agilent U3402A, который не поддерживает протокол SCPI.

Точнее не так - управление через SCPI доступно при условии наличия модуля расширения GPIB, но в моём экземпляре такого модуля нет. А вообще этот мультиметр это перелицованный Escort 3146A на который есть более адекватная документация на подключение к компьютеру.

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

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

#idString Agilent Technologies,U3402A,
#name Agilent U3402A
#handle U3402A
#port com
#driver Ascii
#eol rn

Мультиметр подключается к компьютеру через последовательный порт, а драйвер будет использоваться 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".

Одна программа для управления и регистрации данных с различных устройств - 15

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

#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" в котором можно выбрать режим работы

Одна программа для управления и регистрации данных с различных устройств - 16

Для меню "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

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

Одна программа для управления и регистрации данных с различных устройств - 17

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

Автор: tataranovich

Источник


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js