Связь между клиентом и сервером opc ua

Я новичок в opcua и пытаюсь общаться следующим образом:

Сервер импортирует xml -> клиент читает значение (используя get_node) -> в зависимости от значения, клиент отправляет запрос на сервер -> Сервер отвечает на запрос -> Клиент получает ответ.

Я выполняю эту часть, пока клиент не прочитает значение. Я сейчас пытаюсь отправить запрос на сервер. Но я не могу понять, какой метод мне использовать?

Я видел исходный код и вижу метод send_request (). Но я не понимаю, как отправить запрос.

Также, как только я отправлю запрос, как сервер отреагирует на него? Пожалуйста, объясните мне это или приведите пример.

Мой клиент и сервер выглядят так:

server.py

from opcua import Server
from opcua.ua.uatypes import NodeId, NumericNodeId
from opcua import ua

server = Server()
server.import_xml("Opc.Ua.Di.NodeSet2.xml");
server.import_xml("final.xml");
server.set_endpoint("opc.tcp://localhost:4840/MyServer");
server.set_server_name("MyServer");

MyServerNameSpace = server.get_namespace_index("urn:freeopcua:python:server");
server.start();

client.py

from opcua import Client
from opcua import ua
from opcua.ua import StringNodeId

client = Client("opc.tcp://localhost:4840");

client.connect_socket();
client.create_session();
client.activate_session(username=None, password=None, certificate=None);


objects = client.get_objects_node();
xx = client.get_node(StringNodeId("i40.io/PrmInst/Temp_1",3));
tempval = xx.get_value();

if tempval < 20 :
#here i want to write the request code

person Rajendran Vignesh    schedule 27.12.2018    source источник


Ответы (1)


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

tempval = xx.get_data_value()
if tempval.Value.Value < 20:
   status = tempval.StatusCode.name # eg: Good/Bad etc..
   message= tempval.StatusCode.doc

Попробуйте использовать get_data_value (), который даст вам гораздо больше информации. Оттуда вы можете вытащить детали, которые вам нужны.

person kmr0877    schedule 30.05.2019