begin process at 2012 02 10 21:19:50
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > SERVEUR OPC

SERVEUR OPC


 Information sur la source

Note :
Aucune note
Catégorie :API Source .NET ( DotNet ) Classé sous :item, api, récupérer, groupe, opc Niveau :Débutant Date de création :18/06/2008 Date de mise à jour :18/06/2008 12:47:24 Vu :8 737

Auteur : crownstud

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Connexion à un serveur opc et récupération des items.Programme assez simple.On met directement les adresses des variables souhaitées.

Source

  • Imports System.Runtime.InteropServices
  • Imports System.Net
  • Imports System.IO
  • Imports Opc
  • Public Class SuperVision
  • 'déclaration
  • Private WithEvents Srv As Opc.Da.Server
  • 'Connection au serveur au OPC
  • Private Sub Supervision_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  • 'Objet OPC.Factory
  • Dim OPCFact As New OpcCom.Factory()
  • 'URL de l'OPC (recopie celui que te donne l'exemple OPC .Net Sample Data Access fourni avec OFS3.3
  • Dim OPCUrl As New Opc.URL("opcda://localhost/Schneider-Aut.OFS/{e7675090-9ff9-11d1-ac46-0060978add48}")
  • 'Creation du client
  • Dim Opc As New Opc.Server(OPCFact, OPCUrl)
  • Try
  • 'Connection au serveur
  • TextBox2.Text = "--> En attente de connexion "
  • 'Saut au programme "Connect"
  • Opc.Connect()
  • Catch
  • TextBox2.Text = "--> La connection n'a pas été établie avec le Serveur Schneider-Aut.OFS "
  • End Try
  • End Sub
  • 'Programme de Connection au serveur OPC
  • Private Sub Connect()
  • Dim Url As Opc.URL = New Opc.URL("opcda://localhost/Schneider-Aut.OFS/{e7675090-9ff9-11d1-ac46-0060978add48}")
  • Srv = New Opc.Da.Server(New OpcCom.Factory, Url)
  • '
  • Try
  • Srv.Connect()
  • Catch ex As Exception
  • 'Gestion des erreurs
  • MsgBox("Erreur Fonction Cnx: " & ex.Message)
  • '
  • Finally
  • End Try
  • End Sub
  • '
  • '
  • '
  • '
  • 'récupération donnée
  • Private Bol As Boolean = False
  • 'Ajouter en référence
  • 'OPCNETAPI.dll
  • 'OPCNETAPI.COM.dll
  • 'OPCRCW.AE.dll
  • 'OPCRCW.COMM.dll
  • 'OPCRCW.DA.dll
  • 'OPCRCW.DX.dll
  • 'OPCRCW.HDA.dll
  • #Region "VAR OPC"
  • 'Serveur OPC
  • 'Groupe
  • Private WithEvents OFSCompteur1 As Opc.Da.ISubscription
  • 'Création des Items
  • Dim m_ItemCptr1() As Opc.Da.Item
  • Dim m_ItemCptr2() As Opc.Da.Item
  • Dim m_itemOf() As Opc.Da.Item
  • 'Resultat item
  • Dim ItemCptr1() As Opc.Da.ItemResult
  • Dim ItemCptr2() As Opc.Da.ItemResult
  • Dim ItemOF() As Opc.Da.ItemResult
  • Dim m_handle As Integer
  • Dim Cptr1_state As New Opc.Da.SubscriptionState
  • 'Structure des résultats
  • Public Structure ItemsResults
  • Dim ItemsName As String
  • Dim ItemsClientHnd As String
  • Dim ItemsSrvHnd As Integer
  • Dim ItemsValue As Object
  • Dim ItemsQuality As String
  • Dim ItemsTimeStamp As Date
  • Dim ItemsDescription As String
  • Dim ItemsType As String
  • Dim ItemsTopologicAdress As String
  • End Structure
  • #End Region
  • #Region "Ajouter Variable"
  • Private Sub BtnAdd()
  • 'Création de Groupe
  • Cptr1_state.ClientHandle = Guid.NewGuid.ToString
  • Cptr1_state.ServerHandle = Cptr1_state.ClientHandle
  • Cptr1_state.Name = "LECTURE"
  • Cptr1_state.Active = True
  • OFSCompteur1 = Srv.CreateSubscription(Cptr1_state)
  • 'Création de Item1
  • m_ItemCptr1 = New Opc.Da.Item(0) {}
  • m_ItemCptr1(0) = New Opc.Da.Item()
  • 'Nom de l'item ALIAS ! Nom de la variable
  • m_ItemCptr1(0).ItemName = "UTW!%MD200"
  • m_ItemCptr1(0).ItemPath = "Cptr1"
  • m_ItemCptr1(0).ClientHandle = Guid.NewGuid.ToString()
  • ItemCptr1 = OFSCompteur1.AddItems(m_ItemCptr1)
  • m_ItemCptr1(0).ServerHandle = ItemCptr1(0).ServerHandle
  • 'Création de Item2
  • m_ItemCptr2 = New Opc.Da.Item(0) {}
  • m_ItemCptr2(0) = New Opc.Da.Item()
  • 'Nom de l'item ALIAS ! Nom de la variable
  • m_ItemCptr2(0).ItemName = "UTW!%MD210"
  • m_ItemCptr2(0).ItemPath = "Cptr2"
  • m_ItemCptr2(0).ClientHandle = Guid.NewGuid.ToString()
  • ItemCptr2 = OFSCompteur1.AddItems(m_ItemCptr2)
  • m_ItemCptr2(0).ServerHandle = ItemCptr2(0).ServerHandle
  • 'Création de Item1Of
  • m_ItemOF = New Opc.Da.Item(0) {}
  • m_itemOf(0) = New Opc.Da.Item()
  • 'Nom de l'item ALIAS ! Nom de la variable
  • m_itemOf(0).ItemName = "UTW!%MW102"
  • m_itemOf(0).ItemPath = "Of"
  • m_itemOf(0).ClientHandle = Guid.NewGuid.ToString()
  • ItemOF = OFSCompteur1.AddItems(m_itemOf)
  • m_itemOf(0).ServerHandle = ItemOF(0).ServerHandle
  • End Sub
  • #End Region
  • Private Sub OFSCompteur1_DataChanged(ByVal subscriptionHandle As Object, ByVal requestHandle As Object, ByVal values() As Opc.Da.ItemValueResult) Handles OFSCompteur1.DataChanged
  • 'Procédure appelée sur changement d'état des Items
  • Dim GrpHnd As String
  • GrpHnd = subscriptionHandle
  • Dim NotifyItems(values.Length - 1) As ItemsResults
  • Dim index As Integer
  • Try
  • For index = 0 To values.Length - 1
  • NotifyItems(index).ItemsClientHnd = values(index).ClientHandle
  • NotifyItems(index).ItemsName = values(index).ItemName
  • NotifyItems(index).ItemsQuality = values(index).Quality.ToString
  • NotifyItems(index).ItemsSrvHnd = values(index).ServerHandle
  • NotifyItems(index).ItemsTimeStamp = values(index).Timestamp
  • NotifyItems(index).ItemsValue = values(index).Value
  • Dim ValueCptr As String = Convert.ToString(NotifyItems(index).ItemsValue)
  • If index = 0 Then
  • Me.BeginInvoke(New EventHandler(AddressOf SetValueCptr1), ValueCptr)
  • End If
  • If index = 1 Then
  • Me.BeginInvoke(New EventHandler(AddressOf SetValueCptr2), ValueCptr)
  • End If
  • Next
  • '
  • Catch ex As Exception
  • 'Gestion des erreurs
  • MsgBox("Erreur sur la Lecture du Compteur 1 : " & ex.Message)
  • End Try
  • End Sub
  • 'écriture des items
  • Private Sub SetValueCptr1(ByVal sender As Object, ByVal e As EventArgs)
  • 'Ecriture du résultat de la variable
  • cpte.Text = sender
  • End Sub
  • Private Sub SetValueCptr2(ByVal sender As Object, ByVal e As EventArgs)
  • 'Ecriture du résultat de la variable
  • cpts.Text = sender
  • End Sub
  • Private Sub SetValueOF(ByVal sender As Object, ByVal e As EventArgs)
  • 'Ecriture du résultat de la variable
  • numof.Text = sender
  • End Sub
  • 'Private Sub raffraichissement()
  • ' While (BtnConnect.Enabled)
  • ' BtnAdd()
  • ' End While
  • ' End Sub
  • #Region "Connexion Deconnexion"
  • Private Sub BtnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnConnect.Click
  • Connect()
  • TextBox2.Text = "--> Connection réussie au Serveur Schneider-Aut.OFS "
  • BtnAdd()
  • End Sub
  • Public Sub Deconnect_OPCServer()
  • Try
  • Srv.Disconnect()
  • Catch ex As Exception
  • End Try
  • End Sub
  • Private Sub BtnDeconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnDeconnect.Click
  • Deconnect_OPCServer()
  • BtnConnect.Enabled = True
  • BtnDeconnect.Enabled = False
  • 'Me.Close() fermeture de la fenetre
  • End Sub
  • #End Region
  • End Class
Imports System.Runtime.InteropServices
Imports System.Net
Imports System.IO

Imports Opc

Public Class SuperVision

    'déclaration


    Private WithEvents Srv As Opc.Da.Server


    'Connection au serveur au OPC
    Private Sub Supervision_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Objet OPC.Factory

        Dim OPCFact As New OpcCom.Factory()
        'URL de l'OPC (recopie celui que te donne l'exemple OPC .Net Sample Data Access fourni avec OFS3.3
        Dim OPCUrl As New Opc.URL("opcda://localhost/Schneider-Aut.OFS/{e7675090-9ff9-11d1-ac46-0060978add48}")
        'Creation du client
        Dim Opc As New Opc.Server(OPCFact, OPCUrl)


        Try
            'Connection au serveur
            TextBox2.Text = "--> En attente de connexion "
            'Saut au programme "Connect"
            Opc.Connect()


        Catch
            TextBox2.Text = "--> La connection n'a pas été établie avec le Serveur Schneider-Aut.OFS "
        End Try

    End Sub



    'Programme de Connection au serveur OPC
    Private Sub Connect()


        Dim Url As Opc.URL = New Opc.URL("opcda://localhost/Schneider-Aut.OFS/{e7675090-9ff9-11d1-ac46-0060978add48}")
        Srv = New Opc.Da.Server(New OpcCom.Factory, Url)
        '
        Try

            Srv.Connect()
            
        Catch ex As Exception
            'Gestion des erreurs
            MsgBox("Erreur Fonction Cnx: " & ex.Message)
            '
        Finally

        End Try

    End Sub


    '
    '
    '
    '
    'récupération donnée
    Private Bol As Boolean = False

    'Ajouter en référence 
    'OPCNETAPI.dll
    'OPCNETAPI.COM.dll
    'OPCRCW.AE.dll
    'OPCRCW.COMM.dll
    'OPCRCW.DA.dll
    'OPCRCW.DX.dll
    'OPCRCW.HDA.dll

#Region "VAR OPC"
    'Serveur OPC

    'Groupe
    Private WithEvents OFSCompteur1 As Opc.Da.ISubscription
    'Création des Items
    Dim m_ItemCptr1() As Opc.Da.Item
    Dim m_ItemCptr2() As Opc.Da.Item
    Dim m_itemOf() As Opc.Da.Item
    'Resultat item
    Dim ItemCptr1() As Opc.Da.ItemResult
    Dim ItemCptr2() As Opc.Da.ItemResult
    Dim ItemOF() As Opc.Da.ItemResult


    Dim m_handle As Integer
    Dim Cptr1_state As New Opc.Da.SubscriptionState
    'Structure des résultats
    Public Structure ItemsResults
        Dim ItemsName As String
        Dim ItemsClientHnd As String
        Dim ItemsSrvHnd As Integer
        Dim ItemsValue As Object
        Dim ItemsQuality As String
        Dim ItemsTimeStamp As Date
        Dim ItemsDescription As String
        Dim ItemsType As String
        Dim ItemsTopologicAdress As String
    End Structure
#End Region

#Region "Ajouter Variable"
    Private Sub BtnAdd()
        'Création de Groupe
        Cptr1_state.ClientHandle = Guid.NewGuid.ToString
        Cptr1_state.ServerHandle = Cptr1_state.ClientHandle
        Cptr1_state.Name = "LECTURE"
        Cptr1_state.Active = True
        OFSCompteur1 = Srv.CreateSubscription(Cptr1_state)



        'Création de Item1
        m_ItemCptr1 = New Opc.Da.Item(0) {}
        m_ItemCptr1(0) = New Opc.Da.Item()
        'Nom de l'item ALIAS ! Nom de la variable
        m_ItemCptr1(0).ItemName = "UTW!%MD200"
        m_ItemCptr1(0).ItemPath = "Cptr1"
        m_ItemCptr1(0).ClientHandle = Guid.NewGuid.ToString()
        ItemCptr1 = OFSCompteur1.AddItems(m_ItemCptr1)
        m_ItemCptr1(0).ServerHandle = ItemCptr1(0).ServerHandle



        'Création de Item2
        m_ItemCptr2 = New Opc.Da.Item(0) {}
        m_ItemCptr2(0) = New Opc.Da.Item()
        'Nom de l'item ALIAS ! Nom de la variable
        m_ItemCptr2(0).ItemName = "UTW!%MD210"
        m_ItemCptr2(0).ItemPath = "Cptr2"
        m_ItemCptr2(0).ClientHandle = Guid.NewGuid.ToString()
        ItemCptr2 = OFSCompteur1.AddItems(m_ItemCptr2)
        m_ItemCptr2(0).ServerHandle = ItemCptr2(0).ServerHandle




        'Création de Item1Of
        m_ItemOF = New Opc.Da.Item(0) {}
        m_itemOf(0) = New Opc.Da.Item()
        'Nom de l'item ALIAS ! Nom de la variable
        m_itemOf(0).ItemName = "UTW!%MW102"
        m_itemOf(0).ItemPath = "Of"
        m_itemOf(0).ClientHandle = Guid.NewGuid.ToString()
        ItemOF = OFSCompteur1.AddItems(m_itemOf)
        m_itemOf(0).ServerHandle = ItemOF(0).ServerHandle
    End Sub

#End Region

    Private Sub OFSCompteur1_DataChanged(ByVal subscriptionHandle As Object, ByVal requestHandle As Object, ByVal values() As Opc.Da.ItemValueResult) Handles OFSCompteur1.DataChanged
        'Procédure appelée sur changement d'état des Items
        Dim GrpHnd As String
        GrpHnd = subscriptionHandle
        Dim NotifyItems(values.Length - 1) As ItemsResults
        Dim index As Integer
        Try
            For index = 0 To values.Length - 1
                NotifyItems(index).ItemsClientHnd = values(index).ClientHandle
                NotifyItems(index).ItemsName = values(index).ItemName
                NotifyItems(index).ItemsQuality = values(index).Quality.ToString
                NotifyItems(index).ItemsSrvHnd = values(index).ServerHandle
                NotifyItems(index).ItemsTimeStamp = values(index).Timestamp
                NotifyItems(index).ItemsValue = values(index).Value

                Dim ValueCptr As String = Convert.ToString(NotifyItems(index).ItemsValue)

                If index = 0 Then
                    Me.BeginInvoke(New EventHandler(AddressOf SetValueCptr1), ValueCptr)
                End If
                If index = 1 Then
                    Me.BeginInvoke(New EventHandler(AddressOf SetValueCptr2), ValueCptr)
                End If

            Next



            '
        Catch ex As Exception
            'Gestion des erreurs
            MsgBox("Erreur sur la Lecture du Compteur 1 : " & ex.Message)
        End Try
    End Sub



    'écriture des items

    Private Sub SetValueCptr1(ByVal sender As Object, ByVal e As EventArgs)
        'Ecriture du résultat de la variable
        cpte.Text = sender
    End Sub
    Private Sub SetValueCptr2(ByVal sender As Object, ByVal e As EventArgs)
        'Ecriture du résultat de la variable
        cpts.Text = sender
    End Sub

    Private Sub SetValueOF(ByVal sender As Object, ByVal e As EventArgs)
        'Ecriture du résultat de la variable
        numof.Text = sender
    End Sub

    'Private Sub raffraichissement()
    '  While (BtnConnect.Enabled)
    '     BtnAdd()
    ' End While

    ' End Sub

#Region "Connexion Deconnexion"
    Private Sub BtnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnConnect.Click
        Connect()
        TextBox2.Text = "--> Connection réussie au Serveur Schneider-Aut.OFS "
        BtnAdd()
    End Sub
    Public Sub Deconnect_OPCServer()
        Try
            Srv.Disconnect()
        Catch ex As Exception

        End Try
    End Sub

    Private Sub BtnDeconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnDeconnect.Click
        Deconnect_OPCServer()

        BtnConnect.Enabled = True
        BtnDeconnect.Enabled = False
        'Me.Close() fermeture de la fenetre
    End Sub
#End Region



End Class

 Conclusion

petit souci,je récupère bien les valeurs des variables de l'api.mais elles s'écrivent n'importe ou.


 Sources du même auteur

Source .NET (Dotnet) CONNECTION À UN SERVEUR OPC

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) .NET DEPENDENCY VIEWER : ARBRE DES DÉPENDANCES D'UN ASSEMBLY... par ShareVB
Source avec Zip Source .NET (Dotnet) UTILITAIRE SKYDRIVE par MasterShadows
Source avec Zip ROTATION RAPIDE D'IMAGE par trex70
Source avec Zip Source avec une capture ENUMERATION DES PORTS TCP ET IDENTIFCATION DU PROCESS (PID) ... par Renfield
Source avec Zip Source avec une capture MOUSE SPEED AND WEIGHT : RETOUR DE FORCE VIRTUEL ! par ScSami

 Sources en rapport avec celle ci

Source avec Zip COMMUNICATION MODBUS MASTER par sergelapointe
Source avec Zip Source avec une capture AFFICHEUR TYPE DIGITAL AVEC AVEC L'API SETBITMAPBITS par oeildedinde
Source avec Zip PROGRAMME DE CONJUGAISON D'UN VERBE EN PREMIER GROUPE (VB) par estGI
Source avec Zip Source avec une capture [VBA] EXCEL - UNE CALCULATRICE SUR UN USERFORM par lermite222
Source avec Zip Source avec une capture [VBA] EXCEL - DÉMO - TIRER 1, 2 OU 3 DÉS + APIS par lermite222

Commentaires et avis

Commentaire de jack le 18/06/2008 12:50:00 administrateur CS

Tu avais oublié de cocher la case ".Net"
Ton programme ressemble plus à un Client qu'à un Serveur !
Tu n'as pas précisé qu'il faut avoir installé la couche OPC fournie avec les automates Schneider sur la machine.

Commentaire de crownstud le 18/06/2008 15:46:38

désolé,je suis vraiement débutant dans la programmation.Je mes les codes surtout pour avoir une sauvegarde sur internet et dépanner des personnes.

Commentaire de milan9 le 12/05/2009 10:10:49

Bonjour, je ne connait pas grand chose et mon sujet de stage porte la dessus..
Je voulais savoir ou il faut mettre se programme pour le faire fonctionner??
Merci d'avance.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Comment récupérer le Handle d'une fenêtre lancée par l'API ShellExecute? [ par jockos ] La question est dans le titre...Et la réponse est loin d'être évidente. Vous allez me dire d'utiliser l'API FindWindow...Mais je vosu répondrais que p Récupérer le nom du groupe de travail / workgroup [ par TouTenN ] BonjourCela fait quelques jours que je séche sur la récupération rapide du nom du groupe de travail(workgroup) d'une machine. J'ai bien trouvé de quoi Récupérer l'index d'une ImageBox dans un groupe de controles [ par carabidule ] Voila Salut a tous s'est simplement que je n'arrive pas à récupérer l'index d'une ImageBox dans un groupe de controles (g un groupe de 300 imagebox)G récupérer le nom des sous dossiers d'un répertoire! [ par ZZEBULON ] Cette question va peut-être paraître idiote mais je ne vois pas comment récupérer le nom des sous dossiers d'un répertoire.Avec la fonction Dir on peu Récupérer hInstance Access [ par ozar ] Bonjour,je souhaite utilise des API sur Access pour émuler le contrôle Common Dialog de VB car ce contrôle n'existe pas par défaut avec Access. Il y a Récuperer groupe d'utilisateurs [ par niluje ] Bonjour, Pour authentifier un utilisateur qui se conncete, je peux r&#233;cup&#233;rer son login du r&#233;seau mais j'aimerai aussi r&#233;cup&#233; ListBox : rechercher un mot par API [ par salazar ] J'ai une ListBox qui contient des titres de films &#224; chaque item. Je souhaite fait une recherche par mot cl&#233; et afficher les r&#233;sultats d Format Date, comment récupérer les millisecondes? [ par sanouk ] Bonjour,Je développe un prog en vb qui référence une dll OPCAuto pour récupérer des informations sur un serveur OPC (pour récupérer des informations d Serveur OPC schneider electric [ par RookieVBA ] Bonjour,je d&#233;veloppe actuellement une application qui doit permettre de r&#233;cup&#233;rer les donn&#233;es d'un automate. J'ai install&#233; le récupérer item de listbox en vb.net [ par MACHOMAN ] <IMG title=Message height=9 alt=Message src="http://www.developpez.be/forums/templates/su


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,780 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales