reply OPC server with visual basic 2005
automan. there is the code. I´m using access 20033 as database and ADODB to access and qork qith tables.
As I said before the problem lies in the "queryAvailableProperties" and with DataTypes argument.
Dim tbl_name_OPCv As String = "t_OPCv"
Dim tbl_name_OPCg As String = "t_OPCg"
Dim camSTR, cnnSTR As String
Dim cnnADO As New ADODB.Connection
Dim rs_OPCg As New ADODB.Recordset
Dim rs_OPCv As New ADODB.Recordset
camSTR = "C:\spv_fscam\spv_fscam.mdb"
cnnSTR = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & camSTR & ";"
cnnADO.Open(cnnSTR)
rs_OPCg.Open("select * from t_OPCg", cnnADO, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)
rs_OPCv.Open("select * from t_OPCv", cnnADO, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)
Dim itemID As String
Dim itemCount As Int32
Dim propIDs(6) As Int32
Dim desc(6) As String
Dim dataT(6) As Short
Dim itemDat(6) As Object
Dim Errors(6) As Int32
Dim X As Integer 'apontador do número de grupos
Dim Y As Integer 'apontador do número de itens por grupo
Dim varNomeGrupo As String 'var que guarda o nome do grupo em causa
Dim varNome As String 'var que guarda o nome completo do item ou var em causa
Dim vTipo As Int16 'itemData(1)
Dim vValor As Int16 'itemData(2)
Dim vQualid As Int16 'itemData(3)
Dim vTempo As Date 'itemData(4)
Dim vDireit As Int16 'itemData(5)
Dim vDesc As String 'itemData(6)
Dim numGrupos As Integer 'nº de grupos existentes no servidor
Dim numItens As Integer 'nº de itens ou variáveis existentes no servidor para o grupo em causa
Dim str_len As String 'comprimento do campo descrição
numItens = 0
servBrowser = myServer.CreateBrowser
servBrowser.MoveToRoot()
servBrowser.ShowBranches()
numGrupos = servBrowser.Count 'conta o nº de grupos existentes no servidor
For X = 1 To numGrupos
varNomeGrupo = servBrowser.Item(X) 'nome do grupo
servBrowser.MoveDown(varNomeGrupo)
servBrowser.ShowLeafs()
numItens = servBrowser.Count 'número de itens no grupo
rs_OPCg.AddNew() 'acrescenta novos registos
rs_OPCg.Fields("gOPC").Value = varNomeGrupo
rs_OPCg.Fields("qt_v").Value = numItens
rs_OPCg.Update()
For Y = 1 To numItens
varNome = varNomeGrupo & "." & servBrowser.Item(Y)
itemID = varNome
'Try
myServer.QueryAvailableProperties(itemID, itemCount, propIDs, desc, dataT)
myServer.GetItemProperties(itemID, itemCount, propIDs, itemDat, Errors)
'Catch ex As Exception
'MsgBox(ex.Message)
'End Try
vTipo = itemDat(1)
vValor = itemDat(2)
vQualid = itemDat(3)
vTempo = itemDat(4)
vDireit = itemDat(5)
vDesc = itemDat(6)
str_len = Len(vDesc)
rs_OPCv.AddNew() 'acrescenta novos registos
rs_OPCv.Fields("gOPC").Value = varNomeGrupo
rs_OPCv.Fields("vOPC").Value = varNome
rs_OPCv.Fields("valor").Value = vValor
rs_OPCv.Fields("desc").Value = Microsoft.VisualBasic.Left(vDesc, str_len - 4)
rs_OPCv.Fields("un").Value = Microsoft.VisualBasic.Right(vDesc, 3)
rs_OPCv.Fields("tipo").Value = vTipo
rs_OPCv.Fields("qualid").Value = vQualid
rs_OPCv.Fields("tempo").Value = vTempo
rs_OPCv.Fields("direit").Value = vDireit
rs_OPCv.Update()
Next Y
servBrowser.MoveUp()
servBrowser.ShowBranches()
Next X