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.