Промышленная электроника, автоматика и системы управления
УДК 004.42 https://doi.org/10.18503/2311-8318-2018-2(39)-42-48
Верзунов С.Н.1, Бочкарев И.В.2
1 Институт автоматики и информационных технологий Национальной Академии Наук Кыргызской Республики
2 Кыргызский государственный технический университет им. И. Раззакова
РАЗРАБОТКА ПРОГРАММНОГО КОМПОНЕНТА ТРАССОИСКАТЕЛЯ НА БАЗЕ УСТРОЙСТВА СБОРА ДАННЫХ Л КАРД E502
В работе рассматриваются проблемы разработки программного обеспечения для визуализации, обработки, анализа и регистрации данных, полученных с помощью трассоискателя на базе модуля сбора данных Л КАРД E502 для поиска подземных электрических кабелей. Отличительными особенностями подобного программного обеспечения является необходимость фильтрации и анализа данных в режиме реального времени с возможностью привязки результатов трассировки кабеля к карте местности с помощью GPS. В связи с тем, что подобные приложения требуют сложной цифровой обработки сигналов, разработана библиотека на языке Cython для работы с модулем E502, позволяющая применить для обработки данных стандартные, уже существующие на языке Python реализации алгоритмов линейной алгебры, фильтрации, быстрого преобразования Фурье и других. Работоспособность предложенной в статье модели программного компонента трассоискателя продемонстрирована разработанным на языке Python программным обеспечением, позволяющим эффективнее бороться с помехами и точнее определять расположение кабельных трасс.
Ключевые слова: трассоискатель, модуль сбора данных, вейвлет-анализ, Python, Cython, фильтрация.
Введение
Высокая плотность расположения подземных кабельных линий и огромное количество источников электромагнитных помех, таких как сети связи, воздушные ЛЭП и т.д., требуют точных и надежных приборов. В связи с этим в настоящее время почти все ка-белепоисковые системы снабжены цифровыми системами обработки сигналов, позволяющими эффективнее бороться с помехами и точнее определять расположение кабельных трасс [1]. Неотъемлемой частью любой системы обработки сигналов является звено, обеспечивающее возможность передачи информации в персональную или портативную ЭВМ [2]. Для этой цели могут использоваться различные аппаратно-программные средства, например благодаря своей универсальности устройство сбора данных Л Кард E502, представляющее собой универсальный 16-битный модуль ввода/вывода до 32-х аналоговых и 17-ти цифровых сигналов в компьютер через интерфейсы USB 2.0 (highspeed) и Ethernet (100 Мбит) с частотой преобразования до 2 МГц и возможностью их цифровой обработки в реальном времени. Кроме того, ООО «Л Кард» приветствует интеграцию своих модулей в пользовательские системы. [3].
С модулем поставляется драйвер, написанный на языке C, и библиотеки для языков программирования С++, С# и LabVeiw. Однако в области анализа технических данных с интерактивной визуализацией результатов в настоящее время используются такие предметно-ориентированные языки программирования и инструменты - с открытым исходным кодом и коммерческие, как R, MATLAB, SAS, Stata и Python.
В комплекте с устройством сбора данных поставляется также бесплатно распространяемая программа LGraph2, предназначенная для регистрации, визуали-
© Верзунов С.Н., Бочкарев И.В., 2018
зации и обработки аналоговых сигналов, записанных с помощью измерительных устройств или модулей АЦП производства ООО «Л Кард» [5]. Однако возможности анализа данных этой программой весьма ограничены: в частности, с помощью этой программы нельзя выполнить вейвлет-анализ данных и привязку результатов измерения к карте местности, что необходимо для фиксации расположения кабельных линий.
В научном парке МГУ разработана виртуальная измерительная лаборатория PowerGraph, предоставляющая пользователю широкие возможности регистрации, визуализации, редактирования, обработки и анализа данных, полученных, в том числе, и с помощью устройства сбора данных Л Кард E502 [6]. Однако это программное обеспечение поставляется с аппаратным USB-ключом и имеет достаточно высокую стоимость, что не позволяет использовать его в собственных разработках.
С момента своего появления в 1991 году Python стал одним из самых популярных динамических языков программирования наряду с Perl, Ruby и другими. Из всех интерпретируемых динамических языков Python выделяется большим и активным сообществом среди исследователей по всему миру, использующих его для научных и инженерных расчетов. Применение Python для этой цели в промышленных и технических кругах значительно расширилось с начала 2000-х годов. Сравнительно недавнее появление библиотек различных математических методов обработки данных для Python (прежде всего, NumPy, pandas) сделало его серьезным конкурентом в решении задач манипулирования данными [4]. В сочетании с достоинствами Python как универсального языка программирования это делает его лучшим на сегодняшний день выбором для создания программного обеспечения устройств, для которых требуется реализация сложных алгоритмов обработки данных.
Постановка задачи
Несмотря на наличие такой необходимости, в настоящее время не существует какой-либо возможности создавать устройства на базе модуля Л Кард E502, требующие сложной цифровой обработки сигналов. Поэтому актуальной задачей является разработка библиотеки для языка Python, позволяющей работать с устройством сбора данных Л Кард E502, и создание программного компонента трассоискателя на языке Python для цифровой обработки и регистрации полученных данных, позволяющего эффективнее бороться с помехами и надежнее определять расположение кабельных линий.
Программный компонент трассоискателя
Разрабатываемый программный компонент трассоискателя должен решать задачи сбора, регистрации, визуализации, фильтрации и анализа данных, позволяя при этом выбрать: модуль сбора данных; тип подключения датчика к устройству сбора данных; канал и пределы измерения; частоту сбора данных; тип и параметры фильтра, а также параметры вейвлет-анализа. Кроме того, необходимо визуализировать координаты найденных кабельных линий с возможностью просматривать и сохранять результаты работы на карте.
Диаграмма вариантов использования программных средств показана на рис. 1. С помощью разработанного программного компонента возможно использовать все распространенные типы цифровых фильтров: фильтр верхних частот, фильтр нижних частот, полосовой фильтр и фильтр-пробку, так как вблизи ЛЭП и трубопроводов сигналы промышленной частоты 50 Гц и ее гармоники затрудняют поиск неисправности на линии [1]. И наконец, собранные данные должны быть привязаны к карте местности и сохранены в файл в формате PNG (Portable Network Graphics -портативная сетевая графика).
Важная функция программы - визуализация данных в виде временных рядов. В режиме реального времени можно видеть график исходных данных, поступающих с датчика, график отфильтрованных данных, а также результат вейвлет-преобразования исходного временного ряда в виде двумерной скалограммы. Более подробно алгоритм вейвлет-анализа временных рядов рассмотрен в работе [7].
СТРУКТУРНЫЕ КОМПОНЕНТЫ ПРОГРАММЫ
Своим успехом в качестве платформы для технических расчетов Python отчасти обязан простоте интеграции с кодом на С, С++ и FORTRAN. Во многих современных вычислительных средах применяется общий набор унаследованных библиотек, написанных на FORTRAN и С, содержащих реализации алгоритмов линейной алгебры, оптимизации, интегрирования, быстрого преобразования Фурье и других. Поэтому многочисленные компании и исследовательские институты используют Python как средство для интегрирования написанных за 30 лет программ [4].
Использование в качестве языка программирования Python позволяет задействовать описанные ниже внешние компоненты без изменения исходного кода (рис. 2).
NumPy реализует численные алгоритмы и работу с матрицами. SciPy - библиотека научных алгоритмов для Python, из этого модуля импортируются функции, реализующие фильтрацию данных. Matplotlib используется для построения графиков. Tkinter применяется для построения графического интерфейса пользователя (GUI - Graphic User Interface), Basemap используется для нанесения результатов работы на карту. Из библиотеки машинного обучения mlpy импортируются функции вейвлет-анализа данных [8]. Модуль python-gps предоставляет вспомогательные функции определения географического местоположения для привязки данных к карте местности.
Блок управления устройством
Рис. 1. Диаграмма вариантов использования программных средств
Basemap 0
>
mlpy 0
SciPy 0
£502 0
Tkinter 0
«use» «use» <<use»
«use» у
«use»
E502Plot 0
«use»
NumPy 0
«»I?» «use»
Matplotlib 0
python- 9
gps
Рис. 2. Структурная схема программы
Архитектура программных средств
Для упрощения разработки и сопровождения код программы был разбит на несколько классов (рис. 3), объединенных в модуль Е502Р^ (см. рис. 2). Класс MainWindow реализует основное окно программы и предоставляет пользователю интерфейс для взаимо-
действия с устройством сбора данных. В главном окне расположены графики исходного и отфильтрованного временного ряда, а также его скалограмма. Вывод графических данных реализуется посредством класса Canvas. Непосредственное взаимодействие с устройством сбора данных осуществляется с помощью класса Reciver, который использует модуль mlpy и класс Filter для обработки и фильтрации данных.
Класс MapWindow реализует вспомогательное окно, в котором отображается карта местности, текущее положение, а также все отмеченные пользователем пункты на карте с возможностью добавить новые или удалить ошибочно отмеченные точки на карте.
Класс E502 представляет собой программную абстракцию устройства сбора данных, реализованную на языке Cython, вышедшего за последние несколько лет на одно из первых мест в области создания быстрых компилируемых расширений Python и организации интерфейса с кодом на С и С++ [10].
Рис. 3. Диаграмма классов программного компонента трассоискателя
В настоящее время Cython стал излюбленным инструментом многих разработчиков, пишущих на Python код инженерных приложений, который должен взаимодействовать с библиотеками на С или С++. Поэтому и интерфейс библиотеки платы сбора данных написан на языке Cython и оформлен в виде классов, показанных на рис. 4. В коде на языке Cython возможно организовать прямой вызов С-функций, использующих такие низкоуровневые С-конструкции, как указатели, структуры, динамические массивы др. Так как Cython занимает промежуточное положение между языками C и Python, он обеспечивает полный контроль над всеми аспектами взаимодействия двух языков, оставаясь при этом совместимым с Python, что делает интерфейсный код на Cython более удобным для понимания и отладки по сравнению с другими инструментами (такими, как SWIG, SIP, Boost.Python, ctypes, cffi), предназначенными для этой цели [11]. Благодаря такой организации функции, импортированные с помощью Cython имеют производительность на уровне С, за вычетом минимальных накладных расходов на организацию совместимого с Python интерфейса, так как код на Cython сначала транслируется на язык C, а затем компилируется в бинарный код. В частности, написанная на Cython функция get_usb_dev находит все подключенные по интерфейсу USB устройства, возвращая список устройств и полную информацию о них, включая название, серийный номер и основные характеристики каждого устройства, а функция get_usb_devcnt возвращает количество устройств, подключенных по интерфейсу USB. С помощью функции create dev можно инициализировать параметры уст-
ройства сбора данных, такие как используемый тип подключения, канал, частоту сбора данных и пределы для измерения, с помощью функции get_dev_param можно получить установленные с учетом технических ограничений параметры устройства. Функция try_dev позволяет проверить, были ли параметры устройства успешно проинициализированы, а функция get_dev_info позволяет узнать полные технические характеристики устройства. Наконец, функции start_dev и terminate_dev позволяют запустить и остановить сбор данных. Классы Modes и Ranges позволяют преобразовать строковое представление возможных типов подключений и пределов измерений платы сбора данных во внутреннее, используемое в драйвере устройства.
ОПИСАНИЕ ИНТЕРФЕЙСА ПОЛЬЗОВАТЕЛЯ
Интерфейс пользователя состоит из главного окна и вспомогательного окна с картой для визуализации найденной трассы кабеля. В главном окне расположены элементы интерфейса, позволяющие выбрать и настроить устройство сбора данных (рис. 5), также здесь находятся графики исходного и отфильтрованного временного ряда и скалограмма исходного ряда данных. Для визуализации координат найденных кабельных линий предусмотрено специальное окно (рис. 6), позволяющее по отдельным точкам измерений создавать и редактировать найденную трассу кабеля, а также экспортировать результаты работы в графический файл в формате PNG.
E502
_adc_data: double *
- _ch_cnt: uint32_t _din_data: uint32_t
- _f_adc: double * ,J ch.. modes: uint32_t _f_ch ranges: uint32_t ,J channels: uint32_t *
- f din: double _f_fiame: double
- hnd: t_x502_hnd _lch_cnt: uint32_t
- _rcv_buf: uint32_t _read_block_size: uint32_t
- jecive: bool _usb_devent: uint32_t
- _cinit_(object): void
- _dealloc___(object): void
- _fi ee_dev(object): void _set_dev_param(object, uint32_t, double, double, double): void
- .Stop dcv(objoct): void
+ create_dev(object, uint32_t, uint32_t, uint32_t *, double, double, double, uint32_t *, uint32_t *, uint32_t *): void
+ get_dev_info (object): void
+ getdevparam(object): tuple
+ got lib vcr (object): string
+ get_usb_dev(object): list
+ get_usb_devcnt(object): void + stait_dev(object. function, int): void + terminate_dev(object): void
+ tiy_dev(object): bool
E502::Ranc|es
+ get rangefstring): uint32 t
E 502:: Modes
+ get mode(string): uint32 t
Рис. 4. Классы библиотеки для устройства сбора данных LCard E502
Рис. 5. Главное окно программы
Текущее положение: 74,581108; 42,878384
Рис. 6. Диалоговое окно карты с нанесенной на нее трассой кабеля
Заключение
Таким образом, несмотря на то, что для работы с устройством сбора данных Л КАРД E502 уже разработано несколько инструментов, они либо имеют достаточно высокую стоимость, либо их возможностей недостаточно для создания программного компонента трассоискателя.
Разработка библиотеки для языка Python, позволяющей работать с устройством сбора данных Л КАРД E502, и создание программной компоненты трассоис-кателя на языке Python позволили решить задачи сбора, регистрации, визуализации, фильтрации и вейвлет-анализа данных, что дает возможность эффективнее бороться с помехами и надежнее определять расположение кабельных линий.
Выбор Python в качестве языка программирования позволил применить при проектировании программных средств готовый набор проверенных временем библиотек, написанных на FORTRAN и С, содержащих реализации алгоритмов линейной алгебры, фильтрации, визуализации, привязки данных к местности, быстрого преобразования Фурье и других.
Список литературы
1. Метелев Б., Кочеров А. Поиск повреждений трасс: кабе-леискатель изобретен заново // Первая миля. 2013. №6 (39). С. 68-73.
2. Брякин И.В. Прикладные аспекты малоглубинной магниторазведки // Проблемы автоматики и управления. 2016. №1 (30). С. 65-75.
3. http://www.lcard.ru/download/x502api.pdf (дата обращения: 06.09.2017).
4. Маккинли Уэс. Python и анализ данных / пер. с англ. Слинкин А.А. М.: ДМК Пресс, 2015. 482 с.
5. http://www.lcard.ru/products/software/lgraph (дата обращения: 23.10.2017).
6. Измайлов Д.Ю. Виртуальная измерительная лаборатория PowerGraph // ПиКАД. 2007. № 3. C. 42-47.
7. Верзунов С.Н. Вейвлет-преобразование как инструмент анализа магнитовариационных данных // Проблемы автоматики и управления. 2014. №2 (27). С. 52-61.
8. https://arxiv.org/pdl71202.6548.pdf (дата обращения: 25.01.2018)
9. Верзунов С.Н. Разработка программных средств для вейвлет-анализа одномерных временных рядов // Проблемы автоматики и управления. 2014. №2 (27). С. 62-71.
10. http://cython.org/#about (дата обращения: 08.09.2017)
11. Dalcin L., Bradshaw R., Smith K., Citro C., Behnel S., Seljebotn D.S. Cython: The Best of Both Worlds // Computing in Science & Engineering. 2011. Vol. 13, N. 2. P. 31-39.
Поступила в редакцию 21 марта 2018 г.
Information in English
Development of Program Component of the Cable Tracer Based on the Device for the Data Acquisition Board L CARD E502
Sergei N. Verzunov
Ph.D. (Eng.), leading researcher, Laboratory of data measurement systems, Institute of Automation and Information Technology, National Academy of Sciences of the Kyrgyz Republic, Bishkek, Kyrgyz Republic. E-mail: verzunov@hotmail.com. ORCID: https://orcid.org/0000-0003-3130-2776
Igor V. Bochkarev
D.Sc. (Eng.), Professor, the Department of Electrical Engineering, Kyrgyz State Technical University named after I. Razzakov, Bishkek, Kyrgyz Republic. E-mail: elmech@mail.ru. ORCID: https://orcid.org/0000-0002-9873-9203
In the article we discuss the problem of software development intended for visualization, processing, analyzing and recording of the data obtained by the locator to search for underground electric cables on the basis of data acquisition board L CARD E502. The features typical for such software is the need for data filtering and analysis in real time with the ability to link the results of the cable trace to the map of the terrain using GPS. Due to the fact that such applications require complex digital signal processing, a library has been developed in Cython language for operating with the E502 module, which makes it possible to apply for the processing of data of the finished Python implementations of algorithms for linear algebra, filtering, fast Fourier transformation and others. The software developed in Python language, which makes it possible to more effectively deal with interference and to better determine the location of cable routes, demonstrates the performance of the proposed model of the program component of the tracer.
Keywords: trace searcher, data acquisition module, wavelet analysis, Python, Cython, filtering.
References
1. Metelev B., Kocherov A. Search for damage to the traces: the cable finder was invented anew. Pervaya milya [FIRST MILE]. 2013, no. 6 (39), pp. 68-73. (In Russian)
2. Bryakin I.V. Applied aspects of shallow magnetic prospecting. Problemy avtomatiki i upravleniya [Problems of automation and control]. 2016, no. 1 (30), pp. 65-75. (In Russian)
3. http://www.lcard.ru/download/x502api.pdf (circulation date is September 6, 2017).
4. McKinley Wes. Python i analiz dannykh [Python and Data Analysis] / Translated from English. Slinkin A.A. Moscow: DMK Press, 2015. 482 p. (In Russian)
5. http://www.lcard.ru/products/software/lgraph (circulation date 23.10.2017).
6. Izmailov D.Yu. Virtual measuring laboratory PowerGraph. Pikad [Picad]. 2007, no. 3, pp. 42-47. (In Russian)
7. Verzunov S.N. Wavelet transform as a tool for analyzing magnetovariance data. Problemy avtomatiki i upravleniya [Problems of Automation and Control]. 2014, no. 2 (27), pp. 52-61. (In Russian)
8. https://arxiv.org/pdl/1202.6548.pdf (circulation date January 25, 2013)
9. Verzunov S.N. Development of software for wavelet analysis of one-dimensional time series. Problemy avtomatiki i upravleniya [Problems of Automation and Control]. 2014, no. 2(27), pp. 62-71. (In Russian)
10. http://cython.org/#about (date of circulation on September 8, 2017)
11. Dalcin L., Bradshaw R., Smith K., Citro C., Behnel S., Seljebotn D.S. Cython: The Best of Both Worlds. Computing in Science & Engineering. 2011, vol. 13, no. 2, pp. 31-39.
Верзунов С.Н., Бочкарев И.В. Разработка программного компонента трассоискателя на базе устройства сбора данных Л КАРД Е502 // Электротехнические системы и комплексы. 2018. № 2(39). С. 42-48. https://doi.org/10.18503/2311-8318-2018-2(39)-42-48
Verzunov S.N., Bochkarev I.V. Development of Program Component of the Cable Tracer Based on the Device for the Data Acquisition Board L CARD E502. Elektrotekhnicheskie sistemy i kompleksy [Electrotechnical Systems and Complexes], 2018, no. 2(39), pp. 42-48. (In Russian). https://doi.org/10.18503/2311-8318-2018-2(39)-42-48