WEB OPC HTTP API: различия между версиями
Alex (обсуждение | вклад) Новая страница: « TEST» |
Alex (обсуждение | вклад) Нет описания правки |
||
| Строка 1: | Строка 1: | ||
== ВВЕДЕНИЕ == | |||
Данное API позволяет получить доступ к данными диспетчеризации, циркулирующим в ПО АСУД.SCADA, посредством выполнения запросов по HTTP(S) протоколу к специализированному WEB-сервису. | |||
WEB-сервис реализован в приложении .. \ tools-server \ opcconnector.exe | |||
По-сути API является OPC HTTP шлюзом для Tekon OPC-сервера. | |||
WEB-сервис реализован в приложении .. \ tools-server \ opcconnector.exe | |||
Если вам необходим доступ к данным подсистемы учета ресурсов смотри [[WEB_REST_API|WEB REST API]] | |||
== ОБЩИЕ СВЕДЕНИЯ == | |||
Взаимодействие реализуется по следующей схеме: | |||
*получение адресного пространства Tekon OPC-сервера | |||
*открытие сессии | |||
*подписка на обновление определенных элементов | |||
*периодическая проверка обновления данных | |||
В текущей версии API-не реализует callback-механизма. Для получения обновлений в подписки, клиент должен выполнять периодические запросы. | |||
== ДОСТУП К ДАННЫМ == | |||
Доступ осуществляется с помощью HTTP-запросов: GET и POST. | |||
Признаком кооректной обработки запроса является HTTP Responce status code = 200 | |||
=== Коды ошибок WEB-сервиса === | |||
В случае ошибки обоработки запроса, WEB-сервис формирует следующие коды ошибок | |||
{| border="1" cellpadding="1" cellspacing="1" class="wikitable" style="width: 700px;" | |||
|- | |||
! HTTP Responce status code | |||
! Описание ошибки | |||
! Комментарий | |||
|- | |||
| 400 | |||
| В запросе не указан идентификатор сессии | |||
| | |||
|- | |||
| 403 | |||
| Соединение с данного IP-адреса запрещено | |||
| Список допустимых IP-адресов может быть указан в настройках WEB-сервиса | |||
|- | |||
| 404 | |||
| Запрашиваемый ресурс не найден | |||
| | |||
| |||
|- | |||
| 409 | |||
| Указанный идентификатор сессии не найден | |||
| Следует переоткрыть сессию | |||
|- | |||
| 415 | |||
| В запросе должны быть, но отсутствуют даннные, передаваемые методом POST | |||
| | |||
|- | |||
| 503 | |||
| Tekon OPC-сервер не доступен | |||
| | |||
Вероятно осуществляется перезапуск OPC-сервера | |||
Следует выполнить переоткрытие сессии и заново оформить подписку на элементы | |||
|} | |||
=== === | |||
=== Запрос адресного пространства Tekon OPC-сервера === | |||
Это первый запрос, который следует выполнять при подключении к серверу. | |||
<pre>GET http://host:port/GetAddressSpace</pre> | |||
Ответ: json-массив следующего вида | |||
<pre> [ | |||
{ | |||
"ItemProps": [ | |||
{ | |||
"Datatype": 18, | |||
"ID": 1, | |||
"Value": "19", | |||
"Error": 0, | |||
"Desc": "Тип данных" | |||
},{ | |||
"Datatype": 19, | |||
"ID": 5, | |||
"Value": "3", | |||
"Error": 0, | |||
"Desc": "Права доступа" | |||
}], | |||
"ItemIndex": 0, | |||
"ItemName": "DBMonitoring.ConnectFailDevices" | |||
},{ | |||
"ItemProps": [ | |||
{ | |||
"Datatype": 18, | |||
"ID": 1, | |||
"Value": "19", | |||
"Error": 0, | |||
"Desc": "Тип данных" | |||
},{ | |||
"Datatype": 19, | |||
"ID": 5, | |||
"Value": "3", | |||
"Error": 0, | |||
"Desc": "Права доступа" | |||
}], | |||
"ItemIndex": 1, | |||
"ItemName": "DBMonitoring.KIR_BatteryFail" | |||
}]</pre> | |||
, где: | |||
*ItemProps - набор свойств элемента Tekon OPC-сервера | |||
*ItemIndex - идентификатор элемента. Используется далее при обмене данным с сервером | |||
*ItemName - имя элемента | |||
Если конфигурация Tekon OPC-сервера не изменяется, на запрос адресного пространства приходит один и тот же ответ. Однако, если в Tekon OPC-сервере появятся новые элементы, например: в результате регистрации нового оборудования, то идентификация его элементов может измениться. Это следует учитывать при подписке на обновления данных. | |||
=== Запрос открытия сессии === | |||
<pre>GET http://host:port/NewSession?alldata=0</pre> | |||
, где | |||
*alldata - определяет механизм обновления данных в подписке | |||
**0 - обычно, предоставлять только последнее обновление значения элемента между запросами данных | |||
**1 - предоставлять все изменения значения элемента между запросами данных | |||
Ответ: json следующего вида | |||
<pre>{"sessionid":"22339217-FEF1-45B4-BB59-70177BB2997A"}</pre> | |||
=== Запрос закрытия сессии === | |||
| |||
=== Запрос подписки на обновление данных === | |||
<pre>POST http://host:port/Subscriber?sessionid=22339217-FEF1-45B4-BB59-70177BB2997A</pre> | |||
, где | |||
*sessionid - идентификатор сессии полученный в ответ на запрос открытия сессии | |||
В POST запросе также передается массив идентификаторов элементов адресного пространства, на обновление данных которых необходимо подписаться, например: | |||
<pre>{"items":[0,1,2,3,4,5,6,7,8,9]}</pre> | |||
Ответ: json следующего вида | |||
<pre>{"result":10}</pre> | |||
, где | |||
*result - число элементов, которые были добавлены в подписку | |||
Для добавления элементов в подписку следует повторно выполнить запрос с указанием новых (добавляемых) идентификаторов элементов. | |||
=== Запрос проверки новых данных === | |||
Запрос выполняется периодически, например: раз в секунду, для проверки наличия новых данных (тех, на которые была выполнена подписка ранее). | |||
<pre>GET http://host:port/GetUpdates?sessionid=22339217-FEF1-45B4-BB59-70177BB2997A</pre> | |||
Ответ: json-массив | |||
<pre> [{ | |||
"UpTime": "2023-04-28 17:54:55", | |||
"V": "0", | |||
"ItemID": 3, | |||
"Qual": 192 | |||
}]</pre> | |||
, где | |||
*UpTime - время обновления | |||
*V - значение элемента | |||
*ItemID - идентификатор элемента, который был указан в подписке (и получен из адресного пространства Tekon OPC-сервера) | |||
*Qual - качество значения | |||
Внимание! В ответе присуствуют только те данные, которые обновились с момента прошлого запроса. | |||
=== Запрос принудительного чтения значения элемента === | |||
<pre>GET http://host:port/ReadItemValue?sessionid=22339217-FEF1-45B4-BB59-70177BB2997A&item=1</pre> | |||
, где | |||
*item - идентификатор элемента, который был указан в подписке (и получен из адресного пространства Tekon OPC-сервера) | |||
Ответ: json следующего вида | |||
<pre>{"result":1}</pre> | |||
, где | |||
*result | |||
**0 - ошибка, запрашиваемый идентификатор отсутствует в подписке | |||
**1 - ok, можно выполнить Запрос проверки новых данных, значение элемента будет в ответе | |||
=== Запрос принудительного чтения значений всех элементов === | |||
<pre>GET http://host:port/ReadAllItemsValues?sessionid=22339217-FEF1-45B4-BB59-70177BB2997A | |||
</pre> | |||
Ответ: json следующего вида | |||
<pre>{"result":10}</pre> | |||
, где | |||
*result | |||
**0 - ошибка, отсутствуют элементы в подписке | |||
**> 0 - ok, можно выполнить Запрос проверки новых данных, значения элементов будут в ответе | |||
=== Запрос записи нового значения элемента === | |||
<pre>POST http://host:port/WriteItemsValues?sessionid=22339217-FEF1-45B4-BB59-70177BB2997A</pre> | |||
В POST запросе также передается массив идентификаторов элементов адресного пространства, на обновление данных которых необходимо подписаться, например: | |||
<pre>[{ | |||
"ItemID": 1, | |||
"Value": "0" | |||
}]</pre> | |||
Ответ: json следующего вида | |||
<pre> {"result":1}</pre> | |||
[[Category:REST API]] | |||
Версия от 15:33, 28 апреля 2023
ВВЕДЕНИЕ
Данное API позволяет получить доступ к данными диспетчеризации, циркулирующим в ПО АСУД.SCADA, посредством выполнения запросов по HTTP(S) протоколу к специализированному WEB-сервису.
WEB-сервис реализован в приложении .. \ tools-server \ opcconnector.exe
По-сути API является OPC HTTP шлюзом для Tekon OPC-сервера.
WEB-сервис реализован в приложении .. \ tools-server \ opcconnector.exe
Если вам необходим доступ к данным подсистемы учета ресурсов смотри WEB REST API
ОБЩИЕ СВЕДЕНИЯ
Взаимодействие реализуется по следующей схеме:
- получение адресного пространства Tekon OPC-сервера
- открытие сессии
- подписка на обновление определенных элементов
- периодическая проверка обновления данных
В текущей версии API-не реализует callback-механизма. Для получения обновлений в подписки, клиент должен выполнять периодические запросы.
ДОСТУП К ДАННЫМ
Доступ осуществляется с помощью HTTP-запросов: GET и POST.
Признаком кооректной обработки запроса является HTTP Responce status code = 200
Коды ошибок WEB-сервиса
В случае ошибки обоработки запроса, WEB-сервис формирует следующие коды ошибок
| HTTP Responce status code | Описание ошибки | Комментарий |
|---|---|---|
| 400 | В запросе не указан идентификатор сессии | |
| 403 | Соединение с данного IP-адреса запрещено | Список допустимых IP-адресов может быть указан в настройках WEB-сервиса |
| 404 | Запрашиваемый ресурс не найден |
|
| 409 | Указанный идентификатор сессии не найден | Следует переоткрыть сессию |
| 415 | В запросе должны быть, но отсутствуют даннные, передаваемые методом POST | |
| 503 | Tekon OPC-сервер не доступен |
Вероятно осуществляется перезапуск OPC-сервера Следует выполнить переоткрытие сессии и заново оформить подписку на элементы |
Запрос адресного пространства Tekon OPC-сервера
Это первый запрос, который следует выполнять при подключении к серверу.
GET http://host:port/GetAddressSpace
Ответ: json-массив следующего вида
[
{
"ItemProps": [
{
"Datatype": 18,
"ID": 1,
"Value": "19",
"Error": 0,
"Desc": "Тип данных"
},{
"Datatype": 19,
"ID": 5,
"Value": "3",
"Error": 0,
"Desc": "Права доступа"
}],
"ItemIndex": 0,
"ItemName": "DBMonitoring.ConnectFailDevices"
},{
"ItemProps": [
{
"Datatype": 18,
"ID": 1,
"Value": "19",
"Error": 0,
"Desc": "Тип данных"
},{
"Datatype": 19,
"ID": 5,
"Value": "3",
"Error": 0,
"Desc": "Права доступа"
}],
"ItemIndex": 1,
"ItemName": "DBMonitoring.KIR_BatteryFail"
}]
, где:
- ItemProps - набор свойств элемента Tekon OPC-сервера
- ItemIndex - идентификатор элемента. Используется далее при обмене данным с сервером
- ItemName - имя элемента
Если конфигурация Tekon OPC-сервера не изменяется, на запрос адресного пространства приходит один и тот же ответ. Однако, если в Tekon OPC-сервере появятся новые элементы, например: в результате регистрации нового оборудования, то идентификация его элементов может измениться. Это следует учитывать при подписке на обновления данных.
Запрос открытия сессии
GET http://host:port/NewSession?alldata=0
, где
- alldata - определяет механизм обновления данных в подписке
- 0 - обычно, предоставлять только последнее обновление значения элемента между запросами данных
- 1 - предоставлять все изменения значения элемента между запросами данных
Ответ: json следующего вида
{"sessionid":"22339217-FEF1-45B4-BB59-70177BB2997A"}
Запрос закрытия сессии
Запрос подписки на обновление данных
POST http://host:port/Subscriber?sessionid=22339217-FEF1-45B4-BB59-70177BB2997A
, где
- sessionid - идентификатор сессии полученный в ответ на запрос открытия сессии
В POST запросе также передается массив идентификаторов элементов адресного пространства, на обновление данных которых необходимо подписаться, например:
{"items":[0,1,2,3,4,5,6,7,8,9]}
Ответ: json следующего вида
{"result":10}
, где
- result - число элементов, которые были добавлены в подписку
Для добавления элементов в подписку следует повторно выполнить запрос с указанием новых (добавляемых) идентификаторов элементов.
Запрос проверки новых данных
Запрос выполняется периодически, например: раз в секунду, для проверки наличия новых данных (тех, на которые была выполнена подписка ранее).
GET http://host:port/GetUpdates?sessionid=22339217-FEF1-45B4-BB59-70177BB2997A
Ответ: json-массив
[{
"UpTime": "2023-04-28 17:54:55",
"V": "0",
"ItemID": 3,
"Qual": 192
}]
, где
- UpTime - время обновления
- V - значение элемента
- ItemID - идентификатор элемента, который был указан в подписке (и получен из адресного пространства Tekon OPC-сервера)
- Qual - качество значения
Внимание! В ответе присуствуют только те данные, которые обновились с момента прошлого запроса.
Запрос принудительного чтения значения элемента
GET http://host:port/ReadItemValue?sessionid=22339217-FEF1-45B4-BB59-70177BB2997A&item=1
, где
- item - идентификатор элемента, который был указан в подписке (и получен из адресного пространства Tekon OPC-сервера)
Ответ: json следующего вида
{"result":1}
, где
- result
- 0 - ошибка, запрашиваемый идентификатор отсутствует в подписке
- 1 - ok, можно выполнить Запрос проверки новых данных, значение элемента будет в ответе
Запрос принудительного чтения значений всех элементов
GET http://host:port/ReadAllItemsValues?sessionid=22339217-FEF1-45B4-BB59-70177BB2997A
Ответ: json следующего вида
{"result":10}
, где
- result
- 0 - ошибка, отсутствуют элементы в подписке
- > 0 - ok, можно выполнить Запрос проверки новых данных, значения элементов будут в ответе
Запрос записи нового значения элемента
POST http://host:port/WriteItemsValues?sessionid=22339217-FEF1-45B4-BB59-70177BB2997A
В POST запросе также передается массив идентификаторов элементов адресного пространства, на обновление данных которых необходимо подписаться, например:
[{
"ItemID": 1,
"Value": "0"
}]
Ответ: json следующего вида
{"result":1}