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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: VBA-Excel-OPC

  1. #1
    Registriert seit
    13.01.2009
    Beiträge
    27
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi Leute !!!
    Ich würde mich über hilfe von euch freuen...

    Ich versuche gerade Variablen eines Wincc OPC servers in Excel einzulesen. Soweit so gut mit dem Skript das ich habe klappt das auch ganz gut..Nun möchte ich aber nicht nur eine sondern mehrere Variablen darstellen. Dazu müsste ich das beiliegende Skript verändern..komme damit aber nich wirklich zurecht...
    (mit nur eine der Variablen kein Problem)
    bitte teilt mir die veränderungen die ich machen muss mit..

    mfg KNEFI
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren VBA-Excel-OPC  

  2. #2
    Registriert seit
    21.07.2003
    Ort
    Bangkok / Thailand
    Beiträge
    98
    Danke
    24
    Erhielt 7 Danke für 7 Beiträge

    Standard

    Hallo,

    ich habe mir deinen Code mal angesehen und würde folgendes vorschlagen:

    Code:
    Sub StartClient()
    'On Error GoTo ErrorHandler 
    '----------- We freely can choose a ClientHandle and GroupName
        ClientHandles(1) = 1
        groupname = "OPC_data"
    '----------- Get the ItemID from cell "A1"
    'PC name wird jetzt in VBA-Skript hinterlegt
        NodeName = "Hier der pc name" '----Range("A1").Value
        ItemIDs(1) = "actual_weight" '----Range("A2").Value
        ItemIDs(2) = "weight_shift_1"   '// Hier sind die zwei variablen die ich auslesen möchte
        '----------- Get an instance of the OPC-Server
        Set MyOPCServer = New OPCServer
        MyOPCServer.Connect ServerName, NodeName
        Set MyOPCGroupColl = MyOPCServer.OPCGroups
        '----------- Set the default active state for adding groups
        MyOPCGroupColl.DefaultGroupIsActive = True
        '----------- Add our group to the Collection
        Set MyOPCGroup = MyOPCGroupColl.Add(groupname)
        Set MyOPCItemColl = MyOPCGroup.OPCItems
        '----------- Add one item, ServerHandles are returned
        MyOPCItemColl.AddItems 1, ItemIDs(1), ClientHandles, ServerHandles, Errors
        MyOPCItemColl.AddItems 2, ItemIDs(2), ClientHandles, ServerHandles, Errors
        '----------- A group that is subscribed receives asynchronous notifications
        MyOPCGroup.IsSubscribed = True
    Exit Sub
        ErrorHandler:
             MsgBox "Error: " & Err.Description, vbCritical, "ERROR"
    End Sub
    Meine Änderungen habe ich hier mal rot markiert....
    Beim ersten 'AddItems' fehlt meiner Meinung nach der Index => (1) <=
    ItemIDs ist als Gruppe mit zwei Elementen deklariert! (siehe => Dim ItemIDs(2) As String)
    Die ItemIDs können nur fehlerfrei bearbeitet werden, wenn der Index richtig angegeben wird.
    Eigentlich müsste hier schon eine Fehlermeldung kommen, dass das Element nicht vorhanden ist...oder so ähnlich...
    Genaueres würde man sehen wenn der ErrorHandler aktiviert wäre.

    Die zweite Zeile dient dazu der Collection 'MyOPCItemColl' eine weitere Variable hinzuzufügen.
    Für jeden weiteren Wert, der in Excel angezeigt werden soll, muss einen zusätzliche AddItems-Zeile eingefügt werden.
    Natürlich muss die Gruppe ItemIDs auch die richtige Anzahl Elemente enthalten. zb. Dim ItemIDs(10) As String
    Und jedes Element muss mit 'ItemIDs(3) = "weight_shift_2"' usw. beschrieben sein.

    Probier das mal aus und melde dich nochmal....

    Gruss
    Guido
    Geändert von Guido (21.01.2009 um 05:00 Uhr) Grund: Rechtschreibung :-)

  3. #3
    KNEFI ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    13.01.2009
    Beiträge
    27
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    HI Guido!
    danke für deine Hillfe.
    Habe deine Vorschläge umgesetzt aber nun sagt der kompiler
    zu der rot markierten stellen deiner änderung.

    "Fehler beim Kompilieren:
    Unverträgliche Typatenfeld oder benutzerdefinierter Typ erwartet"

    Test:
    "MyOPCitemcoll.additems 2, ItemIDs, Client Handles.............

    wenn ich dort die nummerierung wegnehme kommt der fehler:

    "Laufzeitfehler 9:
    Index außerhalb des gültigen Bereiches"

    und zwar bei der eigentlichen ausgabe der Variablen
    "Range ("B4").Value= Cstr(ItemValues(2))

    Vielleicht haste ja noch ne idee??? ich werde es auch weiter ausprobieren.....

  4. #4
    Registriert seit
    21.07.2003
    Ort
    Bangkok / Thailand
    Beiträge
    98
    Danke
    24
    Erhielt 7 Danke für 7 Beiträge

    Standard

    Hallo,

    hast du noch den original Code in dem nur eine Variable gelesen und angezeigt wird?
    Mich würde mal interessieren wie das vor deinen Änderungen aussah....

    Vielleicht kannst du ja mal den Original-Code hier rein kopieren....

    Gruss
    Guido

  5. #5
    KNEFI ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    13.01.2009
    Beiträge
    27
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi Guido!
    ich habe hier jetzt das original skript eingefügt.
    hier müssen noch der pc name und der variablenname von excel aus eingefügt werden. das hatte ich ja schon geändert.
    ziel ist es einfach variablen aus dem server in excel sichtbar zumachen.
    Angehängte Dateien Angehängte Dateien

  6. #6
    Registriert seit
    21.07.2003
    Ort
    Bangkok / Thailand
    Beiträge
    98
    Danke
    24
    Erhielt 7 Danke für 7 Beiträge

    Standard

    Hallo,

    ich habe mir die beiden Versionen nochmals angeschaut und möchte dich bitten vielleicht mal folgendes zu probieren?
    Kopier die zwei Zeilen in das 'MyOPCGroup_DataChange'...

    Code:
    Private Sub MyOPCGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)
        Stop
        Debug.Print NumItems
        '----------- Set the spreadsheet cell values to the values read
        Range("B2").Value = CStr(ItemValues(1))
        Range("C2").Value = Hex(Qualities(1))
        Range("D2").Value = CStr(TimeStamps(1))
    End Sub
    Dann ändere mal den Wert der erste Variablen in deinem OPC, damit das DataChange-Ereigniss ausgelöst wird.
    Der VBA-Kompiler wird dann auf dem Stop-Befehl stehen bleiben.
    Mit der F8-Taste kannst du dann einen Schritt weitergehen und wirst den Wert in 'NumItems' sehen können.
    Wenn ich nicht ganz daneben liege, müsste in 'NumItems' die Nummer des Wertes stehen welcher sich geändert hat.
    Wenn du den zweiten Wert im OPC änderst, müsste in 'NumItems' "2" stehen.
    Vorraussetzung ist natürlich dass du die oben beschriebene Erweiterung noch im Code drin hast....

    Wenn meine Vermutung sich bestätigt, und 'NumItems' enthält die Nummer der Wertes welcher
    sich geändert hat, könntest du vielleicht noch folgendes machen:

    Code:
    Private Sub MyOPCGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, ItemValues() As Variant, Qualities() As Long, TimeStamps() As Date)
     Select Case NumItems
         Case 1
             Range("B2").Value = CStr(ItemValues(1))
         Case 2
             Range("B4").Value = CStr(ItemValues(1))
     End Select
        '----------- Set the spreadsheet cell values to the values read
     'Range("B2").Value = CStr(ItemValues(1))
        Range("C2").Value = Hex(Qualities(1))
        Range("D2").Value = CStr(TimeStamps(1))
    End Sub
    Es würde mich mal interssieren was dabei rauskommt.....


    Gruss
    Guido

  7. #7
    KNEFI ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    13.01.2009
    Beiträge
    27
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi!!
    Ich habe deine idee nochman getestet bei diesem stop debug befehl zeigt er mir immer die 1 an. Ich bekomme ihn nich dazu sich zu ändern.
    Aber da ich ja gestern fleißig war habe ich das Skript geändert. (siehe anhang. Die änderung der Variablen kommt nun auf knopfdruck und wird nich ständig aktualisiert.
    Es funktioniert super habe nur noch ein paar fragen bzw problemchen.

    1. Ich kann nur die Parameterwerte von Wincc als Variable in Excel angeben und nich die OPC Variable? Also "Waage" statt "actual_Weight"
    (siehe bild anhang) als Quality code dieser Variablen haut er mir immer " 4c " rein und prozesswert 0.
    Status in excel bei der OPC vari is "20"
    Bei dem ersten meiner programme konnte ich noch die richtige OPC Vari angeben.??? Wo liegt der fehler.

    2. Die Zeitstempel funktion sie geht in meinem programm immer eine stunde vor?? Sommer/winterzeit??? Wie kann ich sie anpassen??

    3. Meine feststellung nach einigen stunden:
    Die Variablen die ich in Excel anzeigen möchte müssen in WinCC auf einem Bild sein. Sonst zeigt er mir sie nicht. Das verstehe ich nich so ganz aber damit könnte ich leben. vllt haste ja ne erklärung????

    vielen dank für deine mühen....
    mfg Knefi
    Angehängte Dateien Angehängte Dateien

  8. #8
    Registriert seit
    21.07.2003
    Ort
    Bangkok / Thailand
    Beiträge
    98
    Danke
    24
    Erhielt 7 Danke für 7 Beiträge

    Standard

    Hallo,

    1. Ich kann nur die Parameterwerte von Wincc als Variable in Excel angeben und nich die OPC Variable?
    Bei dem ersten meiner programme konnte ich noch die richtige OPC Vari angeben.??? Wo liegt der fehler?
    Code:
    'Act_Cell ist die Starzeile = 1 + 4 = 5
    'das lesen der Variablen beginnt in Zeile 5
    For i = 1 To Max_Items
     Act_Cell = i + Cell_Offset
     ClientHandles(i) = i
     ItemIDs(i) = Range("A" & Act_Cell).Value
    Next i
    Code:
    ItemIDs(1) = "actual_weight" '----Range("A2").Value
    Das liegt daran das in der Schleife jetzt die Variablen-Namen aus den Excelzellen A5 bis A8 übernommen werden.
    Vorher wurden die Variablen-Namen im VBA-Code direkt geschrieben.

    2. Die Zeitstempel funktion sie geht in meinem programm immer eine stunde vor?? Sommer/winterzeit??? Wie kann ich sie anpassen??
    Entweder du suchst die Stelle von der das Datum/Uhrzeit geliefert wird und stellst es um.
    Oder du machst in der folgenden Schleife ein kleine Änderung...
    Code:
    For i = 1 To NumItems
     k = Cell_Offset + i
     Range("B" & k).Value = CStr(ItemValues(i))
     Range("C" & k).Value = Hex(Qualities(i))
     Range("D" & k).Value = CStr(TimeStamps(i)-3600)
    Next i
    Ich habe hier jetzt einfach mal "-3600" gemacht falls der TimeStamp in Sekunden-Format vorliegt.
    Ich gehe aber davon aus dass das Date-Format verwendet wird.
    Hier ist es aber auch möglich eine Stunde vom Wert abzuziehen bevor er in Excel geschrieben wird.
    Die VB-Funktion 'CDate' kann hier vielleicht hilfreich sein....

    3. Meine feststellung nach einigen stunden:
    Die Variablen die ich in Excel anzeigen möchte müssen in WinCC auf einem Bild sein.
    Sonst zeigt er mir sie nicht.
    Falls du mit 'nicht anzeigen' meinst das der Wert nicht aktualisiert wird kann das folgende Ursache haben.
    Es kann sein dass das der OPC nur Werte aktualisiert die von WinCC gebraucht und angezeigt werden.
    Andere Variabeln bleiben möglicherweise auf '0'.....

    Gruss
    Guido

  9. #9
    KNEFI ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    13.01.2009
    Beiträge
    27
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hi!

    zu 1:
    Ich sehe da eigentlich für meine verhältnisse keinen unterschied ob ich die varible "actual_weight" von der Excel oberfläche oder direkt im Skript eintrage. Biste sicher das es daran liegt?? das würde a irgenwie keinen sinn ergeben oder?
    (Habe dank siemens und co die suche nach jedem sinn aufgebeben bin froh wenn es mal läuft..haha)

    zu 2.
    Also ich kann mit der zb von dir eingetragenen zahl den Wert verändern. aber ich finde nicht den richtigen Wert da ich mit dieser eingabe von -3600 die anzeige von vorher
    (22.01.2009 12:44:26)
    und nach der eingabe der Zahl
    (16.03.1999 12:45:09)
    Also das Datum ändert sich möchte eigenlich nur eine Stunde vor auf 13:45 uhr.
    habe nichts zur timestamp formatierung gefunden.
    Wenn ich wüsste wo er(timestamp) diese zeit wegbekommt wäre das auch nich schlecht das sollte sich ja irgendwie automatisch umschalten. Ich kann ja nich immer im sommer und winter zum Kunden und diese zeiten umstellen.Ich dachte er würde die aktuelle Computer Zeit verwenden aber dem ist ja scheinbar nicht so.

    vllt kanste mir da nochma helfen?
    oder vllt sogar meine funktionen mit der cdate-funktion abändern wenn das die bessere lösung ist.

    zu 3.
    Excel löscht mir die Wert anzeige und schreibt zum status 20 rein das datum bleibt natürlich da und passt sich an. Wenn die abgefragte Variable (zb Ausgabefeld in Wincc) nicht auf der Wincc oberfläche ist.
    ich kann mir dabei helfen indem ich das entsprechende feld in ein bild kopiere das immer auf dem desktop ist und dann unsichtbar mache oder verstecke. das Problem ergibt sich dann wenn es dann doch mal mehrer Variablen werden sollen.
    Das finde ich wenn es so ist wie ich es momentan sehe wäre das ein manko.
    Bei größeren Datenmängen möchten wir dann eh auf das siemens eigene produkt "databridge" zurückgreifen.

    danke für deine Hilfe

    mfg Knefi

  10. #10
    Registriert seit
    21.07.2003
    Ort
    Bangkok / Thailand
    Beiträge
    98
    Danke
    24
    Erhielt 7 Danke für 7 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    HI,

    Für die Zeit-Korrektur kannst du mal folgendes machen:
    Code:
    Range("D" & k).Value = CStr(TimeStamps(i) + CDate(0.041666))
    Indem du den Wert "0,041666" zu TimeStamps hinzuaddierst wird die Zeit um 1 Stunde vorgesetzt.
    Habe das mit VisualBasic6 auf meinem Rechner ausprobiert... und hat auch funktioniert....
    Hatte mit 3600 wohl etwas übers Ziel hinaus geschossen....ca. 10 Jahre...nicht schlecht

    Sorry dass ich mich so kurz fasse, aber zu den Punkten 1 und 3 kann ich nichts wirklich konstruktives mehr sagen....

    Gruss
    Guido
    Geändert von Guido (22.01.2009 um 16:15 Uhr)

  11. Folgender Benutzer sagt Danke zu Guido für den nützlichen Beitrag:

    Dennix (08.07.2010)

Ähnliche Themen

  1. S7 To Excel
    Von salih im Forum Werbung und Produktneuheiten
    Antworten: 0
    Letzter Beitrag: 26.07.2009, 11:41
  2. OPC und Excel
    Von T3DDy im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 18.05.2009, 20:13
  3. Excel auf MP 277
    Von cindy im Forum HMI
    Antworten: 0
    Letzter Beitrag: 29.04.2009, 10:57
  4. Excel -> DB
    Von mst im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 16.10.2007, 15:57
  5. PS3 Excel
    Von tomatensaft im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 18.07.2007, 10:10

Stichworte

Lesezeichen

Berechtigungen

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