Speicher zu klein, wo kann man sparen?

Torsten05

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

programmiere hier eine 313C 2DP. bin noch nicht fertig, und habe nur noch 2 kb frei, was nicht reichen wird. Ich habe viel mit FBs und Multiinstanzen gearbeitet und jetzt frage ich mich ob mir das den Speicher wegfrisst. Wenn ich einen FB mehrmals mit einer anderen Instanz aufrufe, speichert der dann den Code des FB jedesmal neu im Arbeitsspeicher, oder wirklich nur die Instanzdaten? Bausteine die nur aus einigen aufrufen von Fbs bestehen sind recht groß, so dass ich mich frage wo der Speicher bleibt. Die größe der Dbs sind aber ok, d.h. sie entspechen der erwarteten größe. Da ich auch mit IEC Timern gearbeitet habe, weil man so halt keine Probleme/Überschneidungen mit den internen Timern bekommt, hab ich da mal versucht zu sparen und die IEC gegen "normale" Timer ersetzt. So muss ich dann anstatt nur dem Zeitwert an den FB zu übergeben auch noch die Timernummer übergeben, was letztlich noch mehr Arbeitsspeicher kostet. Lediglich der Instanz-DB wird dann kleiner, aber sparen tue ich dabei nicht...

Bleibt noch was ausser einer grösseren CPU?

Torsten
 
Hallo Torsten,

..Wenn ich einen FB mehrmals mit einer anderen Instanz aufrufe, speichert der dann den Code des FB jedesmal neu im Arbeitsspeicher, oder wirklich nur die Instanzdaten?..
Es werden nur die Instanzdaten gespeichert. Was jedoch viel Speicher frisst, sind die Parameterübergaben pro Aufruf. Man könnte ggf. die Parametersätze in DB's als STRUCT bzw. UDT ablegen und die Bausteinaufrufe mit Pointern versorgen.

Von wievielen Bausteinaufrufen mit wievielen Parametern sprechen wir denn?


Gruß, Onkel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

leider von reichlich Aufrufen. Es gibt einen Multiinstanz FB pro Station, dass sind schonmal 11. Es gibt einen FB für Aktoren, an den die Betriebsart (Hand/Automatik), je ein Bit für Ein/Aus Hand, Ein im Automatik, eine Störzeit, die Rückmeldung des Aktuators (Initiatoren) der Ausgang, und die Bits die bei einer Störung gesetzt werden übergeben werden.

Dann gibt es noch einen FB für die Ansteuerung von Maxon Motoren über Can-Bus mit Helmholtz-Baugruppe. Motoren gibt es 11, wobei 4 nur über nen Ausgang der SPS Ein- oder Ausgeschaltet werden. Diese werden auch über einen Aufruf des Aktuator-FBs gesteuert. Wäre hier nicht nötig, wollte aber die Struktur beibehalten. Die anderen 7 werden wieder über einen FB gesteuert, in dem verschiedenes berechnet (Position,Steigung usw.) wird.

Dann gibt es noch einen Schrittkettenbaustein an den die Weiterschaltbedingungen, Störzeiten im Ablauf, BA für Auto/Hand/Tipp, Reset usw. übergeben werden. Der ist für 9 der 11 Stationen jeweils einmal im entspechendem Stations-FB aufgerufen. Dieser FB hat verschiedene Features die ich nicht alle nutze, ich möchte ihn aber ungern zerpflücken da ich ihn mal möglichst universell geschrieben habe.

Es sollte halt so strukturiert wie möglich sein, wobei man dann zwangsläufig bei so einer art Objektorientier landet, was viel speicher frisst. Ich arbeite auch recht viel mit indirekter Adressierung in den Bausteinen, möchte es aber nicht ganz so wild treiben, da sonst keiner mehr durchblickt.

Ich habe mal versucht die Instanzaufrufe gegen DB-Aufrufe zu tauschen, was nicht viel bringt. Es scheint tatsächlich an den doch recht vielen übergebenen Parametern zu liegen. Sehr Ärgerlich, da die jetztige Version schön anpassbar, leicht zu überblicken und auch recht komfortabel ist.

Torsten

EDIT: Das mit dem DB und übergabe der Zylindernummer geht natürlich auch, aber das versteht hinterher kein Schwein mehr.
 
Zuletzt bearbeitet:
Kannst du evt. in den FB´s noch unnötige Statische Var durch Temp ersetzen? Bei dem Umfang ist die 313 natürlich auch sehr klein.

pt
 
Zurück
Oben