Diskuse Elektrika.cz

HYBRIDNÍ zóna => Technická podpora výrobce TECO Kolín radí odborníkům => Téma založeno: Jaroslav Antoš 12.12.2013, 12:35



Název: Jak zabránit ztrátě dat z RETAIN proměnných?
Přispěvatel: Jaroslav Antoš 12.12.2013, 12:35
,
při aktualizaci SW či přidání další funkcionality ve Foxtrotu a následném teplém startu se mi stává, že se v RETAIN proměnných objeví nesmysly. Online změny standardně vypnuty. Studený restart by zase vše vyresetoval a vše bych zase složitě nastavoval. Mohu se zeptat, jak to řešíte ostatní?. Proměnné jsou často komplexní typy, takže, jednoduché CSV zálohování by to asi neřešilo...


Název: Re: Jak zabránit ztrátě dat z RETAIN proměnných?
Přispěvatel: Milan Bydžovský 12.12.2013, 14:05
Pokud se nepoužívají online změny je jediná možnost nové proměnné přidávat na konec RETAIN zóny, aby byly zachovány adresy již existujicích proměnných.  Překladač přiřazuje paměť lineárně, takže to, co je poslední v textu je na konci zóny (výjimkou jsou proměnné s pevně přidělenou adresou).

Pokud je třeba udělat změnu ve strukturách nebo proměnných, které nelze umístit na konec zóny nebo vypustit existující proměnné, nezbývá než před započetím úprav online změny zapnout.


Název: Re: Jak zabránit ztrátě dat z RETAIN proměnných?
Přispěvatel: Slavomír Skopalík 13.12.2013, 17:10
Dalsi moznosti by melo byt pouziti DataBoxu.
Na konci scanu dulezita data vzdy ulozit do DataBaxu a pri startu PLC je nacist.

Ale posledne mi padlo PLC do stopu a pak jsem se k tomu nedostal, tak nevim, jestli to neni slepa ulicka.

Pokud se nepoužívají online změny je jediná možnost nové proměnné přidávat na konec RETAIN zóny, aby byly zachovány adresy již existujicích proměnných.  Překladač přiřazuje paměť lineárně, takže to, co je poslední v textu je na konci zóny (výjimkou jsou proměnné s pevně přidělenou adresou).

Pokud je třeba udělat změnu ve strukturách nebo proměnných, které nelze umístit na konec zóny nebo vypustit existující proměnné, nezbývá než před započetím úprav online změny zapnout.


Název: Re: Jak zabránit ztrátě dat z RETAIN proměnných?
Přispěvatel: Milan Bydžovský 13.12.2013, 21:11
Uložení do databoxu má stejnou slabinu jako samotné RETAIN proměnné a to, že je třeba neměnit strukturu a umístění zálohovaných proměnných.


Název: Re: Jak zabránit ztrátě dat z RETAIN proměnných?
Přispěvatel: Slavomír Skopalík 16.12.2013, 15:54
Toho jsem si vedom, nicmene ulozene do databoxu ma clovek vice pod kontrolou.
Dalsi moznosti je key, value list jak je implementovan v DataBoxu.
Nicmene jsem zatim nevyresil problem, proc funkce DataBox pada.
Az to vyresim, tak se tim vyresi i problem s retain.


Prikladam ukazku kodu:
function WriteToDBX_Wlr eal:bool
VAR_INPUT
  Name  : STRING [20];
  Value : LREAL;
END_VAR
VAR_TEMP
  buf:Tbuffer;
  srchname:string;
  es:string;
  done:bool;
END_VAR
buf.name:=Name;
Memcpy(length := sizeof(Value),  source :=void(Value) ,  dest :=void(buf.params));
srchname:=Name;
(*
DataBox(
  nxt := false ,
  prv := false,
  ins :=false ,
  del :=false ,
  undo := false,
  clr := false,
  Dbx_Adr := 0,
  buffer := buf,
  srchName := srchname,
  errStr :=es,
  done => done
  );
*)
WriteToDBX_Wlr eal:=done;
END_FUNCTION

PROGRAM WriteToDBX
(*Store important persistent data in DaTaBox (counters, ...)
*)
  VAR_INPUT
  END_VAR
  VAR_IN_OUT
  END_VAR
  VAR
  END_VAR
WriteToDBX_Wlr eal('E_Comsuption_V T',R115.ElektricityComsuption_VT);
WriteToDBX_Wlr eal('E_Comsuption_N T',R115.ElektricityComsuption_VT);

END_PROGRAM


Uložení do databoxu má stejnou slabinu jako samotné RETAIN proměnné a to, že je třeba neměnit strukturu a umístění zálohovaných proměnných.


Název: Re: Jak zabránit ztrátě dat z RETAIN proměnných?
Přispěvatel: Postránecký Petr 06.01.2014, 11:34
A nebylo by lepší vytvořit nový druh proměnné RETAIN_SAVE, která se ukládá na SD kartu? Se zvětšující se kapacitou karty mi to přijde jako vhodné řešení, i když jsem si vědom nebezpeční počtu zápisů a tím i životnosti karet. Každý by si vyhodnotil rizika a přínos sám.


Název: Re: Jak zabránit ztrátě dat z RETAIN proměnných?
Přispěvatel: Tomáš Šikýř 01.02.2014, 13:40
Zatím mi obvykle nezbyde nic jiného, než před změnou retain proměnných aktuální nastavení opsat do inicializací stávajících retain proměnných po startu. Nějaký čas to zabere, ale lepší než nic. Po studeném restartu vše běží jako do teď.