C# OPC客户端 .NET API

5

我正在编写 OPC 客户端,使用来自 OPC 基金会的 .NET API。

在示例中,我只看到了硬编码项目名称的情况,例如:

items[0] = new Opc.Da.Item();
items[0].ItemName = "blahblahblah";

我想做的是不用手写所有项目名称,而是从服务器加载所有项目,例如加载到树形结构中。我该怎么做?


1
看起来你正在查看错误的示例。那应该是服务器代码,在OPC中更为常见。 - Hans Passant
5个回答

6
您可以使用以下结构来浏览服务器:
using Opc.Da;
using Server=Opc.Da.Server;
using Factory=OpcCom.Factory;

string urlstring = string.Format("opcda://{0}/{1}/{{{2}}}", _hostName, _serverName, serverid);
Server s = new Server(new Factory(), new URL(urlstring));
s.Connect();
ItemIdentifier itemId = null;
BrowsePosition position;
BrowseFilters filters = new BrowseFilters() {BrowseFilter = browseFilter.item};
BrowseElement[] elements = s.Browse(itemId, filters, out position);

标签在elements[i].Name中。

是的,我使用了相同的代码。但是我在服务器上有文件夹...你的代码没有显示它们。 - eba
将 {BrowseFilter = browseFilter.item}; 更改为 {BrowseFilter = browseFilter.all}; - Baked Inhalf

2
你可以从XML文件中加载项目。你只需要创建一个包含所需项目的XML文件,并在需要时进行编辑。例如,你可以使用MSXML DOM进行解析。VB.NET中有一个解析器Parsing XML file in VB.NET using DOM。但是你也可以在C#中搜索实现方法。请注意保留HTML标签。

0

嗯,我不熟悉你的 OPC 客户端库,但是你应该能够浏览服务器项。这是许多独立 OPC 客户端常用的功能。


0

使用XML或NLOG或log4NET文件来加载标签项。

使用opcdaauto.dll。这是一个免费的OPC基金会成员DLL。


0
Public Function Browse(ByRef node As TreeNode, Optional id As Opc.ItemIdentifier = Nothing) As Integer
    Try
        Dim clone As Opc.Da.Server = your_connected_server
        Dim filters As New Opc.Da.BrowseFilters
        filters.BrowseFilter = Opc.Da.browseFilter.all
        Dim pos As Opc.Da.BrowsePosition = Nothing
        Dim elements() As Opc.Da.BrowseElement = clone.Browse(id, filters, pos)
        If (elements IsNot Nothing) Then
            For Each element As Opc.Da.BrowseElement In elements
                Console.WriteLine(element.ItemName)
                AddBrowseElement(node, element)
                If (element.HasChildren = True) Then
                    id = New Opc.ItemIdentifier(element.ItemPath, element.ItemName)
                    Browse(node.Nodes.Item(node.Nodes.Count - 1), id)
                End If
            Next
        End If
        Return 0
    Catch ex As Exception
        RaiseEvent OnException(GetCurrentMethod, ex)
        Return -1
    End Try
End Function

Private Sub AddBrowseElement(ByRef parent As TreeNode, element As Opc.Da.BrowseElement)
    Dim node As TreeNode = New TreeNode(element.Name)
    node.Text = element.Name
    node.Tag = element

    ' add properties
    If (element.Properties IsNot Nothing) Then
        For Each [property] As Opc.Da.ItemProperty In element.Properties
            AddItemProperty(node, [property])
        Next
    End If
    ' add to parent.
    parent.Nodes.Add(node)
End Sub

你使用 TreeNode 对象调用 Browse 函数: Dim node As New TreeNode("Root") Browse(node)然后,Browse 函数会递归地调用自身。 完成后,您将在节点控件中拥有所有服务器标记。 - søren hyltoft

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接