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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: Daten aus DB in csv-Datei schreiben

  1. #11
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.345
    Danke
    397
    Erhielt 820 Danke für 663 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Das Problem (und da hast du mich nicht richtig verstanden) ist die Übergabe der Daten von der SPS in die Visu. Wenn du nicht die von Thomas angesprochene Visu hast sondern vielmehr die von mir vermutete dann kannst du dein Array nicht als ein Element (und somit konsistent) an die Visu übergeben - die Visu holt sich den Inhalt mehr oder weniger "nach Gutdünken"
    Ich hab' meinen DB aus einem udt erstellt und auch an das HMI nur als eine Variable vom Typ udt... übergeben. Ist das von Dir beschriebene Verhalten auch noch so, wenn man auf die einzelnen Untervariablen zugreift oder wird so jeweils der komplette Stamm übertragen?

  2. #12
    Registriert seit
    29.03.2004
    Beiträge
    5.172
    Danke
    129
    Erhielt 1.506 Danke für 1.107 Beiträge

    Standard

    Also libnodave liest prinzipiell nicht konsistenter oder inkonsistenter als z.B. WinCC flexible oder TIA WinCC. Ein WinCCflex-Array in Größe der PDU wird genauso gelesen wie ein gleich großer Datenblock durch libnodave oder einer anderen Bibliothek. Und bei optimierter BuB-Kommunikation ist nichteinmal so ein Block konsistent.

    Ein wie auch immer geartetes Handshake-Signal benötigst du also in jedem Fall, mit dem die SPS der Visu signalisiert dass die Daten abholbereit sind, und in der Zeit in diesem nicht mehr hineinschreibt. Oder du verwendest so etwas wie double buffering, also zwei Datenblöcke, und von Datenblock a nach b wird wenn fertig mit ublkmov kopiert. Aber das sollte nicht das große Problem sein.

    Da der Sendevorgang mit dem erwähnten BSEND auch über mehrere Zyklen andauern kann, muss der Sende-DB innerhalb dieser Zeit ebenfalls zur Bearbeitung gesperrt werden. Da das alles innerhalb der SPS geschieht ist das aber einfacher handzuhaben. Im WinCC ist der Datensatz dann immer vollständig konsistent. Aber diese Option entfällt bei deinem System eh.
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

  3. #13
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.201
    Danke
    389
    Erhielt 2.296 Danke für 1.910 Beiträge

    Standard

    Es ging mir nicht darum, wie der Datenblock gelesen wird (da hast du natürlich vollkommen Recht, Thomas) sondern DAS er gelesen wird und man weiß wann er gelesen worden ist.
    Bei Flex ist es so (und sehr wahrscheinlich auch noch in TIA-Flex), dass es sein kann, dass Teile des Array's noch gar nicht aktualisiert worden sind und auch durch den Durchlauf der Schleife im Script nicht aktualisiert werden. Dieses Verhalten ist nach meiner Beobachtung umso wahrscheinlicher je größer der einzulesende Datenbereich ist/wird.

    Gruß
    Larry

  4. #14
    Earny ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2008
    Beiträge
    388
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard

    Was WinCC Flex unter Step7 classic war (ist), das ist WinCC unter TIA. Die Versionsnummern stehen zur Zeit bei V13.1 oder 13.2, wenn ich richtig informiert bin.
    Das WinCC unter TIA hat meines Wissens nichts mit dem Leitsystem WinCC zu tun.

    @Larry
    Ich verstehe Dich nicht. Ich weiß nicht, was Du als Konsistenzproblem ansiehst.
    Nochmal: Ich zeichne im DB10 Messwerte mit 10ms Zeittakt auf. Die Aufzeichnung erfolgt mit exaktem Zeittakt, weil der Schreibvorgang durch den OB35 gesteuert wird. Mich interessiert nicht die Absolut-Zeit, zu der der Messwert angefallen ist.
    Wenn ich nach Beendigung der Aufzeichnung, also nach 10s keinen weiteren Schreibzugriff auf den DB10 mehr zulasse, dann bleiben die Messwerte unverändert im DB10 erhalten. Es spielt dann keine Rolle, ob ich alle 1000 Realwerte quasi gleichzeitig als Block auslese, oder ob ich heute die ersten 100 und morgen die nächsten 900 Messwerte auslese.

    Matze hat es richtig beschrieben. Ich werde es morgen mal mit seinem Code versuchen.


    Wie gesagt, mit VB.NET und libnodave habe ich das auch schon gemacht. Vielleicht werde ich dabei bleiben.
    Mir würde es aber besser gefallen, wenn ich meine bereits vorhandenen WinCC-Visu um die Messwertübernahme und Aufzeichnung ergänzen könnte, weil dann alles in einer Visu ist.
    Geändert von Earny (23.08.2016 um 21:16 Uhr)

  5. #15
    Registriert seit
    29.03.2004
    Beiträge
    5.172
    Danke
    129
    Erhielt 1.506 Danke für 1.107 Beiträge

    Standard

    Zitat Zitat von Earny Beitrag anzeigen
    Was WinCC Flex unter Step7 classic war (ist), das ist WinCC unter TIA. Die Versionsnummern stehen zur Zeit bei V13.1 oder 13.2, wenn ich richtig informiert bin.
    Das WinCC unter TIA hat meines Wissens nichts mit dem Leitsystem WinCC zu tun.
    Es gibt noch WinCC Professional im TIA-Portal, das soll von der Funktion her ähnlich wie das WinCC Scada (aktuell V7) sein, darum denke ich mal, dass es da auch Rohdatenvariablen gibt.
    Ich steig' da aber auch nicht mehr überall durch. Es gibt mittlerweile mindestens 4 völlig unterschiedliche Systeme, die Siemens alle WinCC nennt.
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

  6. #16
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.201
    Danke
    389
    Erhielt 2.296 Danke für 1.910 Beiträge

    Standard

    Schade ... du hast es immer noch nicht verstanden.
    Es geht mir nicht um dein SPS-Programm (das hatte ich schon erwähnt) - das wird seine Aufgabe schon korrekt erfüllen.
    Davon, dass du die Daten korrekt in dem DB stehen hast, hast du sie noch lange nicht in der Visu.
    Was ich sagen wollte ist : du hast mit Flex KEINEN Einfluß darauf, wann die Werte, die du in der SPS in dem DB stehen hast, in die Visu übergeben worden sind. Das kann sein, dass alle 1000, die zusammengehören, nach ein paar Millisekunden zur Visu aktualisiert worden sind ... oder erst nach einigen Sekunden. Das, was im DB steht, das steht noch lange nicht in der Visu in deren Speicher. Die in der Visu deklarierte Variable ist NICHT die Variable der SPS sondern ein vollkommen eigenständiger Speicher auf den die Daten aus der SPS (nach Gutdünken der Visu) irgendwann draufkopiert werden. Das hat übrigens auch nicht sehr viel mit der Aktualisierungsrate der Variablen zu tun.

    Gruß
    Larry

  7. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Earny (23.08.2016)

  8. #17
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.201
    Danke
    389
    Erhielt 2.296 Danke für 1.910 Beiträge

    Standard

    Zitat Zitat von Earny Beitrag anzeigen
    Wie gesagt, mit VB.NET und libnodave habe ich das auch schon gemacht. Vielleicht werde ich dabei bleiben.
    Mir würde es aber besser gefallen, wenn ich meine bereits vorhandenen WinCC-Visu um die Messwertübernahme und Aufzeichnung ergänzen könnte, weil dann alles in einer Visu ist.
    Siehst du ... und ich würde das zu einem eigenständigen Programm oder vielleicht sogar zu einem Service machen, der vollkommen eigenständig läuft und die Visu nicht in irgendeiner Form belastet.

  9. #18
    Earny ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2008
    Beiträge
    388
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard

    @Larry
    Ich glaube, ich habe jetzt verstanden, wo das Problem liegen könnte.

  10. #19
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    9.556
    Danke
    825
    Erhielt 2.825 Danke für 2.274 Beiträge

    Standard

    Zitat Zitat von Earny Beitrag anzeigen
    @Larry
    Ich glaube, ich habe jetzt verstanden, wo das Problem liegen könnte.
    Vielleicht hast Du Lust, Dir wenigstens 2 Themen aus meiner Linkliste aus #2 mit der Beschreibung des Variablen-Lese-Problems durchzulesen?

    Das Problem:
    WinCC flexible Skript Daten archivieren: Aktualisierungszeit der Variablen
    Und eine Lösungsbeschreibung (ab Beitrag #12):
    Prozessdaten einer CPU 317 auf Speicherkarte eines TP277 6" speichern

    Für Deine "WinCC Advanced (TIA Portal) PC Runtime" gilt genau wie bei WinCC flexible:
    Zitat Zitat von PN/DP Beitrag anzeigen
    WinCC flexible liest Variablenwerte aus der Steuerung nur dann, wenn es von deren Verwendung für aktuell angezeigte Objekte weiß oder extra zum Aktualisieren aufgefordert wird oder wenn die Aktualisierung der Variable auf "zyklisch fortlaufend" steht. Wird der Variablenname erst im Skript zusammengesetzt oder kann WinCC flexible den Trigger des Skriptes nicht vorhersehen, dann werden die Variablenwerte erst NACH Ausführung der entsprechenden Skriptzeile gelesen, egal wie kurz die Aktualisierungszeit der Variable eingestellt ist. Das Skript wartet NICHT auf das Lesen der Variablen. Es gibt auch keine Rückmeldung, wann eine "normale" PLC-Variable gelesen wurde. Nur Rezepturvariablen kann man so lesen, daß man eine Rückmeldung erhält, wenn alle Variablen gelesen wurden. Wie Helmut schon schrieb: konsistentes Lesen von PLC-Variablen ins HMI geht nur mit Rezepturen. Alles Andere ist mehr oder weniger Zufall.

    Siemens-Beispiel (es erwähnt allerdings nicht dieses essentielle Konsistenzproblem):
    Wie speichern Sie mit der WinCC (TIA Portal) PC Runtime Informationen mit einem Skript in eine Datei?


    Wenn die Aufgabe denn unbedingt mit der WinCC Advanced RT gelöst werden soll, dann würde ich nicht eine Rezeptur mit 1000 Variablen anlegen, sondern die 1000 Werte als Array von 20 Structs mit je 50 Werten organisieren und mittels Übergabepuffer und Handshake mit der SPS 20 mal nacheinander jeweils einen Struct (mit den 50 Werten) in eine Rezeptur lesen und die Werte der Rezepturvariablen in die csv-Datei schreiben (oder 10 mal 100 Werte). Siehe obige Lösungsbeschreibung.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. #20
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.698
    Danke
    72
    Erhielt 748 Danke für 503 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ohne das ich jetzt alles haarklein gelesen habe.

    Das funktioniert über vbs in der visu. Haben wir bei uns im Einsatz

    ABER... Die Daten MÜSSEN über eine Rezeptur geladen werden um konsistent zu sein.
    Das einlesen der Rezeptur kann bei der Datenmenge schon einen Moment länger dauern.
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 18.03.2016, 08:21
  2. Step 7 AktualWerte aus DB auslesen und in CSV Datei schreiben
    Von Toki0604 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 16.12.2015, 02:35
  3. Antworten: 7
    Letzter Beitrag: 27.02.2015, 17:04
  4. WINCC flex - Daten in csv-Datei schreiben
    Von dirknico im Forum HMI
    Antworten: 8
    Letzter Beitrag: 02.12.2013, 11:39
  5. Antworten: 11
    Letzter Beitrag: 01.09.2011, 20:24

Lesezeichen

Berechtigungen

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