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

Ergebnis 1 bis 6 von 6

Thema: Datenbausteine - unbekannte Anzahl von Variabeln

  1. #1
    Registriert seit
    22.01.2014
    Beiträge
    11
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo alle miteinander,

    ich bin derzeit dabei, mein Wissen über das (vor über einem Jahr mal in der Ausbildung behandelte) Step7 für meinen neuen Job aufzufrischen. Hatte schon häufiger Aufgaben gehabt, bei denen ich hier Hilfe gesucht hatte, aber hatte noch nie die Notwendigkeit mich mal direkt an euch zu wenden. Aber nun hab ich ein Problem, welches ich nach zeitreicher Recherche immer noch nicht gelöst habe.

    Kann sein, dass ihr mich vlt hauen werdet, aber in der Ausbildung habe ich mich schon teilweise recht schwer damit getan und in diesem einem Jahr habe ich das ganze eigentlich erfolgreich verdrängt


    Ich habe folgende Aufgabe:
    "Schreiben Sie einen Baustein der irgendwo in ein Programm eingebunden werden kann und einen Wert (z.B. ein Rechenergebnis das in einem MW steht) in einen eigenen DB mitprotokolliert, so dass die Werte des MW der letzten Zyklen zur Verfügung stehen"

    Gesagt, getan, es läuft auch (mithilfe von Pointern)... Aber nur solange ich die Anzahl der im DB deklarierten Variablen nicht überschreite. Dh ich habe in meinem DB 3 Variablen vom Typ INT deklariert, sobald ich aber mein Rechenprogramm, ein 4. mal durchläuft und somit das Rechenergebnis zum 4. Mal in den DB geschrieben werden soll, geht die CPU auf Stop mit der Fehlermeldung "Bereichslängenfehler beim Schreiben", da ich ja zuvor keine 4. Variable im DB deklariert habe.

    Nun meine Frage: wie kann man dies umgehen, wenn ich nicht weiß, wie oft das Rechenprogramm durchlaufen soll. Ich kann ja schlecht die maximale Anzahl Variablen deklarieren, nur weil ich nicht weiß, wie viele Variablen es werden können... Muss man im DB irgendetwas besonderes einstellen oder gibt es da einen Befehl?

    Ich danke euch schon einmal und bitte nicht hauen

    Viele Grüße, Jule
    Zitieren Zitieren Datenbausteine - unbekannte Anzahl von Variabeln  

  2. #2
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Hai, als erstes mal genau klären WIEVIEL werte mitgeloggt werden.

    Den DB dann ein paar einträge länger machen.

    Und dann würde ich die Sache als Ringspeicher anlegen.
    Das Grauen lauert in der Zwischenablage !!

  3. #3
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Leider funktioniert das bei Siemens etwas anders als in einigen Hochsprachen.
    Die Anzahl/Größe muss deklariert und (leider) auch eingehalten werden.
    Möglicher Workaround: Du legst Dich auf eine Anzahl von benötigten Variablen fest und schreibst die Daten nach dem FIFO-Prinzip in den DB.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.204
    Danke
    926
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Du weißt doch aber wieviel Platz Du in dem DB hast, sprich wie groß das Merk-Array ist. Den mußt Du auf die gewünschte "Archiv"-Größe festlegen.

    Immer wenn die Routine einen neuen Wert zum Merk-Array hinzufügt, dann muß sie den ältesten Wert entfernen - dann kann das Merk-Array auch nicht "überlaufen".
    Damit man weiß welcher Wert der älteste ist (wo die Merkliste angefangen hat)
    - kann man festlegen, daß das der erste Wert in der Liste ist (der erste Array-Platz), muß dann aber vor dem Hinzufügen des neuen Wertes die gesamte Liste um 1 Element umspeichern
    - oder das ganze elegant als Ringpuffer realisieren (ein neu hinzugekommendes Element überschreibt einfach das älteste Element. Es wird nur ein Pointer auf den ältesten Wert benötigt, der nach jedem Hinzufügen weitergestellt wird).

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    jule (22.01.2014)

  6. #5
    jule ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    22.01.2014
    Beiträge
    11
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für den Tipp mit dem Ringpuffer! Was ich bisher gesehen habe, sollte das eigentlich die Lösung für mein Denk-Problem sein!
    Werd mich mal darüber belesen müssen!
    Geändert von jule (22.01.2014 um 13:30 Uhr)

  7. #6
    jule ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    22.01.2014
    Beiträge
    11
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Habs mittlerweile mal umprogrammiert. Läuft super!

    Komm mir ein bisschen doof vor, hatte bei Suche nach der Lösung auch etwas von Ringpuffer gelesen, aber habe dem keine Beachtung geschenkt weil ich den Zusammenhang nicht verstand... Hätte ich mal nachgeschaut was dahinter steckt, dann hätte ich hier noch extra fragen müssen.
    Geändert von jule (22.01.2014 um 13:33 Uhr)

Ähnliche Themen

  1. Step 7 UDT Datenbausteine in Global Datenbausteine umwandeln
    Von Vogelfrei im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 30.05.2013, 00:18
  2. Antworten: 23
    Letzter Beitrag: 17.04.2012, 00:27
  3. Antworten: 2
    Letzter Beitrag: 26.02.2012, 17:37
  4. Anzahl von Betriebsartenwahlschalter
    Von Thomas Linke im Forum Maschinensicherheit - Normen und Richtlinien
    Antworten: 2
    Letzter Beitrag: 25.08.2011, 07:05
  5. Begrenzte Anzahl von Vergleicher?
    Von danika im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 18.09.2008, 14:43

Lesezeichen

Berechtigungen

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