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
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.