Автор |
Сообщение |
Сообщение создано: 30. 10. 2011 [22:28]
|
Bkmz
Ilya Sytyi
Создатель темы
Зарегистрирован(а) с: 27.07.2011
Сообщения: 11
|
Есть кнопка(FormEl) на мнемосхеме и регистр модбаса. Как нажатием кнопки записать значение в регистр? Понимаю, что вопрос банальный, ткните пожалуйста носом где читать, а если кто подробно объяснит так я совсем рад буду.
|
Сообщение создано: 31. 10. 2011 [06:14]
|
yozhik
Алексей Николаев
Зарегистрирован(а) с: 29.11.2010
Сообщения: 127
|
В обработчике сценария страницы создаешь типа такого:
//> 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 примерно с таким текстом:
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
Сообщения: 3750
|
"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
Сообщения: 3750
|
"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
Сообщения: 3750
|
"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 килобайт) — 2148 загрузок
Снимок-1.png (Тип файла: image/png, Размер: 94.64 килобайт) — 2188 загрузок
|
Сообщение создано: 22. 01. 2012 [08:10]
|
Maxim
Maxim Lisenko
Contributor
Зарегистрирован(а) с: 18.08.2008
Сообщения: 141
|
Механизм описан здесь: http://wiki.oscada.org/Doc/VCAEngine?v=fdx#h668-7
А то, что вы пытаетесь делать, надо делать не в скрипте, а в поле "Обработка" Атрибутов виджета.
|