|
<< Click to Display Table of Contents >> Navigation: API MasterSCADA 4D > Подключение к исполнительной системе по JSON > HTTP API MasterPLC > События и сообщения > /Methods/GetArchivedEvents |
Ставит запрос в очередь выбранного архива событий, синхронно ожидает завершения и возвращает записи в виде массивов значений. Для постраничного чтения используется непрозрачная точка продолжения.
HTTP: POST /Methods/GetArchivedEvents
{
"sessionId": 123456789,
"archiveId": 0,
"startTime": 1709990000000,
"endTime": 1710000000000,
"inverse": false,
"maxRecs": 100,
"timeout": 60,
"fullPath": "Объекты.Объект 1.Оборудование 1",
"fields": [
{"name": "EventId"},
{"name": "Time"},
{"name": "Message"},
{"name": "Severity"},
{"name": "Acked"}
],
"filter": [
"Active=true",
"Severity <= 100 or Severity >= 900"
]
}
Следующую страницу запрашивают с точным continuationPoint из предыдущего ответа:
{
"sessionId": 123456789,
"archiveId": 0,
"startTime": 1709990000000,
"endTime": 1710000000000,
"maxRecs": 100,
"timeout": 60,
"continuationPoint": "AQAAAAAAAAABAAAAAAAAAAAAAAA=",
"fields": [
{"name": "EventId"},
{"name": "Time"},
{"name": "Message"}
]
}
Поле |
Тип |
Обязательное |
По умолчанию |
Описание |
|---|---|---|---|---|
sessionId |
integer |
условно |
— |
Нужен, если сессия не передана заголовком Session-Id |
archiveId |
integer |
нет |
0 |
Архив событий; 0 выбирает первый настроенный архив, если архив не удалось определить по itemId |
startTime |
integer |
нет |
0 |
Начало диапазона, Unix time в миллисекундах; 0 снимает нижнюю границу |
endTime |
integer |
нет |
конец архива |
Конец диапазона, Unix time в миллисекундах |
inverse |
boolean |
нет |
false |
Читать в обратном направлении; внутренние границы диапазона меняются местами |
maxRecs |
integer |
нет |
200 |
Максимальное число записей в ответе; 0 также заменяется на 200 |
maxSize |
integer |
нет |
— |
Устаревшее поле: текущий обработчик его не читает |
timeout |
integer |
нет |
60 |
Максимальное синхронное ожидание ответа архива, секунд |
continuationPoint |
string |
нет |
пусто |
Непрозрачная Base64-строка из предыдущего ответа |
fullPath |
string |
нет |
"" |
Предпочтительный фильтр по объекту и его потомкам |
itemId |
integer |
нет |
0 |
Устаревшая совместимая адресация; также используется для выбора архива объекта |
path |
string |
нет |
"" |
Уточнение пути при адресации через itemId |
fields |
array |
да |
— |
Поля, значения которых нужно вернуть в каждой записи |
fields[].name |
string |
да |
"" |
Имя поля архива; именно оно используется при формировании ответа |
fields[].id |
integer |
нет |
0 |
Сохраняется в запросе, но при сериализации ответа не используется |
fields[].type |
string |
нет |
"" |
Сохраняется в запросе, но не преобразует возвращаемое значение |
fields[].typeHash |
integer |
нет |
0 |
Сохраняется в запросе, но сейчас не используется |
filter |
array of string |
нет |
[] |
Дополнительные DSL-условия; элементы объединяются логическим AND |
Для совместимости 64-битные числовые поля, включая время и идентификаторы, принимают также строки с десятичным числом. В новых клиентах следует передавать JSON-числа.
Объектная форма continuationPoint с полями time, eventId и alarmId также распознаётся, но является внутренним совместимым форматом. Клиенту следует хранить и возвращать непрозрачную строку без разбора.
{
"continuationPoint": "AQAAAAAAAAABAAAAAAAAAAAAAAA=",
"recs": [
["12A5EDFFFFFF", 1709999000000, "Превышение уставки", 100, false],
["13A5EDABABAB", 1709999100000, "Авария насоса", 950, false]
],
"hasMore": true,
"serverTime": 1710000000123,
"code": 0
}
Если записей нет, continuationPoint и recs отсутствуют:
{
"hasMore": false,
"serverTime": 1710000000123,
"code": 0
}
Поле |
Тип |
Условие |
Описание |
|---|---|---|---|
continuationPoint |
string |
есть записи |
Непрозрачная позиция последней возвращённой записи |
recs |
array of array |
есть записи |
Записи архива; значения идут в порядке запрошенных fields |
hasMore |
boolean |
всегда |
true, если размер страницы достиг maxRecs |
serverTime |
integer |
обработчик завершился |
Время сервера, Unix time в миллисекундах |
code |
integer |
всегда |
Общий результат архивного запроса |
•При archiveId: 0 и ненулевом itemId обработчик пытается выбрать архив объекта. fullPath влияет на фильтрацию записей, но сам по себе не выбирает архив; для объекта в нестандартном архиве передавайте archiveId явно.
•Если выбранный архив не найден, возвращается OpcUa_BadNoData.
•Запрос передаётся асинхронному обработчику архива, но HTTP-вызов ждёт семафор не дольше timeout. Нулевое или отрицательное значение приводит к OpcUa_BadTimeout без ожидания.
•Диапазон maxRecs не проверяется. Передавайте положительное значение или 0 для серверного значения 200; отрицательные значения не являются поддержанным режимом.
•Ошибка разбора фильтра возвращается корневым code. Элементы filter должны быть строками.
•hasMore вычисляется как число записей >= maxRecs. Поэтому значение true не гарантирует, что после точки продолжения действительно есть ещё одна запись; клиент должен продолжать чтение до ответа с hasMore: false.
•Точка продолжения зависит от времени, типа обновления, идентификатора тревоги и времени активации. Не создавайте и не изменяйте её самостоятельно.
•maxSize, fields[].id, fields[].type и fields[].typeHash не влияют на текущую сериализацию ответа.