Merci
voici le code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
| Imports SAOPCAutomation ' add ref ; SA OPC Automation
Imports System.Runtime.InteropServices
'ajout des ref sys optionnel
Imports System
Imports System.IO
Imports System.ComponentModel
Public Class Form1
'déclaration des objet serveur
Public ServeurOPC As New SAOPCAutomation.OPCServer 'objet serveur
Public WithEvents OPCGroupes As SAOPCAutomation.OPCGroups 'Collection de Groupes
Public WithEvents OFSGroupeAutomate1 As SAOPCAutomation.OPCGroup 'group d 'item
Public ItemLectureAutomate1_Compt As SAOPCAutomation.OPCItem ' opc item1
Public ItemLectureAutomate1_analog As SAOPCAutomation.OPCItem 'opc item1
'Public ItemLectureAutomate1() As SAOPCAutomation.OPCItem
Dim FinCreation As Boolean 'Flag de signalement de la fin de création
Const OPC_DS_DEVICE = 2 ' la source de laquelle on va lire les items (la valeur 2 est décrit dans le tuto OFS)
' tableau
Dim tab_item() As SAOPCAutomation.OPCItem
Dim t() As String
Dim items() As String
Dim index, Pcourant As Integer
'variable
Dim val1_preced As String 'test de la nouvelle valeur
Dim test1 As Boolean 'fermeture de serveur
Dim test_doublitem As Boolean 'verifier les doublons
Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Button3.Enabled = False
Button5.Enabled = False
End Sub
Public Sub Form1_Unload(sender As Object, e As EventArgs) Handles MyBase.Load
'déconnection à la fermeture pour libérer de l'espace
DeConnectionOPC()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
ConnectionOPC()
Button3.Enabled = True
Button5.Enabled = True
index = 1
Catch ex As System.Runtime.InteropServices.COMException
MessageBox.Show(ex.Message)
End Try
End Sub
'fonction ConnectionOPC
'-------------------------------------------------------------------------------------------------------------------------------------------------------
Public Sub ConnectionOPC()
'connection de serveur
ServeurOPC = New OPCServer
ServeurOPC.Connect("Schneider-Aut.OFS")
If ServeurOPC.ServerState = 1 Then
MsgBox("Connection OK")
Else
MsgBox("Défaut connection")
Exit Sub
End If
' Connection OK création du groupe
OPCGroupes = ServeurOPC.OPCGroups
OPCGroupes.DefaultGroupIsActive = vbTrue
OPCGroupes.DefaultGroupDeadband = 0
OFSGroupeAutomate1 = OPCGroupes.Add("GroupeAutomate1")
OFSGroupeAutomate1.IsSubscribed = vbTrue
OFSGroupeAutomate1.IsActive = vbTrue
OFSGroupeAutomate1.UpdateRate = 1000
End Sub
'fonction deConnectionOPC
'-------------------------------------------------------------------------------------------------------------------------------------------------------
Public Sub DeConnectionOPC()
'ServeurOPC.OPCGroups.RemoveAll() ' deconnection des groupes
OPCGroupes.RemoveAll()
OPCGroupes = Nothing
OFSGroupeAutomate1 = Nothing
ServeurOPC.Disconnect() 'déconnection du serveur
ServeurOPC = Nothing
End Sub
' pour l'ajout des items dans un tableau t
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
Try
test_doublitem = True
If (TextBox1.Text = "" Or TextBox2.Text = "") Then ' le texbox1 contient l@ memoire de l'item et le textbox2 contient un nom de l'item (choisi par l'utilisatuer)
MsgBox("veuillez saisir le nom et l'adresse de l'item")
Else
If t Is Nothing Then
ReDim t(0)
t(t.Count - 1) = TextBox2.Text
ListView1.Items.Add(TextBox1.Text)
Else
For i = 0 To t.Count - 1
If (t(i) = TextBox2.Text Or items(i) = TextBox1.Text) Then
test_doublitem = False
MsgBox("l'Item existe déja")
Exit For
End If
Next
If (test_doublitem = True) Then
ReDim Preserve t(t.Count)
t(t.Count - 1) = TextBox2.Text
ListView1.Items.Add(TextBox1.Text)
End If
End If
End If
Catch ex As System.Runtime.InteropServices.COMException
MsgBox(e.ToString)
End Try
OPCGroupes = Nothing
End Sub
' le bouton valider qui va faire l'ajout de l'item
Public Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Try
For i = 0 To t.Count - 1
ItemLectureAutomate1_Compt = OFSGroupeAutomate1.OPCItems.AddItem(t(i), i + 1)
If tab_item Is Nothing Then
ReDim tab_item(0)
tab_item(tab_item.Count - 1) = ItemLectureAutomate1_Compt
Else
ReDim Preserve tab_item(tab_item.Count)
tab_item(tab_item.Count - 1) = ItemLectureAutomate1_Compt
End If
Next
Catch ex As System.Runtime.InteropServices.COMException
MsgBox(e.ToString)
End Try
End Sub |
lors de l'affichage de l'erreur le curseur s'arrete à ce niveau
ItemLectureAutomate1_Compt = OFSGroupeAutomate1.OPCItems.AddItem(t(i), i + 1)
Indication
J'ai essayé de faire directement
tab_item(tab_item.Count - 1) =OFSGroupeAutomate1.OPCItems.AddItem(t(i), i + 1)
mais lorsque j'ai utilisé ce tableau tab_item pour faire la lecture a prés ça n'a pas marché (probleme de ref null)
1 2 3 4 5 6 7
| For i = 0 To tab_item.Count - 1
tab_item(i).Read(OPC_DS_DEVICE)
Me.DataGridView1.Rows.Add("m", "compteur", tab_item(i).Value, ItemLectureAutomate1_Compt.Quality, Now().Date.ToString(), Now.TimeOfDay.ToString())
Next |
donc j'ai procéder à cette instance
ItemLectureAutomate1_Compt = OFSGroupeAutomate1.OPCItems.AddItem(t(i), i + 1)
Il 'ya une autre fonction d'ajout d'item AddItems() mais avec plusieurs parametre que j'ai testé mais ça n'a jamais marché et j'ai pas pu le résoudre
J'attends vos commentaires et merciii énormément
Partager