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

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

Thema: Array füllen

  1. #1
    Registriert seit
    10.04.2005
    Beiträge
    77
    Danke
    55
    Erhielt 7 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    ich muss gerade für meine Technikerarbeit eine Lüftungsanlage von S5 auf S7 umrüsten. Jetzt möchte ich für meine neue Visu einige Temperaturwerte aufzeichnen und als Kurve anzeigen lassen. Hab da an ein Fifo gedacht, dass mir die Werte in nem DB abspeichert. Hab mir dann das Beispiel in der FAQ solang durchgelesen bis ich es verstanden hab, ein wenig angepasst und funktioniert tatsächlich. Nun bin ich heut Mittag bei ner anderen Recherche auf einen alten Beitrag von PN_DP gestoßen der sagt, dass mir diese Aktion abartig Zykluszeit frisst ( sind so ca. 1500 Werte). Er hat das wohl irgendwie mit dem SFC20 BLKMOV gemacht, leider hab ich das nicht verstanden. Außerdem stand noch etwas drin in welcher Reihenfolge die Werte für WinCC flex im DB abgelegt werden müssen. Da bin ich mir jetzt auch nicht mehr sicher was hinten und was vorne sein soll. Wär super wenn mich jemand auf den nächsten Schritt stoßen würd.
    rot ist blau und plus ist minus
    Zitieren Zitieren Array füllen  

  2. #2
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von elmoklemme Beitrag anzeigen
    Nun bin ich heut Mittag bei ner anderen Recherche auf einen alten Beitrag von PN_DP gestoßen der sagt, dass mir diese Aktion abartig Zykluszeit frisst ( sind so ca. 1500 Werte). Er hat das wohl irgendwie mit dem SFC20 BLKMOV gemacht, leider hab ich das nicht verstanden.
    Ja, wenn du z.B. in jedem Zyklus solche Anzahl Werte verschieben musst, hat er sicherlich Recht.
    Darum muss man dann schauen ob es nicht Sinnvoll wäre sich den Wert für den Zeiger zu merken und den neuen Wert in dem DB hinten einzureihen.
    Kommt halt immer auf die Fakten an.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  3. Folgender Benutzer sagt Danke zu Paule für den nützlichen Beitrag:

    elmoklemme (22.08.2010)

  4. #3
    Registriert seit
    10.04.2005
    Beiträge
    77
    Danke
    55
    Erhielt 7 Danke für 6 Beiträge

    Standard

    Was brauchst du für Fakten?
    Mit nur hinten anreihen ist es ja nicht getan oder? Der älteste Wert soll ja rausfallen!? Bin noch nicht dahinter gestiegen
    rot ist blau und plus ist minus

  5. #4
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von elmoklemme Beitrag anzeigen
    Was brauchst du für Fakten?
    Na z.B. wie viele Daten dein FIFO aufnehmen muss und in welcher Zeit es sich ändert.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  6. #5
    Registriert seit
    10.04.2005
    Beiträge
    77
    Danke
    55
    Erhielt 7 Danke für 6 Beiträge

    Standard

    Also ich hab an sich keine Vorgabe, das wird halt ein Gimmick weil mich das ganze interessiert. Fünf Temperaturen werden erfasst und ich dachte für mich dass alle 5 min ein Wert abgespeichert wird und eben für jede Temp die letzten 24 Stunden gespeichert werden. Wären also 1440 Real Werte. Wir haben eine 315er CPU drin und das restliche Programm ist jetzt nicht der Hammer. Also Die Zykluszeit würde vielleicht schon im Rahmen bleiben. Mich würd halt interessieren wie man sowas vernünftig/besser machen kann.
    rot ist blau und plus ist minus

  7. #6
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von elmoklemme Beitrag anzeigen
    Fünf Temperaturen werden erfasst und ich dachte für mich dass alle 5 min ein Wert abgespeichert wird und eben für jede Temp die letzten 24 Stunden gespeichert werden. Wären also 1440 Real Werte. Wir haben eine 315er CPU drin und das restliche Programm ist jetzt nicht der Hammer.
    Also da hätte ich jetzt überhaupt keine bedenken.
    Und der SFC20 ist schon gut.
    Zitat Zitat von elmoklemme Beitrag anzeigen
    Mich würd halt interessieren wie man sowas vernünftig/besser machen kann.
    Was besser machen?
    Ich glaube mich an das Thema erinnern zu können.
    Da ging es aber um sehr viel mehr Werte und darum hatten PN/DP bedenken.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  8. #7
    Registriert seit
    10.04.2005
    Beiträge
    77
    Danke
    55
    Erhielt 7 Danke für 6 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Hallo SPS_LB,

    ich denke, für Deine Aufgabe mit 2880 INT-Werten ist ein FIFO nicht gut geeignet.
    5758 Byte komplett umspeichern, nur um 2 Byte der Liste hinzuzufügen ... tststs

    Hast Du mal im CPU-Baugruppenzustand auf die Zykluszeiten geschaut?

    Wenn es schon unbedingt ein FIFO sein muß, dann sollte das Einspeichern in den FIFO wenigstens effizient
    programmiert sein.

    Das Beispielprogramm von Kai benötigt dafür auf einer aktuellen CPU 315 immerhin 19,3 ms.
    Wenn man die unnötigen Berechnungen und das Zwischenspeichern aus der Schleife verbannt, dann läßt
    sich die Bearbeitungszeit auf 16,2 ms drücken.
    Wenn man immer gleich 2 INT-Werte auf einmal umspeichert, dann braucht man nur noch 8,7 ms.
    Und mit Einsatz der SFC20 "BLKMOV" sinkt das Ganze auf 2,7 ms.
    (weil SFC20 immer aufsteigend kopiert, ist dann der älteste Wert im FIFO vorn und der neueste hinten)
    Also hab grad mal noch nen Ausschnitt rausgesucht. Du hast recht, sind doch ettliche Werte mehr. Wie gesagt ich möcht ja dazulernen, vielleicht hab ich ja mal mehr Werte. Noch setz ich den SFC20 nicht ein, sondern schaufel eins nachdem anderen nach oben, weil ich nicht weiß was er da genau gemacht hat. Der SFC20 kopiert mir ja nur einen Speicherbereich eins zu eins?
    rot ist blau und plus ist minus

  9. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.173
    Danke
    922
    Erhielt 3.288 Danke für 2.657 Beiträge

    Standard

    Zitat Zitat von elmoklemme Beitrag anzeigen
    Jetzt möchte ich für meine neue Visu einige Temperaturwerte aufzeichnen und als Kurve anzeigen lassen. Hab da an ein Fifo gedacht, dass mir die Werte in nem DB abspeichert.
    Die Idee ist genau richtig, wenn Du die Werte später als bitgetriggerte Kurven anzeigen willst.
    (als FIFO benötigst Du ein REAL-Array je Temperaturwert)

    Dann muß aber üblicherweise der älteste Wert am Anfang des Array stehen und der Neueste am Ende.
    Jeder neue Wert wird am Ende eingefügt, nachdem zuvor alle anderen Werte im FIFO einen Platz nach vorn
    umgespeichert wurden. Der älteste Wert wird dabei vom zweitältesten Wert überschrieben und verschwindet.
    Die Kurve in der Visu "rutscht" dadurch um eine Zeiteinheit nach links. Am rechten Ende der Kurve steht
    der neueste Meßwert.

    Je nach Größe des FIFO und Programmiergeschick kann das Schieben/Umspeichern des FIFO erheblich lange
    dauern. Das aufzuzeigen war der Grund meiner damaligen Beiträge. *)

    Wenn es schon unbedingt ein Datenspeicher mit der Notwendigkeit des Umspeicherns sein muß, dann sollte
    das Umspeichern großer Datenmengen wenigstens effizient programmiert sein.
    Zumindest sollte man erkennen, daß man durch solche Umspeicher-Aktionen stark schwankende Zykluszeiten
    verursacht, was Probleme bereiten kann, wenn die CPU auch noch Positionier-Aufgaben erfüllen soll.

    Wie lange das Umspeichern bei Dir genau dauern wird, hängt stark von der eingesetzten CPU ab. Die neuesten
    300-CPU dürften noch um den Faktor 5 schneller sein als meine damaligen Benchmarks mit der CPU 315-2EH13.

    Zitat Zitat von elmoklemme Beitrag anzeigen
    Fünf Temperaturen werden erfasst und ich dachte für mich dass alle 5 min ein Wert abgespeichert wird und eben für jede Temp die letzten 24 Stunden gespeichert werden. Wären also 1440 Real Werte. [...]
    Mich würd halt interessieren wie man sowas vernünftig/besser machen kann.
    Mache für jede Temperatur einen eigenen FIFO (REAL-Array), damit Du für die Visu die einzelnen Temperaturen
    nicht erst mühsam aus Datensätzen mit je 5 Werten raussortieren mußt.

    Also, wenn Du den SFC20 statt der oft empfohlenen indirekten Umspeicher-Schleifen verwendest, dann habe
    ich wie Paule keine Bedenken. Du mußt 5 mal 287 REAL-Werte (5 mal 1148 Byte) umspeichern.

    Deshalb würde ich das Einspeichern der 5 Temperaturen in die 5 FIFO auf 5 aufeinanderfolgende OB1-Zyklen
    verteilen, wobei ich mir im ersten der 5 Zyklen alle 5 Temperatur-Abtastwerte merke und den ersten Wert
    in seinen FIFO einspeichere und dann im 2. bis 5. Zyklus jeweils die im ersten Zyklus gemerkten anderen
    Temperaturwerte in ihre FIFO einspeichere.

    Denkbar wäre auch, der Visu/Panel das Archivieren der 5 Temperaturen zu überlassen. Das vereinfacht auch
    das Anzeigen der Kurven. Allerdings werden dann die Werte nicht aufgezeichnet, wenn die Visu/Panel-Runtime
    nicht läuft.

    Zitat Zitat von elmoklemme Beitrag anzeigen
    Noch setz ich den SFC20 nicht ein, sondern schaufel eins nachdem anderen nach oben, weil ich nicht weiß was er da genau gemacht hat. Der SFC20 kopiert mir ja nur einen Speicherbereich eins zu eins?
    Der "Trick" beim Einsatz des SFC20 besteht darin, daß die Speicherbereiche sich überlappen und die Zieladresse
    genau 1 REAL-Wert vor der Quelladresse liegt, so daß genau der zweite bis letzte FIFO-Eintrag auf den ersten bis
    vorletzten FIFO-Eintrag umgespeichert wird. Zum Schluß wird der neue Wert auf den letzten FIFO-Wert gespeichert.


    *) Hier die Beiträge, auf die sich elmoklemme im Eröffnungspost bezieht:
    jede Minute einen Datensatz aufzeichnen mit Programmbeispiel 48-Stunden-Ringpuffer ohne Umspeichern
    Benchmark 2879 INT-Werte umspeichern (INT-kopier-Schleife vs. optimierte Schleife vs. SFC20)
    Umkopieren 99 Werte mit SFC20 "BLKMOV" Programmbeispiel

    Gruß
    Harald

  10. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    elmoklemme (23.08.2010)

  11. #9
    Registriert seit
    10.04.2005
    Beiträge
    77
    Danke
    55
    Erhielt 7 Danke für 6 Beiträge

    Standard

    Vielen Dank euch beiden. Ich denk mit der ausführlichen Erklärung bekomm ich das hin
    rot ist blau und plus ist minus

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen

    Der "Trick" beim Einsatz des SFC20 besteht darin, daß die Speicherbereiche sich überlappen und die Zieladresse
    genau 1 REAL-Wert vor der Quelladresse liegt, so daß genau der zweite bis letzte FIFO-Eintrag auf den ersten bis
    vorletzten FIFO-Eintrag umgespeichert wird. Zum Schluß wird der neue Wert auf den letzten FIFO-Wert gespeichert.
    Auszug aus der S7 Hilfe zum SFC 20:

    Quell- und Zielfeld dürfen sich nicht überlappen. Ist das angegebene Zielfeld größer als das Quellfeld, dann werden auch nur so viele Daten in das Zielfeld kopiert, wie im Quellfeld stehen.
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  13. Folgender Benutzer sagt Danke zu Jochen Kühner für den nützlichen Beitrag:

    elmoklemme (24.08.2010)

Ähnliche Themen

  1. Mit Schleife DB füllen
    Von htw im Forum Simatic
    Antworten: 59
    Letzter Beitrag: 23.05.2011, 18:29
  2. DB Füllen
    Von SPS_NEU im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 16.08.2010, 16:25
  3. Array mit berechneten Werten füllen
    Von Yogixxx im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 12.05.2010, 13:35
  4. Kreis füllen
    Von doretan im Forum HMI
    Antworten: 1
    Letzter Beitrag: 21.06.2009, 23:51
  5. Array indirekt füllen
    Von Woto im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 11.05.2009, 19:40

Lesezeichen

Berechtigungen

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