'Inteligenty' dom ze sterownikiem PLC

 Language:
Szukanie zaawansowane  

Aktualności:

Powrót do strony głównej: www.edom-plc.pl

Autor Wątek: RETAIN DATA  (Przeczytany 2626 razy)

tasior

  • Newbie
  • *
  • Wiadomości: 21
    • Zobacz profil
RETAIN DATA
« dnia: Lutego 20, 2019, 09:13:21 am »

Czy istnieje możliwość podejrzenia w jakiś magiczny sposób jakie zmienne są zapisywane w pamięci RETAIN?

W moim programie zapisywałem wszystkie zmienne konfiguracyjne (do świateł, rolet itp) jako VAR_GLOBAL PERSISTENT RETAIN, żeby nie tracić ich po wyłączeniu zasilania. Niestety 16k pamięci się skończyło. Przebudowuję więc program i wszystkie ww. zmienne będę zapisywał do plików xml i w razie potrzeby z nich odtwarzał. Po wyrzuceniu wszystkich zmiennych z bloku VAR_GLOBAL PERSISTENT RETAIN, po kompilacji programu widzę, że nadal jest używane ponad 70% pamięci RETAIN.

Zastanawiam się więc co tam jest. Wiem, że czasami gotowe funkcje z różnych bibliotek też przechowują swoje dane w ten sposób. Pytanie czy z pozomu Codesys da się to jakoś sprawdzić co jest tam zapisywane?
Zapisane

admin

  • Administrator
  • Sr. Member
  • *****
  • Wiadomości: 313
    • Zobacz profil
Odp: RETAIN DATA
« Odpowiedź #1 dnia: Lutego 20, 2019, 12:44:14 pm »

Cześć,

zajrzyj do pliku persist.dat w katalogu plc.  Nie wiem, czy to wszystko, ale można tam znaleźć nazwy zmiennych przechowywanych w pamięci sterownika.

Jednym ze sposobów ograniczenia danych przechowywanych w pamięci RETAIN jest rozdzielenie samego bloku funkcyjnego od danych.  Tak np. działają bloki schedulerów WAGO - blok deklarujesz w normalnej części VAR, a jedynie obiekt z danymi jest w VAR RETAIN i linkujesz go przy deklaracji bloku funkcyjnego.

Pozdrawiam
Zapisane

tasior

  • Newbie
  • *
  • Wiadomości: 21
    • Zobacz profil
Odp: RETAIN DATA
« Odpowiedź #2 dnia: Lutego 22, 2019, 02:33:00 pm »

Cześć,

Dzięki za wskazówkę. Faktycznie w pliku persist.dat były wszystkie zmienne, które sam zadeklarowałem jako PERSIST. Po ich przeniesieniu plik zniknął. Niestety nadal miałem zajęte ponad 70% pamięci RETAIN. Szukałem więc dalej i znalazłem - do sterowania oświetleniem napisałem kiedyś własną fukcję ale zawierała ona w sobie bloczek z WAGO: Fb_LatchingRelay. Faktycznie w dokumentacji napisali, że wykorzystuje on zmienne RETAIN.
Zamiewniłem więc Fb_LatchingRelay na FF_JKE (z oscat) i teraz jest "czysto".
Zapisane