Из заданных узлов opcua некоторые узлы временно недоступны для подписки. Как получить уведомление об изменении данных, кPython

Программы на Python
Ответить
Anonymous
 Из заданных узлов opcua некоторые узлы временно недоступны для подписки. Как получить уведомление об изменении данных, к

Сообщение Anonymous »

Предположим, что 3 узла подписаны на изменение данных (которые автоматически сохраняются в словаре self._monitored_items(), предоставляемом asyncua). В этом случае, если какой-либо из узлов становится недоступным на какое-то время, а затем снова становится доступным, то как будет происходить клиент знает, что узел снова в сети?

Код: Выделить всё

 async with client:
# We create a Client Subscription.
subscription = await client.create_subscription(50, handler)
nodes = [
client.get_node('ns=3;i=1025'),
client.get_node('ns=3;i=1026'),
client.get_node('ns=3;i=1027')
]
handle = await subscription.subscribe_data_change(nodes)

print(subscription._monitored_items)
Я пробовал использовать метод read_value, который периодически проверяет значение каждого узла, и если мы получаем значение, это означает, что узел доступен..... но проблема в том, что если мой период проверки составляет 10 секунд, и узел становится доступным в течение первых 2 секунд, данные за 8 секунд теряются.

Код: Выделить всё

async def check_node_availability(node):
""" Check if the node is still available on the server by reading its value. """
try:
await node.read_value()
return True
except Exception as e:
# print(f'Failed to read node {node}: {e}')
return False
Как предотвратить упомянутую выше потерю данных?

Подробнее здесь: https://stackoverflow.com/questions/791 ... bscription
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»