Автоматизация измерений с помощью программных средств Expect/Tcl на примере тестирования АЦП

№ 8’2011
На примере тестирования АЦП показаны возможности автоматизации работы с измерительными приборами на П К под управлением ОС GNU/Linux. Подробно разобран скрипт на языке Expect/Tcl, осуществляющий управление несколькими приборами по протоколам Telnet и RS-232.

Введение

Тестирование микросхем аналого-цифровых преобразователей (АЦП) невозможно без автоматизации процесса измерений и управления ходом эксперимента из-за необходимости выполнения очень большого количества операций в нужной последовательности. Традиционный подход к проведению сложных тестов включает в себя использование дорогостоящих и сложных программных комплексов типа LabView компании National Instruments. Кроме освоения работы в программной среде, необходимо иметь специальные драйверы всех устройств, входящих в измерительный стенд, или использовать дорогие измерительные комплексы со встроенной поддержкой программ сбора данных, автоматизации измерений, обработки и визуализации результатов.

В статье продемонстрирован альтернативный подход, основанный на использовании специального программного инструмента Expect, созданного как расширение к скрипт-языку Tcl для автоматизации различных процессов, в том числе для автоматизации измерений и тестирования. С его помощью возможности интерактивного дистанционного управления, имеющиеся у большинства современных приборов, могут быть использованы для организации процесса автоматических измерений в соответствии с пользовательской программой.

До сих пор наиболее популярным интерфейсом для связи пользовательских устройств с персональным компьютером (ПК) при быстрой разработке прототипов устройств на базе микроконтроллеров остается интерфейс стандарта RS-232. Интерактивное «общение» с микроконтроллером осуществляется через HyperTerminal и аналогичные программы. Обмен данными и командами по интерфейсу RS-232 также можно легко автоматизировать с помощью программных средств Expect/Tcl.

Следует отметить, что хотя существуют версии Expect для Windows, «родной» средой для этой программы является ОС Linux. Работа всех представленных в этой работе скриптов тестировалась в дистрибутивах Linux Fedora 15 и Red Hat Enterprise Linux 5.5.

В качестве примера описан программно-аппаратный комплекс, использованный для снятия статических характеристик тестовых образцов интегральных микросхем микромощных АЦП разрядностью 9 и 14 бит, разработанных на кафедре микро- и наноэлектроники НИЯУ МИФИ.

Методы тестирования АЦП

Такие параметры АЦП, как дифференциальная и интегральная нелинейность, погрешности смещения нуля и усиления, могут быть определены из экспериментально измеренной передаточной характеристики АЦП, которая устанавливает связь между аналоговым сигналом на его входе и цифровым сигналом на его выходе.

При снятии передаточных характеристик АЦП разрешением до 18 бит в качестве источника входного сигнала вместо дорогостоящих аттестованных калибраторов сейчас обычно используют микросхемы прецизионных, но не имеющих метрологической аттестации цифро-аналоговых преобразователей (ЦАП) с разрядностью, превышающей разрядность АЦП, по крайней мере, на 2 бита.

Напряжение на выходе ЦАП измеряют прибором, гарантирующим требуемую точность измерения. В описываемой тестовой установке использован ЦАП типа AD5542C номинальной и эффективной разрядностью 16 бит и цифровой мультиметр Agilent 34410A, который характеризуется относительной погрешностью измерения постоянного напряжения 0,003% на пределе 10 В и среднеквадратичным значением напряжения шума 15 мкВ при быстродействии 1000 отсчетов в секунду [1, 2].

Методы тестирования с помощью ЦАП являются наиболее универсальными и производительными при наличии высокоскоростных средств сбора и обработки данных. Однако для точного определения границ зон переходов от одного кода к другому необходимо выполнить большое число измерений (в рассматриваемом эксперименте — 100 точек для каждого кода), а затем провести обработку данных на основе анализа вероятностей появления кодов.

Есть альтернативный метод без применения генератора на базе ЦАП и сложной цифровой обработки экспериментальных данных, описанный в стандарте IEEE 1241 [3]. Он основан на включении АЦП в замкнутую цепь регулирования с интегратором, выход которого автоматически устанавливается в состояние, при котором вероятности появления текущего и следующего кодов примерно равны между собой. Недостаток метода — относительно низкая скорость тестирования из-за длительного процесса установления напряжения на выходе интегратора с необходимой точностью.

Динамические параметры АЦП измеряют, подавая на вход микросхемы синусоидальное напряжение с низким уровнем искажений, фиксируя данные на его выходе и проводя последующую цифровую обработку на основе спектрального анализа [4].

При использовании всех отмеченных методов напряжение на входе АЦП формируется по командам управляющей программы автоматизированной системы тестирования и измеряется образцовым цифровым вольтметром, который также управляется этой программой. Сигнал на выходе АЦП по командам управления фиксируется платой захвата данных, логическим анализатором или осциллографом смешанных сигналов.

Измерительная установка

Схема установки для измерения статических характеристик АЦП приведена на рис. 1, а испытательный стенд — на рис. 2.

Схема установки для измерения характеристик АЦП

Рис. 1. Схема установки для измерения статических характеристик АЦП

Испытательный стенд

Рис. 2. Испытательный стенд

ПК связан с устройством управления (УУ) через СОМ-порт по последовательному интерфейсу стандарта RS-232. Аппаратная часть УУ выполнена на базе оценочной платы микроконтроллера Silabs C8051F120. В начальном состоянии устройство ожидает от ПК кода в диапазоне 0–65 535, который затем по каналу связи с интерфейсом SPI загружается в ЦАП. Далее УУ отправляет сигнал «старт» тестируемому АЦП и ожидает сигнала «конец преобразования». После поступления этого сигнала УУ считывает выходной код АЦП и отправляет его в ПК.

Связь ПК с УУ может выполняться с помощью любой программы, умеющей осуществлять загрузку и чтение СОМ-порта, например стандартной для Fedora Linux программы picocom. Для того чтобы открыть соединение с УУ, которое подключено к первому COM-порту компьютера, необходимо ввести строку:

$ picocom —b 115200 —f n —p n —d 8 —nol —nor /dev/ttyS0

Опции команды picocom:

  • b — частота обмена: 115 200.
  • f — контроль над потоком данных: нет.
  • d — количество бит данных: 8.
  • nol — не блокировать устройство, другие программы также смогут обращаться к устройству.
  • nor — не сбрасывать настройки COM-порта после завершения работы программы.

Более подробную информацию о программе picocom можно получить при вводе команды:

$ man picocom

Из других наиболее полезных опций следует отметить использование различных протоколов передачи файлов по каналу RS-232. Для определения протокола передачи файлов служат опции:

  • send-cmd — команда протокола отправки;
  • receive-cmd — команда протокола приема.

Здесь команда протокола отправки — это:

  • sx — отправка по протоколу X-modem;
  • sb — отправка по протоколу Y-modem;
  • sz — отправка по протоколу Z-modem.

Команда протокола приема — это:

  • rx — прием по протоколу X-modem;
  • rb — прием по протоколу Y-modem;
  • rz — прием по протоколу Z-modem.

Связь цифрового мультиметра Agilent 34410A с ПК осуществляется по протоколу Telnet через локальную сеть. Этот протокол обеспечивает текстовый обмен между двумя устройствами и, в общем случае, нацелен на интерактивное взаимодействие. Прибор должен быть подключен к локальной сети лаборатории. Настройка сети для вольтметра 34410A рассмотрена в документе [1].

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

$ telnet ip_address port,

где ip_address — сетевой адрес прибора, port — номер порта, для большинства инструментов фирмы Agilent — 5024. Если сетевые настройки заданы правильно, то в терминале должно появиться приглашение:

Welcome to Agilent’s 3441xA Digital Multimeter
3441xA>

Для однократного измерения напряжения в диапазоне 0–10 В с разрешением 10 мкВ необходимо ввести команду:

3441xA>MEASure:VOLTage:DC? 10,0.00001

В терминал будет выведено значение напряжения между щупами вольтметра. Весь набор команд вольтметра Agilent 34410A описан в документе [2].

Существенным недостатком представленного решения является интерактивность, то есть необходимость диалога с пользователем. Измерение большого количества точек таким способом невозможно. Автоматизация эксперимента рассмотрена в следующем разделе.

Автоматизация измерений с помощью Expect и Tcl

Tcl — это скриптовый язык программирования высокого уровня, интерпретируемого типа. Одна из основных целей его создания — дать разработчику возможность интегрировать программы, написанные на других языках программирования, в сложные программные комплексы [3]. Этим объясняется небольшое количество встроенных конструкций языка. Остальное может быть выполнено с помощью внешних команд — скомпилированных программ, написанных на других языках программирования. В данном применении язык Tcl интересен лишь постольку, поскольку он является базой для специфического программного инструмента Expect [4]. Есть большое количество программ, чей интерфейс нацелен на интерактивное взаимодействие с человеком и не обладает достаточными возможностями для работы в пакетном режиме. Expect позволяет с легкостью создавать оболочки для подобных программ, используя их внутри программ на языке Tcl или скриптов оболочек Linux.

По сути, Expect состоит всего из трех дополняющих язык Tcl команд и некоторого количества связанных с ними переменных. Это команда spawn, позволяющая запускать любые установленные в ОС программы, команда expect, ожидающая заданного пользователем вывода от запущенной программы, и команда send, позволяющая посылать запущенной команде любые строки и специальные комбинации клавиш (в виде символов ASCII), так, как если бы с программой взаимодействовал человек. Кроме этих базовых команд, Expect дает возможность также использовать любые ключевые слова и команды Tcl.

В нашем случае Expect позволяет автоматизировать telnet-запросы к цифровому вольтметру Agilent 34410A и общение с УУ через picocom, а Tcl — описать алгоритм проведения эксперимента. Блок-схема одного шага разработанного скрипта send на языке Expect/Tcl показана на рис. 3.

Блок-схема одного шага скрипта

Рис. 3. Блок-схема одного шага скрипта

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

01 #!/usr/bin/expect -f
02 spawn picocom —b 115200 —f n —p n —d 8 —nol —nor [lindex $argv 0]
03 set hostid1 $spawn_id
04 expect -i hostid1 “Terminal readyr”

В первой строке указывается программа, которую оболочка должна вызвать для обработки скрипта. Команда spawn во второй строке открывает программу picocom с указанными параметрами. Tcl выполнит подстановку возвращаемого значения команды, находящейся внутри квадратных скобок. В данном случае это команда lindex, которая возвращает значение нулевого элемента строки argv, содержащей значения, переданные скрипту при запуске. Для работы с первым последовательным портом компьютера в качестве первого аргумента необходимо указать /dev/ttyS0.

Следующая команда — set — устанавливает значение переменной hostid1 равным идентификационному номеру запущенного предыдущей командой spawn процесса (Process Identification Number, PID). Этот номер автоматически сохраняется внутри переменной spawn_id, которая перезаписывается при каждом новом исполнении команды spawn.

И наконец, команда expect ожидает вывода Terminal readyr от процесса с PID, равным hostid1. Символ «r» соответствует символу возврата каретки. Expect/Tcl поддерживает все остальные стандартные C-обозначения для специальных символов, такие как «n», «t» и т. д. Вывод строки Terminal readyr означает, что программа picocom готова к работе и ожидает действий пользователя.

Работа с протоколом Telnet осуществляется аналогично:

05 spawn telnet [lindex $argv 1] 5024
06 set hostid2 $spawn_id
07 expect -i hostid2 “3441xA>”

В качестве аргумента команде telnet необходимо передать IP-адрес вольтметра. В 7-й строке команда expect ожидает вывода приглашения к вводу команд управления вольтметром.

Данные, поступающие от УУ и вольтметра, сохраняются во временном файле. Открыть этот файл можно с помощью команды:

08 set TFile [open /tmp/SendIOFile a]

Внутри квадратных скобок команда open открывает файл /tmp/SendIOFile для чтения и дозаписи и возвращает его дескриптор. Команда set присваивает переменной TFile значение дескриптора открытого файла.

Рассмотрим тело основного цикла программы:

09 for {set i 0} {$i<65535} {incr i} {
10 send -i hostid1 “$ir”
11 expect -i hostid1 “,*,”
12
13 puts -nonewline $TFile “$i”
14 puts -nonewline $TFile “$expect_out(0,string)”
15
16 send -i hostid2 “MEASure:VOLTage:DC? 10,0.00001r”
17 expect -i hostid2 “+*r”
18 set NUMBERx $expect_out(0,string)
19 puts $TFile “$NUMBERx”
20
21 for {set j 0} {$j<99} {incr j} {
22 send -i hostid1 “$ir”
23 expect -i hostid1 “,*,”
24 puts -nonewline $TFile “$i”
25 puts -nonewline $TFile “$expect_out(0,string)”
26 puts $TFile “$NUMBERx”
27 }
28 }

В 9-й строке задается цикл со счетчиком i, принимающим значения от 0 до 65 535 с шагом 1. Фигурные скобки позволяют производить группировку команд Tcl. Все, что находится внутри фигурных скобок, воспринимается командой как один аргумент. Например, содержимое строк 10–28 является аргументом команды for.

В 10-й строке значение счетчика посылается процессу picocom с помощью команды send. В качестве аргументов команда принимает PID и строку, которая будет направлена на ввод процесса с данным PID. Следующая строка скрипта ожидает форматированного вывода от процесса picocom. Формат вывода устройства управления:

Полученное значение выходного кода АЦП,

Таким образом, регулярное выражение «,*,» описывает все возможные варианты вывода в формате УУ. Команда puts в 13-й строке записывает значение счетчика во временный файл. Аргумент -nonewline не позволяет команде puts осуществить переход на новую строку. В 14-й строке происходит обращение к специальной переменной expect_out (0, string), которая хранит строку, совпавшую с ожидаемой командой expect. В данном случае это значение выходного кода АЦП.

В 16-й строке цифровому вольтметру Agilent 34410A передается команда измерения постоянного напряжения с разрешением 10 мкВ. Далее команда expect ожидает вывода измеренного значения напряжения. Величина напряжения запоминается в переменной Number и записывается во временный файл. Аналогично в строках 21–27 происходит измерение и запись во времен-ный файл еще 99 значений выходного кода АЦП.

После окончания процесса измерения необходимо корректно завершить вызванные программы. Для завершения программы picocom нужно последовательно ввести с клавиатуры комбинации клавиш «Ctrl+A» и «Ctrl+X». ASCII-коды, соответствующие этим клавиатурным комбинациям, — это 0x01 и 0x18 соответственно. Поэтому скрипт Expect/Tcl содержит следующие команды:

29 send -i hostid1 “x01”
30 send -i hostid1 “x18”

Как было отмечено, символ «» служит для подстановки специальных символов.

Для завершения сессии Telnet с приборами Agilent необходимо отправить код «x1D»:

31 send -i hostid2 “x1D”

Этот код ASCII соответствует нажатию на клавишу Esc.

Наконец, необходимо закрыть временный файл и выйти из скрипта:

32 close $TFile
33 exit

В результате работы этого скрипта будет создан файл во временной папке, содержащий результаты измерений передаточной характеристики АЦП.

Для многократного исполнения на одном и том же ПК скрипт на языке Expect/Tcl может быть «обернут» в обычный скрипт программной оболочки Bash, например, так:

01 #!/bin/bash
02 date
03 ./Send /dev/ttyS0 192.168.27.106 > /dev/null
04 mv /tmp/SendIOFile $1
05 date

Это облегчает работу со скриптом Expect/Tcl. Во-первых, команда date в строках 2 и 5 позволяет точно отследить время выполнения измерения. Во-вторых, скрипту сразу передаются все необходимые аппаратные данные — название последовательного порта и IP-адрес вольтметра. Стандартный вывод скрипта, содержащий весь вывод всех вызываемых внутри него программ, уничтожается перенаправлением в /dev/null. В качестве аргумента скрипт-«обертка» принимает только имя файла, в котором будут сохранены результаты измерений.

Заключение

Рассмотрены возможности автоматизации процесса измерений с помощью программных средств Expect/Tcl. В качестве практического примера приведен скрипт, использовавшийся для тестирования прототипов микросхем микромощных АЦП разрядностью 9 и 14 бит, разработанных на кафедре микро- и наноэлектроники МИФИ.

Значимость программы Expect определяется следующими факторами.

Во-первых, универсальностью этого инструмента: он позволяет интегрировать единый программный комплекс в любые другие программы. С помощью поддержки Tcl можно эффективно управлять всеми запущенными процессами, используя базовые конструкции типа циклов и условных ветвлений. Использование специальных переменных дает возможность вычленять необходимые отклики запущенных процессов по маскам регулярных выражений.

Во-вторых, возможность использовать уже готовые программы, полностью изменяя их интерфейс для конечного пользователя, позволяет очень быстро создавать новые приложения. Например, вместо ручного программирования обращений к COM-порту при создании новой программы, реализующей обмен данных с микроконтроллерным устройством, можно использовать уже имеющуюся почти в любом дистрибутиве Linux программу picocom.

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

Литература

  1. Agilent 34410A/11A 6 ½ Digit Multimeter. User Guide.
  2. Agilent 34410A/11A Programmer’s Reference.
  3. IEEE Standard for Terminology and Test Methods for Analog-to-Digital Converters / IEEE Std 1241-2010 (Revision of IEEE Std 1241-2000) / IEEE Instrumentation & Measurement Society. New York, 2011.
  4. Бочаров Ю. И., Бутузов В. А., Осипов Д. Л. Микромощный быстродействующий АЦП для многоканальных систем // Датчики и системы. 2011. № 5.
  5. Welch B. B. Practical Programming in Tcl&Tk. Prentice Hall Internationall, 1997.
  6. Libes D. Exploring Expect: A Tcl-based Toolkit for Automating Interactive Programs. O’Reilly Media, 1996.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *