Александр Курбатов
Программное обеспечение для сбора и обработки данных при измерениях и испытаниях
Проблемы создания программного обеспечения (ПО) для PC, обеспечивающего обмен данными с внешними устройствами, визуализацию, математическую обработку
и документирование этих данных, возникают в очень многих проектах. Такое ПО является естественной составной частью систем, предназначенных для проведения измерений, испытаний, контроля. В такой аппаратуре ПО является ее «лицом»,
и его недостаточные качество и возможности могут просто свести на нет ценность всего проекта. Также весьма часто программы такого назначения не являются составной частью разрабатываемых изделий или систем, а необходимы лишь при выполнении отдельных этапов проектирования, подтверждении технических характеристик, проведении приемо-сдаточных испытаний и т. п. В таких несерийных программах обычно допустимы определенные «вольности».
Каковы пути создания ПО для упомянутых задач? Ответов на этот вопрос найдется много, так как все зависит от конкретной ситуации и возможностей коллектива разработчиков, и один из них вызван тем обстоятельством, что большинство инженеров-электронщиков имеют определенные опыт и навыки в программировании. Поэтому не редкость, когда программы для PC такого назначения создаются людьми, для которых эта работа не является основной и выполняется ими время от времени. Такая организация дела, по мнению автора, является вполне нормальным явлением, а в некоторых случаях — и наилучшим решением. Особенно это относится к программной поддержке взаимодействия PC и аппаратной части системы.
Понятно, что степень подготовленности в программировании на PC у потенциальных потребителей контрольно-испытательного и тому подобного оборудования, также как и у инженеров-электронщиков, весьма разная. Можно определенно заявить, что в настоящее время существующие пакеты программирования для сбора и обработки данных перекрывают весь ряд требований к ним с точки зрения навыков в программировании вплоть до отсутствия таковых. Это обстоятельство создает большой выбор путей построения систем с обязательной программной поддержкой, где часто имеется требование открытости системы для ее реконфигурации в процессе эксплуатации и для которых нельзя предсказать, какой квалификации могут быть ее потребители. А для ПО внутреннего использования правильный выбор подхода к его созданию позволит сократить затраты на проведение разработки.
Программные продукты для задач сбора и обработки данных рассматриваются ниже именно с точки зрения упрощения процесса программирования. При этом не упоминаются пакеты, которые относят к типу SCADA, законченные виртуальные измерительные приборы, не допускающие существенного изменения своих функций, и математические пакеты, которые используют преимущественно при пост-обработке данных. Одновременно очень важными для отечественного потребителя являются возможности программной среды в области поддержки ввода/вывода через стандартные порты и внешние устройства и в области организации собственного интерфейса. Среди стандартных внешних устройств особое место занимает звуковая плата, как очень доступное и дешевое, но и достаточно качественное средство ввода/вывода аналоговых сигналов переменного тока по двум параллельным каналам.
По данным разных публикаций в США (например, фирмы IOtech), в которых отражены предпочтения американских потребителей в отношении подхода к построению систем сбора и обработки данных, можно выделить устойчивую тройку лидеров среди языков, лежащих в основе таких решений, — Visual Basic, C/C++ и системы графического программирования LabVIEW. Популярность каждого из этих трех подходов является примерно одинаковой (порядка 20–30 %), в то время как на долю всех остальных решений по языку (стилю) программирования вместе взятых, приходится примерно те же 20–30 %. Следует отметить, что Delphi заметно уступает ведущей тройке, и его используют для измерений и испытаний, практически по всем оценкам, не более 2–4 % потребителей. Упомянем также, что подавляющее большинство систем сбора данных в США, которые предназначены для PC, используют Windows-платформы, и в дальнейшем изложении тоже будет подразумеваться работа под Windows.
1. Использование текстового программирования
Под этим подходом понимается создание программ в традиционном стиле на основе как универсальных языков программирования, так и специально ориентированных на задачи сбора и обработки данных. Считается, что около половины специалистов в США предпочитают действовать таким образом.
1.1 Программирование на C/C++, Visual Basic и Delphi
Для С/С++ чаще всего используются соответствующие продукты фирм Microsoft и Borland (Inprise). Понятно, что на С можно написать практически все от начала до конца, но для сколько-нибудь достойной системы сбора и обработки данных это будет большой труд (особенно в первый раз и если требуется порядочное математическое обеспечение). Значительно ускорить процесс разработки ПО, избежать многих потенциальных ошибок и в большинстве случаев получить более быстрый код можно за счет применения проверенных продуктов других фирм, обеспечивающих расширение библиотек функций, классов и компонентов ActiveX для разнообразных задач регистрации, обработки и представления данных. Таких пакетов выпускается достаточно много как известными фигурами в области измерений и испытаний, так и маленькими фирмами. Относительно первых стоит упомянуть VIX Components от Computerboards (www.сomputerboards.com), Xcontrols от Keithley (www.keithley.com) и ComponentWorks от National Instruments (www.natinst.com).
Замечание: National Instruments в ходе изложения будет упоминаться весьма часто. Причина этого — не результат ангажированности или какой-либо тенденциозности, а крайне активные действия фирмы. Активность выражается не только в неуклонном расширении номенклатуры выпускаемой продукции и ее регулярном обновлении, но и в организационных мероприятиях по расширению сферы своего влияния в области измерений и испытаний. Так, в течение последнего года National Instruments установила свой контроль сразу над двумя известными в этой области германскими фирмами: DATALOG и GfS mbH, которыми разработаны и выпускаются соответственно продукты DASYLab и DIAdem, также рассматриваемые в дальнейшем.
Остановимся более подробно на упомянутом ComponentWorks. Значительный опыт работы с ним не выявил сколько-нибудь серьезных его недостатков. Можно отметить лишь мелкие неудобства, например возникающие в некоторых случаях при работе с региональными настройками в Windows, которые отличаются от американских.
В состав пакета входят наборы компонентов для создания диалоговых окон, проведения математической обработки, построения трехмерной графики и интерфейса к внешним устройствам. В комплект поставки также входит отдельный модуль DataSocket для поддержки проведений измерений по компьютерной сети, включая Интернет, на основе ActiveX.
Для построения интерфейса пользователя имеются разнообразные кнопки, переключатели, светодиоды, аналоговые индикаторы, стрелочные приборы, табло и графические дисплеи/самописцы с возможностью одновременного представления нескольких сигналов со своими осями координат и функциями курсоров, растяжек и панорамирования. Их внешний вид стилизован под привычный вид органов управления и отображения на передней панели измерительного прибора (рис. 1). Эти компоненты основаны на технологии ActiveX и, соответственно, обладают всеми стандартными, а также некоторыми дополнительными возможностями в части настройки свойств и реакций на события.
Рис. 1. Пример использования ComponentWorks для создания передней панели прибора
Функции математической обработки включают в себя действия с комплексными числами, операции над векторами и матрицами (в том числе и комплексными), преобразования во временной области (генераторы сигналов, корреляция, свертка, программируемые цифровые фильтры с конечной (FIR) и бесконечной (IIR) импульсной характеристикой, практически все реально используемые спектральные окна и т. п.), преобразования в частотной области (FFT, преобразование Хартли, спектр амплитуд и фаз, функция передачи, взаимный спектр и функция когерентности), интерполяция/экстраполяция, подбор кривых, настраиваемый поиск экстремумов и статистика. Также предоставляется возможность работы с физическими единицами измерений. Таким образом можно решать абсолютное большинство задач обработки сигналов, возникающих при проведении измерений и испытаний. Полный набор всех функций математической обработки имеется только в варианте поставки ComponentWorks, который называется «Full Development System».
В ComponentWorks до версии 2 включительно функции математической обработки были выполнены также по технологии ActiveX, и пакет поставлялся в одном виде для С++, Visual Basic и Delphi. Начиная с версии 3, которая вышла в этом году, произошло разделение. Просто ComponentWorks версии 3 по- прежнему основан полностью на ActiveX и декларируется фирмой как для Visual Basic. Вместе с тем появился ComponentWorks++ версии 1.0, который предназначен целевым образом для Visual C++ версии не ниже 6 и платформ Windows 2000/NT/9x. В нем функции графики и математической обработки переработаны и выполнены в виде библиотек классов С++, которые дополняют и расширяют MFC классы. Работать стало безусловно удобнее, чему также способствует появившееся специальное дополнение к мастеру создания применений (AppWizard), которое встраивается в интегрированную среду разработки (IDE). Но скорость математических вычислений практически не изменилась. Для ориентировки по производительности математической обработки в ComponentWorks++ под Windows 98 в табл.1 приведены реально полученные средние значения времени вычислений прямого FFT длиной 4096 точек над входными данными в формате действительных чисел и одного выходного отсчета для НЧ-фильтра Баттерворта 8-го порядка c бесконечной импульсной характеристикой при длине входного блока данных до 30 000 точек. Следует также подчеркнуть, что обработка ведется в 64-разрядном формате с плавающей запятой (double). На время вычислений сильно влияют наличие параллельных процессов и параметры кэша.
Таблица 1
Конфигурация системы |
FFT, мс |
Фильтр Баттерворта, мкс |
K6-200 МГц/512 Кб/66 МГц/ТХ/64 Мб |
9 |
1,3 |
PentiumII-400 МГц/100 МГц/VIA Apollo Pro 133A/128 Мб |
4,2 |
0,5 |
В части поддержки работы с внешними устройствами имеются компоненты ActiveX для последовательного интерфейса (COM-порты), GPIB, VXI и, естественно, для всего спектра аппаратуры, которую выпускает National Instruments. Относительно GPIB следует иметь в виду, что выпускается много функциональных аналогов GPIB-плат разработки National Instruments (менее дорогих).
В версии 3 ComponentWorks в варианте поставки «Full Development System» появились компоненты, поддерживающие спецификацию IVI (Interchangeable Virtual Instruments, www.ivifoundation.org). Этот подход к созданию унифицированного интерфейса программирования стандартных виртуальных измерительных приборов (мультиметры, осциллографы, генераторы сигналов, программируемые источники питания, коммутаторы), независимого от конкретной аппаратуры, настойчиво продвигается фирмой. Здесь же следует отметить, что существует и другая спецификация — ODAA (Open Data Acquisition Association, www.opendaq.org), — ориентированная на такие же проблемы. В состав ComponentWorks включены два IVI-компонента на основе ActiveX (но не поддерживаются продуктами Borland) — цифровые мультиметр (DMM) и осциллограф.
Описанные свойства ComponentWorks относятся к основному пакету, но к нему есть также отдельно поставляемые приложения (ActiveX, поддерживаются продуктами Microsoft и Borland):
- для задач контроля и управления: ComponentWorks Autotuning PID и ComponentWorks Automation Symbols;
- для задач обработки изображений: ComponentWorks IMAQ Vision.
Программная поддержка ввода/вывода для C/C++, Visual Basic и Delphi.
Если в качестве внешнего устройства используется изделие достаточно авторитетного производителя, то фирмой практически всегда предусмотрена программная поддержка работы с аппаратной частью на С/С++ и Visual Basic. Если же приходится иметь дело с нестандартным «железом», то необходимо решать дополнительные проблемы по организации ввода/вывода. В С/С++ есть возможность непосредственной работы с памятью и портами. В Visual Basic нет поддержки ввода/вывода, но имеется много программ типа «shareware», которые организуют его в самом простом виде. Для определенного круга задач такие решения могут быть приемлемы.
Для критичных по времени выполнения приложений при обработке прерываний и необходимости обслуживания достаточно сложных устройств типа PCI, USB и т. п. потребуется специфический драйвер работы с аппаратной частью. В общем случае для его разработки необходим Microsoft DDK (Driver Development Kit) под соответствующую платформу и/или продукты других фирм (например, DriverStudio от Numega) для облегчения процедуры разработки драйвера. Это требует определенного опыта и времени. То есть складывается ситуация, подобная рассмотренной выше при разработке интерфейса пользователи и математической обработки при сборе данных. И также имеется возможность рассмотреть решения, предлагаемые такими фирмами, как BlueWater Systems (www.bluewatersystems.com), Jungo (www.jungo.com, старое название — KRFTech) и Tetradyne (www.tetradyne.com). Эти решения предоставляют обширные возможности работы с физической памятью, портами и прерываниями для всех платформ Windows при минимальном изучении деталей внутренней структуры операционной системы. Очевидные достоинства таких решений — сокращение времени разработки и отладки ПО и надежность его работы за счет применения проверенного продукта, который использует корректный драйвер, работающий в Kernel-Mode (кольцо 0).
Наибольшие возможности программной поддержки внешних устройств, имеющих интерфейс ISA, ISA Plug-and-Play, PCI, PCMCIA или USB, предоставляются в пакете WinDriver (версия 4.32 на момент написания статьи) от Jungo. Имеется весь необходимый набор функций для работы с устройством (специфицированные для конкретного интерфейса), памятью и портами (в том числе операции по быстрым пересылкам блоков данных), прерываниями, а также для обслуживания DMA по шине PCI. В случае применения в устройстве с интерфейсом PCI специализированных микросхем фирм AMCC, Galileo, PLXTech, V3 и ПЛИС Altera с использованием PCI-Мегафункций разработки как самой Altera, так и PLD Applications (www.plda.com), в пакете предусмотрены библиотеки для расширенной поддержки этих кристаллов. Такая возможность делает WinDriver весьма полезным инструментом и в процессе разработки и отладки собственно аппаратной части проекта на основе таких микросхем.
WinDriver можно использовать совместно с C/C++, Delphi и Visual Basic. Jungo объявляет главным достоинством пакета простоту и быстроту разработки приложения. Это обеспечивает мастер создания драйвера Driver Wizard (рис. 2).
Рис. 2. Описание ресурсов аппаратной части и ее интерактивная отладка в WinDriver
Для своего устройства разработчик указывает адреса портов, памяти, формат данных, номер прерывания и т. п. В этом же окне есть средства отладчика по чтению/записи данных и управлению прерыванием. Заданный таким образом набор функций по взаимодействию с аппаратурой далее автоматически транслируется в проект на C/C++ и Delphi для соответствующей среды (рис. 3). Полученные результаты в качестве соответствующих библиотек далее используются при разработке ПО в целом.
Рис. 3. Получение результатов в WinDriver для последующей компиляции
Для Visual Basic имеются свои библиотечные модули с сокращенным набором функций и подпрограмм по вводу/выводу, а также есть возможность обработки прерывания с созданием отдельного потока. Пользователь должен сам настраивать вызовы функций и подпрограмм.
Созданное описанным выше образом собственное ПО будет работать в User-Mode (кольцо 3), взаимодействуя с аппаратурой через фирменный драйвер VXD или SYS. Повысить же такую скорость взаимодействия с аппаратурой до уровня Kernel-Mode (очень важный момент в ряде применений) в WinDriver можно не очень сложным способом путем использования приема «Kernel PlugIn». Для этого предварительно проверенная в User-Mode часть программы, которая требует повышения быстродействия, комбинируется с имеющейся программой-примером на языке С (типа скелета). Последовательность таких действий детально описана в руководстве пользователя. Затем полученный текст компилируется с помощью предусмотренного BAT-файла (для Visual C) в собственный драйвер VXD или SYS, который будет работать совместно с фирменным. При этом для Win9x по-прежнему не нужен DDK, а для WinNT соответствующий DDK хоть частично, но потребуется для компиляции.
1.2 LabWindows/CVI
Это очередной продукт от National Instruments (версия 5.5 на момент написания статьи). Пакет представляет собой законченную интерактивную среду программирования на C по спецификации ANSI. Среда включает в себя управление проектом, редакторы графического интерфейса пользователя и текста на С, компилятор, линкер, отладчик и набор библиотек. Библиотеки включают в себя функции создания панели прибора, математической обработки, интерфейсов к внешним устройствам и обмена данными с другими приложениями (TCP, DDE и ActiveX). Для каждой функции есть своя диалоговая панель редактирования ее параметров. Набор функций математической обработки примерно соответствует описанным выше для ComponentWorks. Также имеются собственные стандартные ANSI C библиотеки. Результатом проектирования является файл EXE или DLL.
LabWindows/CVI привлекателен для потребителей его предшественника под DOS, для которых ориентация на него будет естественным и простым решением, и для желающих иметь в одном комплекте от одного производителя почти весь инструментарий для разработки программ проведения измерений и испытаний. Достоинством пакета также является относительная простота освоения его основных возможностей, чему также способствуют многофункциональный отладчик, подробная документация и обилие примеров.
Процесс проектирования начинается с построения панели программы с помощью редактора интерфейса пользователя. Стиль компонентов для создания панели подобен другим продуктам такого же назначения от National Instruments (рис. 4). После разработки панели вызывается генератор кода, который автоматически формирует файлы с текстом программы на С. В полученный код входят необходимая инициализация, основная функция main() с вызовами для загрузки и отображения панели и набор функций, названных callback, для обработки воздействий на органы управления панели. Функции main и callback выполнены в виде каркаса для последующего заполнения собственным текстом, то есть в достаточно привычном по другим системам программирования стиле.
Рис. 4. Передняя панель в LabWindows/CVI
Кроме использования встроенной генерации файлов EXE и DLL допустимо применение для этих целей и внешних средств от Microsoft, Borland, Watcom и Symantec.
Организацию интерфейса к внешним устройствам обеспечивают библиотеки под RS-232, GPIB, VXI, IVI и собственную аппаратуру фирмы. Для осуществления простого ввода/вывода и доступа к физической памяти под Win9x и Win NT/2000 предуcмотрены драйверы нижнего уровня (VXD и SYS). LabWindows/CVI не допускает создание собственных драйверов в Kernel-Mode, но обеспечивает организацию взаимодействия с таковыми.
Для LabWindows/CVI имеется много дополнительных, отдельно поставляемых расширений: под задачи управления ходом проведения испытаний, для деловых приложений, статистики и работы с базами данных (SQL), PID, обработка изображений (в IMAQ Vision for LabWindows/CVI версии 5.0 поддерживаются инструкции MMX) и набор средств цифровой обработки сигналов (проектирование цифровых фильтров, трехоктавный анализ и wavelet-преобразование).
1.3 ATEasy
Малоизвестный у нас пакет ATEasy (название происходит от ATE — Automatic Test Equipment) фирмы Geotest (www.geotestinc.com) имеет собственный язык программирования и ориентирован на системы проведения измерений и испытаний. В этом году появилась его полностью переработанная версия 3.0 под Windows 9x/NT/2000.
Для текстового программирования предусмотрен компактный набор конструкций. Для общих задач эти конструкции по синтаксису мало отличаются от аналогичного назначения в основных языках высокого уровня, а для контрольно-испытательной специфики они легко понимаемы.
Интегрированная среда программирования сделана в стиле Visual-продуктов от Microsoft (рис. 5). Рабочий проект может иметь три типа модулей: системный, драйверов и программ. Системный модуль определяет аппаратную конфигурацию и используемые внешние устройства (инструменты) с соответствующими драйверами. Программный модуль содержит одну или несколько программ, которые строятся в стиле тестов и задач. Под задачей понимается группа тестов. Типичным тестом является процедура проведения измерения и выдача его результата. Итогом теста также может быть ответ на соответствие полученных данных заданным требованиям. Результаты выполнения тестов фиксируются в протоколе.
Рис. 5. Среда программирования ATEasy
В каждый модуль входят необходимые для их функционирования подмодули в виде библиотек, команд, переменных, событий и т. п. (рис. 5). Встроенная системная библиотека (Internal) построена на основе Microsoft COM (Component Object Model) технологии и обеспечивает средства для создания диалоговых панелей, достаточно ограниченный набор основных математических функций, поддержку взаимодействия с внешними устройствами и протоколами (файловая система, RS-232/422, ISA-порты, GPIB, VXI, DDE, TCP/IP), а также организацию многопотоковой работы.
Можно использовать внешние библиотеки, которые содержат COM-объекты и компоненты ActiveX. В примере на рис. 5 с целью демонстрации использована библиотека ActiveX компонентов для интерфейса пользователя из ComponentWorks при создании еще одного графического дисплея. Такая структура пакета значительно расширяет его возможности и сферы применения.
Привлекательным свойством пакета является режим создания собственного драйвера для интерфейсов и устройств типа COM-портов в PC, GPIB, VXI, встраиваемых ISA-плат и WinSocket. Для GPIB и VXI может использоваться соответствующая периферия только некоторых определенных фирм, и для взаимодействия с ней на аппаратном уровне необходимы дополнительные внешние программные файлы. Программирование остальных интерфейсов полностью обеспечивает внутренняя библиотека. При разработке драйверов для ISA-плат предусмотрены задание диапазонов портов ввода/вывода и адресов памяти и использование одного или двух прерываний и до двух каналов DMA. Библиотека имеет функции обращения к 8- и 16-разрядным портам (в том числе и для блочных передач данных) и управления прерываниями. К сожалению, процедуры создания драйвера для ISA-плат и его использования описаны в документации крайне скупо, а попытки построения такого своего драйвера с обработкой прерываний не дали результата, и к тому же пакет начинал часто давать сбои. Вообще говоря, сбои происходили и в других случаях. Возможно, все это связано со свежестью значительно переработанного продукта и в дальнейших версиях ситуация улучшится.
Входящие в состав пакета готовые драйверы поддерживают некоторые автономные измерительные приборы с интерфейсом GPIB и собственную продукцию Geotest и, скорее всего, не пригодятся отечественному потребителю.
Разработка программ облегчается наличием интерактивного управления последовательностью исполнения, пропусков, зацикливания тестов и задач, а также многофункциональным отладчиком. Проект может компилироваться в файл EXE для автономной работы вне интегрированной среды и передачи конечному потребителю.
Опытным пользователям С/С++ система ATEasy, наверное, не предложит ощутимых преимуществ в работе по созданию ПО для измерений и испытаний. Исключением может быть тот случай, когда значительная часть проекта связана с организацией взаимодействия с теми типами интерфейсов, на которые ориентирован ATEasy. Приступающим же впервые к такого рода задачам пакет в состоянии обеспечить весь набор средств для создания большого круга приложений с относительно небольшими усилиями. Для определения конкретной пригодности ATEasy на сайте фирмы есть его 30-дневная полнофункциональная версия объемом 15 Мбайт.
Продолжение следует...
alex_kurbatov@hotmail.com
|