ILC 150, zuwenig Speicher

Portisch

Level-1
Beiträge
149
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe eine ILC 150 ETH im Haus als Steuerung im Einsatz.
Nun habe ich mein Projekt erweitert und es kommt zu dieser Fehlermeldung:
Das kompilierte Projekt benötigt mehr Speicher für Daten als auf dem angeschlossenen Gerät verfügbar ist! Verfügbar: 262176 Byte / Benötigt: 300478 Byte.

Was nun?
Welches Model ist die nächste mit mehr Speicher?

Da ich mit Elektronik täglich zu tun habe: Es wird sich hier sicher um einen Speicherbaustein handeln. Wenn ich diesen durch einen größeren austausche kann dann der Speicher über 256k genutzt werden.
Oder besser gesagt, wie bringe ich die ILC dazu diesen zu verwenden?
 
Hi

hier hilft nur den Austausch mit einer "größeren" Steuerung, wie z.B. ILC171 oder ILC191
diese haben einen höheren Daten und Programmspeicher

Ein Austausch der Hardware ähnlich wie bei einem PC ist hier nicht möglich


Alternativ kann man sich das Programm auf dem Prüfstand legen, und prüfen ob evtl. irgendwo Speicher eingespart werden kann.
Wie z.B. Überprüfen des Code ob in den Funktionsbausteinen zuviel Speicher verbraucht wird, oder viele Instanzen eines Funktionsbausteines durch eine einzige ersetzt werden kann.
Da du einen Sprung von 40kB gemacht hast, gehe ich davon aus das viele Instanzen hinzugefügt wurde. Jede Variable in einer Instanz benötigt Datenspeicher. Somit erhöht sich auch der benötigte Datenspeicher für die Anzahl der Instanzen
 
Hallo Portisch,

ich hatte das gleiche Problem bei einer ILC 151 GSM. Bei mir hat es geholfen bei PCWorx den Haken für "optimierten Code" zu setzen.
Die Einstellung findet man im Fenster "IEC Programmierung" unter Hardwarestruktur --> eCLR --> "Deine SPS", dann Rechtsklick auf "Deine SPS", dann Einstellungen anklicken. Jetzt kann man relativ weit unten den Haken für "optimierten Code" setzen. Bei mir hat sich die Datengröße von 660 kB auf 260 kB reduziert. Vielleicht klappt das bei dir ja auch.
 
hast du bibliotheken eingebunden wo viele bausteine enthalten sind
wenn ja dann wird der meiste speicher dadurch verwendet

dann kannst du dir abhelfen in dem du den pcworx compiler core aud 2.8.5 zurückstufst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das reine Einbinden von Libaries mit vielen Bausteinen hat damit definitiv nix zu tun. Es geht nur um die Aufrufe.

Ich kann den anderen nur Beipflichten.

Erst mal Programm prüfen auf nicht mehr verwendete Instanzen und Variablen.

Wenn da alles unnötige entfernt wurde und es trotzdem nix Hilft bleibt wohl nur eine größere CPU.

P.s. Die Größe der Librarys spielt nur eine Rolle wenn die Quellen incl. Librarys eingespielt wird.

Gesendet von meinem SM-A300FU mit Tapatalk
 
Das reine Einbinden von Libaries mit vielen Bausteinen hat damit definitiv nix zu tun. Es geht nur um die Aufrufe.

Ich kann den anderen nur Beipflichten.

Erst mal Programm prüfen auf nicht mehr verwendete Instanzen und Variablen.

Wenn da alles unnötige entfernt wurde und es trotzdem nix Hilft bleibt wohl nur eine größere CPU.

P.s. Die Größe der Librarys spielt nur eine Rolle wenn die Quellen incl. Librarys eingespielt wird.

Gesendet von meinem SM-A300FU mit Tapatalk


das was du hier erzählst wäre ansich logisch und richtig ist aber ab einer gewissen firmware bzw. compiler core eben nicht so

ich habe ein beispielprojekt genommen wo über bibliotheken ca. 600 bausteine und im projekt selber nochmals ca. 100 bausteine eingebunden sind

wirklich verwendet sind aber nur ca. 20 bausteine

dann habe ich das projekt mit den verschiedenen core versionen compiliert und an den folgenden daten kannst du sehen was dir wahrheit ist

Ob genau das problem nun bei "portisch" schuld ist kann ich nicht beurteilen ob es ist leicht möglich
kommt drauf an welche firmware und pcworx version bzw. core version bei ihm voreingestellt ist


beispiel:

ILC 151 FW4.3 mit Core v2.8.5 compiliert


Benötigter Speicher für Programmcode: 48676 Byte
Benötigter Speicher für remanente Daten: 96 Byte
Benötigter Speicher für das Application Image: 158884 Byte
Voraussichtlich benötigter Speicher für Daten: 166226 Byte


ILC 151 FW4.3 mit Core v3.0.2 compiliert


Benötigter Speicher für Programmcode: 49828 Byte
Benötigter Speicher für remanente Daten: 96 Byte
Benötigter Speicher für das Application Image: 180388 Byte
Voraussichtlich benötigter Speicher für Daten: 279698 Byte


und das kann dann gar nicht mehr auf die sps geladen werden



das alles nur weil zusätzlichen debug infos auf der sps hinterlegt werden
einzige lösung ist das du auf die core 2.8.5 zurücksteigst und mit weniger debug infos leben

übrigens hat codesys genau das gleiche problem mit den vielen bausteinen

da die meisten dieses dialog fenster nich mal kennen wundert mich ja auch nicht

core version.jpg
 
Zuletzt bearbeitet:
Hmm ok.

Das hab ich noch nie versucht.
Dann nehme ich das zurück.

Allerdings dürfte das nicht sein.

Dann ist es auf jeden Fall eine gute Möglichkeit.

Diese werde ich mal selbst testen um etwas Daten zu sparen.

Gesendet von meinem SM-A300FU mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die ganzen Antworten! Gestern wollte ich das Programm erweitern und stehe nun bei 1% freien Speicher. Habe jetzt die Optimierungen nicht überprüft, werde aber das noch machen!

Nebenbei habe ich mir noch eine ILC155ETH geholt, die hat 512kb Speicher, also doppelt so viel wie die 150'er.

EDIT:
Ich habe bei der ILC150ETH nur einen Core:

Untitled.png
Und wenn ich die Optimierung aktiviere ändert sich nichts...
Pc Worx ist 6.30.1202
 
Zuletzt bearbeitet:
deine ilc 150 ist so alt das das angesprochene problem hier nicht vorhanden ist da es gar keine neuer core version gibt
nur ilc's gibt es höhere core versionen die den erhöhten speicherbedarf verursachen und hier kann man gezielt auf eine 2.8.x core version zurückgehen
 
Hallo Portisch,

die Coreeinstellungen sind nur bei der ILC 1x1 Reihe einstellbar. Hier ist eine erweiterte Diagnose für die FCs mit eingeflossen, die den erhöhten Speicherbedarf hervorrufen.

Bei deiner ILC 150 bleibt dir nur eine Optimierung deines Codes.

Als Beispiel: Verwendest du viele Arrays, die eventuell größer als benötigt sind. (Bytearray mit z.B. 100 Feldern aber nur die ersten 20 werden benötigt)

Wenn du Strings als Diagnose benutzt, könntest du hier ein Byte als Hex Code nutzen. Ein Standard-String benötigt 80+6 Byte Speicherplatz.

Wenn du mit Strukturen arbeitest empfiehlt es sich, in der Prozessdatenzuordnung im linken unteren Feld eine Variable zu markieren und die Tastenkombination "STRG+ALT+0 (Auf dem Numpad)" zudrücken. So bekommst du eine Übersicht, wie viel Speicherplatz deine einzelnen Variablentypen benötigen.

Gruß
Ulrich Kleinschmidt
 
Zurück
Oben