|
<< 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.