Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将OPC UA ModelCompiler的输出导入地址空间_C#_.net_Opc_Opc Ua - Fatal编程技术网

C# 将OPC UA ModelCompiler的输出导入地址空间

C# 将OPC UA ModelCompiler的输出导入地址空间,c#,.net,opc,opc-ua,C#,.net,Opc,Opc Ua,因此,我成功地遵循了Stefan Profanter的指南,并使用UA ModelCompiler创建了模型文件。转到这本很棒的指南 但是我如何在.NET中使用这些呢?我使用的是OPC基金会.NET标准栈。我已经了解了NodeManager中的CreateAddressSpace,但是,我正在努力找到如何使用NodeSet2、uanodes、.xsd和ModelCompiler生成的其他文件 我已经尝试从下面实现了这些示例,没有得到任何错误。当我使用.Net堆栈引用客户端浏览地址空间时,我只看到

因此,我成功地遵循了Stefan Profanter的指南,并使用UA ModelCompiler创建了模型文件。转到这本很棒的指南

但是我如何在.NET中使用这些呢?我使用的是OPC基金会.NET标准栈。我已经了解了NodeManager中的CreateAddressSpace,但是,我正在努力找到如何使用NodeSet2、uanodes、.xsd和ModelCompiler生成的其他文件

我已经尝试从下面实现了这些示例,没有得到任何错误。当我使用.Net堆栈引用客户端浏览地址空间时,我只看到服务器名称空间的名称。我还希望看到一个动物名称空间

public override void CreateAddressSpace(IDictionary<NodeId, IList<IReference>> externalReferences)
    {
        lock (Lock)
        {
            IList<IReference> references = null;

            if (!externalReferences.TryGetValue(ObjectIds.ObjectsFolder, out references))
            {
                externalReferences[ObjectIds.ObjectsFolder] = references = new List<IReference>();
            }

            string resourcepath = "C:\\Desktop\\UA-ModelCompiler-master\\Bin\\Release\\New\\animal.NodeSet2.xml";
            ImportXml(externalReferences, resourcepath);
        }
    }

    private void ImportXml(IDictionary<NodeId, IList<IReference>> externalReferences, string resourcepath)
    {
        try
        {

            NodeStateCollection predefinedNodes = new NodeStateCollection();

            Stream stream = new FileStream(resourcepath, FileMode.Open);
            Opc.Ua.Export.UANodeSet nodeSet = Opc.Ua.Export.UANodeSet.Read(stream);

            foreach (string namespaceUri in nodeSet.NamespaceUris)
            {
                SystemContext.NamespaceUris.GetIndexOrAppend(namespaceUri);
            }
            nodeSet.Import(SystemContext, predefinedNodes);

            for (int ii = 0; ii < predefinedNodes.Count; ii++)
            {
                AddPredefinedNode(SystemContext, predefinedNodes[ii]);
            }
            // ensure the reverse refernces exist.
            AddReverseReferences(externalReferences);
        }
        catch (Exception)
        {

            throw;
        }
    }
public覆盖void CreateAddressSpace(IDictionary外部引用)
{
锁(锁)
{
IList引用=null;
if(!externalReferences.TryGetValue(objectId.ObjectsFolder,out references))
{
externalReferences[ObjectId.ObjectsFolder]=引用=新列表();
}
string resourcepath=“C:\\Desktop\\UA ModelCompiler master\\Bin\\Release\\New\\animal.NodeSet2.xml”;
导入XML(外部引用、资源路径);
}
}
私有void ImportXml(IDictionary外部引用,字符串resourcepath)
{
尝试
{
NodeStateCollection预定义节点=新的NodeStateCollection();
Stream=新文件流(resourcepath,FileMode.Open);
Opc.Ua.Export.UANodeSet nodeSet=Opc.Ua.Export.UANodeSet.Read(流);
foreach(nodeSet.NamespaceUris中的字符串namespaceUri)
{
SystemContext.NamespaceUris.getIndexorapend(namespaceUri);
}
导入(SystemContext,预定义的节点);
for(int ii=0;ii
感谢您参考我的指南。包括一个特定的链接,以便其他人也知道你指的是哪一个指南,这可能是有意义的(将来可能会有更多)。此外,请说明您指的是哪个特定的.Net堆栈。您已经尝试了什么?也许这会有所帮助:@StefanProfanter我已经根据你的评论更新了我的问题。好了,现在好多了,但仍然缺少信息。所以您尝试实现它,但是测试的结果是什么?是否有错误消息?为什么这个代码不起作用?你还试过其他什么?在你的简历中尽可能多地包含信息post@StefanProfanter谢谢你的耐心;我已经添加了我的最后步骤。我喜欢对其他人的项目进行逆向工程,以便在一个非常基本的层面上理解它。具有包含单个字符串数据类型的模型的基本服务器适合作为启动服务器。Net快速入门对初学者来说不是那么容易。感谢您参考我的指南。包括一个特定的链接,以便其他人也知道你指的是哪一个指南,这可能是有意义的(将来可能会有更多)。此外,请说明您指的是哪个特定的.Net堆栈。您已经尝试了什么?也许这会有所帮助:@StefanProfanter我已经根据你的评论更新了我的问题。好了,现在好多了,但仍然缺少信息。所以您尝试实现它,但是测试的结果是什么?是否有错误消息?为什么这个代码不起作用?你还试过其他什么?在你的简历中尽可能多地包含信息post@StefanProfanter谢谢你的耐心;我已经添加了我的最后步骤。我喜欢对其他人的项目进行逆向工程,以便在一个非常基本的层面上理解它。具有包含单个字符串数据类型的模型的基本服务器适合作为启动服务器。Net快速入门对于初学者来说并不那么容易。