Client OPC avec Excel [Résolu]

Messages postés
6
Date d'inscription
samedi 18 octobre 2003
Dernière intervention
24 octobre 2008
- - Dernière réponse : akirajazz
Messages postés
6
Date d'inscription
samedi 18 octobre 2003
Dernière intervention
24 octobre 2008
- 24 oct. 2008 à 11:14
Bonjour, j'aimerais savoir si il est possible de créer un client OPC sur une feuille excel.
J'ai trouvé quelque bout de code, mais impossible a compiler.
Voila le code
' -----------------------------------------------------------------------------------------
' Configuration de la communication avec Server OPC
' -----------------------------------------------------------------------------------------
Option Explicit
Dim WithEvents OpcFactoryServer   As OPCServer  'Interface OPC Automation2 avec Notification
Dim ListOfsGroups                 As OPCGroups  'Objet pour une liste de groupes
Dim WithEvents Group1             As OPCGroup   'Objet pour un Groupe avec Notification
Dim PremierCollectionItems        As OPCItems   'Objet pour une Collection d'Items
Dim Item1                         As OPCItem    'Objet pour un Item
Dim ItemName1()                   As String     'Tableau de Définition des items
Dim HandleClient1()               As Long       'Tableau de pointeurs des items Client
Dim HandleServer1()               As Long       'Tableau de pointeurs des items Serveur
Dim Erreur1()                     As Long       'Tableau de codes d'erreur rendus par le Serveur
Dim FinCreation                   As Boolean    'Flag de signalement de la fin de création
 
Const ProgID = "Schneider-Aut.OFS"              'Type de Serveur OPC
Dim NomDuPoste                    As String     'Nom du PC Serveur
 
 
' ---------------------------------------------------------------------------------------------
'                       LANCEMENT DE L'APPLICATION
' ---------------------------------------------------------------------------------------------
Public Sub Start() ' Bouton start
 
    Dim NbItem1 As Single
    Dim Reponse As Integer
        
    NbItem1 = 1
    
    'Redimentionnement des tableaux en fonction du nombre d'item
    ReDim ItemName1(NbItem1) As String
    ReDim HandleClient1(NbItem1) As Long
    ReDim HandleServer1(NbItem1) As Long
    ReDim Erreur1(NbItem1) As Long
 
    'Création des Groupes et items
    If Not FinCreation Then
        'Initialisation d'un Serveur OPC Automation 2.01
        Set OpcFactoryServer = New OPCServer 'Connexion au Serveur OFS
        On Error GoTo Label1    ' Si une erreur aller au label 1
        OpcFactoryServer.Connect ProgID
        OpcFactoryServer.ClientName = "Stage OFS"   'Spécifie le nom du Client OPC
        Set ListOfsGroups = OpcFactoryServer.OPCGroups  'Crée une instance de ce Client
    
        'Définit les paramètres par défaut du Groupe
        ListOfsGroups.DefaultGroupIsActive = False
        ListOfsGroups.DefaultGroupUpdateRate = 500    'ms
        ListOfsGroups.DefaultGroupDeadband = 1
        
        'Ajout des groupes dans le Serveur
        Set Group1 = ListOfsGroups.Add("Group1")
    
        'Crée des collections d'Items
        Set PremierCollectionItems = Group1.OPCItems
    
        'Définit les item en respectant la syntaxe OPC et le Pointeur coté Client (pompe)
        
        ItemName1(1) = "NomAlias" & "!" & "NomAdresse" 
        HandleClient1(1) = 1
 
    End If
    
    'Activation de la collection d'items
    PremierCollectionItems.DefaultIsActive = True
           
    'Ajoute les items au Groupe et récupère le pointeur coté Serveur et le code Erreur
    PremierCollectionItems.AddItems NbItem1, ItemName1, HandleClient1, HandleServer1, Erreur1
    Set Item1 = PremierCollectionItems.GetOPCItem(HandleServer1(1))
    
    'Activation du Groupe (lecture), validation de la notification, mise à 1 du Flag de Création
    Group1.IsActive = True
    Group1.IsSubscribed = True
        
    FinCreation = True
    
    Exit Sub
    
Label1:
        'Reponse = MsgBox("Erreur dans le nom du Poste Distant !", vbCritical, "Attention !")
        Call MsgBox(Err.Description, vbOKOnly)
        Resume Next
End Sub
 
' ---------------------------------------------------------------------------------------------
'                       ARRET DE L'APPLICATION
' ---------------------------------------------------------------------------------------------
 
Public Sub Arret()  ' Bouton stop
    If Not (OpcFactoryServer Is Nothing) Then
        'Supprimer tous les groupes OPC
        If Not (ListOfsGroups Is Nothing) Then
            Group1.IsSubscribed = True
            ListOfsGroups.RemoveAll
            Set ListOfsGroups = Nothing
        End If
        'Deconnecter le Serveur
        OpcFactoryServer.Disconnect
        Set OpcFactoryServer = Nothing
        FinCreation = False
    Else
        'Vider les groupes, vider le Serveur
        Set ListOfsGroups = Nothing
        Set OpcFactoryServer = Nothing
    End If
End Sub
 
' ---------------------------------------------------------------------------------------------
'                   RECUPERATION DES DONNEES DU GROUPE 1
' ---------------------------------------------------------------------------------------------
Private Sub Group1_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)
     
    Dim ind As Long
    'Tester la qualité de l'item
    ind = 1
    While ind <= NumItems
        If Qualities(ind) = 192 Then
            'Récupérer la valeur
            Sheets("essai").Cells(1, 1) = ItemValues(ind)
        Else
            Sheets("essai").Cells(1, 1) = " ERREUR !"
        End If
        ind = ind + 1
    Wend
    
End Sub
 
 
' ---------------------------------------------------------------------------------------------
'                       ECRITURE
' ---------------------------------------------------------------------------------------------
Public Sub ecrire()
    Item1.Write (10)
End Sub
-----------------------------------------------------------------------------------------------
donc ma question est ou est ce que je dois faire la declaration des "Dim WithEvents OpcFactoryServer   As OPCServer"
A qui ou a qu'elle dll je dois faire reference.
Est ce qu'un personne charitable peu me faire parvenir une feuille excel qui fonctionne ?
Merci. 

Akirajazz
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
3
Merci
Salut,
L'erreur n'est plus la même est ce que la ligne à changer?

@+: Ju£i€n
Pensez: Réponse acceptée

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de jrivet
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
1
Merci
Salut,

un peu de pub.

[../codes/EBAUCHE-EXEMPLE-CLIENT-OPC_27764.aspx EBAUCHE D EXEMPLE DE CLIENT OPC]

NOTE: il est tout a fait possible d'utiliser la dll fourni dans la source depuis EXCEL pour pouvoir utiliser les objet OPC (je l'ai déjà fait il y a quelques années)
@+: Ju£i€n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
1
Merci
Salut,
Il te suffit de mettre la dll fourni en références (avec le menu Outils Références de l'IDE VBA)

Tu pourras alors utiliser les objets de Type OPCServer
("Dim WithEvents OpcFactoryServer   As OPCServer")

Et donc utiliser le code que tu as proposé. Mon Lien n'était là que pour te fournir la dll et pour éventuellement avoir un second code de client OPC mais celui ci en VB6
@+: Ju£i€n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
6
Date d'inscription
samedi 18 octobre 2003
Dernière intervention
24 octobre 2008
0
Merci
Merci pour ta reponse rapide, mais je n'arrive pas a comprendre comment tu applique ton code dans EXCEL
Si tu pouvais approfondire ta reponse, les choses me paraitrait moins confuse.

Akirajazz
Commenter la réponse de akirajazz
Messages postés
6
Date d'inscription
samedi 18 octobre 2003
Dernière intervention
24 octobre 2008
0
Merci
Bon je crois que je suis nul en vba, dommage que je n'ai pas de compilateur VB6 pour faire fonctionner ton code.
En tout cas meme en ajoutant la reference a la dll il me fait des erreurs de type variable with non definie.
Serait il possible que tu me fasse parvenir ton code sur excel, ou en C++ , que je puisse le tester ?

Akirajazz
Commenter la réponse de akirajazz
Messages postés
6
Date d'inscription
samedi 18 octobre 2003
Dernière intervention
24 octobre 2008
0
Merci
Oui la ligne a changé, maintenant il me fait une erreur " La methode 'ServerHandle' de l'objet 'IOPCGroup' a echoué
ton code a l'air plus complet.

Akirajazz
Commenter la réponse de akirajazz
Messages postés
6
Date d'inscription
samedi 18 octobre 2003
Dernière intervention
24 octobre 2008
0
Merci
Dans ton exemple tu parle de faire un petit tutorial, c'est toujours d"actualité ?

Akirajazz
Commenter la réponse de akirajazz
Messages postés
6
Date d'inscription
samedi 18 octobre 2003
Dernière intervention
24 octobre 2008
0
Merci
Je viens de faire un petit code sous excel qui fonctionne, mais je suis obligé de renseigner chaque adresse a la main...vraiment pas pratique.
Mais j'arrive a lire mes valeurs, par contre c'est tres long.
Comment pourrais je faire pour faire une scrutation de mon serveur et afficher les adresses des items ?
Voila le code, peu etre pourra tu me dire ou ce situe mes incomprehension ?

Sub Main()

'-----------------------------------------------------
'Programme simple pour communiquer avec un serveur OPC
'et lire un item renseigné a la main
'
'Les valeurs par defaut du serveur: Matrikon.OPC.Automation "OPC.SimaticNET" pour un serveur SIEMENS
'------------------------------------------------------

'Definition des variables opc
Dim Server, Group, Item

Dim vbYesNo, vbYes, vbNo
Dim vbcrlf, vbInformation
Dim ProgID, ItemID(65536)

vbYesNo = 4
vbYes = 6
vbNo = 7
vbcrlf = Chr(10) + Chr(13)
vbInformation = 64

'Creation d'une instance de l'interface: necessite la DLL "OPCAuto.dll"
'a ajouter dans C:\WINDOWS\system32 et a enregistrer regsvr32.exe

Set Server = CreateObject("Matrikon.OPC.Automation")

'Recuperation de l'ID du serveur ici "OPC.SimaticNET"

'ProgID = InputBox("Enter a program ID for the server.", "Test", "OPC.SimaticNET")
ProgID = "OPC.SimaticNET"

If ProgID = "" Then
    MsgBox "Application Cancelled"
    Exit Sub
End If

'Connexion au serveur OPC
'DCOM doit etre configuré correctement

Server.Connect ProgID

'Ajout d'un Group

Set Group = Server.OPCGroups.Add

'GRecuperation de l'item ici "S7:[Liaison_S7_1]DB102,INT256"
Dim v, q, t
Dim results

For i = 1 To 4 Step 1     ' Définit le nb de répétitions.
        ItemID(i) = Worksheets("Feuil1").Cells(4 + i, 4).Value
        If ItemID(i) = "" Then
            MsgBox "Application Cancelled"
            Exit Sub
        End If
        'On l'ajout dans notre groupe

        Set Item = Group.OPCItems.AddItem(ItemID(i), 0)
       
        'Lecture de l'item OPC
        Item.Read 2, v, q, t
       
        Worksheets("Feuil1").Cells(4 + i, 5).Font.Size = 12
        Worksheets("Feuil1").Cells(4 + i, 5).Value = v
        Worksheets("Feuil1").Cells(4 + i, 6).Value = q
        Worksheets("Feuil1").Cells(4 + i, 7).Value = t
       
        'If MsgBox(results, vbYesNo + vbInformation, "OPC Automation Test") = vbNo Then
            'Exit For
        'End If
Next i

'Clean up
Server.OPCGroups.RemoveAll

End Sub

Akirajazz
Commenter la réponse de akirajazz

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.