2010-09-16 11 views
3

J'écris un client opc, en utilisant l'API .NET de la fondation opc.C# opc-client .net api

Dans les échantillons, je ne vois, où les noms de poste sont codées en dur comme:

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

Ce que je veux, est de ne pas écrire les noms de tous les articles par mes mains. Je veux charger tous les éléments du serveur, dans l'arbre par exemple. Comment puis-je le faire?

+1

Me semble que vous regardez les mauvais échantillons. Ce serait le code du serveur, beaucoup plus commun dans OPC. –

Répondre

6

Vous pouvez parcourir le serveur avec la construction suivante:

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

Les balises sont des éléments [i] .name.

+0

oui. J'ai utilisé le même code. mais. J'ai des dossiers sur le serveur ... et votre code ne les montre pas – eba

+0

Modifier {BrowseFilter = browseFilter.item}; à {BrowseFilter = browseFilter.all}; –

0

Eh bien, je ne connais pas votre bibliothèque client opc, mais vous devriez être capable de parcourir les éléments du serveur. C'est une caractéristique commune utilisée par de nombreux clients OPC autonomes.

1

Vous chargez les éléments à partir du fichier XML. Vous créez une fois le fichier XML avec autant d'éléments que vous le souhaitez, puis vous ne le modifiez qu'en cas de besoin. Pour l'analyser, vous pouvez utiliser MSXML DOM, par exemple. Il y a un analyseur dans VB.NET Parsing XML file in VB.NET using DOM. Mais vous pouvez rechercher l'implémentation en C#.

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 
+0

Pouvez-vous donner une explication? –

+0

Vous appelez la fonction Browse avec un objet TreeNode: Dim node As New TreeNode ("Root") Parcourir (nœud) La fonction Parcourir appelle alors automatiquement de manière récurrente. Une fois terminé, vous avez tous les tags de serveurs dans le contrôle de noeud. –

0

Utilisez le fichier XML ou NLOG ou log4NET pour charger les éléments d'étiquette.

Utilisez opcdaauto.dll.Its une dll gratuite pour la Fondation OPC Membres