opc ua java订阅_从java客户端到python opcua服务器的订阅没有

我试图让一个Java客户机订阅我用Python OPCUA制作的OPCUA服务器上的几个标记。我可以很好地连接到服务器,甚至浏览树和读取值都不是问题,我只是无法让订阅像使用KepserverEX一样工作。在

客户机可以订阅Kepserver上的标记,所以我认为客户机逻辑不是问题所在。这和我给服务器编程的方式有关。在

这是我用于服务器的代码:class SubHandler(object):

"""

Subscription Handler. To receive events from server for a subscription

"""

def datachange_notification(self, node, val, data):

print("Python: New data change event", node, val)

def event_notification(self, event):

print("Python: New event", event)

if __name__ == "__main__":

logging.basicConfig(level=logging.WARN)

logger = logging.getLogger("opcua.address_space")

logger.setLevel(logging.DEBUG)

# setup our server

server = Server()

server.set_endpoint("opc.tcp://0.0.0.0:4840/freeopcua/server/")

server.set_server_name("Python Docker OPCUA Server")

# setup our own namespace, not really necessary but should as spec

uri = "2"

idx = server.register_namespace(uri)

# create a new node type we can instantiate in our address space

dev = server.nodes.base_object_type.add_object_type(0, "MyDevice")

sb1 = server.nodes.objects.add_object(idx, "Machine")

my_dict = {}

tag_data = json.load(open("tag.json"))

for tag in tag_data['tags']:

my_dict[tag] = sb1.add_variable(idx, tag, 0)

my_dict[tag].set_writable()

server.start()

print("Available loggers are: ", logging.Logger.manager.loggerDict.keys())

try:

while True:

handler = SubHandler()

finally:

server.stop()

我得到的错误是我试图订阅的nodeid是未知的。但是,当我试图从服务器读取值时,nodeid是已知的,我可以检索值。所以这也不是问题所在。在

我不知道我在这里遗漏了什么,我是必须自己实现某种发布/订阅逻辑,还是基础服务器已经有了?在


版权声明:本文为weixin_30446393原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。