VB.net OPC-client vraag

Status
Niet open voor verdere reacties.

Pienjo

Gebruiker
Lid geworden
22 mei 2006
Berichten
23
k'weet niet of hier OPC kenners tussen de forumgebruiker zitten, maar ik probeer het toch even. Ik ben in Visual Basic 2005 Express een OPC-client aan het maken. Ik heb er reeds één in VBA (excel) gemaakt. T'is te zeggen een sample gerewrite.

In de file Taglist.csv staat een OPCItemID lijst welke ik in de string Tagscsv binnenhaal. Deze string wordt gesplitst in TagsCsvSplit() welke op zijn beurt in de array OPCItemID wordt geschreven.

Bij het runnen van mijn programma gaat de code in fout op de aangegeven regel met als melding 'Specified array was not of the expected type.'

Hieronder vindt je de code terug. Misschien zijn er masterbrains die me zo aan een oplossing kunnen helpen.

----------------------------------------------------------------------------------------------------------------------------------

Public Class Form1

Dim WithEvents MyServer As OPCAutomation.OPCServer
Dim WithEvents MyGroup As OPCAutomation.OPCGroup

Public MyOPCBrowser As OPCAutomation.OPCBrowser
Public MyGroups As OPCAutomation.OPCGroups
Public MyOPCItemCollection As OPCAutomation.OPCItems
Public MyOPCWriteItemCollection As OPCAutomation.OPCItems
Public MyOPCItem As OPCAutomation.OPCItem


Public SelectedServer As String
Public BranchIndex As Integer
Public GroupName As String
Public MajorVersion As Integer
Public MinorVersion As Integer
Public BuildNumber As Integer
Public ServerNode As String
Public OPCServerErrorString As String
Dim MyOPCItemID(0 To 86) As String
Dim MyItems(86) As Object
Public AddItemCount As Long
Public SelAddItemCount As Long
Public i, k, n, m, x, y, z, w, q As Integer
Public SubStep As Integer
Public ServerIndex As Long

Dim MyServerErrors As OPCAutomation.OPCErrors
Dim DefaultGroupUpdateRate As Long
Dim ClientHandles(0 To 86) As Long
Dim MyOPCItemServerHandles() As Long
Dim MyOPCItemServerErrors() As Long
Dim MyRequestedDataTypes(0 To 86) As Integer
Public ka As Integer
Dim MyNumitems As Long
Dim DataType As String

Const OPC_DS_CACHE = 1
Const OPC_DS_DEVICE = OPC_DS_CACHE + 1

Dim AantalTags As Integer 'PROFICOS
Dim TagsCsv As String 'PROFICOS
Dim TagsCsvSplit As String() 'PROFICOS


Public Sub MyOPCServer()

'Connect the Server **********************************************************
MyServer = New OPCAutomation.OPCServer
MyServer.Connect("PhoenixContact.Interbus.2")

'Define a Group Name **********************************************************
GroupName = "Group_1"
AddItemCount = 0
k = 0

' Bepalen van het aantal gedefinieerde tags
AantalTags = 87
AddItemCount = AantalTags

'Inladen van csv-bestand met tags
TagsCsv = My.Computer.FileSystem.ReadAllText("G:\Engineering\VISUALISATIE\Definitieve files\Taglist.csv")
TextBox1.Text = TagsCsv
TagsCsvSplit = TagsCsv.Split(vbCrLf)
For q = 0 To AantalTags - 1
TagsCsvSplit(q) = Mid(TagsCsvSplit(q), 2)
Next q

' OPC-items opbouwen aan de hand van tags en lokaties
For k = 0 To AantalTags - 1
MyOPCItemID(k) = TagsCsvSplit(k)
Next k

' OPC-groep maken
MyGroup = MyServer.OPCGroups.Add(GroupName)

If MyGroup.IsActive Then
MyOPCItemCollection = MyGroup.OPCItems

' Alle Items toevoegen ******************************************************************


For x = 0 To AddItemCount - 1
ClientHandles(x) = x
Next x

MyOPCItemCollection.AddItems(AddItemCount, MyOPCItemID, ClientHandles, MyOPCItemServerHandles, MyOPCItemServerErrors, MyRequestedDataTypes)
MyGroup.UpdateRate = 100
MyGroup.IsSubscribed = True

Dim f As Integer
For f = 0 To AddItemCount - 1
If ClientHandles(f) = 0 Then Exit For
'Range("g" & Format(f + 9)) = Format(f)
'Range("h" & Format(f + 9)) = MyOPCItemCollection.Item(f).ItemID
DataType = GetDataType(MyOPCItemCollection.Item(f).CanonicalDataType)
'Range("i" & Format(f + 9)) = DataType
Next f
End If

End Sub

Private Sub MyGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ByVal ClientHandles() As Long, ByVal ItemValues() As Object, ByVal Qualities() As Long, ByVal TimeStamps() As Date)
Dim Index As Long
For Index = 0 To NumItems - 1

'On Error GoTo errhandler
If ClientHandles(Index) >= 1 Then
'Range("j" & Format(ClientHandles(Index)) + 9) = ItemValues(Index)
'Range("k" & Format(ClientHandles(Index)) + 9) = Qualities(Index)
End If
Next Index

'Application.DefaultSaveFormat = xlWorkbookNormal
'ActiveWorkbook.SaveCopyAs ("G:\Engineering\VISUALISATIE\Definitieve files\LOG.xls")

Exit Sub
'errhandler:
'Range("l" & Format(ClientHandles(Index)) + 9) = "- empty -"
Resume Next


End Sub
Public Function GetDataType(ByVal DataType As Integer) As String
On Error GoTo FOUT
Select Case DataType
Case 2
GetDataType = "INTEGER"
Case 3
GetDataType = "DINT"
Case 4
GetDataType = "REAL"
Case 5
GetDataType = "FLOAT"
Case 8
GetDataType = "STRING"
Case 11
GetDataType = "BOOL"
Case 16
GetDataType = "SINT"
Case 17
GetDataType = "BYTE"
Case 18
GetDataType = "WORD"
Case 19
GetDataType = "DWORD"
End Select
FOUT:
GetDataType = "ERROR"
Resume
End Function


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TagsCsv = ""

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


MyOPCServer()

End Sub
End Class
 
Beste,

sorry voor de late reactie, maar ben pas nieuw van.. vandaag :)

Ik heb allesinds al 1 fout gevonden:

Code:
For x = 0 To AddItemCount - 1
ClientHandles(x) = x
Next x

ClientHandles moet beginnen vanaf 1 ipv 0, Dus volgende moet het zijn:

Code:
For x = 1 To AddItemCount 
ClientHandles(x) = x
Next x

Probeer het eens, het kan zijn dat er ng fouten in staan ('t is niet omdat het van Phoenix zelf is da ze nie kunnen missen, Siemens is daar ook goe in...)
 
Beste


Heb je toevallig ook een cursus van hoe je een opc cliënt in vb.net moet schrijven of weet je een site waar uitleg staat want ik moet ook een opc cliënt in vb.net schrijven maar heb nog helemaal geen ervaring ermee


Vriendelijke groeten

Thomas
 
Spijtig genoeg niet. In september begin ik hiervoor aan een cursus (avondonderwijs), maar daar heb jij natuurlijk niets aan.

Momenteel behelp ik me met copy/pasten van de code, maar zoals je al gemerkt hebt brengt dit wel eens problemen mee waarmee ik dan niet verder kan.

Ik heb me wel suf gezocht op het internet naar goede code(s), maar concrete oplossingen kwamen er niet uit de bus. De leverancier van onze I/O-module heeft me opweggeholpen met een excel-VBA opc-client.

Nu loopt dit project heel stroef en boek ik heel weinig vooruitgang. Ik hoor het dan ook heel graag als jij wel de juiste oplossingen moest vinden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan