партнерский раздел
ФорумЭксплуатацияГлобальная переменная для сценариев

Эксплуатация » Глобальная переменная для сценариев

Добрый день.
Возникла задачка, ответ на которую пока не могу найти.
Дано: ОрионПро 1.20 (минимальный набор модулей и все они локальны), к нему подключена аппаратура, усё настроено и работает.
Требуется: При потере контакта с одним или несколькими приборами выполнить сценарий (один для всех), но его выполнение должно быть только однократно за некоторый промежуток времени.
Проблема: если проиходит потеря одного прибора, то проблем нет, а если сразу теряется несколько, то сценарий выполнится для каждого прибора, что не соответствует требованиям задачи.
Вопрос: как организовать запуск сценария однократно в определенный промежуток времени, но для множества приборов, потеря контакта с которыми может происходить в случайном порядке?

11 месяцев 15 дней назад

avatar
Была бы возможность объявления глобальной переменной, то в неё можно было бы поместить время первого выполнения сценария, а при последующих запусках проверять это значение, и если истек период ожидания, то выполнять сценарий снова.

Налетов Константин 11 месяцев 15 дней назад

такой глобальной переменной может выступить свободное реле с программой "Включить на время". Т.е. по событию Потери запускается сценарий, который первым делом проверяет состояние реле, если Выключено, тогда Включаем на время ожидания и запускаем уже нужный сценарий.

Вот к необходимости виртуальных ШС уже добавились и виртуальные реле))

Волков Андрей 11 месяцев 15 дней назад

Андрей, спасибо за совет, видимо другого варианта просто нет. Попробую Ваш вариант.

Налетов Константин 11 месяцев 15 дней назад

из других вариантов это использовать запись в файл даты-времени, с последующим считыванием и сравнением с текущими значениями, но реализация такого способа меня немного смущает - будет ли легко сконвертировать время для последующего сравнения? получится ли вообще сделать временные промежутки? никогда ещё не пробовал так делать. А сценарий с реле получается достаточно простым - и не надо будет сравнивать временные промежутки.

Волков Андрей 11 месяцев 16 дней назад

Время конвертируется, сравнивается, это без проблем) Проблема только с промежутком, хотя и это думаю можно решить, наверное проще твой вариант с реле. Проверять сначала в каком оно положении. Но сценарий все равно будет выполняться, в журнале будет строка о том что был запуск сценария, а вот сообщение о том что есть потеря будет появляться в зависимости от положения реле.

upd:
Можно еще попробовать такой вариант, при потере связи, запускать шаблонный сценарий на включения реле, на время. Второй шаблонный сценарий с выдачей сообщения оператору запускать при включении этого реле. АРМ включает реле при поступлении команды, отключается оно через указанное время, если реле включилось, значит нужный промежуток времени прошел, значит выдать сообщение о потере.
Возможно будет работать так, что с последней потери связи должно пройти не менее времени на которое включается реле, так как сценарий будет запускаться столько раз, сколько было потерь связи и таймер включения будет сбрасываться, а может и не будет, отработает единожды, надо проверять, пробовать.

У прибора, чье реле используется, надо поставить галку в uprog "сообщать об изменении состояния".

Пример по времени, если интересно:

СЦЕНАРИЙ
Переменные
Перем Время1;
Перем Часы1;
НАЧАЛОСЦЕНАРИЯ
Время1 =  ТекущееВремяДатаЧисло();
Сообщить(Время1,0);
Часы1 = ПолучитьЧасы(Время1);
Сообщить(Часы1,0);
Если Часы1 > 21 тогда
Сообщить("Уже Поздно! Посмотри на время: " + ТекущееВремя(),0);
Иначе
Сообщить ("Время: " + ТекущееВремя(),0);
Конецесли;
КОНЕЦСЦЕНАРИЯ

Тремасов Константин Александрович 11 месяцев 16 дней назад

не спорю, просто способ со временем мне показался немного муторным: из файла считай, сконвертируй, сравни, файл перезапиши. Я бы им воспользовался только при отсутствии свободного реле.

Волков Андрей 11 месяцев 15 дней назад

Не немного, а намного муторней.

Тремасов Константин Александрович 11 месяцев 15 дней назад

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

0 ответов

Добавить ответ

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

ПОКАЗАН

796 раз

ЗАДАН

11 месяцев 15 дней назад

ПРОДУКТЫ

Орион Про

По каждому вопросу/ответу можно добавлять комментарии. Комментарии предназначены для уточнения вопроса/ответа.