Steigender Arbeitsspeicher

Zuviel Werbung?
-> Hier kostenlos registrieren
nun der Baustein wird weil ich 12 Antriebe habe 12mal instanziert. jedoch habe ich nur mit 2 Antrieben bis jetzt gearbeitet.
Weitere Strings wären eigentlich nur in dem Array [1..200] von dem Struct im bild
 

Anhänge

  • Screenshot_32.jpg
    Screenshot_32.jpg
    43,6 KB · Aufrufe: 15
Hier mal die Hilfeseite zum Datentyp String

Verarbeitung von großen Strings​

Bei Verwendung von T_MaxString oder kleineren String-Variablen können Sie String-Funktionen wie CONCAT() oder LEN() verwenden (Tc2_Standard).

Bei größeren String-Variablen müssen Sie Funktionen wie CONCAT2() oder LEN2() nutzen (Tc2_Utilities).
 
da habe ich relativ am anfang meines Projekts Copy Paste betrieben. Und ja wenn ich mir das jetzt so ansehe gibt es kein Grund warum auch nur einer dieser Strings so groß ist. Aber spielt das eine Rolle außer das das verdammt schlechter programier stil ist und mehr Ressourcen verbraucht?
 
Naja ... Resourcen sind ja gerade dein Thema - auch wenn es an diesem Fall warscheinlich nicht hängt.
Was passiert denn weiter mit dem TYPE ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In meinem Datalog Funktionsbaustein bzw. einer Methode wird das Array währrend der Fahrt befüllt.
Am ende des Zyklus wird das Array mit einer For-Schleife und der Funktion FormatString2 ausgelesen und in einen String gestopft. Danach wird mit Memset das Array mit 0 überschrieben (zuvor nur mit einer For-Schleife und :=""; die einzelnen Spalten geleert was kein unterschied machte)
 

Anhänge

  • Screenshot_33.jpg
    Screenshot_33.jpg
    156,8 KB · Aufrufe: 13
Das macht auch keinen Unterschied. Definierte Variablen belegen ihren Platz - ob nun mit irgendwas zugewiesen oder nicht.
Bei dem Array könntest du im Prinzip auch nur den Counter, der dir sagt wieviele Elemente wirklich verwendet werden, auf Null setzen.

Im Grunde habe ich jetzt noch nichts gesehen (oder gelsen) was wirklich deinen Speicher-Überlauf (nach Zeit) verursacht (außer dem, was @Glon angemerkt hat). Das heißt ja, dass Recourcen belegt aber nicht wieder freigegeben werden. Bist du dir sicher, dass das SPS-Programm das Problem ist ?
 
Ah Ok, TWINCAT 3
Temporäre Variablen - VAR_TEMP
Diese Funktionalität ist eine Erweiterung bezüglich der Norm IEC 61131-3.
Sie deklarieren temporäre Variablen lokal zwischen den Schlüsselwörtern VAR_TEMP und END_VAR.
VAR_TEMP-Deklarationen sind nur in Programmen und Funktionsbausteinen möglich.
Warum eigentlich nicht in Funktionen? In Funktionen sind doch sowieso alle lokalen Variablen temporäre Variablen.
Alle Daten einer Funktion sind temporäre Daten und sind nur während der Ausführung einer Funktion gültig (Stack-Variablen). Das bedeutet, dass TwinCAT alle Variablen, die Sie in einer Funktion deklariert haben, bei jedem Aufruf der Funktion neu initialisiert.
 
Ich bin immer noch der Meinung, dass das Anwenderprogramm (SPS) keine Schuld hat.

Vll. ist der UFW nicht richtig deaktiviert. Bei protected Volumes steht noch "C" drin.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... Jetzt mal für mich (als nicht-Beckhoff-ianer) : was macht denn der UFW bzw. wofür benötigt man ihn ?
Und ... warum kann der so einen Speicher-Überlauf erzeugen ? Das heißt doch, dass er intern nicht korrekt arbeitet ...
 
... Jetzt mal für mich (als nicht-Beckhoff-ianer) : was macht denn der UFW bzw. wofür benötigt man ihn ?
Und ... warum kann der so einen Speicher-Überlauf erzeugen ? Das heißt doch, dass er intern nicht korrekt arbeitet ...
Ist eine Windows Enterprise Funktion:
Der Unified Write Filter (UWF) schützt den Inhalt eines Volumes durch Abfangen von Schreibversuchen zu einem geschützten Volume und leitet diese Schreibversuche zu einer virtuellen Überlagerung um.

Sie können wählen, wo das Overlay gespeichert wird (RAM oder Festplatte), wie viel Platz reserviert wird und was passiert, wenn das Overlay voll ist.

Um die Uptime zu erhöhen, richten Sie die Überwachung ein, um zu überprüfen, ob Ihre Überlagerung gefüllt ist. Auf bestimmten Ebenen kann Ihr Gerät Benutzer warnen und/oder das Gerät neu starten.

Beckhoff sagt dazu:
Überfülltes RAM-Overlay und Disk-Overlay

Der UWF ist ohne kontinuierliche Überwachung und Standardeinstellungen nicht für den Dauerbetrieb (24/7) geeignet. Das RAM-Overlay bzw. Disk-Overlay wird durch Schreibzugriffe (auch in exkludierte Bereiche) kontinuierlich bis zur maximal eingestellten Größe anwachsen, bis die Schreibzugriffe fehlschlagen. Das Betriebssystem kann dann nicht mehr bedient werden.
Der UWF ist mit Standardeinstellungen nicht für den Dauerbetrieb geeignet

Der UWF ist mit Standardeinstellungen nicht für den Dauerbetrieb (24/7) geeignet. Das RAM-Overlay bzw. Disk-Overlay wird durch Schreibzugriffe (auch in exkludierte Bereiche) kontinuierlich bis zur maximal eingestellten Größe anwachsen, bis die Schreibzugriffe fehlschlagen. Der Overlay wird erst nach einem Neustart wieder freigegeben.

Unabhängig davon, wie groß das RAM-Overlay bzw. Disk-Overlay eingestellt wird, kann dieses ohne Neustart irgendwann volllaufen. Das RAM-Overlay ist besonders gefährdet, da es maximal 50 % des gesamten Arbeitsspeichers betragen kann. Mit einem vollen RAM-Overlay bzw. Disk-Overlay werden weitere Schreibversuche fehlschlagen. In diesem Zustand kann es sein, dass Ihr Gerät nicht mehr reagiert und träge wird. Der Disk-Overlay kann eine Lösung sein, da bei genügend freiem Speicher ein entsprechend großer Overlay generiert werden kann.
Also quasi als Schutz für die Parition, dass Daten nur temporär geschrieben werden in den RAM bzw. in die Auslagerung und nicht fest auf die Partition um eben diese zu schützen.
 
Die Laufzeit von TwinCAT allokiert keinen Speicher dynamisch.

Es gibt den Routerspeicher - von hier wird dann gegebenenfalls Speicher für __New Befehle abgezweigt, und es
gibt eben den Speicher der entsprechend dem Compiler benötigt werden. Dieser wird zur Startzeit allokiert.

Der Speicher kommt zudem um unpaged Bereich des Betriebssystems. Damit wird verhindert dass der irgendwohin weit weg ausgelagert wird.
TC2-Leute mit alten Windows-Kisten kennen das vielleicht noch - da rannte man tatsächlich manchmal in (Windows-) Systemgrenzen.

Macht alles insofern Sinn - da alloc-Funktionen auch mal ganz gerne unberechenbar Zeit brauchen und Determinismus wichtig ist.

Da es laut TaskManager kein (sichtbarer) Prozess ist und ich mich nicht so 100% mit dem UWF-Manager auskenne (ist eine Windows-Funktionality der dem Änderungsschutz der Daten auf der Festplatte dient) könnte man sich über die Kommandozeile mir den Status mal anschauen.

Ansonsten fällt mir spontan nicht wirklich viel ein. Nutzt du die Tc3_JsonXML-Bibliothek?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So, wie sich das liest, wird es dann wohl dieser UWF wohl sein und ganz sicher NICHT das SPS-Programm.
Anscheinend läßt sich da ja auch die max.-Größe festlegen ... um eben diesen Überlauf gar nicht erst geschehen zu lassen.
Trotzdem aber meine Frage : braucht man das denn wirklich ?
 
UWF ist für folgende Situationen gedacht:
Im Windows wird irgendwelcher Quatsch gemacht.
Software installiert, Einstellungen verändert usw.
Um dann zum Ursprung zurück zu kommen muss man einfach den IPC neu starten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... Jetzt mal für mich (als nicht-Beckhoff-ianer) : was macht denn der UFW bzw. wofür benötigt man ihn ?
Und ... warum kann der so einen Speicher-Überlauf erzeugen ? Das heißt doch, dass er intern nicht korrekt arbeitet ...
 
Zurück
Oben