/Methods/PublishData

<< Click to Display Table of Contents >>

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

/Methods/PublishData

Возвращает один накопленный пакет изменений. Клиент подтверждает принятый пакет полем ackSequenceNumber и повторяет запрос, пока hasMore не станет равным false.

HTTP: POST /Methods/PublishData

Запрос

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

Поля запроса

Поле

Тип

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

По умолчанию

Описание

sessionId

integer

условно

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

subscriptionId

integer

да

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

ackSequenceNumber

integer

нет

0

Последний полностью обработанный клиентом sequenceNumber; для первого запроса можно оставить 0

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

{
  "subscriptionId": 1,
  "sequenceNumber": 1,
  "recs": [
    {
      "clientHandle": 101,
      "value": 23.5,
      "sourceTime": 1710000000000
    }
  ],
  "hasMore": false,
  "serverTime": 1710000000123,
  "code": 0
}

Если новых пакетов нет, поля sequenceNumber и recs отсутствуют:

{
  "subscriptionId": 1,
  "hasMore": false,
  "serverTime": 1710000000123,
  "code": 0
}

Поля ответа

Поле

Тип

Условие

Описание

subscriptionId

integer

всегда

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

sequenceNumber

integer

есть пакет

Номер возвращаемого пакета

recs

array

есть пакет

Изменения параметров в пакете

recs[].clientHandle

integer

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

Идентификатор, переданный при создании элемента

recs[].value

any JSON

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

Текущее значение параметра; может быть скаляром, массивом или объектом

recs[].sourceTime

integer

запрошен Source

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

recs[].statusCode

integer

код не равен 0

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

recs[].type

integer

тип не равен 0

Вид дополнительного значения шкалы

hasMore

boolean

всегда

true, если после текущего пакета в очереди есть ещё один

serverTime

integer

всегда

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

code

integer

всегда

Общий результат публикации

Значения recs[].type:

Значение

Смысл

отсутствует

Основное значение параметра (tData = 0)

1

Hi

2

HiHi

3

Lo

4

LoLo

9

ActiveHiHi

10

ActiveHi

11

ActiveLo

12

ActiveLoLo

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

Перед формированием ответа сервер удаляет из очереди пакеты с номером не больше ackSequenceNumber, затем возвращает первый оставшийся пакет.

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

Один вызов возвращает не более одного пакета. Если есть следующий пакет, hasMore равен true.

Если источник не передал собственное время значения, сервер подставляет текущее время в sourceTime.

Сессия типа securityUnit не может читать подписку и получает OpcUa_BadUserAccessDenied.

В текущей C++-реализации ключ sequenceNumber записывается в ответ дважды с одинаковым значением: сначала DataSubscription::PublishData, затем DataPacket::Write. В примере выше показан нормализованный объект с одним ключом; клиент не должен зависеть от наличия дубликата.