УкраїнськаEnglishmRussian
Вход/Новый
В теме много сообщений

Кнопка FormEl и запись в регистр


Автор Сообщение
Сообщение создано: 30. 10. 2011 [22:28]
Bkmz
Ilya Sytyi
Создатель темы
Зарегистрирован(а) с: 27.07.2011
Сообщения: 11
Есть кнопка(FormEl) на мнемосхеме и регистр модбаса. Как нажатием кнопки записать значение в регистр? Понимаю, что вопрос банальный, ткните пожалуйста носом где читать, а если кто подробно объяснит так я совсем рад буду.
Сообщение создано: 31. 10. 2011 [06:14]
yozhik
Алексей Николаев
Зарегистрирован(а) с: 29.11.2010
Сообщения: 127
В обработчике сценария страницы создаешь типа такого:
JAVASCRIPT
//> Events process
ev_rez = "";
off = 0;
while(true)
{
	sval = event.parse(0,"\n",off);
 
	if( sval == "" ) break;
	else if( sval == "ws_BtPress:/ID_OF_THE_BUTTON" ) SYS.DAQ.JavaLikeCalc["lib_NAME_OF_THE_LIBRARY_IN_LOGICLEVEL_JAVALIKECALC"].NAME_OF_THE_FUCTION( PAR1, PAR2 );
	else ev_rez+=sval+"\n";
}
event=ev_rez;


далее создаешь в библиотеке NAME_OF_THE_LIBRARY_IN_LOGICLEVEL_JAVALIKECALC функцию по имениNAME_OF_THE_FUCTION примерно с таким текстом:
JAVASCRIPT
req = SYS.XMLNode("TCP");
req.setAttr("id","socketNAME").setAttr("reqTm",100).setAttr("node",1).setText(Special.FLibSYS.strEnc2Bin("42 1a 3e 00 01 02 00 01"));
SYS.Transport.Sockets.out_socketNAME.messIO(req,"ModBus");
test = Special.FLibSYS.strDec4Bin(req.text());

NAME - имя сокета. Параметры таймаута и другие естесственно ставишь свои. Вот как-то так.
Сообщение создано: 31. 10. 2011 [08:09]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"Bkmz" wrote:

Есть кнопка(FormEl) на мнемосхеме и регистр модбаса. Как нажатием кнопки записать значение в регистр? Понимаю, что вопрос банальный, ткните пожалуйста носом где читать, а если кто подробно объяснит так я совсем рад буду.

http://wiki.oscada.org/Doc/QuickStart

Learn, learn and learn better than work, work and work.
Сообщение создано: 09. 11. 2011 [08:39]
Bkmz
Ilya Sytyi
Создатель темы
Зарегистрирован(а) с: 27.07.2011
Сообщения: 11


Спасибо большое! Все получилось, вариант Алексея еще не опробовал.
Возник еще один вопрос: Можно ли с помощью функции sysCall() отключить скаду, пускатель, систему? Допустим sysCall("shutdown -h now");, но как быть с пускателем скады и собственно с правами суперпользователя. Подскажите пожалуйста, возможно я смотрю не в том направлении.
Сообщение создано: 09. 11. 2011 [09:34]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"Bkmz" wrote:

Возник еще один вопрос: Можно ли с помощью функции sysCall() отключить скаду, пускатель, систему? Допустим sysCall("shutdown -h now");, но как быть с пускателем скады и собственно с правами суперпользователя. Подскажите пожалуйста, возможно я смотрю не в том направлении.

Это ещё всё зачем?

Learn, learn and learn better than work, work and work.
Сообщение создано: 09. 11. 2011 [10:39]
Bkmz
Ilya Sytyi
Создатель темы
Зарегистрирован(а) с: 27.07.2011
Сообщения: 11
"roman" wrote:

Это ещё всё зачем?


Необходимо отключить машину, из скады, на которой собственно стоит сама скада.
Сообщение создано: 09. 11. 2011 [11:31]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"Bkmz" wrote:

Необходимо отключить машину, из скады, на которой собственно стоит сама скада.

Тогда используйте SYS.system("shutdown -h 0 &",true);
Описано здесь: http://wiki.oscada.org/Doc/OpisanieProgrammy#h920-6
Вопрос про права суперпользователя, если делать это от обычного, это не вопрос OpenSCADA, а вопрос операционной системы.
Например, настроить sudo для этого.

Learn, learn and learn better than work, work and work.
Сообщение создано: 10. 11. 2011 [13:22]
yozhik
Алексей Николаев
Зарегистрирован(а) с: 29.11.2010
Сообщения: 127
"Bkmz" wrote:

Спасибо большое! Все получилось, вариант Алексея еще не опробовал.

Этот вариант работает в общем случае и позволяет записать по протоколу модбас что угодно и куда угодно. Если же у вас этот регистр модбаса прописан в DAQ.Modbus, то конечно существуют и более простые наглядные решения.
Сообщение создано: 22. 01. 2012 [01:42]
Anti1800
Олег Астраханцев
Зарегистрирован(а) с: 18.12.2011
Сообщения: 25
А как кнопкой открыть другую страничку. Адрес кнопки "prj_owi/pg_1/wdg_FormEl11" Адрес странички, которую надо открыть " /prj_owi/pg_1/pg_Box1".
Пробовал так: (разумеется не заработало) =)
//> Events process
ev_rez = "";
off = 0;
while (true)
{
sval = event.parse (0, "\n",off);

if( sval == "") break;
else if( sval == "ws_BtPress:/prj_owi/pg_1/wdg_FormEl11") open: /prj_owi/pg_1/pg_Box1;
else ev_rez+=sval+"\n";
}
event=ev_rez;

Что не так задал? Подскажите пожалуйста.
Вложенный файл

Снимок.png (Тип файла: image/png, Размер: 96.04 килобайт) — 2014 загрузок
Снимок-1.png (Тип файла: image/png, Размер: 94.64 килобайт) — 2069 загрузок
Сообщение создано: 22. 01. 2012 [08:10]
Maxim
Maxim Lisenko
Contributor
Зарегистрирован(а) с: 18.08.2008
Сообщения: 141
Механизм описан здесь: http://wiki.oscada.org/Doc/VCAEngine?v=fdx#h668-7
А то, что вы пытаетесь делать, надо делать не в скрипте, а в поле "Обработка" Атрибутов виджета.



6801