From OpenSCADAWiki
Jump to: navigation, search

Q: Як я можу зберегти-відновити модифіковані дані на логічному рівні?
Re: Дійсно, інколи може знадобитися збереження та потім відновлення, переважно при перезапуску, деяких модифікованих динамічних даних на кшталт лічильників пробігу обладнання. В цілому, обробку такого роду джерел даних та обладнання треба здійснювати на логічному рівні підсистеми "Збір даних", а реалізувати її можна багатьма способами, що передбачають збереження даних на деякому сховищі та подальше їх відновлення, однак більш відомі способи це:

  • Періодичне, або при завершені, збереження контексту параметрів шаблону за допомогою запиту користувацького API OpenSCADA через cntrReq(), де "force" для примусового збереження немодифікованих параметрів:
SYS.cntrReq(SYS.XMLNode("save").setAttr("path",this.nodePath()+"/%2fobj").setAttr("force","1"));
  • Якщо атрибут шаблону з лічильником архівується, тоді при старті параметру можете отримати останнє значення з цього архіву, наприклад, так:
if(f_start)    prevArchRestore = false;
if(!prevArchRestore && (archEnd=this.cntr.arch().end("FSArch.1s"))) {
    SYS.messInfo("testArch", "val="+this.cntr.arch().getVal(archEnd)+"; "
               "val1="+this.cntr.arch().getVal(archEnd,false,"FSArch.1s")+"; "
               "val2="+this.cntr.get(archEnd/1000000,archEnd%1000000));
    cntr = this.cntr.arch().getVal(archEnd);
    prevArchRestore = true;
}
  • Створення спеціальної таблиці БД та запис/читання цих даних прямо у цю таблицю за посередництвом SQL-запитів через SQLReq().