Страница 1 из 1

Горячее резервирование

СообщениеДобавлено: Ср ноя 07, 2007 7:13 pm
Igor V. Zhdanov
При переключении на резервный контроллер выполняется следующий скрипт:
IOReinitialize();
IOSetAccessName("PLC_02", "", "OPCLINK","PLC_01");
PLC_01 - рабочий, PLC_02 - резервный.
1. Правильно, наверно, PLC_01 поменять местами с PLC_02.
2. Функцию IOReinitialize() нужно выполнять не после замены?

СообщениеДобавлено: Пн ноя 12, 2007 5:16 pm
Admin
Уважаемый Игорь, не мешайте все в одну кучу.
IOReinitialize() обновляет статус тэгов ввода-вывода для всех или для данного имени доступа.
С помощью функций IOSetItem () и IOSetAccessName ("текущее имя доступа, подлежащее переадресации", "присваевоемое имя компьютера", "присваемое имя приложения", "присваемое имя топика") Вы можете переключаться с помощью удаленных ссылок между приложениями - поставщиками данных и .
Поле .Referеnce позволяет узнать текущее имя доступа, на которое ссылается внешний тэг.

СообщениеДобавлено: Вт ноя 20, 2007 1:00 pm
Igor V. Zhdanov
После экспериментов разобрался со скриптами. Осталась одна проблема - виснет ОРС сервер (Nautsilus IsaGraf). В связи с этим возникает 2 вопроса:
1. Можно ли отключить автоматический запуск ОРС при запуске WindowViewer;
2. Возможна ли организация цикла и временная задержка скриптовыми средствами InTouch.

СообщениеДобавлено: Вт ноя 20, 2007 2:13 pm
Admin
1. Автоматический запуск - Вы наверное имеете в виду сообщение при запуске WindowViewer Initializaing I/O Start application "@Name" ?
По всей видимости, это дочерний процесс процесса view.exe
Отключить можно, при желании , но только зачем.
2. Циклы в Интаче. (Loops) Вы можете создать Window Script c Condition Type While Showing и указать период исполнения скрипта в мсек. Вы также можете использовать оператор FOR
Пример:
Код: Выделить всё
DIM Counter AS INTEGER;
FOR Counter = 1 TO 100
IndirectInteger.Name = "Tag" + Text(Counter, "000");
IndirectInteger.Value = 0;
NEXT;

При этом есть две особенности:
• Для выхода из цикла используйте EXIT FOR.
• Для циклов есть ограничение длительности. Поле LoopTimeout в файле InTouch.ini (по умолчанию 5 сек). При превышении времени исполнения цикла этого значения происходит принудительный выход из цикла и выдается сообщение об этом.
• По поводу задержки - специальной функции нет, но есть системная переменная $Time которая показывает время в миллисекундах, прошедшее с полночи текущего дня.
3. Возможно что причина зависания OPC сервера в чем то ином. От себя добавлю, что такие особенности скриптов Интача как порядок исполнения функций, разрешение конфликтных ситуаций и др. нигде не описаны Поэтому не рекомендуется реализовывать управляющую логику средствами QuickScript

СообщениеДобавлено: Ср ноя 21, 2007 11:58 pm
Igor V. Zhdanov
Нет, не сообщение. После запуска WindowViewer стартует IsaGraf OPC Server, стороннее приложение, прописанное в ОРС-link. Уже запущенное, работает стабильно, но может зависнуть при запуске и реинициализации. Поэтому требуется скрипт, запускающийся на значение поля качества сигнала тега с временной задержкой, требующейся для инициализации В\В, и закрывающий ОРС-сервер при превышении данного времени. Хотел обойтись средствами InTouch, не трогая Windows.

СообщениеДобавлено: Чт ноя 22, 2007 4:08 pm
Admin
Попробуйте для начала вот такой скрипт - он шаблонный, но работает. ` - авторский комментарий
Код: Выделить всё
IF ( ( Tag.Quality & 192  <> 1)  `плохой статус у Tag
AND
( InfoAppActive(InfoAppTitle("ISAOPC"))==1 ) ) `сервер запущен
 THEN
WWControl (InfoAppTitle("ISAOPC"),"Close");
StartApp "ISAOPC"; `рестартуем сервер
ActivateApp InfoAppTitle("VIEW"); `возвращаем управление
ENDIF;


Кроме того, широкие возможности представляет функции
SENDKEYS "", посылающая команду активному приложению;
WWEXECUTE ("app","topic","command") позволяющая запускать макросы Excel.