УкраїнськаEnglishmRussian
Вхід/Новий
У темі немає нових постів

Управление включением параметра контроллера сбора данных


Автор Повідомлення
Повідомлення створено: 26. 02. 2016 [13:25]
sonder
Олександр Клюшин
Автор теми
Зареєстрован(а) с: 24.12.2009
Повідомлення: 47
Можно ли осуществить такую логику:
Включать параметр контроллера сбора данных(конкретно - ModBusRTU) только при активации какой-то страницы (из скрипта этой страницы). Другуми словами, чтобы данные собирались не всегда с какой-то периодичностью, а только если есть какая-то открытая страница, где эти данные нужны.
Из того, что нашел в документации - можно включать весь контроллер SYS.DAQ["Modul"]["Controller"].start(bool newSt = EVAL), но это не совсем удобно, потому что придется городить контроллеры с одинаковыми адресами. А вот чего-то аналогичного для параметра контроллера - не нашел.
Можно управлять конфигурационными полями параметров: cfgSet(string nm, ElTp val), но, насколько я понимаю, включение не является конфигурационным полем.
Повідомлення створено: 27. 02. 2016 [15:31]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3747
"sonder" wrote:

Включать параметр контроллера сбора данных(конкретно - ModBusRTU) только при активации какой-то страницы (из скрипта этой страницы). Другуми словами, чтобы данные собирались не всегда с какой-то периодичностью, а только если есть какая-то открытая страница, где эти данные нужны.

В целом можно использовать запрос к интерфейсу управления OpenSCADA cntrReq(). Однако в случае DAQ.ModBus смысла это не имеет, в виду того, что фрагменты запрашиваемых регистров не связаны прямо с параметрами.

Learn, learn and learn better than work, work and work.
Повідомлення створено: 25. 03. 2016 [14:08]
Godzilla
Арсен Закоян
Contributor
Зареєстрован(а) с: 12.02.2013
Повідомлення: 123
"sonder" wrote:

Из того, что нашел в документации - можно включать весь контроллер SYS.DAQ["Modul"]["Controller"].start(bool newSt = EVAL), но это не совсем удобно, потому что придется городить контроллеры с одинаковыми адресами. А вот чего-то аналогичного для параметра контроллера - не нашел.

А можно пример привести? Сейчас тоже пытаюсь сделать так чтоб нажатием кнопки в визуальной части опрос начинался.
Повідомлення створено: 25. 03. 2016 [14:26]
sonder
Олександр Клюшин
Автор теми
Зареєстрован(а) с: 24.12.2009
Повідомлення: 47
"Godzilla" wrote:

А можно пример привести?

Да, конечно. Вот как сделал я.
Создал четыре отдельных контроллера (вообще говоря - пять - но первый опрашивается всегда), на самом деле опрашивающих один и тот-же физический контроллер но с разным набором адресов данных.
Потом создал странички визуализации, отображающие данные с этих контроллеров. После этого создал скрипт javalikecalc, который считывает открытые страницы и если видит открытую страницу, на которой отображаются данные с одного из контроллеров - включает его. А если видит что страничка закрыта - выключает. Выглядит это так:
JAVASCRIPT
req1=SYS.XMLNode("get").setAttr("path","/sub_UI/mod_VCAEngine/%2fses%2fses");
SYS.cntrReq(req1);
Setp_on=0;
DWT_on=0;
Sche_on=0;
Result="";
if (req1.childSize()>0)
{
	for (i=0; i<req1.childSize(); i++)
	{
		if (req1.childGet(i).text().indexOf("prj1",0)>=0)
		{
			Result=Result+"There are fit open session "+req1.childGet(i).text()+"\n";
			req2=SYS.XMLNode("get").setAttr("path","sub_UI/mod_VCAEngine/ses_"+req1.childGet(i).text()+"/%2fobj%2fcfg%2fopenPg");
			SYS.cntrReq(req2);
			for(j=0; j<req2.childSize(); j++)
			{
				if (req2.childGet(j).text().indexOf(Setp_page,0)>=0)
				{
					Setp_on=1;
					Result=Result+"Detected opened page "+Setp_page+"\n";
				}
				if (req2.childGet(j).text().indexOf(DWT_page,0)>=0)
				{
					DWT_on=1;
					Result=Result+"Detected opened page "+DWT_page+"\n";
				}
				if (req2.childGet(j).text().indexOf(Sche_page,0)>=0)
				{
					Sche_on=1;
					Result=Result+"Detected opened page "+Sche_page+"\n";
				}
 
			}
			if ((Setp_on==0)&&(DWT_on==0)&&(Sche_on==0))
				Result=Result+"Not fit peges opened detected"+"\n";
		}
	}
}
else
	Result="No open sessions";
if (Setp_on)
{
	SYS.DAQ["ModBus"][Setp_contr].start(1);
	Result=Result+"Start "+Setp_contr+"\n";
}
else if (SYS.DAQ["ModBus"][Setp_contr].start())
{
	SYS.DAQ["ModBus"][Setp_contr].start(0);
	Result=Result+"Stop "+Setp_contr+"\n";
}
if (DWT_on)
{
	Result=Result+"Start "+DWT_Contr+"\n";
	SYS.DAQ["ModBus"][DWT_Contr].start(1);
}
else if (SYS.DAQ["ModBus"][DWT_Contr].start())
{
	SYS.DAQ["ModBus"][DWT_Contr].start(0);
	Result=Result+"Stop "+DWT_Contr+"\n";
}
if (Sche_on)
{
	SYS.DAQ["ModBus"][Sche_Contr].start(1);
	Result=Result+"Start "+Sche_Contr+"\n";
}
else if (SYS.DAQ["ModBus"][Sche_Contr].start())
{
	SYS.DAQ["ModBus"][Sche_Contr].start(0);
	Result=Result+"Stop "+Sche_Contr+"\n";
}




2080