OPC UA asyncua Python:创建FileDirectory实例缺少CreateFile方法
问题:asyncua中创建FileDirectory实例后无法调用CreateFile方法
我遇到的问题和StackOverflow上一个未解决问题类似,但尝试了不同方案。最初调用自带的create_folder方法创建的文件夹仅能存放其他节点或文件夹,无法满足向OPC-UA服务器传输文件的需求。我发现FileDirectoryType似乎符合需求,在standard_address_space_services中能看到它应该包含CreateFile子节点(而这正是UaDirectory.create_file方法要查找的)。
为此我参考create_folder方法编写了如下代码:
async def add_directory(self, nodeid, bname): # 这段代码大部分复制自manage_nodes.create_folder nodeid, qname = _parse_nodeid_qname(nodeid, bname) parent = self.server.nodes.objects directory_node = make_node( self.server, await _create_object(parent.server, parent.nodeid, nodeid, qname, ua.ObjectIds.FileDirectoryType) ) # 这段代码复制自standard_address_space_services,但目前无法运行 # 因为self.server没有add_nodes方法 # 初始化内部服务器时会调用standard_address_space_services.create_standard_address_space_Services # 但这并不会让我创建的FileDirectoryType实例自动拥有CreateFile子节点 # CreateFile是创建在节点ID 13354("<FileDirectoryName>")下的 # 而该节点又是FileDirectoryType(ID 13353)的子节点,也就是我上面使用的类型 # attrs = ua.MethodAttributes( # DisplayName=LocalizedText("CreateFile"), # ) # node = ua.AddNodesItem( # BrowseName=QualifiedName("CreateFile", 0), # NodeClass_=NodeClass.Method, # ParentNodeId=NumericNodeId(directory_node.nodeid.Identifier, 0), # ReferenceTypeId=NumericNodeId(47, 0), # NodeAttributes=attrs, # ) # self.server.add_nodes([node]) return directory_node
遗憾的是,如注释所述,仅创建FileDirectoryType类型的对象并不会自动赋予它标准服务中定义的方法,因此调用create_file时仍会失败。FileDirectoryType肯定有其作用,但我不知道如何创建一个能正常工作的实例。
以下是我尝试用上述方法创建的节点来创建文件的代码:
ua_directory = UaDirectory(transfer_folder_node) transfer_file = await ua_directory.create_file("test_file.txt", True)
内容的提问来源于stack exchange,提问作者WindowsWeenie
相关产品推荐
相关产品推荐

