Jak zabránit ztrátě dat z RETAIN proměnných?

(1/2) > >>

Jaroslav Antoš:
,
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...

Milan Bydžovský:
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.

Slavomír Skopalík:
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.

Citace: 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.

Milan Bydžovský:
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.

Slavomír Skopalík:
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


Citace: 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.

Navigace

[0] Index zpráv

[#] Další strana