Advanced Serial Data Logger

Trust In Confidence!

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


Объединение данных из двух портов для экспорта одной строкой

Описание проблемы:

Как данные из двух различных портов могут быть объединены в один файл?

У меня есть система, в которой необходимо использование двух устройств. Одно будет сканировать шрих-код (EAN-13), используя порт RS232. У нас есть несколько сканеров штрих-кодов, которые при сканировании отсылают в порт их идентификационный номер (четыре цифры) и информацию о штрих-коде (13 цифр).

Другое устройство это весы Mettler Toledo, которые выводят строку ASCII символов (непрерывный вывод – весы непрерывно выводят данные об измененном весе в порт).

Нам нужно получить штрих-код и вес, обработать их, и записать данные в таблицу в базе данных MySQL. Данные должны быть сохранены в одной строке с меткой даты и времени.

Агрегирование данных COM портов. Данные сканера штрих-кодов.
Рис.1. Агрегирование данных COM портов. Данные сканера штрих-кодов.

Агрегирование данных COM портов. Данные весов Mettler Toledo.
Рис.2. Агрегирование данных COM портов. Данные весов Mettler Toledo.

SD - изменяющие данные; S - стабильные данные.

Требования:

  • Advanced Serial Data Logger (ASDL) Professional или пробная версия;
  • Модуль "ASCII data parser and query" для Advanced Serial Data Logger;
  • Модуль "DDE server" для логгера (опционально, для тестирования);
  • Модуль "Aggregator";
  • Модуль "ODBC database".

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

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

Агрегирование данных COM портов. Добавленные конфигурации.
Рис.3. Агрегирование данных COM портов. Добавленные конфигурации.

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

Весы Mettler Toledo были настроены на непрерывный вывод данных "S.Cont" и данные передаются после каждого изменения веса.

Далее вы можете управлять вашими конфигурациями с помощью меню "Опции - Управление конфигурациями".

Решение:

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

Агрегирование данных COM портов. Настройка вида данных.
Рис.5. Агрегирование данных COM портов. Настройка вида данных.

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

Агрегирование данных COM портов. COM1 (сканер штрих-кодов). Принятые данные.
Рис.6. Агрегирование данных COM портов. COM1 (сканер штрих-кодов). Принятые данные.

Агрегирование данных COM портов. COM2 (весы). Принятые данные.
Рис.7. Агрегирование данных COM портов. COM2 (весы). Принятые данные.

Выпадающий список в позиции №1 на рис.6 и 7 позволяет переключаться между портами.

Это другой вид принятых данных. Все непечатные символы были заменены на их код вида #0D. Теперь очевидно, что пакет данных (в зеленом прямоугольнике) заканчивается на #0D и #0D#0A (подчеркнуто красным). У пакетов данных нет признака начала пакета.

Теперь мы готовы к настройке модулей. Сначала, пожалуйста, выберите модуль "ASCII data parser and query" (рис.8, поз.1) из выпадающего списка. Затем, включите анализ и экспорт для принимаемых данных (рис. 18, поз. 2). Модуль "DDE server" (рис.6, поз.3) поможет нам проверить, что парсер правильно разбирает пакет данных. После окончания настройки его можно будет отключить для экономии ресурсов. Обратите внимание, что вы должны активировать парсер в обеих конфигурациях, и парсер будет иметь различные настройки в каждой конфигурации.

Агрегирование данных COM портов. Активация парсера.
Рис.8. Агрегирование данных COM портов. Активация парсера.

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

COM1 (сканер). Окно настройки парсера.
Рис.9. COM1 (сканер). Окно настройки парсера.

COM2 (весы). Окно настройки парсера.
Рис.10. COM2 (весы). Окно настройки парсера.

Процесс настройки должен быть простым, если предварительно был выяснен формат данных в главном окне логгера данных (рис.6 и 7). Вы должны ввести данные в том же виде, что и в главном окне программы в поле №2. Поле №2 задает окончание блока данных и в нашем случае должно содержать #0D и #0D#0A. Вы должны ввести значения с рис. 3, подчеркнутые красным. Поле №1 оставляем пустым, поскольку у нас нет признака начала пакета данных. Опция №3 "Добавлять метку дату и времени" включена, поскольку нам необходимо добавлять метку времени для принимаемых данных.

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

COM2 (весы). Фильтр.
Рис.11. COM2 (весы). Фильтр.

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

COM1 (сканер). Переменные парсера.
Рис.12. COM1 (сканер). Переменные парсера.

COM2 (весы). Переменные парсера.
Рис.13. COM2 (весы). Переменные парсера.

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

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

  1. Имя переменной - это имя будет связано с колонкой в модуле экспорта данных. Это имя должно состоять только из латинских букв и цифр;
  2. Тип обработки данных - это метод, который программа будет использовать для выделения данных из пакета данных. Парсер поддерживает несколько методов от наиболее простого способа, до самого универсального и мощного. В нашем случае, когда все данные располагаются в фиксированной позиции, мы можем использовать простой метод "Фиксированная позиция". Этот метод позволяет получить любое количество символов, начиная с любой позиции в пакете данных;
  3. Тип данных - тип данных переменной. В нашем примере будут использоваться типы данных FLOAT и STRING. Модуль позволяет определить некоторые опции, которые будут использоваться для преобразования (см. закладку "Формат данных");
  4. Значение по умолчанию - это значение будет использоваться, когда данные не могут быть извлечены из указанной позиции и преобразованы в указанный тип данных;
  5. Фиксированная позиция - это позиция в пакете данных первого символа того значения, которое нужно извлечь и поместить в переменную. Минимальное значение равно 1;
  6. Фиксированная длина - это количество символов (включая все непечатные символы) которые необходимо извлечь и поместить в переменную. Минимальное значение равно 1.

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

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

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

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

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

COM2 (весы). Перенаправление.
Рис.15. COM2 (весы). Перенаправление.

Хорошо. Мы переходим к следующей странице. Это самая важная часть в этом примере. Мы должны активировать и настроить модуль "Aggregator", который будет объединять данные из двух конфигураций в одну запись в базе данных (рис.16 поз.1). Обратите внимание, что этот модуль должен быть активирован только в одной конфигурации (COM1 в этом примере).

COM1 (сканер). Модуль Aggregator.
Рис.16. COM1 (сканер). Модуль Aggregator.

Пожалуйста, откройте окно настройки модуля "Aggregator" (рис.17), кликнув дважды на имени модуля в списке модулей фильтрации на странице "Запрос Анализ Фильтр".

COM1 (сканер). Окно настройки модуля Aggregator
Рис.17. COM1 (сканер). Окно настройки модуля "Aggregator".

Вы должны указать одну переменную из каждой конфигурации, по которым модуль будет объединять данные. Эти имена мы определили на рис.12 и 13. Обратите внимание, что переменная "WEIGHT" отсутствует в выпадающем списке, поскольку она определена в другой конфигурации. Поэтому ее имя необходимо набрать вручную.

Пожалуйста, кликните по кнопке "OK" и закройте окно настройки модуля "Aggregator".

Теперь нужно выбрать и настроить модули экспорта данных для конфигурации COM1 (сканер). Модуль "DDE server" (рис.18, поз.1) поможет нам проверить наши настройки. Модуль "SQL Database Professional" будет записывать данные в базу данных MySQL.

COM1 (сканер). Модули экспорта данных.
Рис.18. COM1 (сканер). Модули экспорта данных.

Теперь кликните "OK", чтобы применить изменения.

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

COM1 (сканер). Окно DDE сервера.
Рис.19. COM1 (сканер). Окно DDE сервера.

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

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