Advanced Serial Data Logger

Trust In Confidence!

Для Win2000 - Windows 11 (2022) (Server, x86, x64). Последняя версия: 4.7.6 build 306. 6 марта 2024.


Парсинг данных с использованием регулярных выражений

Задача:

У меня есть оборудование, которое передает последовательные данные в терминальную программу (пример данных приведен ниже). Нужно извлечь значения из определенных позиций (помечены красным). Блоки данных выделены зеленым. Можно ли это сделать с помощью вашей программы? Также, хотелось бы передавать выделенные данные в Excel.

Последовательные данные
Рис.1. Последовательные данные

Требования:

  • Advanced Serial Data Logger (ASDL) Professional или пробная версия;
  • Модуль запроса и анализа ASCII данных (ASCII data parser and query) для логгера;
  • DDE server plug-in for Advanced Serial Data Logger (optional);
  • Local database plug-in for Advanced Serial Data Logger.

Подразумевается что:

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

Решение:

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

Настройка вида данных
Рис.2. Настройка вида данных

Затем необходимо включить опцию "Перенос слов " (рис.3), поскольку блок данных очень большой и не уместится в окне программы. Вы можете открыть диалоговое окно ниже, используя пункт главного меню программы "Опции - Опции программы".

Настройка вида окна логгера
Рис.3. Настройка вида окна логгера

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

Логгер данных. Принятые данные.
Рис.4. Логгер данных. Принятые данные.

Это другой вид принятых данных. Обратите внимание, что все непечатные символы были заменены на их код вида #1B. Посмотреть на изображение выше, становится очевидным, что блок данных (в зеленых скобках) начинается с ":sr#1B" и заканчивается #0A#0D#0A (подчеркнуто красным). В этом примере, блок данных состоит их нескольких частей. Все части были разделены по ширине экрана, однако все эти части нужно интерпретировать как единое целое.

Теперь мы готовы к настройке модулей. Сначала, пожалуйста, выберите модуль "ASCII data parser and query" (рис.5а, поз.1) из выпадающего списка. Затем, включите анализ и экспорт для принимаемых данных (рис. 5a, поз. 2). Модуль "DDE server" (рис.5b, поз.3) поможет нам проверить, что парсер правильно разбирает пакет данных. Модуль "Local database" будет экспортировать данные в XLS файл формата Microsoft Excel.

Логгер данных. Выбор и активация парсера.
Рис.5a. Логгер данных. Выбор и активация парсера.

Логгер данных. Настройка экспорта.
Рис.5b. Логгер данных. Настройка экспорта.

Сейчас, пожалуйста, откройте окно настройки модуля "ASCII parser and query" (кликните на кнопке "Настроить" рядом с выпадающим списком рис.5а, поз.1). Окно настройки появится на экране (рис.6).

Логгер данных. Настройка парсера.
Рис.6. Логгер данных. Настройка парсера.

Процесс настройки должен быть простым, если предварительно был выяснен формат данных в главном окне логгера данных (рис.4). Вы должны ввести данные в том же виде, что и в главном окне программы в полях 1 и 2. Поле №1 задает начало блока данных, а поле №2 задает его окончание. Вы должны ввести значения с рис. 4, подчеркнутые зеленым.

Поскольку поток данных может содержать пакеты данных, которые нам не нужно экспортировать, то мы добавили два правила фильтрации, характеризующие эти пакеты данных (рис.7). Вы можете добавить новые правила, кликнув на кнопке "Добавить". В нашем случае мы исключаем все пакеты, содержащие слова "Data" или "data" (регистр символов учитывается в поле "Выражение").

Логгер данных. Правила фильтра.
Рис.7. Логгер данных. Правила фильтра.

Следующая закладка является очень важной частью конфигурации (рис.8). Парсер использует эти данные для того, чтобы выделить переменные из пакета данных. Наш пакет данных содержит несколько элементов, названные как Date 1 - Date 12, которые должны быть помещены в различные переменные. Далее эти переменные будут использоваться в модулях фильтрации и экспорта данных. В нашем примере значения этих переменных будут записываться в разные колонки файла Microsoft Excel.

Логгер данных. Переменные парсера.
Рис.8. Логгер данных. Переменные парсера.

Чтобы добавить новую переменную парсера необходимо кликнуть по кнопке "Добавить" (рис.8, поз.7). Перед добавлением переменной программа попросит ввести описание переменной. Вы можете ввести любое описание, которое поможет вам запомнить содержимое этой переменной. Мы добавили все 12 переменных с именами Date 1 - Date 12 с соответствующими описаниями на рис.8

Каждая переменная парсера имеет несколько свойств:

  1. Имя переменной - это имя будет связано с колонкой в модуле экспорта данных. Это имя должно состоять только из латинских букв и цифр;
  2. Тип обработки данных - это метод, который программа будет использовать для выделения данных из пакета данных. Парсер поддерживает несколько методов, от наиболее простого способа, до самого универсального и мощного. В нашем случае, когда все данные располагаются в случайной позиции, мы должны использовать наиболее универсальный метод "Регулярные выражения". Этот метод позволяет получить любое количество символов, соответствующих указанной маске (регулярному выражению);
  3. Тип данных - тип данных переменной. Если вы укажите тип данных, отличный от типа данных "STRING", то модуль будет пробовать конвертировать строку в указанный тип данных. Модуль позволяет определить некоторые опции, которые будут использоваться для преобразования (см. закладку "Формат данных");
  4. Значение по умолчанию - это значение будет использоваться, когда данные не могут быть извлечены из указанной позиции и преобразованы в указанный тип данных;
  5. Регулярное выражение - это маска для поиска текста в пакете данных. В этом примере нам необходимо выделить текст, который идет после символов #1B[XX;XXH , где XX может быть одно или два числа. Поэтому мы должны указать следующее регулярное выражение: \[\d+\;\d+H[\ \+]+([\d\.]+). Здесь \d+ означает одно или несколько чисел. Выражение в скобках должно содержать маску, соответствующую значению, которое мы должны извлечь. Более детальное описание синтаксиса регулярных выражение можно посмотреть в файле справки или поискать в Интернете по ключевым словам "perl regex";
  6. Номер вхождения - здесь указывается номер совпадения в пакете данных. Если в пакете данных указанной маске соответствуют несколько значений, то здесь указывается порядковый номер этого значения. Минимальное значение равно 1.

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

На следующей закладке (рис.9) вы можете определить основные опции форматирования и преобразования значений. Поскольку мы выбрали тип данных "String" для обеих переменных, поэтому первые две опции позволяют удалять пробелы в начале и конце значения.

Логгер данных. Опции форматирования.
Рис.9. Логгер данных. Опции форматирования.

Другие опции не нужны в нашем случае, поскольку у нас нет переменных с другими типами данных.

Пожалуйста, кликните на кнопке "OK" в окне настройки парсера и затем на кнопке "OK" в окне настройки конфигурации.

Теперь наш парсер настроен и пришло время проверить его. Подсоедините ваше устройство или включите его, если это необходимо. Попробуйте принять пакет данных от устройства. Если парсер был верно настроен, то в окне DDE сервера будут отображены наши переменные и их значения (рис.10).

Логгер данных. Окно DDE сервера.
Рис.10. Логгер данных. Окно DDE сервера.

Теперь все переменные парсера готовы для экспорта в Excel. Как это сделать, описано во второй части.

Сопутствующие статьи: