C # opc-клиент .net api - PullRequest
       46

C # opc-клиент .net api

4 голосов
/ 16 сентября 2010

Я пишу OPC-клиент, используя .NET API из OPC Foundation.

В примерах я вижу только то, где названия элементов жестко закодированы, например:

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

Что я хочу, так это не писать названия всех предметов своими руками. Я хочу загрузить все элементы с сервера, например, в дерево. Как я могу это сделать?

Ответы [ 5 ]

6 голосов
/ 16 сентября 2010

Вы можете просматривать сервер с помощью следующей конструкции:

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);

Теги в элементах [i] .Name.

1 голос
/ 07 августа 2011

Вы загружаете элементы из файла XML. Вы создаете XML-файл один раз с таким количеством элементов, сколько хотите, а затем редактируете его только при необходимости. Чтобы разобрать его, вы можете использовать MSXML DOM, например. В VB.NET имеется синтаксический анализатор для анализа XML-файла в VB.NET с использованием DOM . Но вы можете искать реализацию в C #.

0 голосов
/ 11 февраля 2014

Используйте XML или NLOG или файл log4NET для загрузки элементов тега.

Используйте opcdaauto.dll. Это бесплатная библиотека для членов OPC Foundation

0 голосов
/ 01 октября 2012
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
0 голосов
/ 16 сентября 2010

Хорошо, я не знаком с вашей клиентской библиотекой opc, но вы должны иметь возможность просматривать элементы серверов. Это общая функция, используемая многими автономными OPC-клиентами.

...