В конфигураторе задачь есть
Screen Shot 2013-12-03 at 3.52.52 PM.png
Присоединяюсь к вопросу.
Где же всё таки взять сигнал о старте контроллера?
Задача при старте ПЛК304 считать время из часов реального времени и запустить с инициализацией модуль RTC.
А так же как поймать стоп? если я не ошибаюсь, ПЛК серии 150 после пропадания питания ещё продолжают молотить программу какое то время.
А... понял. Т.е. flag это своя bool переменная, работает как событие. Хитро.
Подскажите тогда, если не сложно. Пользуясь этим флагом, как прочитать текущее время только 1 раз при старте программы? В конечном счете хочу инициализировать часы реального времени.
Я попробовал таким образом:
Но CurrentDateTime не меняется.Код:PROGRAM PLC_PRG VAR (* флаг подачи питания *) START: BOOL:= FALSE; InternalRTC: RTC; (* часы реального времени *) Error: DTU.ERROR; GetTime: DTU.GetDateAndTime; CurrentDateTime: DT; RT_TIME:R_TRIG; Set:BOOL; END_VAR (*Получаем системное время в формате DATE_AND_TIME*) RT_TIME(CLK:=GetTime.xDone); IF NOT START THEN GetTime(xExecute:= NOT(GetTime.xDone)); START:=TRUE; END_IF; IF RT_TIME.Q AND GetTime.xBusy=FALSE AND GetTime.xError=FALSE AND GetTime.eError=0 THEN CurrentDateTime:=GetTime.dtDateAndTime; END_IF InternalRTC(EN:=START, PDT:=CurrentDateTime(*DT#2006-03-30-14:00:00*), Q=>VarBOOL2, CDT=>VarTimeCur);
Последний раз редактировалось Yury Evgenev; 06.02.2014 в 07:47.
GetTime у вас выполняется один раз(первый проход цикла).
Вызовите фб вне условия IF NOT START THEN, а внутри условия выполните инициализацию, примерно такКод:IF NOT START THEN GetTime(xExecute:= NOT(GetTime.xDone)); START:=TRUE; END_IF;
Код:GetTime(); IF NOT START THEN GetTime.xExecute:= NOT(GetTime.xDone); START:=TRUE; END_IF;
Спасибо, попробую.
Расскажите поподробнее об этой функции.
при инициализации
при фронте сигнала получаем (или запускаем процедуру чтения текущего времени).Код:GetTime.xExecute = TRUE;
Правильно ли я считаю:
ФБ
нет смысла вызывать, когда время уже считано?Код:GetTime();
Последний раз редактировалось Yury Evgenev; 06.02.2014 в 20:13.
Это инициализация переменной функционального блока.(В этот момент он не отрабатывает)Код:GetTime.xExecute = TRUE;
Для того чтобы фб выполнился нужно его вызвать, соответственно вызов:
Код:GetTime();