/Methods/WriteData

<< Click to Display Table of Contents >>

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

/Methods/WriteData

Принимает одну или несколько операций изменения параметров. Для локальной Lua-задачи метод проверяет адрес и права, преобразует значение и ставит запись в очередь выполнения.

HTTP: POST /Methods/WriteData

Запрос

{
  "sessionId": 123456789,
  "recs": [
    {
      "taskId": 0,
      "itemId": 36004,
      "path": "",
      "operation": "move",
      "value": false
    }
  ]
}

Поля запроса

Поле

Тип

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

По умолчанию

Описание

sessionId

integer

условно

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

recs

array

да

Массив операций записи

recs[].taskId

integer

нет

-1

Индекс задачи; при -1 сервер пытается определить его по найденному узлу

recs[].itemId

integer

условно

0

Идентификатор параметра из VMInfo; может быть 0 при адресации полным путём

recs[].path

string

нет

""

Относительный путь внутри itemId либо полный UTF-8-путь проекта; ведущая точка удаляется

recs[].operation

string

нет

"move"

Операция над текущим значением; допустимые варианты перечислены ниже

recs[].parameter

integer

нет

0

Дополнительный параметр операции; для impulse — длительность импульса в миллисекундах

recs[].value

любое JSON-значение

да

Новое значение или правый операнд операции

recs[].type

string

условно

""

Имя ST-типа, используемое только когда тип нельзя определить через VMInfo

recs[].typeHash

integer

нет

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

Если известен itemId, path задаёт вложенное поле. Если относительный адрес не найден, обработчик также пытается интерпретировать path как полный путь проекта. Полный путь можно передать явно с itemId: 0:

{
  "itemId": 0,
  "path": "Объекты.Насос.Пуск",
  "operation": "move",
  "value": true
}

Операции чувствительны к регистру:

operation

Действие

отсутствует или move

Присвоить value

concat

Выполнить Lua-конкатенацию текущего значения и value

add

Сложить; для текущего строкового значения автоматически используется конкатенация

mul

Умножить текущее значение на value

div

Разделить текущее значение на value

sub

Вычесть value из текущего значения

impulse

Присвоить value, затем вернуть инвертированное значение спустя parameter миллисекунд

Неизвестная строка операции не отклоняется: сервер записывает предупреждение в журнал и выполняет move.

Ответ

{
  "recs": [
    {
      "statusCode": 0
    }
  ],
  "serverTime": 1710000000123,
  "code": 0
}

Поля ответа

Поле

Тип

Условие

Описание

recs

array

обычный ответ

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

recs[].statusCode

integer

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

Результат поиска задачи, преобразования системного значения и проверки прав

serverTime

integer

обычный ответ

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

code

integer

всегда

Общий результат метода

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

Запись выполняется асинхронно перед следующим циклом соответствующей Lua-задачи. statusCode: 0 означает, что запись прошла предварительные проверки и поставлена в очередь, а не что Lua уже изменила значение.

Ошибка, возникшая непосредственно при выполнении арифметики или записи в Lua, в этот HTTP-ответ не попадает.

Если taskId не задан и его невозможно определить по адресу, запись получает OpcUa_BadNodeIdUnknown в recs[].statusCode.

Отказ в праве записи возвращается в recs[].statusCode; остальные допустимые записи пакета продолжают обрабатываться.

Если указан индекс задачи без локального DataSource, запись пересылается на удалённый узел. Текущая реализация не ждёт и не возвращает результат удалённого выполнения, поэтому предварительный statusCode остаётся равным 0, даже если отправка не удалась.

Для impulse сначала ставится value, затем его логическое отрицание. При parameter: 0 обратная запись произойдёт не раньше следующего прохода обработчика задачи.

При резервном состоянии контроллера корневой code равен OpcUa_BadShutdown.

Сессия типа securityUnit отклоняется до вызова WriteData с OpcUa_BadUserAccessDenied; такой ответ не содержит serverTime.