Тема / Topic: вопрос по работе с временными интервалами.
Nodem
Junior Member / Новичок
Участник № / Member № 5070
отправлено / posted
Необходимо сделать так, что бы при указаном астрономического времени, запускалась программа выполняющая то или иное действие втечение заданного интервала, интервалы задаются на экране. Собственно запуск программы по времени ПК я сделал, а вот работа с интервалами вызывает трудности.
"то или иное действие" - на самом деле - отсылка определенного числа в Siemens_PPI_1_VALUE, Siemens_PPI_2_VALUE и т.д. и после того, как, например, еденица отправилась, через указанный интервал нужно обратно вернуть значение в 0.
отправлено / posted
В качестве варианта можно предложить следующее. 1. В программе ввести UDINT-аргумент, связанный с каналом TIME, получающим текущее время ОС от системной переменной @t_Set_Date_INPUT с ПАРАМЕТР=0. 2. Для каждой управляемой переменной типа Siemens_PPI_1_VALUE ввести глобальную переменную, которая должна хранить момент времени, когда в управляемую переменную было передано соответствующее значение. 3. Сопоставляя текущее время со значением глобальной переменной, можно по заданному значению интервала (в секундах) определить, когда этой управляемой переменной должно быть возвращено значение 0.
Сообщения / Posts 17322 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Nodem
Junior Member / Новичок
Участник № / Member № 5070
отправлено / posted
Если так сделать, то получится, так: работает программа, оператор вводит интервал и сразу начинается отсчет, спустя некоторое время (соотвествующее введенному интервалу) значение сбрасывается в ноль. Так?
Я не правильно немного описал задачу, правильнее наверное будет так: запускаем профайлер, задаем время включения программы, в заданное время она включается(это я знаю как сделать). Интервалы задаются сразу, вместе с временем включения. тоесть, как минимум нужно два поля, в одном задается время задержки, при котором 0 (отсчет от запуска программы), после окончания этого времени, сразу передается 1 до момента, пока заданное, во втором поле, время не истечет.
Сообщения / Posts 11 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
Т.к. в Вашем случае надо формировать не 1, а 2 фазы управления, надо добавить глобальные переменные, которые будут запоминать индексы файз управления. По этим индексам следует выбирать для сравнения константу, задающую продолжительность фазы. В конце первой фазы надо обновить значений глобальной переменной, запоминающей время начала фазы.
Nodem
Junior Member / Новичок
Участник № / Member № 5070
отправлено / posted
quote:надо добавить глобальные переменные, которые будут запоминать индексы фаз управления
поясните пожалуйста, как это сделать?
quote: У нас нет возможности писать программы для пользователей.
я понимаю это. просто может у вас есть проект для примера? В любом случае спасибо за ответ.
Сообщения / Posts 11 | Из / From: Russia
| IP / IP: IP адрес / IP address |
Nodem
Junior Member / Новичок
Участник № / Member № 5070
отправлено / posted
и тем не менее спасибо, за то что на мысль натолкнули Уже придумал как сделать.
Сообщения / Posts 11 | Из / From: Russia
| IP / IP: IP адрес / IP address |
Nodem
Junior Member / Новичок
Участник № / Member № 5070
отправлено / posted
Здравствуйте еще раз. Подскажите пожалуйста, как задать текущее значение времени в канал TIME. До этого я делал несколько неправильно, отсылал из программы FBD с блоком "Астрономическое время" значение с секундами или минутами в каналы float.
Сейчас в настройках канала TIME я выставил Формат представления Число секунд с 01.01.70
Потому что планирую использовать примерно так: (кстати по кусочку программы тоже пара вопросов)
if 1 == start_R then //если кнопка нажата (в каннал послана еденица) то time_start := TIME_25_R ; //в time_start записывается текущее время, и вот здесь вопрос, нужно что бы записался момент времени нажатия, но ведь 1 в start_R не сбрасывается и получается будет записываться время постоянно в эту переменную. L1 := time_start + time_1_R; if L1 > TIME_25_R then Siemens_PPI_1_VALUE := action_1_R ; if L1 == TIME_25_R then L2 := L1 + time_2_R; end_if; end_if;
if L2 > TIME_25_R then Siemens_PPI_1_VALUE := action_2_R ; elsif L2 == TIME_25_R then L3 := L2 + time_3_R; end_if; end_if;