BC/NW 2019 № 1 (34):7.1
РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ КОНТРОЛЯ ВЫСОКОВОЛЬТНЫХ ЛИНИЙ ЭЛЕКТРОПЕРЕДАЧ
Лебедев М.М., Мишин А.А.
В статье описываются особенности разработки программного комплекса для автоматизации осуществления контроля линий электропередач. Рассматривается задача и её актуальность, разбираются компоненты, входящие в состав программного комплекса.
Высоковольтные линии электропередач подвергаются непрерывному негативному воздействию со стороны факторов окружающей среды. На них воздействуют погодные условия, их собственный вес, сила натяжения проводов, не исключены и природные катаклизмы. Существуют комплексы мероприятий по их осмотру и устранению неисправностей и дефектов. Для осмотра и документирования состояния линий высылаются специальные бригады, на данный момент им приходится заполнять все документы вручную. В связи с тем, что многие данные приходится согласовывать с огромными таблицами, этот процесс занимает длительное время, кроме того, не исключены и ошибки (присутствует человеческий фактор). Поэтому была поставлена задача по проектированию и внедрению программного обеспечения для автоматизации данного процесса.
Основные требования и спецификации к проекту были описаны заказчиком в техническом задании.
Для реализации данного проекта необходимо было разработать программный комплекс, состоящий из приложения устанавливаемого на персональный компьютер филиала ответственного за осмотр ВЛЭП под управлением операционной системы Windows и приложение для планшета обходчика ВЛЭП на операционной системе Android.
Разрабатываемое приложение для ПК должно быть совместимо с операционными системами семейства Windows, а именно: Windows XP, Windows Vista, Windows 8, Windows 8.1 и Windows 10. Данное требование накладывает существенные ограничения на инструменты разработки. Так, например, отсутствует возможность использовать .NET Framework, из-за проблем совместимости между версиями. Так же не представляется возможным использование консоли Windows PowerShell, вместо стандартной консоли cmd.exe, так как PowerShell вошёл в состав операционных систем Windows только начиная с версии Windows 7.
Приложение для ПК как результат работы должно формировать базу данных SQLite3. Данная СУБД имеет преимущество перед альтернативами в том, что она по умолчанию поддерживается операционной системой Android, а также имеет встраиваемое ядро, что позволяет исполнять запросы к базе данных из кода при помощи функций SQLite API [1]. База данных будет формироваться на основе присылаемых из центрального офиса компании таблиц в формате Microsoft Excel, после чего она передаётся в приложение на планшете. Иллюстрация данного этапа работы приложения представлена на рисунке 1. Планшет формирует данные для отображения пользователю, помогая в заполнении необходимой информации. В результате обхода ЛЭП введённые пользователем данные хранятся в файлах формата CSV (для текстовых и численных значений дефектов линий) и JPEG (для фотофиксированных дефектов). Эти данные разделены в иерархической файловой системе по директориям для различных дат осмотра и осмотренных линий. После завершения обхода корневая директория с данными архивируется в формате GZIP и отправляются на компьютер с целью формирования окончательных результатов. Окончательным результатом работы комплекса является та же структура директорий, что и на планшете, однако все файлы формата CSV должны быть преобразованы в совокупность таблиц Excel в соответствии с шаблонами листов осмотра. Иллюстрация данного этапа работы приложения представлена на рисунке 2. Всего в системе предполагается три вида листа осмотра: отчетный лист осмотра, лист для автоматической загрузки в систему SAP и лист с комментариями обходчика.
Учитывая однообразность выполняемых преобразований данных целесообразно применять структурный метод разработки ПО. На основное приложения возлагается рудиментарная задача вывода интерфейса, подготовки входных/выходных данных, и запуска скриптов их обработки и преобразований.
Приложение должно иметь графический интерфейс, предоставляющий удобный доступ к трём основным функциям приложения: формирование выгрузки, передача данных с ПК на планшет и формирование листов осмотра на основе выгрузки. Вызов этих функций должен сопровождаться сообщениями об ошибках, предупреждениях или об успешно выполненных преобразованиях. Так же ввод и вывод данных должен быть выполнен в виде удобного интерфейса через встроенный файловый проводник операционной системы.
Учитывая все вышеперечисленные особенности наиболее удобной средой разработки основного приложения является Qt Framework. Тем самым обеспечивается совместимость с почти всем семейством операционных систем Windows. Так же большинство необходимых процедур (работа с БД, запуск внешних процессов параллельно с основным) уже реализована в библиотеках Qt [2]. Все преобразования целесообразно производить в отдельных процессах, а не в коде основной программы, таким образом основное приложение не будет блокироваться при выполнении обработки данных. Скрипты по преобразованию таблиц Excel удобнее писать на языке VBScript[3], а вызовы ядра SQLite и работу с файловой системой удобнее описывать как пакетный файл[4]. Динамические (создаваемые в процессе обработки данных) и статические (неизменяемые) запросы предполагается хранить как текстовые файлы и передавать в ядро их содержимое построчно.
В соответствии с предоставленным заказчиком техническим заданием в приложении должны быть реализованы три основные функции: формирование выгрузки, передача данных с ПК на планшет и формирование листов осмотра на основе выгрузки. Для упрощения процесса разработки и последующей отладки приложения целесообразно выделить некоторые процессы внутри основных функций в отдельные вспомогательные функции. Ниже предоставлена таблица основных и вспомогательных функций приложения, c их кратким описанием, входными и выходными данными.
Таблица 1. Основные и вспомогательные функции приложения
Имя |
Назначение |
Входные данные |
Выходные данные |
Основные функции |
|||
createdb |
Формирование выгрузки на основе полученных таблиц |
Примерно 12 строк типа QString, каждая из которых хранит путь к входной таблице |
Строка типа QString в которой в каждый момент времени при обработке таблиц хранится сообщение, которое нужно вывести на экран |
push |
Отправка сформированной базы данных на планшет |
База данных SQLite android_db.sqlite |
Строка типа QString в которой в каждый момент времени передачи базы данных хранится сообщение, которое нужно вывести на экран |
pull |
Получение результатов обхода и их обработка |
Архив GZIP result.zip |
Строка типа QString в которой в каждый момент времени передачи архива хранится сообщение, которое нужно вывести на экран |
Вспомогательные функции |
|||
cleanup |
Подготовка входных таблиц для преобразования их в базу данных |
Примерно 12 строк типа QString, каждая из которых хранит путь к входной таблице |
Строки, выводящиеся в консоль как сообщения на каждом этапе обработки таблиц. |
Имя |
Назначение |
Входные данные |
Выходные данные |
xlstocsv |
Преобразование всех таблиц в рабочей директории в формат CSV |
- (Скрипт работает со всеми таблицами в рабочей директории) |
Строки, выводящиеся в консоль как сообщения на каждом этапе обработки таблиц. |
converttoutf |
Преобразование всех CSV файлов в рабочей директории из кодировки windows-1251 в utf-8 |
- (Скрипт работает со всеми файлами в рабочей директории) |
Строки, выводящиеся в консоль как сообщения на каждом этапе обработки файлов. |
createsql |
Динамическое формирование SQL запросов на основе данных из таблиц |
- (В коде указана строка, хранящая путь к входной таблице в рабочей директории) |
Файл dbcommands2, содержащий получившийся запрос. Строки, выводящиеся в консоль как сообщения на каждом этапе формирования запроса. |
add*таблица* |
Заполнение конкретной таблицы листа осмотра на основе входных данных |
- (Скрипт работает со всеми файлами в рабочей директории рекурсивно) |
Строки, выводящиеся в консоль как сообщения на каждом этапе формирования листа осмотра. |
сheckstatus |
Проверка состояния подключения к планшету |
- (Вызывается системная процедура) |
Булево значение: True – есть соединение с устройством, False – соединение отсутствует |
В процессе проектирования приложения, был разработан основной алгоритм. В данном алгоритме показан порядок и условия вызова основных функций. Иллюстрация данного алгоритма показана на рисунке 3.
Рис. 3 Основной алгоритм
Иллюстрации алгоритмов, разработанных для основных функций pull, push и createdb проиллюстрированы на рисунке 4, рисунке 5 и рисунке 6 соответственно:
Рисунки 4-6. Алгоритмы функций pull, push, create
В отличие от мобильного приложения, в приложении для ПК не ведется учет пользователей, поэтому пользователем может являться любой представитель филиала компании, ознакомившийся с принципом работы приложения.
При запуске приложения пользователю должен предоставляется выбор между тремя основными функциями приложения: формированием выгрузки, передачей данных на планшет и формированием результатов. Так как все остальные функции являются вспомогательными к основным, главный интерфейс будет представлять собой три больших кнопки для вызова основных функций. В зависимости от выбранной функции пользователю будет выводиться на экран сообщения об ошибке или об успешном соединении с планшетом. Все остальные сообщения (о преобразовании таблиц, о передаче/приеме файлов и прочие) должны выводиться в отдельном окне с текстовым полем, в котором будут аккумулироваться сообщения от вызываемых скриптов. При вызове функции формирования базы данных пользователю должно отображаться окно со списком необходимых таблиц. Рядом с названием каждой таблицы должно присутствовать текстовое поле, хранящее строковое значение пути к файлу и кнопку, открывающую файловый проводник, предоставляющий возможность поиска таблицы в файловой системе.
В ходе выполнения данной работы было разработано приложение для персонального компьютера, являющееся частью программного комплекса для автоматизации процесса осмотра и документирования состояния высоковольтных линий электропередач. Данное приложение разрабатывалось по предоставленному техническому заданию и многократно улучшалось с учетом пожеланий заказчика. Разработка основной части приложения велась на языке С++ с применением фреймворка Qt. Все основные и вспомогательные функции написаны либо на языке VBScript либо как пакетный файл командной строки. Графическая часть приложения описывалась на языке QML. Основной интерфейс приложения показан на рисунке 7.
Рисунок 7. Главный экран приложения
На главном экране расположены три кнопки, вызывающие основные функции приложения. Если нажата кнопка “Сформировать выгрузку” будет открыто окно с выбором входных таблиц, показанное на рисунке 8.
В данном окне приведен список всех необходимых таблиц для формирования базы данных. Рядом с каждым названием таблицы присутствуют текстовое поле и кнопка “Открыть”. Каждое текстовое поле соответствует строковой переменной, хранящей полный путь к файлу. Пользователь имеет возможность ввести путь к файлу вручную. Нажатие на кнопку “Открыть” запускает файловый проводник с возможностью выбрать файл для автоматического заполнения поля. По умолчанию проводник позволяет открывать только файлы с расширением xls и xlsx. После выбора файла в проводнике и нажатия кнопки “Открыть” окно проводника закрывается и в текстовую переменную, зарезервированную для выбранной таблицы, записывается полный путь к таблице, что так же отображается в соответствующем текстовом поле. После заполнения полей пользователь должен нажать на кнопку “Ок”. При нажатии “Ок” происходит проверка содержания полей. Если не все поля заполнены, либо пути указывают на несуществующий файл, поля с неверными данными подсвечиваются красным. Если все поля заполнены верно, запускается процедура created и ей предаются введённые строки в качестве параметров. Нажатие кнопки “Отмена” или закрытие окна ввода таблиц приведет к возврату к основному окну без вызова процедуры.
Нажатие кнопок “Загрузить на устройство” или “Загрузить с устройства” сначала запускает функцию checkstatus. Функция проверяет наличие Android устройств, подключённых к ПК по кабелю USB. Если таких устройств нет, пользователю отображается окно с ошибкой, закрытие которого возвращает к основному окну приложения. Если соединение с устройством установлено успешно, пользователю отображается соответствующее окно, показанное на рисунке 9. Нажатие кнопки “Отмена” или закрытие окна приведёт к возвращению к основному окну приложения без вызова процедуры. Нажатие кнопки “Ок” закроет окно с сообщением и запустит процедуру push или pull в зависимости от нажатой ранее кнопки в основном окне.
Рисунок 8. Окно ввода таблиц и файловый проводник
Рисунок 9. Окно с сообщением об успешном соединении с устройством
Вызов любой из основных процедур вызывает открытие окна вывода сообщений приложения, показанного на рисунке 10. Данное окно представляет собой текстовое поле отображающее все сообщения, отправленные в стандартный выход основными функциями. Так же окно вывода постоянно следит за состоянием функции. Если функция завершила работу успешно, окно вывода закрывается автоматически. Иначе окно вывода остаётся до ручного закрытия для возможности определения возникшей ошибки.
Во время работы основных функций интерфейс основного приложения блокируется для предотвращения множественных вызовов нескольких основных функций, что могло бы привести к непредвиденным ситуациям в работе приложения. Это связанно с тем, что все основные функции запускаются как отдельные процессы и работают асинхронно с кодом основной программы. Вместе с блокировкой интерфейса над кнопкой вызванной функции отображается анимированная картинка. По завершении работы основной функции главное окно возвращается в исходное.
Рисунок 10. Окно вывода сообщений от приложения
Приложение для Android решено было создать средствами среды разработки Android Studio с использованием Android SDK и языка программирования Java. В приложении предусмотрено несколько рабочих экранов, именуемых также Activity [5]. Некоторые из этих экранов формируют пользовательский интерфейс согласно данным из базы, находящейся в папке приложения. Для того, чтобы отображаемые данные изменились достаточно подменить существующую базу новой, это делается с помощью USB соединения и приложения на ПК, описанного выше
Activity, отображаемая при запуске запрашивает данные пользователя: его фамилию и индивидуальный номер, её содержимое можно увидеть на рисунке 11. После ввода и нажатия кнопки входа запускается асинхронная проверка наличия базы данных в папке приложения. При её отсутствии, туда копируется база «вшитая» в приложение. То есть по умолчанию в файлах приложения имеется база, которая была сформирована на момент релиза последней версии приложения, и она используется в отсутствие любой другой.
Рисунок 11. Activity отображаемая при запуске
После входа пользователь может начать заполнять отчёт или сформировать выгрузку на ПК, последняя функция будет описана чуть позже. Для заполнения отчёта сначала необходимо выбрать объект, с которым будет производиться работа: выбирается линия передач, опора или пролёт. Затем пользователь может сделать фото объекта, просмотреть или изменить его характеристики, дефекты и измеряемые параметры. Также данное окно позволяет просмотреть краткие результаты работы. Эти Activity изображены на рис. 12-14.
Рисунок 12-14. Выбор линии, выбор объекта, выбор действия с объектом
Дефекты и измеряемые параметры объединены в одном окне (по требованию заказчика). Для перехода к окну их ввода необходимо выбрать группу и подгруппу. Все дефекты требуют обязательной фотофиксации, поэтому после установки галочки напротив нужного дефекта вызывается камера. Некоторые измеряемые параметры также необходимо фиксировать, поэтому не все поля ввода могут быть доступны, пока на соответствующий параметр не сделано фото. Каждый из дефектов и параметров также допускает ввод дополнительного описания, которое будет учтено при выгрузке. Окна продемонстрированы на рисунках 15-17.
Рисунок 15-17. Выбор группы, выбор подгруппы, окно ввода дефектов и параметров
Окно ввода характеристик собирает из БД данные об объекте и позволяет добавить или изменить эту информацию, которая также будет учтена при выгрузке (см. Рисунок 18).
Рисунок 18. Окно характеристик
При выгрузке все введённые данные разделяются по линиям, к которым они относятся, в папке приложения создаётся папка с кодом линии, а внутри папка с текущей датой. Все дефекты и измеряемые параметры сохраняются в соответствующие папки в файлы формата .CSV [6], туда же перемещаются соответствующие фотографии. Затем аналогично формируются и размещаются файлы с введёнными характеристиками и отдельно добавляются параметры и дефекты с описаниями. Сохранённые результаты обнуляются, а все файлы запаковываются в архив. Теперь его можно выгрузить с помощью приложения на ПК.
Литература
1. Sibsankar Haldar: SQLite Database System Design and Implementation (Second Edition, Version 1); O'Reilly 21 мая 2015 г.
2. Шлее М. Ш68: Qt 5.10. Профессиональное программирование на C++. — СПб.: БХВ-Петербург, 2018. — 1072 с.: ил. — (В подлиннике)
3. Ron Petrusha, Matt Childs, Paul Lomax: VBScript in a Nutshell, 2nd Edition — O'Reilly Media, Inc. March 2003
4. Namir Clement Shammas: Windows Batch File Programming — Computing McGraw-Hill; Subsequent edition July 1, 1995
5. Операции | Android developers. URL: https://developer.android.com/guide/components/activities.html?hl=RU
6. CSV – Википедия. URL: https://ru.wikipedia.org/wiki/CSV