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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: CPU Stop wegen Lokaldaten, SCL & Stringoperation

  1. #1
    Registriert seit
    25.11.2008
    Ort
    Westpfalz
    Beiträge
    1.550
    Danke
    187
    Erhielt 212 Danke für 186 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    HI,

    wer kann helfen oder einen lösungsbehafteten Link einstellen?

    Bekomme einen CPU-Stop mit "Fehler beim Allokieren der Lokaldaten".
    Ursache ist offensichtlich das die Grenze der verwendbaren Lokaldaten überschritten wird bei der Verwendung von Stringoperationen wie REPLACE,DELETE,INSERT,LEFT,... in SCL.
    Habe derzeit 2 FCs. Beide haben ca. 1000kB Lakaldaten. Alle anderen Bausteine <50kB. Die IM-F-CPU kann wohl 7198kB. Das Problem trat erst bei der Programmierung des zweiten FCs auf, wobei hier eine Stringoperation ca.250kB schluckt und nur eine einzige temporäre Integervariable deklariert ist. Bei den Stringoperationen wird nur auf einen globalen DB zugegriffen. Schachtelungstiefe ist unkritisch.

    Was muss ich tun um mit den Stringoperationen in Menge arbeiten zu können?

    Vielen Dank im vorraus für Antworten.

    MfG MK
    and we all support the team (S.King - Die Arena)
    Zitieren Zitieren CPU Stop wegen Lokaldaten, SCL & Stringoperation  

  2. #2
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    ohne das gesamte Projekt zu kennen ist es schwer über die gesamte Speichernutzung zu sprechen, deswegen von mir folgender Vorschlag:

    - die Stringbearbeitung in einem Baustein
    - mehrere Strings zyklusweise versetzt bearbeiten
    (- sollte IMHO von der Verarbeitungszeit immer noch reichen, wenn alle ergebnisse erst nach drei oder vier Zyklen zur Verfügung stehen.)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    ... ich sehe das wie 4L ... stell doch vielleicht einfach mal den "bösen" FC (mit der String-Bearbeitung) hier ein. Vielleicht gibt es ja Optimierungs-Möglichkeiten ...

    Gruß
    Larry

  4. #4
    Avatar von Sinix
    Sinix ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.11.2008
    Ort
    Westpfalz
    Beiträge
    1.550
    Danke
    187
    Erhielt 212 Danke für 186 Beiträge

    Standard

    @4L meinst du statt zwei FC nur einen FC mit Stringoperationen?
    Wenn ja, was könnte da der Grund sein dies zu tun?

    im Anhang mal der böse FC, zum Verständnis: es soll ein String mit 4 Achspositionen semikolonsepariert zusammengefügt werden, der später per RS232 (ASCII) gesendet wird.

    MfG MK
    and we all support the team (S.King - Die Arena)

  5. #5
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Mäuseklavier Beitrag anzeigen
    @4L meinst du statt zwei FC nur einen FC mit Stringoperationen?
    Wenn ja, was könnte da der Grund sein dies zu tun?
    ich gehe davon aus, dass deine beiden FCs das selbe machen - richtig? nur eben global adressiert.
    dynamisiere das bzw. führe die funktionen parameter-orientiert aus, dadurch sparst du einen baustein und die benötigten lokaldaten werden kleiner. <- das ist der grund
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  6. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    Sinix (30.08.2011)

  7. #6
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    im sinne von Glasnost wäre es vielleicht hilfreich, wenn du das projekt hoch lädst
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  8. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.712
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Ich bin auch kein Freund von Operationen wie :
    Code:
    myString := left(myString , len(myString)-4) ;  // unabhängig, ob das nun syntaktisch korrekt ist
    bei solchen (oder ähnlichen) Konstrukten neigt SCL schonmal dazu, sich sich Lokaldaten-mäßig auszubreiten - das ist hier aber nur Spekulation. Gut ist auf jeden Fall, wenn der Baustein seine eigenen Zwischen-Variablen erzeugt und verwaltet ...

  9. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Das Problem hatte auch auch schon einmal.
    Die 400-er und auch die 318 (bzw. Speed7) bieten die Möglichkeit, die Größe des Lokaldaten-Stack für die jeweilige Ebene zu ändern. Vielleicht kann das die IM auch, ich glaube aber eher nicht.

    Dann hilft nur, die Funktionen so aufzusplitten, das der Lokaldatenbedarf sinkt. Du kannst mal Teile des Code auskommentieren, dann den Baustein schließen und mit der rechten Maustaste auf dem Baustein die Objekteigenschaften des Bausteins aufrufen. Unter Allgemein-Teil2 sieht man den Lokaldatenbedarf.

    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.
    Wenn man also viele Bausteine schachtelt, addiert sich der Lokaldatenbedarf. Es könnt also helfen, Bausteine nacheinander aufzurufen, statt ineinander.
    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

  10. #9
    Avatar von Sinix
    Sinix ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.11.2008
    Ort
    Westpfalz
    Beiträge
    1.550
    Danke
    187
    Erhielt 212 Danke für 186 Beiträge

    Standard

    @4L dein Wunsch ist stattgegeben obwohl in mein Arbeitsvertrag irgendwas mit Betriebsgeheimnisse steht. Kannst du mal ein Beispiel reinstellen, was du mit dynamisieren bzw. parameter-orientiert meinst? Der erste FC70 ist zum zerpflücken der empfangenen Daten, der zweite FC71 soll die Antwortdaten zusammensetzen.

    @Larry, bin ein Freund solcher Konstrukte, um den Code schlank zu halten. Wenn ich in SCL temporäre Hilfstrings mit 254 Zeichen deklariere gehen die Lokaldaten auch in die Höhe. Wäre dumm wenn SCL das nicht ab kann.

    @Ralle, bei IM-CPU kann man wohl nichts an den Stacks ändern, oder? Was sagt die Anzeige, siehe Anhang aus? Wie gesagt die Schachtelungstiefe ist nicht so hoch, maximal 3 oder 4.

    Danke schonmal für eure Bemühungen
    and we all support the team (S.King - Die Arena)

  11. #10
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Für deine ganzen String-Funktionen werden intern Strings mit der eingestellten Maximallänge von 254 Bytes angelegt, z.B. auch für die erste DINT_TO_STRING Funktion wird erst über eine unsichtbare Temp-Variable gegangen.
    Ohne jetzt am Code was zu ändern, könntest du mal nachrechnen wie lang dein String maximal werden kann. Denn so wie es aussieht brauchst du die 254 Zeichen eher selten.
    Dann könntest du über die Compileroption
    Code:
    { SetMaximumStringLength := '50' }
    Die Länge der internen Strings auf z.B. 50 begrenzen. Wenn du jetzt 1000 Byte an Lokaldaten hast (glaub bei dir ist überall ein k zu viel), hättest du damit schonmal nur ein fünftel verbaucht.

    Wenn du es in einem FC lassen willst, könnte man dem Compiler noch durch Umstellung auf temporäre Strings mit der entsprechenden Länge etwas unter die Arme greifen (hier gibt es aber ein paar Beschränkungen hinsichtlich IN/OUTs von Funktionen), oder auf einen FB umstellen bei dem die temporären Strings in den statischen Daten abgelegt werden.

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

    van (30.08.2011)

Ähnliche Themen

  1. Lokaldaten
    Von S7 Frischling im Forum Programmierstrategien
    Antworten: 9
    Letzter Beitrag: 12.08.2013, 14:20
  2. Lokaldaten
    Von michael77 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 24.11.2008, 16:07
  3. SCL und Lokaldaten
    Von derwestermann im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 14.03.2008, 11:53
  4. CPU geht wegen internem Fehler in Stop
    Von oliver2306 im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 13.11.2006, 11:02
  5. S7 FB für Stringoperation gesucht
    Von merlin im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 29.07.2004, 15:46

Lesezeichen

Berechtigungen

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