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

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

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.