bg

УМ-31, УМ-30 RTU, УМ-40 RTU. Чтение архивных и текущих данных. OPC сервер

Предварительные требования

Обычно, УМ-31 RTU, УМ-40 RTU, УМ-30 GPRS, подключается к компьютеру через последовательный интерфейс RS-232 и передает данные, используя собственный протокол обмена.

Вы также можете подключить этот прибор через преобразователь RS232 в Ethernet. В этом случае к прибору можно подключаться удаленно, по сети.

Установка

Если подключение осуществляется через последовательный порт RS-232 (COM порт), то необходимо установить Advanced Serial Data Logger (первая ссылка сверху).

Если подключение к прибору осуществляется по сети или через Интернет, то необходимо установить Advanced TCP/IP Data Logger (первая ссылка сверху).

В дополнение к основной программе необходимо установить модуль "Binary parsers". Этот модуль обеспечивает взаимодействие логгера и прибора УМ-31 RTU, УМ-40 RTU, УМ-30 GPRS: отправляет запросы по расписанию, обрабатывает полученные ответы, подготавливает данные для экспорта.

Настройка связи

1. Настройте подключение к прибору (параметры COM порта или TCP соединения) (рис. 1 и 2).

Параметры COM порта (RS232)
Рис. 1.1 Параметры COM порта

Параметры TCP порта
Рис. 1.2 Параметры TCP порта

2. Выберите модуль-парсер для УМ-31 RTU, УМ-40 RTU, УМ-30 GPRS в настройках. Если прибор подключен к компьютеру через RS-232, то вы должны дополнительно выбрать такой же модуль запроса данных (на рисунке не показан) (рис. 3).

Выбор модуля парсера УМ-31 RTU, УМ-40 RTU, УМ-30 GPRS
Рис. 1.3 Выбор модуля парсера УМ-31 RTU, УМ-40 RTU, УМ-30 GPRS

Настройка чтения данных

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

Настройка чтения данных
Рис. 2.1 Настройка чтения данных

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

Настройка чтения текущих данных
Рис. 2.2 УМ-31 RTU, УМ-40 RTU, УМ-30 GPRS. Текущие данные

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

Настройка чтения архивных данных
Рис. 2.3 УМ-31 RTU, УМ-40 RTU, УМ-30 GPRS. Архивные данные

Запись данных в базу данных

Для записи данных можно воспользоваться модулем экспорта данных "ODBC Database". Этот модуль может записывать данные в любую базу данных, для которой есть драйвер ODBC.

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

1. Вручную создайте таблицу с нужной структурой в вашей базе данных. Рекомендуемые скрипты для создания таблиц приведены ниже.

/**** split line *****/SET ANSI_NULLS ON
/**** split line *****/GO 

/**** split line *****/SET QUOTED_IDENTIFIER ON 
/**** split line *****/GO 

CREATE TABLE dbo.DATA (
  ID decimal(10,0)  IDENTITY(1,1) NOT NULL,
  TIMESTAMP_UTC datetime NULL,
  TIMESTAMP datetime NULL,
  DATE_TIME_STAMP datetime NULL,
  DATA_SOURCE_NAME nvarchar(32) NULL,
  DEVICE_ID nvarchar(16) NULL,
  DEVICE_NAME nvarchar(32) NULL,
  DEVICE_DESC nvarchar(32) NULL,
  
  DATA_TYPE int NULL,
  
  SLAVE_ID nvarchar(6) DEFAULT NULL,
  SLAVE_ADDRESS nvarchar(16) DEFAULT NULL,
  SLAVE_TYPE int NULL,  
  SLAVE_INTERFACE int NULL,  
  SLAVE_SERIALNO nvarchar(16) DEFAULT NULL,

  A_POS0 real NULL, 
  A_POS1 real NULL,
  A_POS2 real NULL,
  A_POS3 real NULL,
  R_POS0 real NULL,
  R_POS1 real NULL,
  R_POS2 real NULL,
  R_POS3 real NULL,
  
  A_NEG0 real NULL,
  A_NEG1 real NULL,
  A_NEG2 real NULL,
  A_NEG3 real NULL,
  R_NEG0 real NULL,
  R_NEG1 real NULL,
  R_NEG2 real NULL,
  R_NEG3 real NULL,
  
  U real NULL,
  I real NULL,
  CF real NULL,
  P real NULL,
  Q real NULL,
  S real NULL,
  F real NULL,
  
  TD real NULL,
  
  EVENT_ID int NULL
  
  CONSTRAINT [PK_UN_DATA] PRIMARY KEY
  (
     [ID] ASC
  )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
/**** split line *****/GO 

CREATE INDEX [DATA_DEVICE_ID_IDX] ON DATA ([DEVICE_ID]);
/**** split line *****/GO 

CREATE INDEX [DATA_TIMESTAMP_IDX] ON DATA ([TIMESTAMP_UTC]);
/**** split line *****/GO 

CREATE TABLE `DATA` (
  `ID` int(11) NOT NULL auto_increment,
  `TIMESTAMP_UTC` datetime DEFAULT NULL,
  `TIMESTAMP` datetime DEFAULT NULL,
  `DATE_TIME_STAMP` datetime DEFAULT NULL,
  `DATA_SOURCE_NAME` varchar(32) DEFAULT NULL,
  `DEVICE_ID` varchar(16) DEFAULT NULL,
  `DEVICE_NAME` varchar(32) DEFAULT NULL,
  `DEVICE_DESC` varchar(32) DEFAULT NULL,
  `DATA_TYPE` int DEFAULT NULL,
  `SLAVE_ID` varchar(6) DEFAULT NULL,
  `SLAVE_ADDRESS` varchar(16) DEFAULT NULL,
  `SLAVE_TYPE` int DEFAULT NULL,
  `SLAVE_INTERFACE` int DEFAULT NULL,
  `SLAVE_SERIALNO` varchar(16) DEFAULT NULL,
  `A_POS0` double DEFAULT NULL,
  `A_POS1` double DEFAULT NULL,
  `A_POS2` double DEFAULT NULL,
  `A_POS3` double DEFAULT NULL,
  `R_POS0` double DEFAULT NULL,
  `R_POS1` double DEFAULT NULL,
  `R_POS2` double DEFAULT NULL,
  `R_POS3` double DEFAULT NULL,
  `A_NEG0` double DEFAULT NULL,
  `A_NEG1` double DEFAULT NULL,
  `A_NEG2` double DEFAULT NULL,
  `A_NEG3` double DEFAULT NULL,
  `R_NEG0` double DEFAULT NULL,
  `R_NEG1` double DEFAULT NULL,
  `R_NEG2` double DEFAULT NULL,
  `R_NEG3` double DEFAULT NULL,
  `U` double DEFAULT NULL,
  `I` double DEFAULT NULL,
  `CF` double DEFAULT NULL,
  `P` double DEFAULT NULL,
  `Q` double DEFAULT NULL,
  `S` double DEFAULT NULL,
  `F` double DEFAULT NULL,
  `TD` double DEFAULT NULL,
  `EVENT_ID` int DEFAULT NULL,

  PRIMARY KEY  (`ID`)
) ENGINE=InnoDB;
-- split line

CREATE TABLE DATA (
  ID SERIAL,
  TIMESTAMP_UTC timestamp DEFAULT NULL,
  TIMESTAMP timestamp DEFAULT NULL,
  DATE_TIME_STAMP timestamp DEFAULT NULL,
  DATA_SOURCE_NAME varchar(32) DEFAULT NULL,
  DEVICE_ID varchar(16) DEFAULT NULL,
  DEVICE_NAME varchar(32) DEFAULT NULL,
  DEVICE_DESC varchar(32) DEFAULT NULL,
  DATA_TYPE integer DEFAULT NULL,
  SLAVE_ID varchar(6) DEFAULT NULL,
  SLAVE_ADDRESS varchar(16) DEFAULT NULL,
  SLAVE_TYPE integer DEFAULT NULL,
  SLAVE_INTERFACE integer DEFAULT NULL,
  SLAVE_SERIALNO varchar(16) DEFAULT NULL,
  A_POS0 double precision DEFAULT NULL,
  A_POS1 double precision DEFAULT NULL,
  A_POS2 double precision DEFAULT NULL,
  A_POS3 double precision DEFAULT NULL,
  R_POS0 double precision DEFAULT NULL,
  R_POS1 double precision DEFAULT NULL,
  R_POS2 double precision DEFAULT NULL,
  R_POS3 double precision DEFAULT NULL,
  A_NEG0 double precision DEFAULT NULL,
  A_NEG1 double precision DEFAULT NULL,
  A_NEG2 double precision DEFAULT NULL,
  A_NEG3 double precision DEFAULT NULL,
  R_NEG0 double precision DEFAULT NULL,
  R_NEG1 double precision DEFAULT NULL,
  R_NEG2 double precision DEFAULT NULL,
  R_NEG3 double precision DEFAULT NULL,
  U double precision DEFAULT NULL,
  I double precision DEFAULT NULL,
  CF double precision DEFAULT NULL,
  P double precision DEFAULT NULL,
  Q double precision DEFAULT NULL,
  S double precision DEFAULT NULL,
  F double precision DEFAULT NULL,
  TD double precision DEFAULT NULL,
  EVENT_ID integer DEFAULT NULL,

  PRIMARY KEY  (ID)
);
-- split line

Файл базы данных "database.mdb" можно скачать тут.

2. Откройте настройки модуля экспорта данных, включите запись в базу данных, перейдите к закладке "Соединение" и создайте подключение к вашей базе, кликнув на кнопке "Настроить" (рис. 1-3).

Выбор модуля экспорта данных
Рис. 3.1 Выбор модуля экспорта данных

Включение записи в базу данных
Рис. 3.2 Включение записи в базу данных

Настройка подключения к базе
Рис. 3.3 Настройка подключения к базе

3. На закладке "Связывание" импортируйте из базы структуру вашей таблицы и "привяжите" переменные парсера к соответствующим колонкам. Удалите из списка все колонки, для которых нет привязки и в скрипте создания таблицы задано значение по умолчанию (рис. 4 и 5).

Привязка переменных и колонок таблицы
Рис. 3.4 Привязка переменных и колонок таблицы

Импорт структуры таблицы
Рис. 3.5 Импорт структуры таблицы

Краткое описание колонок

Таблица в базе данных создана для хранения максимально возможного набора данных. Значения в некоторых колонках могут отсутствовать, поскольку это зависит от установленных счетчиков, настроек УСПД и типа данных.

ID - уникальный идентификатор записи;
DATE_TIME_STAMP - метка времени, когда логгер считал данные;
DATA_SOURCE_NAME - идентификатор источника данных (номер COM порта или IP адрес);
DEVICE_ID - сетевой адрес прибора, заданный в настройках программы;
DEVICE_NAME - зарезервировано;
DEVICE_DESC - описание прибора, заданное в настройках программы;
TIMESTAMP - метка времени данных из прибора в локальном часовом поясе;
TIMESTAMP_UTC - метка времени данных из прибора в часовом поясе UTC (рассчитывается программой);
SERIAL_NO - серийный номер прибора (считывается из прибора);
DATA_TYPE - тип данных (2 - месячный, 4 - текущие данные);
SLAVE_ID - уникальный номер подключенного электросчетчика в базе данных УСПД;
SLAVE_ADDRESS - сетевой адрес электросчетчика на шине;
SLAVE_TYPE - тип электросчетчика (см. документацию на УСПД);
SLAVE_INTERFACE - тип интерфейса (шины);
SLAVE_SERIALNO - серийный номер электросчетчика;

A_POS0 - Прямая суммарная активная энергия от сброса;
A_POS1, A_POS2, A_POS3 - Прямая активная энергия от сброса по тарифу №1-3;
R_POS0 - Обратная суммарная активная энергия от сброса;
R_POS1, R_POS2, R_POS3 - Прямая реактивная энергия от сброса по тарифу №1-3;
A_NEG0 - Обратная суммарная активная энергия от сброса;
A_NEG1, A_NEG2, A_NEG3 - Обратная активная энергия от сброса по тарифу №1-3;
R_NEG0 - Обратная суммарная реактивная энергия от сброса;
R_NEG1, R_NEG2, R_NEG3 - Обратная реактивная энергия от сброса по тарифу №1-3;

Только текущие данные
U - напряжение;
I - ток;
CF - Значение косинуса F;
P - Мгновенная активная мощность;
Q - Мгновенная реактивная мощность;
S - Мгновенная полная мощность;
F - частота сети;

TD -расхождение времени часов счетчика и УСПД;

EVENT_ID - код события (неисправности).

Запись данных в текстовый лог файл

Наша программа может параллельно создавать текстовые лог файлы, в которые будет записывать все принятые и обработанные данные. Лог файл можно рассматривать как резервную копию данных, или использовать их для последующего анализа. Программа может автоматически создавать новый лог файл ежедневно, еженедельно или ежемесячно (рис. 1 и 2).

Настройка вида данных для УМ-31 RTU, УМ-40 RTU, УМ-30 GPRS
Рис. 4.1 Настройка вида данных для УМ-31 RTU, УМ-40 RTU, УМ-30 GPRS

Настройка лог файла для УМ-31 RTU, УМ-40 RTU, УМ-30 GPRS
Рис. 4.2 Настройка лог файла для УМ-31 RTU, УМ-40 RTU, УМ-30 GPRS

OPC сервер

Программа имеет встроенный OPC DA2, DA3 или OPC UA сервер, через который всегда можно получить и посмотреть последнее считанное текущее или архивное значение. Рекомендуемые настройки сервера OPC представлены на рис. 1 и 2.

Обратите внимание, что OPC сервер не позволяет получать архивные данные. Он хранит только последнее полученное значение, в том числе и для архивных данных.

Включение OPC сервера для УМ-31 RTU, УМ-40 RTU, УМ-30 GPRS
Рис. 5.1 Включение OPC сервера для УМ-31 RTU, УМ-40 RTU, УМ-30 GPRS

УМ-31 RTU, УМ-40 RTU, УМ-30 GPRS. Пример принятых данных
Рис. 5.2 УМ-31 RTU, УМ-40 RTU, УМ-30 GPRS. Пример принятых данных

Для удобства, можно поместить текущие и архивные данные в разные группы тегов. Для этого можно указать правило группировки данные в OPC сервере. В данном примере они группируются по серийному номеру и типу данных.

Группировка данных по типу
Рис. 5.3 Группировка данных по типу

Отчеты

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

За дополнительную плату мы готовы:

  1. Разработать программу построения отчетов под ваши нужды.
  2. Адаптировать программу под вашу базу данных. Можно реализовать запись практически в любую базу данных.
  3. Сделать передачу данных на веб-сервер.
  4. Любая другая доработка под ваши нужды.

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

Настройка записи данных от USB HID устройства в базу данных;
USB HID в MS SQL (запись большого кол-ва переменных);
USB HID в MS SQL (запись нескольких переменных);
Настройка записи данных от USB HID устройства в MySQL;
Экспорт USB HID в Excel в реальном времени;

USB HID Logger. Дополнительные материалы:

Мониторинг USB порта Мониторинг COM порта