如何在不触发数据更改事件的情况下更改变量值?OPCUA

2024-10-03 00:26:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我的OPC-UA服务器中有两个相同设备的表示。我有一个节点代表一个有八个位置的led阵列,另一个是一个一字节的led字

我有一个方法,随机选择两个节点中的一个,并随机更改其值

一旦更改,将触发数据更改事件。现在我必须使这两个值相等,使它们相同。但更改会再次触发数据更改事件。等等,等等。。。我的程序进入了一个永无止境的循环

def _make_variables_equal(chaning_node, val):
    if chaning_node == led_array and isinstance(val, list):
         led_word.set_value(_boolean_list_to_int(val))
    elif chaning_node == led_word and isinstance(val, int):
         led_array.set_value(_int_to_boolean_list(val))
    else:
         print("[SERVER] FATAL ERROR ON _make_variables_equal. Unexpected chaning_node.")

class SubHandler(object):
    def datachange_notification(self, node, val, data):
        # New data change event
       _make_variables_equal(node, val)


led_array = tablero.add_variable(idx, "led_array", ua.Variant([
False,
False,
False,
False,
False,
False,
False,
False,], ua.VariantType.Boolean))

led_word = tablero.add_variable(idx, "led_word", 0, ua.VariantType.Byte)

handler = SubHandler()
sub = server.create_subscription(500, handler)
handle = sub.subscribe_data_change([led_array, led_word])

Tags: nodefalsedatamakeled节点valequal