# WAGO 750-880 Retain Speicher fast voll ---> warum?



## Hans_ (6 Dezember 2016)

Ich habe hier ein 750-880 (FW09) mit einem nicht sehr aufwändigen Programm drauf (Haussteuerung). 
Beim Übersetzen ist mir aufgefallen, dass der Retainspeicher schon zu 75% ausgelastet ist.

Ich habe zwei globale Booleans als Retain Persistent deklariert und in der PLC_PRG vier Scheduler vom Typ Weekly am Laufen. 

VAR RETAIN PERSISTENT
    myScheduleWeekly_01: typScheduleWeekly;
    myScheduleWeekly_02: typScheduleWeekly;

    myScheduleWeekly_03: typScheduleWeekly;
    myScheduleWeekly_04: typScheduleWeekly;
END_VAR

Dazu muss ich sagen, dass ich unter den Globalen Variablen zuvor versehentlich auch einen ungenutzen  typScheduleWeekly und einen ungenutzen typPublicHoliday deklariert hatte. 
Die habe ich gelöscht aber es stellt sich keine Besserung ein. Überhaupt: Wenn ich die 4 o.g. Scheduler rausnehme wird die Retainspeicherauslastung auch nicht kleiner. 

Alles bereinigen und neu übersetzen hilft auch nicht. Woran könnte das liegen?

Zielsystemeinstellung sagen:




Hans


----------



## Hans_ (6 Dezember 2016)

Ich habe gerade gesehen, dass der FbStromstoss zur Tasterauswertung auch jeweils einen Boolean als retain persistent nutzt. 
Da habe ich auch einige von im PRG, aber selbst wenn das 40 oder 50 Taster wären, würde das die hohe Auslastung des Retainspeichers nicht erklären, oder?

Hans


----------



## Accused (6 Dezember 2016)

Schau mal bitte hier, dass Thema war schon mal da:

[h=1]wago 750-881 retain speicher, zielsystemeinstellungen, speicheraufteilung[/h]
Je nach Programmstruktur könnte es sein, dass dort dein Problem geschildert wird.


----------



## Hans_ (6 Dezember 2016)

Ja, den Thread hab eich auch mittlerweile gesehen. 
Heißt das, dass ein FB der den FB_Stromstoss nutzt, komplett (was bedeutet das?) Retain ist? 

Wenn man sich den FbStromstoss aus der WAGO GebaeudeLib ansieht, sieht man, dass dort ein Boolean (xAktor_old) retain deklariert ist. 
Vermutlich damit nach einem Stromausfall der Schaltzustand erneut hergestellt werden kann!? 
Wenn das für mich verzichtbar wäre, gibt es eine Möglichkeit FbStromstoss ohne retain_Boolean zu generieren/erhalten?


----------



## Accused (6 Dezember 2016)

Ich würde es so verstehen, dass alle Variablen vom FB dann Retain sind. 

Bin da leider auch erstmal etwas überfragt, da ich so eine Situation noch nicht hatte.
Bausteine von einer Bibliothek kann man leider nicht ändern.

Eventuell den Baustein mit der Funktion, die man braucht eben selber schreiben. 
Ich benutze eben nicht viele Bibliotheken, daher bin ich noch nie auf dieses Problem gestoßen.

Edit: Im Handbuch steht, dass wenn nur eine Variable im FB Retain ist, wird die ganze Instanz Retain gespeichert. Also die Ursache von deinem Problem ist somit gefunden.

Edit 2: Der Baustein macht ja nicht viel, den kann man ja fix selber schreiben. In der PDF zur Bibliothek steht ja drin, was er macht.


----------



## .:WAGO::0100153:. (7 Dezember 2016)

Hallo Hans_,

es ist leider so wie Accused schon richtig beschrieben hat und zwar wenn eine Variable in einem Funktionsbaustein(FB) Retain angelegt ist, dann sind alle anderen Variablen in diesem FB ebenfalls Retain. Deshalb würde ich Ihnen ebenfalls raten, die Funktion einfach nachzubauen. Ich hoffe ich konnte Ihnen helfen.


----------



## Accused (7 Dezember 2016)

Noch eine Ergänzung von meiner Seite, das speichernde Verhalten eines selbstgebauten Baustein kann man ja auch mit einer INOUT-Variable lösen, die dem Baustein zugeführt wird und Global als Retain deklariert wird.
Vielleicht findet ja man die Lösung in der nächsten Version der Wago GebäudeLib.


----------



## tomrey (7 Dezember 2016)

Hi, ich hatte das selbe Problem und habe alle FB_Stromstoss mit eigenen ersetzt. Das hat bei mir das Problem gelöst.
Ich habe auch eine Vielzahl von Schedulern, die sind unproblematisch.
ach so: 750-881


----------



## Hans_ (7 Dezember 2016)

Hallo, ich habe das nun so umgesetzt: 
FB_myStromstoss nutzt keine retain-Variablen mehr. Und plötzlich benutzt ich unter 1% des Retainspeichers.
Den  Eingang habe ich mit DEBOUNCE aus der OSCAT pauschal mit 50ms  entprellt. Hat der originale Fbstromstoss von WAGO überhaupt ein  Entprellen eingebaut?

Varianblen:

```
FUNCTION_BLOCK FB_myStromstoss

VAR_INPUT
    xTaster: BOOL;
    xZenAUS: BOOL;        (* ---> zentral AUS *)
    xZenEIN: BOOL;        (* ---> zentral EIN *)
END_VAR

VAR_OUTPUT
    xAktor: BOOL;            (* ---> Schaltausgang *)
END_VAR

VAR
    xTaster_OLD: BOOL:=FALSE;        (* ---> interner Merker *)
    xTaster_debounced:BOOL;
    myDEBOUNCER:DEBOUNCE;
END_VAR
```

Programm:

```
myDEBOUNCER (IN:=xTaster, TD:=T#50ms,PM:=FALSE);        (* ---> mit 50ms entprellt; DEBOUNCE aus OSCAT Building 100 *)
xTaster_debounced:=myDEBOUNCER.Q;

IF (xTaster_debounced AND NOT xTaster_OLD ) THEN    (* ---> Flankenerkennung: Wenn Taster gedrückt und im *)
                                                (* Zyklus zuvor war er noch nicht gedrückt, dann... *)

xAktor:=NOT xAktor;                        (* ---> Schaltausgang toggeln *)

END_IF;

xTaster_OLD:=xTaster_debounced;                        (* ---> Merker anpassen *)

IF xZenAUS THEN xAktor:=FALSE;            (* ---> zentral AN/AUS wird durchgereicht *)
END_IF

IF xZenEIN THEN xAktor:=TRUE    ;        (* ---> zentral AN/AUS wird durchgereicht *)
END_IF
```


----------



## oliver.tonn (7 Dezember 2016)

Hallo Hans,


Hans_ schrieb:


> Den  Eingang habe ich mit DEBOUNCE aus der OSCAT pauschal mit 50ms  entprellt. Hat der originale Fbstromstoss von WAGO überhaupt ein  Entprellen eingebaut?


ja, hat er (30ms).


----------

