/Methods/PlayerPublishData

<< Click to Display Table of Contents >>

Navigation:  API MasterSCADA 4D > Подключение к исполнительной системе по JSON > HTTP API MasterPLC > Проигрывание истории >

/Methods/PlayerPublishData

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

HTTP: POST /Methods/PlayerPublishData

Запрос

{
  "sessionId": 123456789,
  "subscriptionId": 1
}

Поля запроса

Поле

Тип

Обязательное

По умолчанию

Описание

sessionId

integer

условно

Нужен, если сессия не передана заголовком Session-Id

subscriptionId

integer

да

Идентификатор подписки проигрывателя

sequenceNumber

integer

нет

Устаревшее поле старой справки: текущий обработчик его не читает

ackSequenceNumber

integer

нет

Не поддерживается и также не читается

Ответ с готовыми данными

{
  "subscriptionId": 1,
  "data": [
    {
      "archiveItemId": 11,
      "areMoreValues": true,
      "continuationPoint": 133544736010000001,
      "values": [
        [1710000000000, 42.5, 0],
        [1710000001000, 43.0, 0]
      ]
    },
    {
      "archiveItemId": 12,
      "areMoreValues": false,
      "continuationPoint": 0,
      "values": []
    }
  ],
  "code": 0
}

Пока первоначальный или следующий запрос ещё выполняется, возвращается ошибка:

{
  "subscriptionId": 1,
  "hex": "0x80320000",
  "codeDescription": "Waiting for the server to obtain values from the underlying data source.",
  "code": 2150760448
}

Если RunPlayerSubscription ещё не вызывался, возвращается OpcUa_BadRequestInterrupted:

{
  "subscriptionId": 1,
  "hex": "0x80840000",
  "codeDescription": "The request could not be sent because of a network interruption.",
  "code": 2156134400
}

Поля ответа

Поле

Тип

Условие

Описание

subscriptionId

integer

подписка найдена

Идентификатор подписки

data

array

архивный запрос завершён без корневой ошибки

Результаты для всех параметров текущей страницы

data[].archiveItemId

integer

всегда в элементе

Идентификатор архивного параметра

data[].statusCode

integer

элемент завершился с ошибкой

Поэлементный OPC UA status; остальные поля элемента тогда отсутствуют

data[].areMoreValues

boolean

элемент не содержит ошибки

true, если для параметра будет запрошена следующая страница

data[].continuationPoint

integer

элемент не содержит ошибки

Внутренняя позиция продолжения в 100-нс FILETIME ticks; 0, если позиции нет

data[].values

array of array

элемент не содержит ошибки

Значения текущей страницы

data[].values[][0]

integer

всегда в записи

Время значения, Unix time в миллисекундах

data[].values[][1]

any JSON

всегда в записи

Архивное значение параметра

data[].values[][2]

integer

всегда в записи

Код качества значения

hex

string

корневая ошибка

Корневой код в шестнадцатеричном виде

codeDescription

string

корневая ошибка

Локализованное описание ошибки

code

integer

всегда

Корневой результат вызова

Поведение и ограничения

Полей sequenceNumber, hasMore и serverTime в ответе нет. Подтверждение страницы не реализовано.

Пока db_request->status содержит OpcUa_BadWaitingForInitialData, метод не возвращает частично готовые элементы: весь вызов завершается корневой ошибкой. Клиенту нужно повторить запрос позднее.

При готовности метод возвращает до 100 значений на параметр. Значения с нестрого возрастающим временем пропускаются и фиксируются в журнале сервера как OpcUa_BadDataLost.

Если areMoreValues равно true, данные элемента очищаются, его внутренняя точка продолжения сохраняется, а следующий запрос немедленно ставится в очередь. Следующий HTTP-вызов снова может временно вернуть OpcUa_BadWaitingForInitialData.

Переданный клиентом sequenceNumber не влияет на ответ. Страница не хранится до подтверждения и не может быть повторно запрошена по номеру.

Последняя страница, у которой areMoreValues: false, не очищается. Повторный PlayerPublishData после завершения вернёт её снова; клиент должен остановить опрос, когда все элементы сообщили false.

Если отдельный элемент имеет ошибочный statusCode, корневой code всё равно остаётся 0.

Неизвестный archiveItemId обычно возвращается как успешный элемент с areMoreValues: false, continuationPoint: 0 и пустым values; отсутствие параметра не преобразуется в поэлементную ошибку.

В ветке OpcUa_BadRequestInterrupted обработчик повторно записывает subscriptionId, уже добавленный общим диспетчером. Фактический JSON может содержать два одинаковых ключа; выше показан нормализованный ответ.

Метод не перезапускает таймер активности подписки.