Written on: 23. 10. 2012 [07:06]
|
IrmIngeneer
Константин \m/
Contributor Sponsor
Topic creator
registered since: 16.09.2010
Posts: 185
|
Есть две станции - st1 и st2. st1 собирает и архивирует данные, в st2 настроен DAQGate для отражения нужных параметров и реализован графический интерфейс, архивирования нет, так как запускается только тогда, когда надо пользователю. Нужно получить на st2 значения отраженных параметров на опреденное время. Функция атрибута:
"Функции объекта атрибута параметра контроллера (SYS.DAQ["Modul"]["Controller"]["Parameter"]["Attribute"]):
ElTp get( int tm = 0, int utm = 0, bool sys = false ) — запрос значения атрибута на время <tm:utm> и признаком системного доступа <sys>."
возвращает только текущее значение.
Как правильно получить значение отраженного атрибута на указанное время?
[This article was edited 1 times, at last 23.10.2012 at 07:08.]
|
Written on: 23. 10. 2012 [12:50]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"IrmIngeneer" wrote:
Есть две станции - st1 и st2. st1 собирает и архивирует данные, в st2 настроен DAQGate для отражения нужных параметров и реализован графический интерфейс, архивирования нет, так как запускается только тогда, когда надо пользователю. Нужно получить на st2 значения отраженных параметров на опреденное время. Функция атрибута:
Лучше тогда уже было сервер визуализации поднять на st1, а на st2 просто к нему подключаться, раз данных на st2 фактически нет.
"IrmIngeneer" wrote:
"Функции объекта атрибута параметра контроллера (SYS.DAQ["Modul"]["Controller"]["Parameter"]["Attribute"]):
ElTp get( int tm = 0, int utm = 0, bool sys = false ) — запрос значения атрибута на время <tm:utm> и признаком системного доступа <sys>."
возвращает только текущее значение.
Ну да. DAQ.DAQGate эту функцию не шлюзует.
"IrmIngeneer" wrote:
Как правильно получить значение отраженного атрибута на указанное время?
Проще и правильнее через сервер визуализации, но если очень хочеться получать данные из архива то используйте функцию сервисного запроса через интерфейс управления: string cntrReq(); http://wiki.oscada.org/Doc/OpisanieProgrammy#h920-6
Как-то так:
req = SYS.XMLNode("get").setAttr("path",PathToPrmAttrId+"/%2fserv%2fval").setAttr("tm",ValTime);
SYS.cntrReq(req,StationId);
attrVal = req.text();
attrTm = req.attr("tm");
Learn, learn and learn better than work, work and work.
|
Written on: 25. 10. 2012 [06:40]
|
IrmIngeneer
Константин \m/
Contributor Sponsor
Topic creator
registered since: 16.09.2010
Posts: 185
|
Насчет DAQGate понял, спасибо.
Данные из архива получать хочется, попробовал через интерфейс управления:
TT = Special.FLibMath.floor(Special.FLibSYS.tmTime()/900-1)*900;
req = SYS.XMLNode("get").setAttr("path","/sub_DAQ/mod_LogicLev/cntr_T/prm_Tair/%2fval%2fOut").setAttr("tm",TT);
SYS.cntrReq(req,"Main");
SYS.messDebug (req.text(),req.attr("tm"));
tm устанавливается с привязкой к 15-мин. интервалу.
В req.text опять-таки текущее значение :-(, хотя tm верный.
|
Written on: 25. 10. 2012 [09:01]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"IrmIngeneer" wrote:
TT = Special.FLibMath.floor(Special.FLibSYS.tmTime()/900-1)*900;
req = SYS.XMLNode("get").setAttr("path","/sub_DAQ/mod_LogicLev/cntr_T/prm_Tair/%2fval%2fOut").setAttr("tm",TT);
SYS.cntrReq(req,"Main");
SYS.messDebug (req.text(),req.attr("tm"));
В req.text опять-таки текущее значение :-(, хотя tm верный.
Запрос неверный, верный я вам записывал:
req = SYS.XMLNode("get").setAttr("path","/DAQ/LogicLev/T/Tair/Out/%2fserv%2fval").setAttr("tm",TT);
Learn, learn and learn better than work, work and work.
|
Written on: 25. 10. 2012 [11:54]
|
IrmIngeneer
Константин \m/
Contributor Sponsor
Topic creator
registered since: 16.09.2010
Posts: 185
|
Спасибо, все получилось как надо, запрос формирую вот так:
req = SYS.XMLNode("get").setAttr("path","/DAQ/LogicLev/T/Tair/Out/%2fserv%2fval").setAttr("tm",TT.toString() + "000000");
|