Jak zabránit ztrátě dat z RETAIN proměnných?
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