Вход

Просмотр полной версии : Работа FB Blink заданное количество времени



Mikhail_NNT
11.12.2024, 08:06
Здравствуйте, прошу помочь разобраться с работой FB Blink в заданном промежутке времени.

Задача: В начале смены, обеда и перекуров нужно подавать одинарный сигнал, в конце смены, обеда и перекуров - двойной.

Условие: сравниваю системное время ПЛК 210 с заданными константами - работает как надо.
Действие: при срабатывании условия запускаю таймер (для отслеживания поставил 10 секунд), далее запускаю FB Blink от выхода таймера, если условие ложно, останавливаю таймер.
Результат: при условии Истина запускается таймер и начинает считать 10секунд, также в FB Blink параметры Enable и Out становятся постоянно Истина и не меняются, соответствующий выход на ПЛК постоянно горит.

Требуется, чтобы в заданный таймером промежуток времени, происходило мерцание выхода ПЛК. Не могу понять что упустил?

Сразу скажу, что запись в переменную xShortHorn и использование FB Blink происходит один раз в программе.

80720 80719

1exan
11.12.2024, 08:15
Здравствуйте, прошу помочь разобраться с работой FB Blink в заданном промежутке времени.

Задача: В начале смены, обеда и перекуров нужно подавать одинарный сигнал, в конце смены, обеда и перекуров - двойной.

Условие: сравниваю системное время ПЛК 210 с заданными константами - работает как надо.
Действие: при срабатывании условия запускаю таймер (для отслеживания поставил 10 секунд), далее запускаю FB Blink от выхода таймера, если условие ложно, останавливаю таймер.
Результат: при условии Истина запускается таймер и начинает считать 10секунд, также в FB Blink параметры Enable и Out становятся постоянно Истина и не меняются, соответствующий выход на ПЛК постоянно горит.

Требуется, чтобы в заданный таймером промежуток времени, происходило мерцание выхода ПЛК. Не могу понять что упустил?

Сразу скажу, что запись в переменную xShortHorn и использование FB Blink происходит один раз в программе.



Если функциональный блок не вызывается (в соответствии с условием IF) - то и состояние его выходов не изменяется (и присваивание выхода другим переменным тоже не производится)

kondor3000
11.12.2024, 08:21
Вызов блока Blink и таймеры надо выносить за пределы конструкции IF...THEN, а внутри только присваивать входы Blink1.Enable:=TRUE;
TOF1.PT:=T#2S; TOF1.IN:=TRUE;
Для сброса таймеров TOF (и TP), вход PT надо обнулять. TOF1.PT:=T#0S;

Mikhail_NNT
11.12.2024, 14:27
1exan, kondor3000 спасибо за помощь, разобрался! Выложу рабочий вариант конструкции, может кому пригодится.
80723

Mikhail_NNT
24.12.2024, 17:54
Blink начинает свой такт с False, как сделать, чтобы его такт всегда начинался с True?

После окончания работы Blink, в заданный промежуток времени, иногда его выход остается в True. Нужно, чтобы он всегда сбрасывался в False . Пытался его сбросить в программе Blink.Q:=False, компилятор ругается, что Q не является входной переменной. Конструкция Blink.Q=>False, также неработоспособна. Как тогда сбросить Q в False?

Николай Суриков
24.12.2024, 18:14
Код фб blink открыт, посмотрите реализацию и напишите на основе свой фб с вашими требованиями.

In_Da_Cher_A
24.12.2024, 18:52
После окончания работы Blink, в заданный промежуток времени, иногда его выход остается в True. в кдс 2.3 ставят на выход Q - AND со входом
дёшево и сердито

kondor3000
24.12.2024, 19:16
Blink начинает свой такт с False, как сделать, чтобы его такт всегда начинался с True?

После окончания работы Blink, в заданный промежуток времени, иногда его выход остается в True. Нужно, чтобы он всегда сбрасывался в False . Пытался его сбросить в программе Blink.Q:=False, компилятор ругается, что Q не является входной переменной. Конструкция Blink.Q=>False, также неработоспособна. Как тогда сбросить Q в False?

Можно было инвертировать выход и подать на выход Q:= Enable AND NOT BLINK1.Q, будет включаться с TRUE и выключаться даже если Q:=TRUE;
Но сбросить стандартный BLINK не получится, можете импортировать выложенный блок и использовать, валяется давно с форума

Moy_BLINK1(start:=Enable , hi:=TIMEHIGH , lo:=TIMELOW, q=>Q );

Валенок
24.12.2024, 23:07
Но сбросить стандартный BLINK не получится,
извините, был не в курсе

var
reset: bool;
_, blink : blink;
----
if reset then
blink := _;
else
blink(...);
end_if
out := blink.out;