Dialoguer avec un automate schneider à partir d'un server opc

Soyez le premier à donner votre avis sur cette source.

Snippet vu 19 647 fois - Téléchargée 28 fois

Contenu du snippet

Bonjour,

Je veux essayer de dialoguer avec un automate Premium à partir de VB.net version 2003 par l'intermédiaire d'un server OPC.
Voici le code que j'ai écrit :

Source / Exemple :


Private WithEvents Server As Opc.Da.IServer = Nothing
    Private isSubscribe As Boolean = True
    Private WithEvents mySubscription As Opc.Da.ISubscription
    Private WithEvents ReadAsync As Opc.Da.ISubscription
    Private WithEvents WriteAsync As Opc.Da.ISubscription
    Dim WithEvents ComServer As Opc.Da.Server
    Dim m_handle As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Déclaration
        Dim Status As Opc.Da.ServerStatus
        'Dim ComServer As Opc.Da.Server
        Dim Url As Opc.URL = New Opc.URL("opcda://localhost/Schneider-Aut.OFS/{e7675090-9ff9-11d1-ac46-0060978add48}")

        'Connexion sur le serveur de la liste deroulante DA20

        'Dim Url As Opc.URL = New Opc.URL(cbxOPCSrvDA_20.SelectedItem.ToString)
        ComServer = New Opc.Da.Server(New OpcCom.Factory, Url)
        txtSrvStatus.Text = "essai"

        Try
            ComServer.Connect()
            Server = ComServer
            'Recuperation du Status du serveur
            Status = Server.GetStatus
            txtSrvStatus.Clear()
            txtSrvStatus.Text = ("Info Vendeur :" & Status.VendorInfo & "Version Produit :" & Status.ProductVersion & "Etat du serveur :" & Status.ServerState.ToString & "Info Status :" & Status.StatusInfo & "Heure démarrage : " & "le " & Status.StartTime.ToLongDateString & " à " & Status.StartTime.ToLongTimeString & "Heure courante :" & Status.CurrentTime.ToLongTimeString & vbCrLf & "Dernier envoi :" & Status.LastUpdateTime.ToLongTimeString)

        Catch ex As Exception
            Throw (ex)
        End Try
    End Sub

    Private Sub btnRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRead.Click
        Dim item As Opc.Da.Item() = New Opc.Da.Item(0) {}
        item(0) = New Opc.Da.Item
        item(0).ItemPath = ""
        item(0).ItemName = txtItem.Text

        Dim result As Opc.Da.ItemValueResult()
        Try
            result = Server.Read(item)
            If result Is Nothing Then
                txtValue.Text = "Erreur de Lecture"
                TxtQuality.Text = "Erreur de Lecture"
            Else
                'If result(0).ResultID = Opc.ResultID.S_OK Then
                txtValue.Text = CType(result(0).Value, String)
                ' TxtQuality.Text = result(0).Quality.ToString
                ' Else
                '    txtValue.Text = "Erreur de Lecture"
                '    TxtQuality.Text = "Erreur de Lecture"
                'End If
            End If

        Catch ex As Exception
            MsgBox("" & ex.Message)
        End Try
    End Sub

    Private Sub btnWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnWrite.Click
        'Déclaration des variables
        Dim item As Opc.Da.ItemValue() = New Opc.Da.ItemValue(0) {}
        item(0) = New Opc.Da.ItemValue
        item(0).ItemPath = ""
        item(0).ItemName = txtItem.Text
        item(0).Value = System.Convert.ChangeType(Me.txtValue.Text, GetType(Object))

        Dim result As Opc.IdentifiedResult()
        Try
            result = Server.Write(item)
            'If result Is Nothing Then
            txtValue.Text = "Erreur d'écriture"
            TxtQuality.Text = "Erreur d'écriture"
            'Else
            '    If Not (result(0).ResultID = Opc.ResultID.S_OK) Then
            '        txtValue.Text = "Erreur d'écriture"
            '        TxtQuality.Text = "Erreur d'écriture"
            '    End If
            'End If
        Catch ex As Exception
            MsgBox("" & ex.Message)
        End Try
    End Sub

Conclusion :


J'arrive à lire la valeur d'un mot dans l'automate par contre quand j'essai de modifier la valeur du mot l'erreur E-Fail
IOPCSyncIO.Write s'affiche.
Merci pour votre aide

A voir également

Ajouter un commentaire Commentaires
Messages postés
20
Date d'inscription
jeudi 31 janvier 2002
Statut
Membre
Dernière intervention
11 février 2013

Bonjour,

Votre problème est uniquement due au fait qu'un item ne peut être écrit, que s'il est connu du serveur. Il faut créer un group avec cet item et ensuite y accéder.

j'ai donc rajouté
Private groupWrite As Opc.Da.Subscription
Private groupStateWrite As New Opc.Da.SubscriptionState
groupStateWrite = New Opc.Da.SubscriptionState()
groupStateWrite.Name = "Group_Write"
groupStateWrite.Active = False ' not needed to read if you want to write only
groupStateWrite.ClientHandle = 1
groupStateWrite.UpdateRate = 0
groupWrite = server.CreateSubscription(groupStateWrite)

items(0) = New Opc.Da.Item
items(0).ItemName = "MON_ITEM"
groupWrite.AddItems(items) 'on rajoute ces items au groupe d'écriture

Ensuite, lorsque je veux écrire un item, je vais accéder à groupWrite
Dim item As Opc.Da.ItemValue() = New Opc.Da.ItemValue(0) {} 'créé un tableau d'item contenant qu'une seule valeur
item(0) = New Opc.Da.ItemValue ' créé l'item a écrire
item(0).ItemName = "MON_ITEM" 'pas obligatoire car le plus important c'est le ServerHandle
item(0).ServerHandle = index_de_Mon_item
item(0).Value = 1
result = groupWrite.Write(item)
Messages postés
3
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
1 décembre 2008

Bonjour

appel le fabricant du SErveur OFS (OPC de Schneider) ils pourront t'aider.
sinon OPCfoundation.org
@+

Schneider electric Chorus : 0825 012 999
Messages postés
4
Date d'inscription
vendredi 9 février 2007
Statut
Membre
Dernière intervention
28 novembre 2008

pouvez vous poster lez projet en entier
pour voir aussi l interface pour pouvoir faire l essai
merci
Messages postés
3
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
1 décembre 2008

Bonjour,
vous pouvez demander de l'aide sur la programmation des serveurs Schneider directement chez le fabricant au 0825012999
En plus si vous etes abonnés vous pourrez telecharger et tester le serveur OFS V3.31 compatible .NET.
Salutations
Messages postés
12
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
27 février 2008

Bonjour Jacky007,
Je suis interesse par les bibliotheques gratuite avec exemple. Peux tu me donner plus d'information et ou est ce que je peux les telecharger
Afficher les 6 commentaires

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.