You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 08:22:57