This is topic вопрос по работе с временными интервалами. in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/000955.html

Posted by Nodem (Участник № / Member № 5070) on :
 
Необходимо сделать так, что бы при указаном астрономического времени, запускалась программа выполняющая то или иное действие втечение заданного интервала, интервалы задаются на экране.
Собственно запуск программы по времени ПК я сделал, а вот работа с интервалами вызывает трудности.

"то или иное действие" - на самом деле - отсылка определенного числа в Siemens_PPI_1_VALUE, Siemens_PPI_2_VALUE и т.д. и после того, как, например, еденица отправилась, через указанный интервал нужно обратно вернуть значение в 0.


Может кто подскажет, как на ST написать такое?
Или примеры такой программы есть?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В качестве варианта можно предложить следующее.
1. В программе ввести UDINT-аргумент, связанный с каналом TIME, получающим текущее время ОС от системной переменной @t_Set_Date_INPUT с ПАРАМЕТР=0.
2. Для каждой управляемой переменной типа Siemens_PPI_1_VALUE ввести глобальную переменную, которая должна хранить момент времени, когда в управляемую переменную было передано соответствующее значение.
3. Сопоставляя текущее время со значением глобальной переменной, можно по заданному значению интервала (в секундах) определить, когда этой управляемой переменной должно быть возвращено значение 0.
 
Posted by Nodem (Участник № / Member № 5070) on :
 
Если так сделать, то получится, так: работает программа, оператор вводит интервал и сразу начинается отсчет, спустя некоторое время (соотвествующее введенному интервалу) значение сбрасывается в ноль. Так?

Я не правильно немного описал задачу, правильнее наверное будет так: запускаем профайлер, задаем время включения программы, в заданное время она включается(это я знаю как сделать).
Интервалы задаются сразу, вместе с временем включения. тоесть, как минимум нужно два поля, в одном задается время задержки, при котором 0 (отсчет от запуска программы), после окончания этого времени, сразу передается 1 до момента, пока заданное, во втором поле, время не истечет.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Т.к. в Вашем случае надо формировать не 1, а 2 фазы управления, надо добавить глобальные переменные, которые будут запоминать индексы файз управления. По этим индексам следует выбирать для сравнения константу, задающую продолжительность фазы. В конце первой фазы надо обновить значений глобальной переменной, запоминающей время начала фазы.

У нас нет возможности писать программы для пользователей.
 
Posted by Nodem (Участник № / Member № 5070) on :
 
quote:
надо добавить глобальные переменные, которые будут запоминать индексы фаз управления
поясните пожалуйста, как это сделать?

quote:

У нас нет возможности писать программы для пользователей.

я понимаю это.
просто может у вас есть проект для примера?
В любом случае спасибо за ответ.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Готового примера нет.
 
Posted by Nodem (Участник № / Member № 5070) on :
 
и тем не менее спасибо, за то что на мысль натолкнули [Улыбка / Smile] Уже придумал как сделать.
 
Posted by Nodem (Участник № / Member № 5070) on :
 
Здравствуйте еще раз.
Подскажите пожалуйста, как задать текущее значение времени в канал TIME.
До этого я делал несколько неправильно, отсылал из программы FBD с блоком "Астрономическое время" значение с секундами или минутами в каналы float.

Сейчас в настройках канала TIME я выставил Формат представления Число секунд с 01.01.70

Потому что планирую использовать примерно так:
(кстати по кусочку программы тоже пара вопросов)
code:
PROGRAM
VAR_INPUT start_R : REAL; END_VAR
VAR_OUTPUT Siemens_PPI_1_VALUE : REAL; END_VAR
VAR_INPUT time_1_R : REAL; END_VAR
VAR_INPUT time_2_R : REAL; END_VAR
VAR_INPUT action_1_R : REAL; END_VAR
VAR_INPUT action_2_R : REAL; END_VAR
VAR_INPUT TIME_25_R : REAL; END_VAR
VAR L1 : REAL; END_VAR
VAR L2 : REAL; END_VAR

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;

и правильно ли делать так?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
У нас нет ресурсной возможности работать с кодами программ пользователей.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2