Автономный сервер сбора данных RTU Standalone Server предназначен для интеграции устройств УСПД TELEOFIS с серверным ПО сторонних производителей. Он обеспечивает прием, обработку данных, взаимодействие с диспетчерским ПО и хранение телеметрической информации в базе данных PostgreSQL. Ниже рассмотрены основные операции по чтению и изменению параметров через этот сервер.
Чтение параметров
На начальном этапе знакомства важно зафиксировать структуру базы данных, предоставляемую автономным сервером.
Ниже мы будем рассматривать подробнее каждую из таблиц на примерах.
Чтение последних значений параметров телеметрии
Таблица Channel содержит базовую информацию о каждом устройстве УСПД, подключенном к серверу.
Основные поля таблицы:
id: уникальный идентификатор УСПД на RTU Standalone Server.
lastconnectiondate: дата и время последнего полученного пакета данных от УСПД.
serial: IMEI УСПД.
key: ключ шифрования.
Сервер собирает телеметрическую информацию и сохраняет ее в базе данных. Таблица ChannelParameterCurrent содержит актуальные данные телеметрии, включая время получения и значение параметров. Для получения этих данных, система автоматически считывает обновления из устройств и записывает их в соответствующую таблицу.
Пример структуры записи в таблице ChannelParameterCurrent:
channelid: внешний ключ на устройство УСПД.
code: код параметра (см. Протокол передачи «УСПД TELEOFIS RTU»).
name: символьное имя параметра.
updatetime: время последнего обновления параметра.
value: значение параметра в текстовом формате.
Код:
SELECT ch.serial, cpc.* FROM ChannelParameterCurrent cpc JOIN Channel ch ON cpc.channelid = ch.id WHERE ch.serial='861774057573030'
Результат:
Чтение истории значений напряжения на батарее
Таблица ChannelParameter содержит историю изменений параметров устройств УСПД. Она фиксирует каждое обновление параметров, полученных с устройства.
Основные поля таблицы:
channelid: внешний ключ, ссылающийся на конкретное устройство УСПД (id из таблицы Channel).
code: код параметра, который соответствует определенному значению в устройстве (см. Протокол передачи «УСПД TELEOFIS RTU»).
name: символьное имя параметра, которое более понятно для пользователей.
updatetime: время последнего обновления параметра.
valid: валидность значения.
value: текстовое представление значения параметра.
Код:
SELECT ch.serial, cp.* FROM ChannelParameter cp JOIN Channel ch ON cp.channelid = ch.id WHERE ch.serial='861774057573030' AND code=79
Результат:
Чтение архива событий
Таблица ChannelEvent ведет журнал событий, связанных с работой устройств УСПД. Здесь фиксируются все важные события, что позволяет отслеживать состояние устройств и принимать соответствующие меры.
Основные поля:
channelid: внешний ключ на устройство УСПД, связанное с событием.
datetime: время события в формате Epoch, указывающее момент его возникновения на устройстве.
receivedatetime: время получения информации о событии на сервере.
event: код события, который определяет тип произошедшего события (см. Протокол передачи «УСПД TELEOFIS RTU»).
type: тип события.
value: значение события, уточняющее его суть.
Код:
SELECT ch.serial, ce.* FROM ChannelEvent ce JOIN Channel ch ON ce.channelid = ch.id WHERE ch.serial='861774057573030'
Результат:
Запрос данных показаний счетчика по входу за определенный период
Таблица ChannelValue хранит историю значений на входах устройств УСПД. Это позволяет собирать и анализировать данные о телеметрии с каждого подключенного устройства.
Основные поля:
channelid: внешний ключ на УСПД, ссылающийся на таблицу Channel.
datetime: дата и время среза данных в формате Epoch, указывающее время получения данных на устройстве.
receivedatetime: время получения данных сервером.
event: код события, указывающий на тип события, после которого устройство передало данные на сервер (1=по расписанию, 8=по нажатию на кнопку).
input: номер входа на устройстве.
rawvalue: значение, зафиксированное на данном входе.
Для перевода времени в формат Epoch используйте https://www.epochconverter.com/
Код:
SELECT ch.serial, cv.* FROM ChannelValue cv JOIN Channel ch ON cv.channelid = ch.id WHERE ch.serial='861774057573030' AND cv.input=0 AND cv.datetime >= 1725296400 AND cv.datetime <= 1725300000
Результат:
Изменение параметров
Для изменения параметров на устройстве, запись должна быть добавлена или обновлена в таблице ChannelParameterUpdate. Данные в таблице содержат необходимые параметры, которые будут записаны в устройство при следующем сеансе связи. Запись параметра в БД включает в себя:
channelid: внешний ключ на устройство УСПД.
code: код параметра для записи.
errorcode: код ошибки (0 = запись успешна, 1 = при записи произошла ошибка).
status: статус записи (0 = новое значение, 1 = запись в процессе, 2 = запись завершена).
updatetime: время получения подтверждения о записи параметра в УСПД.
value: значение параметра в текстовом виде.
После добавления или обновления записи, сервер при следующем подключении устройства выполнит передачу параметра и обновит статус записи.
Изменение параметра частоты опроса датчиков (code=125) на значение 20 Гц (value=1)
Для инициирования процесса изменения значения параметра УСПД, необходимо создать или изменить запись (или несколько, возможно записывать сразу любое количество параметров) в БД в таблице ChannelParameterUpdate.
Код:
INSERT INTO ChannelParameterUpdate (channelid, code, status, value) VALUES (2, 125, 0, 1)
Результат:
Получаем уведомление об успешной записи в таблицу ChannelParameterUpdate.
Далее переходим в таблицу ChannelParameterUpdate и находим запись на изменения параметра.
Код:
SELECT ch.serial, cpu.* FROM ChannelParameterUpdate cpu JOIN Channel ch ON cpu.channelid = ch.id WHERE ch.serial='861774057573030'
Создалась новая запись в таблице, но подтверждения применения изменений пока нет (status=0). Изменения будут применены во время следующего подключения устройства к серверу.
Считывание записей из таблицы производится не чаще одного раза в 5 минут.
Результат:
После следующего выхода на связь получаем подтверждение об успешной записи изменений (status=2).
Результат: