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

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

Thema: STOP durch Fehler beim Allokieren von Lokaldaten

  1. #1
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,


    leider geht die Steuerung beim Programmdurchlauf in Stop. Grund: "STOP durch Fehler beim Allokieren von Lokaldaten".

    habe vor kurzem mir eine SCL Funktion zu eigen gemacht. ...Gleicht ein Array mit einem Array in einem DB ab.
    siehe:
    http://www.sps-forum.de/showthread.p...334#post372334

    Hier habe ich nun gelesen das SCL Stringoperation viele Lokaldaten erzeugen und möglichst wenige direkt Datenbausteinzugriffe verwendet werden sollen.
    siehe:
    http://www.spsforum.eu/showthread.ph...183#post351183

    Bei meiner SCL File ist das doch nicht der Fall(viele Datenbausteinzugriffe)...
    im worstcase benutze ich das SCL File, mit verschiedenen Abänderungen 7 mal im Zyklus. An der Anzahl kann ich eigentlich kaum was einsparen..
    An was könnte ich da arbeiten ?

    edit: hab eine CPU 317F-2PN/DP projektiert, benutze aber PLCSIM.
    Geändert von Limette (30.01.2012 um 11:19 Uhr)
    Zitieren Zitieren STOP durch Fehler beim Allokieren von Lokaldaten  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Eigenartig. Hast du konsequent überall die Strings begrenzt, also in deinem Fall war das wohl String[30]. Wenn du irgendwo im SCL-Code mal das [30] vergessen hast, steigt der Lokaldatenbedarf pro String auf 255. Geh mal im Bausteinordner mit der rechten Maustaste auf den Baustein, "Objekteigenschafte/Allgemein", dort siehst du den Lokaldatenbedarf des Bausteins.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    Limette ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hi,

    so wie ich dich verstanden habe, spielt es keine Rolle wie oft ich die FC pro Zyklus aufrufe, sondern ob ein FC oder FB mehr als 255 Byte benötigt. Wenn man die ineinander verschachtelt spielt es keine rolle ?! Nein, das ist nicht der Fall. Habe alles durchgeschaut, alles unter 255. Der des Fehlers bezichichtige FB hat auch unter 255. Ich benutze rund um den String FCs schon manchmal die Blkmove funktion um ein Char Array in ein Byte Array umzuwandeln, - um es für die SCL FC richtig aufzubereiten. Aber das müsste ja auch alles in beim Abrufen der Lokaldaten Länge mit eingerechnet sein.

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Beim verschachtelten Aufruf spielt das schon eine Rolle. Man hat pro Prioritätsklasse nur einen begrenzten Lokaldatenstack zur Verfügung. Ich glaube 512 Byte war die normale Größe, bei 318, Speed7 und 400-er kann man diese Stackzuordnung abändern.

    Hier mal die Step7-Hilfe dazu:

    Lokaldaten-Stack
    Der L-Stack speichert:
    die temporären Variablen der Lokaldaten von Bausteinen
    die Startinformation der Organisationsbausteine
    Informationen zum Übergeben von Parametern
    Zwischenergebnisse der Logik in Kontaktplan-Programmen
    Beim Erstellen von Organisationsbausteinen können Sie temporäre Variablen (TEMP) deklarieren, die nur während der Bearbeitung des Bausteins zur Verfügung stehen und dann wieder überschrieben werden. Vor dem ersten Zugriff müssen die Lokaldaten initialisiert werden. Außerdem benötigt jeder Organisationsbaustein für seine Startinformation 20 Lokaldaten-Byte.
    Die CPU besitzt einen begrenzten Speicher für die temporären Variablen (Lokaldaten) gerade bearbeiteter Bausteine. Die Größe dieses Speicherbereichs, des Lokaldaten-Stacks, ist CPU-abhängig. Der Lokaldaten-Stack wird zu gleichen Teilen unter den Prioritätsklassen aufgeteilt (Voreinstellung). Das bedeutet, jede Prioritätsklasse verfügt über einen eigenen Lokaldatenbereich. Damit ist gewährleistet, dass auch hochpriore Prioritätsklassen und ihre zugeordneten OBs Platz für ihre Lokaldaten zur Verfügung haben.
    Nachfolgendes Bild zeigt die Zuordnung von Lokaldaten zu den Prioritätsklassen in einem Beispiel, in dem im L-Stack der OB 1 vom OB 10 unterbrochen wird, der dann wiederum vom OB 81 unterbrochen wird.
    Vorsicht
    Bitte beachten Sie bei der Verwendung von temporären Variablen, dass diese nur innerhalb des jeweiligen Bausteins gültig sind bzw. als Vorgängerlokaldaten weiteren, in diesem Baustein aufgerufenen Bausteinen zur Verfügung stehen. Es ist insbesondere nicht gewährleistet, dass nach Verlassen und erneutem Aufruf des Bausteins die temporären Variablen wieder die Werte enthalten, mit denen der vorangegangene Aufruf des Bausteins beendet wurde. Temporäre Variablen sind beim Aufruf eines Bausteins zunächst per Definition unbestimmt und müssen bei jeder erstmaligen Verwendung im Baustein immer wieder initialisiert werden.
    Alle temporäre Variablen (TEMP) eines OB und seiner unterlagerten Bausteine werden im L-Stack gespeichert. Wenn Sie viele Schachtelungsebenen in Ihrer Bausteinbearbeitung verwenden, kann der L-Stack überlaufen.
    S7-CPUs wechseln in den Betriebszustand "STOP", wenn Sie die zulässige L-Stack-Größe für ein Programm überschreiten.
    Testen Sie den L-Stack (die temporären Variablen) in Ihrem Programm.
    Berücksichtigen Sie den Lokaldatenbedarf von Synchronfehler-OBs.

    Zuordnen von Lokaldaten zu Prioritätsklassen
    Nicht jede Prioritätsklasse benötigt gleich viel Speicher im Lokaldaten-Stack. Durch Parametrierung mit STEP 7 können Sie bei S7-400-CPUs und bei der CPU 318 die Größe des Lokaldatenbereichs für die einzelnen Prioritätsklassen unterschiedlich festlegen. Nicht benötigte Prioritätsklassen können Sie abwählen. Bei S7-400-CPUs und der CPU 318 wird damit der Speicherbereich für andere Prioritätsklassen erweitert. Abgewählte OBs werden bei der Programmbearbeitung nicht berücksichtigt, dadurch sparen Sie Rechenzeit.
    Bei den anderen S7-300-CPUs ist jeder Prioritätsklasse eine feste Anzahl von Lokaldaten zugeordnet (256 Bytes), die nicht verändert werden kann.

    PS: Bild fehlt leider
    Geändert von Ralle (30.01.2012 um 11:51 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  5. #5
    Limette ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard

    512 ? ok, dann muss ich mal zusammenrechnen. ...auf wieviel kann man die anderen Steuerung aufblasen ?

  6. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von Limette Beitrag anzeigen
    512 ? ok, dann muss ich mal zusammenrechnen. ...auf wieviel kann man die anderen Steuerung aufblasen ?
    Kommt auf deine Steuerung an, bei einer normalen 300-er geht da gar nichts, wenn ich richtig erinnere, dann mußt du du dein Programm etwas anders aufteilen, also weniger verschachteln z.Bsp.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

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

    Limette (30.01.2012)

  8. #7
    Limette ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hallo, angenommen ich projektiere - da plcsim - einfach eine andere Steuerung wo ich die Lokaldaten bearbeiten kann. wie genau würde das funktionieren ?
    Auf dem Bild ist die Rede von 29 Prioritätsklassen. Für was stehen die denn ? Woher weiß ich was da was ist ? und wie kann ich rausfinden welcher Prioritätklasse ich mehr Speicher geben muss, damit die Steuerung nicht mehr stopt.

    Geändert von Limette (30.01.2012 um 16:04 Uhr)

  9. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    ... wie Ralle es schon geschrieben hat : Es geht nicht bei jeder CPU einzustellen. Die kleinen 300er-CPU's können es generell nicht. Ich habe an einigen meiner Anlagen eine VIPA-CPU dran (die hat die Eigenschaften einer 31. Dort kann man es unter den CPU-Eigenschaften in der HW-Konfig (Unter-Eigenschaft Speicher) einstellen. Die entsprechende Prioritäts-Klasse, unter der das ganze läuft, wird dir durch die Fehler-Meldung mitgeteilt. Hier dann den Lokaldaten-Speicher erhöhen.

    Gruß
    Larry

  10. Folgende 2 Benutzer sagen Danke zu Larry Laffer für den nützlichen Beitrag:

    dockers (10.07.2013),Limette (30.01.2012)

  11. #9
    Registriert seit
    05.03.2007
    Ort
    Lindlar
    Beiträge
    112
    Danke
    19
    Erhielt 20 Danke für 18 Beiträge

    Standard

    Hallo,

    in deinem Fall dürfte das die Prioritätsklasse 1 sein.
    Wenn mich nicht alles täuscht sind die anderen Klassen für verschiedenste OB-Aufrufe.
    Hier ein Link mit einer Beispielrechnung:
    http://support.automation.siemens.co...ard&viewreg=WW

    Dort steht auch folgender Hinweis:
    Hinweis:Pro Programmbearbeitungsebene (Ablaufebene) sind 256 Byte je Prioritätsklasse vorgesehen.
    - bei S7-300 fest
    - bei S7-400 standardmäßig, einstellbar unter "CPU-Eigenschaften” Hardware-Konfiguration

    Bei 400er CPU hatte ich es auch schon oft das ich die Lokaldaten in der Prioritätsklasse 1 hochsetzen musste wegen eben genau solcher Effekte.

    Gruß
    Matthias
    IF Time < '09:00:00' THEN
    SELECT finger from right hand where ID=3
    END IF

  12. Folgender Benutzer sagt Danke zu Panzerknacker für den nützlichen Beitrag:

    Limette (30.01.2012)

  13. #10
    Limette ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2010
    Beiträge
    239
    Danke
    107
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Stimmt, es ist Prioritätsklasse 1. Eine Übersicht was welche Prioritätsklasse ist gibt es nicht...muss ich es halt durch ausprobieren aufteilen.

Ähnliche Themen

  1. Antworten: 22
    Letzter Beitrag: 04.09.2011, 15:34
  2. Antworten: 9
    Letzter Beitrag: 17.06.2011, 08:02
  3. Fehler beim enlesen von E 1110.0
    Von eYe im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 20.03.2009, 09:04
  4. Fehler "Stop durch Peripherieverwaltung"
    Von MSB im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 10.07.2008, 22:23
  5. Antworten: 3
    Letzter Beitrag: 12.01.2007, 23:29

Lesezeichen

Berechtigungen

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