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

Ergebnis 1 bis 8 von 8

Thema: Problem beim schreiben von S7-Daten in Excel-Datei

  1. #1
    Registriert seit
    04.09.2013
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe einen OPC-Client in ExcelVBA geschrieben, der Daten aus einem Datenbaustein einer S7 315-2DP liest und Diese dann in eine Excel-Tabelle schreibt.
    Da es sehr viele verschiedene Daten sind, werden die Daten in einer For-Schleife per "Set OPC_Item" aus der SPS gelesen, in den Server geschrieben und im nachfolgenden Schritt per "Tabelle1.Cells(Zeile, Spalte) = OPC_Item" in das Tabellenblatt geschrieben.

    Die Schleife sieht also folgendermaßen aus (vereinfacht, aber alles wichtige ist drin):
    For i = 1 To numOfData
    Set OPC_Item = OPC_Items.AddItem("S7-Verbindung.DB11.DBDI" & byteAdress, Line) ' Daten aus SPS in Server holen
    Tabelle1.Cells(Line, Column) = OPC_Item ' Daten aus Server in Tabellenblatt 1 schreiben
    byteAdress = byteAdress + SIZEofDINT ' Adresse der nächsten DINT-Variablen
    line = line + 1 ' nächste Zeile im Tabellenblatt
    Next

    Wenn ich Dies per Debugging Schritt für Schritt durchtippe funktioniert alles wunderbar, ebenso funktioniert es, wenn ich einen Breakpoint hinter die "Set"-Anweisung setze und es dann ausführe.
    Will ich das Ganze jedoch einfach nur ausführen, werden keine Daten in die Tabelle geschrieben, als hätte die "Set"-Anweisung gar keine Daten aus der SPS gelesen.

    Habe betreits eine Wartezeit per "Sleep" hinter die "Set"-Anweisung gepackt, leider ohne Erfolg. Egal, ob ich 1ms oder 5s warte, es funktioniert nur, wenn ein Breakpoint hinter dem Set gesetzt ist oder ich das Ganze händisch durchtippe.

    Ich müsste recht schnell eine Lösung zu diesem Problem finden, wäre also super wenn hier jemand eine Idee hätte woran es zumindest liegen kann.

    Vielen Dank schonmal im Vorraus
    SanderKarl
    Zitieren Zitieren Problem beim schreiben von S7-Daten in Excel-Datei  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Hallo,
    mal eine Vermutung dazu :
    Du weißt in dem Script dem OPC-Server den gewünschten Item-Namen zu. Der OPC-Server wird dann, wenn er den Item-Namen findet, diesen bei Gelegenheit aktualisieren. So steht das Ding erstmal nur in seiner To-Do-Liste drin.
    Dieses Aktualisieren passiert dann irgendwann ...
    Was ich jetzt machen würde wäre :
    Du meldest alle deine Items schon viel früher (z.B. beim Aufrufen des Sheet) an und kannst dann sehr wahrscheinlich in diesem Script sie dann auch verwenden.

    Gruß
    Larry

  3. #3
    SanderKarl ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.09.2013
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Larry,

    erstmal vielen Dank für die schnelle Antwort.
    Auf den Gedanken bin ich auch schon gekommen, allerdings liegt es leider nicht daran, da alle Items ganz am Anfang des Skripts deklariert werden.

    Ich vermute, dass bei der Abarbeitung des Programms keine Ressourcen auf Betriebssystemebene mehr vorhanden sind, da Excel alles in beschlag nimmt. Das würde erklären, warum das Programm im Debug-Modus per "durchzappen" oder mit Hilfe von Breakpoints funktioniert. Hierbei wird das Programm stellenweise angehalten und das Betriebssystem hat wieder genügend Ressourcen zur Verfügung um dem OPC-Server per LAN die Daten zukommen zu lassen.

    Könnte dies eventuell der Fall sein?
    Und wenn ja, wie kann ich zur Laufzeit das Programm "pausieren" lassen? Ich dachte schon an die "Sleep"-Funktion, aber diese gibt im beschriebenen Fall keine Ressourcen frei.

    Gruß

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Hallo,
    nein ... ich denke mit der Vorgehensweise bist du "auf dem Holzweg".
    Wie schon von mir geschrieben - du mußt dir alle Items als eigenständige globale Variablen deklarieren und denen so früh wie möglich (beim Start des Sheet oder noch besser beim Start der Datei) ihre SPS-Zuordnung verpassen. Also für jedes Anzeige-Element ein eigener Item - das könnte von mir aus auch ein Item-Array sein wenn VBS das kann.
    In deiner Schleife, greifst du dann (viel später) auf das Item-Array zu.
    Da mit Delays zu arbeiten ist doch nicht zweckdienlich. Du mußt dir prinzipiell die Funktionsweise des OPC-Servers (Item-Servers) vorstellen. Du meldest eine Variable bei ihm an, der aktualisiert die dann und dann willst du deren Wert haben. Das Ganze funktioniert asynchron, ggf. gibt es sogar ein Event, das dann ausgelößt wird, wenn der Item aktualisiert wurde.
    Wenn du dein Programm durch-traced dann sind da ja Zeiten ohne Ende drin. Das geht vielleicht auch mit Delays ... aber wie lange soll dass Script denn Laufen ? 20 Sek. ... 40 Sek. ... 60 Sek. ...?

    Ich muß dir hier aber auch gestehen, dass du meine Antworten bitte als prinzipielle Vorgehensweise einstufen sollst. Ich arbeite selber nicht mit Excel wenn ich so etwas mache. Der Unterschied sollte aber nicht gravierend sein.

    Wie sieht denn dein gesammte Code aus und wann wir der angestossen / durchlaufen ?

    Gruß
    Larry

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.181
    Danke
    923
    Erhielt 3.288 Danke für 2.657 Beiträge

    Standard

    Muß es unbedingt über einen OPC-Server sein? Du könntest auch mit LibNoDave die Daten direkt aus der 315 lesen.
    Programmbeispiel EXCEL + LIBNODAVE

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #6
    SanderKarl ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.09.2013
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Larry,

    ich habe extra nicht für jeden DB-Wert ein eigenes Item angelegt, da es sich um ca. 2500 Werte handelt, die zudem auch noch verschiene Datentypen aufweisen.

    Daran liegt es auch nicht, habe mal ein kleines Testprogramm angelegt, wo alles in nur einem Sub passiert und nur ein Item verwendet wird.
    Auch hier habe ich das gleiche Problem.

    Hier mal das Testprogramm:

    Code:
    Option Explicit
    
    Private Server As OPCServer
    Private GroupColl As OPCGroups
    Private Group As OPCGroup
    Private ItemColl As OPCItems
    Private Item1 As OPCItem
    
    Public Sub Bla()
        Set Server = New OPCServer
        Call Server.Connect("INAT TcpIpH1 OPC Server")
        
        Set GroupColl = Server.OPCGroups
        Set Group = GroupColl.Add("MyGroup")
        Group.IsSubscribed = True
        Group.UpdateRate = 0
    
        Set ItemColl = Group.OPCItems
        Set Item1 = Group.OPCItems.AddItem("S7-Verbindung_1.DB11.DBDI64", 1)
        
        Tabelle1.Cells(1, 1) = Item1.Value
        Tabelle1.Cells(1, 2) = Item1.Quality
        
        
        If Not Server Is Nothing Then
            Server.OPCGroups.RemoveAll
            Server.Disconnect
            Set Server = Nothing
        End If
    End Sub

    Die Ausgaben des Programms sehen wie folgt aus (DB11.DBW64 hat den Wert 10):
    bei normaler Ausführung: A1="" und B1="0"
    bei Debuggen: A1="10" und B1="192"

    Sind denn schon hier Fehler im Code??

    Gruß
    SanderKarl

  7. #7
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.745
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    schau dir mal das an http://www.herber.de/forum/archiv/60..._Doevents.html vielleicht hilfts...
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... ich gebe es auf ...

    Du könntest meine Aussage ja ganz einfach widerlegen wenn du es einfach mal ausprobierst ... was ich geschrieben habe ... und wie ich es geschrieben habe ...
    aber vielleicht stimmt ja auch das, was ich geschrieben habe ...

Ähnliche Themen

  1. Wago 750-841 Daten in Datei schreiben
    Von emsbootsmann im Forum WAGO
    Antworten: 4
    Letzter Beitrag: 24.04.2014, 09:35
  2. Versatz beim Schreiben in Datei
    Von zwuebbl im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 30.06.2011, 11:35
  3. String in eine Datei schreiben beim CP
    Von olitheis im Forum CODESYS und IEC61131
    Antworten: 18
    Letzter Beitrag: 30.11.2010, 08:53
  4. Status 8F62 beim Schreiben von FTP - Daten
    Von CrazyCat im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 10.05.2010, 18:39
  5. WinCC Daten in Excel schreiben
    Von mg1382 im Forum HMI
    Antworten: 23
    Letzter Beitrag: 31.01.2006, 20:39

Lesezeichen

Berechtigungen

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