Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 2 von 2

Thema: opc und excel 2010

  1. #1
    Registriert seit
    07.03.2012
    Beiträge
    6
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo erstmal,

    ein Studienkollege und ich sitzen zur Zeit an unserer Studienarbeit. Haben nun ein Problem. Wir wollen mit Hilfe von Excel als Client Werte aus der SPS lesen und übertragen. Soweit so gut. Haben das ganze in VBA im entsprechenden Excel Programm erstellt. Anbei der Code:

    Option Explicit
    Option Base 1
    ' declaration of private OPC-objects within this modul
    Private MyOPCServer As OPCServer
    Private WithEvents MyOPCGroup As OPCGroup
    ' declaration of private OPC-variables
    Private MyItemIDs() As String
    Private MyServerHandles() As Long
    Private MyNumItems As Long

    '*****************************************************************
    Public Sub cmdConnect_Click()
    '** SERVER *************************************
    On Error GoTo errorconnect
    ' create server object
    Set MyOPCServer = New OPCServer
    On Error GoTo errorgroup
    ' connect server
    Call MyOPCServer.Connect(Cells(4, 2))
    '** GROUP **************************************
    On Error GoTo errorgroup
    ' set fastest update rate for all groups
    MyOPCServer.OPCGroups.DefaultGroupUpdateRate = 0
    ' create group
    'Set MyOPCGroup = MyOPCServer.OPCGroups.Add(Cells(7, 2))
    Set MyOPCGroup = MyOPCServer.OPCGroups.Add("TEST")


    ' disable all events of the group
    MyOPCGroup.IsActive = False
    MyOPCGroup.IsSubscribed = False
    '** ITEMS *************************************************
    On Error GoTo erroritems
    MyNumItems = 3
    ReDim MyItemIDs(MyNumItems)
    ReDim MyClientHandles(MyNumItems) As Long
    Dim i As Long
    Dim Errors() As Long
    ' get the ItemIDs
    For i = 1 To MyNumItems
    MyItemIDs(i) = Cells(9 + i, 2)
    MyClientHandles(i) = i
    Next
    ' add items to the group
    Call MyOPCGroup.OPCItems.AddItems(MyNumItems, MyItemIDs, MyClientHandles, MyServerHandles, Errors)
    For i = 1 To MyNumItems
    If Errors(i) <> 0 Then
    Call MsgBox(MyItemIDs(i) & Chr(13) & MyOPCServer.GetErrorString(Errors(i)), vbCritical)
    End If
    Next

    '**********Settings**********
    ' setting the buttons
    cmdConnect.Enabled = False
    cmdDisconnect.Enabled = True
    cmdSyncRead.Enabled = True
    cmdSyncWrite.Enabled = True
    chkActivate.Enabled = True
    Exit Sub
    errorconnect:
    Call MsgBox("Error Connect:" & Chr(13) & Err.Description, vbCritical)
    Exit Sub
    errorgroup:
    Call MsgBox("Error AddGroup:" & Chr(13) & Err.Description, vbCritical)
    Exit Sub
    erroritems:
    Call MsgBox("Error AddItems:" & Chr(13) & Err.Description, vbCritical)
    End Sub

    '**********************************************************************

    Public Sub cmdDisconnect_Click()
    On Error GoTo errorhandler
    ' remove the items
    Dim Errors() As Long
    Call MyOPCGroup.OPCItems.Remove(MyNumItems, MyServerHandles, Errors)
    Erase Errors()
    chkActivate.Value = 0
    ' remove the group
    Call MyOPCServer.OPCGroups.RemoveAll
    ' free the object
    Set MyOPCGroup = Nothing
    ' disconnect from server
    Call MyOPCServer.Disconnect
    ' free the object
    Set MyOPCServer = Nothing
    ' setting the buttons
    cmdConnect.Enabled = True
    cmdDisconnect.Enabled = False
    cmdSyncRead.Enabled = False
    cmdSyncWrite.Enabled = False
    chkActivate.Enabled = False
    Exit Sub
    errorhandler:
    Call MsgBox(Err.Description, vbCritical)
    End Sub

    '*********************************************************

    Private Sub cmdSyncRead_Click()
    On Error GoTo errorhandler
    Dim Values() As Variant
    Dim Errors() As Long
    Dim Qualities() As Integer
    Dim TimeStamps() As Date
    Dim i As Long
    ' read the values
    Call MyOPCGroup.SyncRead(OPCDevice, MyNumItems, MyServerHandles, Values, Errors, Qualities, TimeStamps)
    ' fill values into the cells
    For i = 1 To MyNumItems
    If Errors(i) = 0 Then
    Cells(9 + i, 3) = Values(i)
    'Cells(9 + i, 4) = Qualities(i)
    'Cells(9 + i, 5) = TimeStamps(i)
    End If
    Next
    'free server allocated memory
    Erase Values()
    Erase Errors()
    Erase Qualities()
    Erase TimeStamps()
    Exit Sub
    errorhandler:
    Call MsgBox(Err.Description, vbCritical)
    End Sub

    '*********************************************************

    Public Sub cmdSyncWrite_Click()
    On Error GoTo errorhandler
    Dim Values() As Variant
    Dim HServer() As Long
    Dim NumWriteItems As Long
    Dim Errors() As Long
    Dim i As Long
    NumWriteItems = 0
    ' fill values and serverhandles
    For i = 1 To MyNumItems
    ' check for valid entry
    If Cells(9 + i, 6) <> "" Then
    ReDim Preserve Values(NumWriteItems + 1)
    ReDim Preserve HServer(NumWriteItems + 1)
    HServer(NumWriteItems + 1) = MyServerHandles(i)
    Values(NumWriteItems + 1) = Cells(9 + i, 6)
    NumWriteItems = NumWriteItems + 1
    End If
    Next
    ' write only where valid values found
    Call MyOPCGroup.SyncWrite(NumWriteItems, HServer, Values, Errors)
    'free server allocated memory
    Erase Errors()
    Exit Sub
    errorhandler:
    Call MsgBox(Err.Description, vbCritical)
    End Sub

    '*********************************************************

    Private Sub chkActivate_Click()
    If chkActivate.Value Then
    ' enable event (OnDataChange)
    MyOPCGroup.IsActive = True
    MyOPCGroup.IsSubscribed = True
    Else
    ' disable all events of the group
    MyOPCGroup.IsActive = False
    MyOPCGroup.IsSubscribed = False
    End If
    End Sub

    '*********************************************************

    Private Sub MyOPCGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)
    Dim i As Integer
    ' fill the values in the correct cells
    For i = 1 To NumItems
    Cells(9 + ClientHandles(i), 7) = ItemValues(i)
    Next
    End Sub

    nun bekommen wir immer die fehlermeldung: objekterstellung durch activex komponente nicht möglich bzw blockvariable oder with blockvariable nicht festgelegt.
    haben schon versucht den computernamen für die verbindung direkt vorzugeben und sie variabel abrufen zu lassen. keine änderung.
    stehen jetzt auf der leitung.....
    wäre super wenn jemand ne idee hat an was es liegen könnte!
    Betriebssystem ist windows 7, officeversion 2010. unter diesen beiden sollte das programm zum schluss auch laufen!
    und bevor wirs vergessen, soll mit codesys v3.5 kompatibel sein als kleines schmankerl
    danke schonmal im voraus!!!!

    viele grüße
    sebastian
    Geändert von rule (07.03.2012 um 16:31 Uhr)
    Zitieren Zitieren opc und excel 2010  

  2. #2
    Registriert seit
    27.10.2009
    Beiträge
    317
    Danke
    0
    Erhielt 64 Danke für 54 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    wurde die Automation DLL referenziert und ist sie verfügbar?
    in welcher Zeile kommt die Fehlermeldung?
    was steht in Zelle(4,2) ?

Ähnliche Themen

  1. Excel (2010) Macro Userform Anzeigenfeld
    Von Jenny1985 im Forum PC- und Netzwerktechnik
    Antworten: 4
    Letzter Beitrag: 09.01.2012, 09:09
  2. Mit Excel/VBA und OPC an S7300
    Von extruder_luder im Forum Simatic
    Antworten: 27
    Letzter Beitrag: 23.04.2010, 20:53
  3. OPC und Excel
    Von T3DDy im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 18.05.2009, 20:13
  4. WinCC Flex, OPC, excel und andere liebesgeschichten
    Von erzteufele im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 11.02.2009, 08:17
  5. Deltalogic OPC Server und Excel
    Von Waelder im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 10.09.2008, 09:38

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •