|
<< 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 может содержать два одинаковых ключа; выше показан нормализованный ответ.
•Метод не перезапускает таймер активности подписки.