This is topic Как зафиксировать время появления сигнала в программе ST in forum Языки программирования в TRACE MODE 6 / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.
Подскажите, пожалуйста, каким образом в теле программы ST можно зафиксировать время появления сигнала, чтобы через некоторое время этот сигнал можно было снять.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Через глобальную переменную типа Date_AND_Time.
Posted by hamchik (Участник № / Member № 1550) on :
А можно поконкретнее?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Что именно - присвоить переменной текущее время? Например так:
if signal>0 then S_TIME=CUR_TIME; end_if;
где: signal - аргумент сигнала, S_TIME - глобальная переменная типа DATE_AND_TIME, CUR_TIME - атрибут "Время изменения" сигнала.
Posted by hamchik (Участник № / Member № 1550) on :
Спасибо за подсказку. Она повела мысли в нужное направление, и появился новый вопрос: КАКИЕ ОПЕРАЦИИ МОЖНО ПРОИЗВОДИТЬ С ПЕРЕМЕННЫМИ ТИПА TIME? МОЖНО ЛИ ВЫЧИТАТЬ И СРАВНИВАТЬ ИХ?
Posted by hamchik (Участник № / Member № 1550) on :
Хочу уточнить вопрос: Можно ли из реального значения переменной типа TIME вычесть значение глобальной переменной типа DATE_AND_TIME, а затем результат сравнить с константой типа t# (=5s)?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Да - над данным типом данных наравне с другими можно осуществлять арифметические операции и операции сравнения.
Posted by Avgorr (Участник № / Member № 2607) on :
Здравствуйте! А не подскажите ли, как можно сделать вызов из основной программы ST функцию FBD через определённый интервал времени (в секундах), причём чтобы этот период можно было изменять? Спасибо.
Posted by Майборода Алексей (Участник № / Member № 1701) on :
Можно, например, получать текущие секунды (есть соответствующий FBD блок) потом просот писать так: if секунда mod интервал = 0 then Выполнить_ваш_FBD_блок
например if секунда mod 5 = 0 then ...
будет выполняться каждые 5 секунд, на 0ой, 5ой, 10ой и т.д. секунде
Posted by Avgorr (Участник № / Member № 2607) on :
А если необходимо через 40 секунд? Я предполагаю, что можно как-то запомнить время, затем отнять из текущего времени это запомненное и сравнить с уставкой, но как это сделать?
Posted by Майборода Алексей (Участник № / Member № 1701) on :
Вот примерно так. GetSec это функция, FBD блок "Астрономическое время" возвращает секунду. next_time - глобальная переменная. flga - чтобы проиницыализировать next_time. if flag then next_time = GetSec()+40; if next_time > 60 then next_time = next_time-60; end_if; flag = false; end_if; if GetSec() == next_time then next_time = next_time+40; if next_time > 60 then next_time = next_time-60; end_if; //вот тут вызов того что надо end_if;
Posted by Avgorr (Участник № / Member № 2607) on :
Спасибо. Попробую так.
Posted by arido (Участник № / Member № 2961) on :
Подскажите, пожалуйста, как режить такую задачу: при наступлении определенного события (параметр1=1) необходимо запомнить этот момент времени. Затем, при наступлении следующего события (параметр2=1)- запомнить и этот момент времени. В итоге, определить разницу. Например, определить время простоя оборудования (параметр1 - остановка оборудования, параметр2 - пуск оборудования). Параметр1 и параметр2 результат работы программы.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Вам необходимо связать какой-нибудь аргумент (например TIME) программы со значением полученным с помощью системной переменной @t_Set_Date типа Input. В программе при наступлении этого события просто преравнять другой аргумент к фргументу TIME.
P.S. Тема, созданная Вами ранее, с тем же самым вопросом была удалена.
Posted by arido (Участник № / Member № 2961) on :
Решила! Немного другим способом.
Posted by Вадик (Участник № / Member № 2963) on :
День добрый. Такой вопрос.... Вобщем выполнение программы должно начинатся по наступленю определенного события (изменение значение аргумента), каким образом это можно реализовать?
Posted by Вадик (Участник № / Member № 2963) on :
Народ а ответ то сколько ждать????
Posted by AdAstrA Technical Support Ukraine (Участник № / Member № 2198) on :
Можно сделать следующим образом: в ИС отключить канал вызова программы (вкладка Флаги флаг Выключить). При наступлении определенного события в реальном времени послать в 3-й атрибут канала вызова программы значение 0 – программа будет отрабатываться с заданным циклом.
[ 09.07.2008, 13:03: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
Posted by Вадик (Участник № / Member № 2963) on :
Уважаемая поддержка, вопросы такого плана. Получается что во время начала каждого пересчета программа запускается и по его окончанию завершается? правельно ли я понял? И еще ....Если я исользую глобальную переменную то после завершения програмы результат хранящийся в этой переменной останется сохраненным до следующего вызова програмы. Я правельно понял написаное в документации?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :