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

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

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

9 месяцев 23 дня назад

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

Налетов Константин 9 месяцев 23 дня назад

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

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

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

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

Налетов Константин 9 месяцев 23 дня назад

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

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

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

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

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

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

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

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

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

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

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

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

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

0 ответов

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

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

ПОКАЗАН

719 раз

ЗАДАН

9 месяцев 23 дня назад

ПРОДУКТЫ

Орион Про

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