Вход

Просмотр полной версии : Вызов программы по событию TRUE->FALSE



Туман
17.11.2015, 14:16
День добрый!

Возникла задача измерить длительность сигнала на выходе ПЛК внешним прибором. Для этого решил взять другой ПЛК и добавить две задачи, первая по приходу на вход TRUE, для фиксирования момента включения. Вторая по пропаданию сигнала, для фиксирования момента выключения и расчета длительности. Однако столкнулся с проблемой вызова программы по пропаданию сигнала. Какие могут быть варианты вызова программы по заднему фронту на входе без использования циклической программы?

petera
17.11.2015, 16:21
День добрый!

Возникла задача измерить длительность сигнала на выходе ПЛК внешним прибором. Для этого решил взять другой ПЛК и добавить две задачи, первая по приходу на вход TRUE, для фиксирования момента включения. Вторая по пропаданию сигнала, для фиксирования момента выключения и расчета длительности. Однако столкнулся с проблемой вызова программы по пропаданию сигнала. Какие могут быть варианты вызова программы по заднему фронту на входе без использования циклической программы?
Две задачи в Вашем случае -мазохизм.
Используйте в основной программе функцию TIME().
Запоминаете значение TIME() по фронту прихода значения "TRUE", по спаду получите новое значение TIME() и вычитаете из него ранее запомненное.

petera
17.11.2015, 16:38
PROGRAM PLC_PRG
VAR
R_TRIG1: R_TRIG;
In: BOOL;
tmp: TIME;
F_TRIG1: F_TRIG;
Delta: TIME;
END_VAR

R_TRIG1(CLK:=In);
IF R_TRIG1.Q THEN
tmp:=TIME();
END_IF
F_TRIG1(CLK:=In);
IF F_TRIG1.Q THEN
Delta:=TIME()-tmp;
END_IF

20872

Туман
17.11.2015, 18:36
Две задачи в Вашем случае -мазохизм.
Используйте в основной программе функцию TIME().
Запоминаете значение TIME() по фронту прихода значения "TRUE", по спаду получите новое значение TIME() и вычитаете из него ранее запомненное.

Через основную программу все уже давно проверено и перепроверено. Вот только непонятки в работе оборудования иногда все равно проскакивают, поэтому и приходится заниматься "мазохизмом".

Туман
17.11.2015, 18:43
Две задачи в Вашем случае -мазохизм.
Используйте в основной программе функцию TIME().
Запоминаете значение TIME() по фронту прихода значения "TRUE", по спаду получите новое значение TIME() и вычитаете из него ранее запомненное.

Не совсем верно сразу понял, т.е. засунуть в одну циклическую триггеры и ловить переходы? Да, в данном случае это подойдет, быстродействия хватит. Т.к. надо отловить изменения кратные мсек. Но вопрос как вызывать программу по переходу сигнала из TRUE в FALSE интересен теперь уже сам по себе

Валенок
17.11.2015, 19:25
.. Но вопрос как вызывать программу по переходу сигнала из TRUE в FALSE интересен теперь уже сам по себе
п#3 внимательно смотрим

petera
17.11.2015, 20:13
Не совсем верно сразу понял, т.е. засунуть в одну циклическую триггеры и ловить переходы? Да, в данном случае это подойдет, быстродействия хватит. Т.к. надо отловить изменения кратные мсек. Но вопрос как вызывать программу по переходу сигнала из TRUE в FALSE интересен теперь уже сам по себе
Нету там ни какой цикличности. Программа всего одна -PLC_PRG. Диспетчер (конфигурация) задач в моем варианте не используется!

Туман
17.11.2015, 22:38
п#3 внимательно смотрим
я ведь еще в теме написал изначально:

Какие могут быть варианты вызова программы по заднему фронту на входе без использования циклической программы?
+

Но вопрос как вызывать программу по переходу сигнала из TRUE в FALSE интересен теперь уже сам по себе

Туман
17.11.2015, 22:39
Нету там ни какой цикличности. Программа всего одна -PLC_PRG. Диспетчер (конфигурация) задач в моем варианте не используется!
и что? это не отменяет того факта что PLC_PRG вызывается самостоятельно циклически.
Вопрос сейчас стоит так:

Но вопрос как вызывать программу по переходу сигнала из TRUE в FALSE интересен теперь уже сам по себе

Yegor
17.11.2015, 22:41
Написать NOT и вызывать точно так же, как по переходу из FALSE в TRUE, нет?

Валенок
17.11.2015, 23:24
Да не, вера не позволяет. Вера в мифические прерывания из таск. Типо если не будет циклического вызова это чёто сэкономит.


Но вопрос как вызывать программу по переходу сигнала из TRUE в FALSE интересен теперь уже сам по себе
Привяжите на Di : через сухой контакт киньте катушку реле, а на этот Di заведите н.з. контакт этого реле. Или предполагаете что железо это не программа ?

petera
18.11.2015, 02:30
Написать NOT и вызывать точно так же, как по переходу из FALSE в TRUE, нет?
Так не получается. Ругается не то, что пробелы нельзя использовать в имени события.

ЗЫ.
На вопрос, который стал интересен сам по себе.
Кроме двух задач по событию, добавить задачу с типом свободная с приоритетом 0.
В свободной задаче добавить программу с одной строчкой
notDI_1:=NOT DI_1;
где DI_1 -физический вход ПЛК
notDI_1 -глобальная переменная.
notDI_1 использовать как событие по переходу сигнала из TRUE в FALSE.

Туман
18.11.2015, 20:28
Да не, вера не позволяет. Вера в мифические прерывания из таск. Типо если не будет циклического вызова это чёто сэкономит.


Привяжите на Di : через сухой контакт киньте катушку реле, а на этот Di заведите н.з. контакт этого реле. Или предполагаете что железо это не программа ?

Да, можно инвертировать сигнал. Вот только у реле есть время сработки, а тут вопрос кратный 10 мсек стоит. Как вариант можно транзистор с обвязкой на 24В использовать. Но хотелось бы обойтись без таких вещей.

Туман
18.11.2015, 20:29
Так не получается. Ругается не то, что пробелы нельзя использовать в имени события.

ЗЫ.
На вопрос, который стал интересен сам по себе.
Кроме двух задач по событию, добавить задачу с типом свободная с приоритетом 0.
В свободной задаче добавить программу с одной строчкой
notDI_1:=NOT DI_1;
где DI_1 -физический вход ПЛК
notDI_1 -глобальная переменная.
notDI_1 использовать как событие по переходу сигнала из TRUE в FALSE.

Спасибо за ответ.
А что именно ПЛК понимает под типом "свободная"?

Валенок
18.11.2015, 20:41
Свободный циклический вызов ))


а тут вопрос кратный 10 мсек стоит.
Програмный вызов по условию и не компостируйте себе же моск.
Не надейтесь получить через таски что-то более кратное чем прог.таймеры.

petera
19.11.2015, 06:52
Спасибо за ответ.
А что именно ПЛК понимает под типом "свободная"?
20894http://www.owen.ru/forum/attachment.php?attachmentid=11963&d=1392751579

Свободная задача будет выполняться все время между событиями и прерываться только на время выполнения циклических задач.