PDA

Просмотр полной версии : Паразитный выходной импульс - как устранить?



SideMoon
17.02.2018, 21:37
В процессе отладки выявил "паразитный импульс" в моей программе. Может быть потом оптимизирую код и этого куска не будет, но сейчас есть проблема.
Если на управляющем (верхнем) входе SEL =0, то селектор всегда выбирает нулевую уставку для TP и теоретически, TP, никаких выходных иvпульсов на Q5 ни при каких входных сигналах I генерировать не должен, но от каждого переднего фронта от I5, генератор выдает выходной импульс на слух меньше полсекунды, уверенно успеваю заметить импульс и на светодиоде.

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

35650

SideMoon
17.02.2018, 22:32
Обнулил все значения на входе SEL, ничего не изменилось. отсоединил Write_to_FB от SEL, те в ФБ пишем ноль - без изменений.
Убрал Write_to_FB и длина импульса уменьшилась примерно до 100-200 мсек (на слух, могу ошибаться).

35651 35652


DS: проблема в функциональном блоке TP. Где можно посмотреть как он устроен ?

rovki
17.02.2018, 22:39
А если отсоединить от входа ,то будет импульс?

SideMoon
17.02.2018, 22:42
А если отсоединить от входа ,то будет импульс?Нет, не будет.
ПР110. На других моделях есть такое явление ?

Я читал, Вы разработчик в том числе всевозможных макросов для ПР.
Можете проанализировать внутренности TP и высказать мнение о возможности устранения импульса?

rovki
17.02.2018, 22:43
Проверил вашу схему ,у меня нет щелчков (импульсов) на выходе .Значит у вас наводка на входе ...

rovki
17.02.2018, 22:43
Нет, не будет.

ПР110

Я проверил на пр200. Подайте ноль на вход и включайте\выключайте и посмотрите будут ли импульсы

SideMoon
17.02.2018, 22:48
При включении-выключении питания ПР110 также есть импульсы, а на ПР200 ?

SideMoon
17.02.2018, 22:58
Он даже при такой схеме щелкает реле после загрузки программы. Если отсоединить Q таймера импульсов от выхода ПР, то не щелкает.
При включении питания ведет себя аналогично. Вроде в Овене на входах стоят TVS и проблем быть не должно ...

35653

Pavel_
17.02.2018, 22:59
Да, есть у штатного ТР такое - еcли уставка=0, то проскакивает импульс, замечаю это каждый раз, когда забываю в блоке WFB указать привязку к ТР, а у ТР поумолчачнию уставка=0, но мне никогда не приходило в голову для его отключения писать в него уставку=0, просто отключаю его вход, когда он не нужен и все.

35654

SideMoon
17.02.2018, 23:10
Да, есть у штатного ТР такое - еcли уставка=0, то проскакивает импульс, замечаю это каждый раз, когда забываю в блоке WFB указать привязку к ТР, а у ТР поумолчачнию уставка=0, но мне никогда не приходило в голову для его отключения писать в него уставку=0, просто отключаю его вход, когда он не нужен и все.
Мне пришлось динамически писать уставку 0, если интересны причины - см здесь: http://www.owen.ru/forum/showthread.php?t=28238
Итого: Похоже на программную ошибку TP. Проскакивание импульсов прекращается только при уставке T=0 и управляющем входе I=0

Есть у кого проверенный нештатный TP без "нулевой проблемы" ?

Pavel_
18.02.2018, 00:01
Мне пришлось динамически писать уставку 0, если интересны причины - см здесь: http://www.owen.ru/forum/showthread.php?t=28238

Так и не понял зачем вам писать динамически уставку 0.
По вашему описанию задачи в теме по ссылке, скинул свои варианты решения.

rovki
18.02.2018, 00:09
Он даже при такой схеме щелкает реле после загрузки программы. Если отсоединить Q таймера импульсов от выхода ПР, то не щелкает.
При включении питания ведет себя аналогично. Вроде в Овене на входах стоят TVS и проблем быть не должно ...

35653

Так он и будет щелкать при 1 на входе ТР ,а так же будет импульс и у R триггера.При включении питания все как бы обнулено и когда после обработки он увидит что на входе 1 ,то ОЛ воспримет это как фронт ...
Это фича ,когда при включении питания на входе потенциал воспринимается как фронт .

SideMoon
18.02.2018, 00:26
Это фича ,когда при включении питания на входе потенциал воспринимается как фронт .
Нахрена сдалась такая feature и какой может быть фронт, если уставка длины импульса нулевая? Надо сразу же сравнивать уставку с нулем и если совпадает, подавать на выход 0, а не фронт. Кстати, Вы недавно писали о причине импульса , как о наводке на входы.

rovki
18.02.2018, 00:36
Навод.ка это одна из возможных причин ,но в вашем случае (я же не знал что у вас на входе 1 перед включением ПР) это так и должно быть ..Если сделать уставку равной нулю ,когда таймер уже запущен ,то он сбросится .А если дать фронт на входе при уставке 0 ,будет короткий импульс равный циклу ПР.Измените схему и все ...

SideMoon
18.02.2018, 00:42
Дайте пожалуйста внутренности функционального TP если они у Вас есть, а я "допилю" их до устранения замеченной погрешности.

rovki
18.02.2018, 00:49
Внутренностей нет ни у кого ,это же программный код .А вот схему как убрать импульс при включении питания дам если всегда при включении на входе 1.Если нет то схему нужно доработать

rovki
18.02.2018, 01:02
Вот вариант ,который можно засунуть в макрос ,который анализирует вход .

melky
18.02.2018, 01:08
достаточно поставить TON на входе TP с минимальной длительностью импульса скажем 0,01 сек. и ничего щелкать не будет. Ну или сделать несколько SEL в нужных местах, которые 0 переключат на входы после запуска ПР.

rovki
18.02.2018, 09:51
Тон при включении питания не поможет ...если на входе ПР 1.

rovki
18.02.2018, 10:11
Вот еще вариант

melky
18.02.2018, 10:50
так если на входе ПР 1 то как бы и работоспособность ТР не должна обсуждаться ? или все связано с 0 на входе времени ТР ?
Тогда SEL на вход ТП а чтобы при 0 во времени не отражалось на работе выход SEL через INT_TO_BOOL на управляющий SEL-а через AND

неа, ерунда получается.....

melky
18.02.2018, 11:05
Ба, цикл ПР тут ни при чем, импульс проскакивает, даже есди сперва запустить эмуляцию с нулевым временем на входе ТР, а потом подать на управляющий вход 1.
Включение ПР тут тоже ни при чем.

Привет Owen .....

Проверил на ZelioLogic, там таймер в режиме ТР со сбросом срабатывает только при наличии фронта на управляющем входе.
Так что думаю правильнее будет добавить R_Trig и не париться.

rovki
18.02.2018, 11:20
Уже все разжовано ,а вы все не доганяете ....

melky
18.02.2018, 14:05
capzap расходится в том, что при наличии уставки 0 (НОЛЬ) таймер ТР вообще не должен формировать импульса на выходе так как зная, что PT=0 и так всем известно, что любое последующее время будет больше нуля.
Тем более учитывая, что PT=0 приравнивается к сбросу таймера.

то есть мы знаем, что PT=0 значит и импульс должен быть равен 0, то есть его не должно быть в принципе.

Читаем справку ОЛ для TP
"Блок используется для формирования импульса включения выхода на заданный интервал времени"

Задали интервал времени 0, следовательно и импульс должен быть 0, дефакто отсутствовать

Далее

На выходе Q блока появится логическая «1» по фронту входного сигнала (I). После запуска выход Q не реагирует на изменение значения входного сигнала на интервале Tимп, а по истечении этого интервала сбрасывается в «0».

Выделил жирным, ВРАНЬЕ

Я не знаю, на чем там писали FBD в прошивке ПР, но судя по реакции и справке там нет "если PT=0 то Q =0" ну и обработки работы фронта сигнала.

А потом люди удивляются, почему ОЛ работает иначе чем они привыкли в ZelioLogic, Logo и так далее, потому что у разработчиков ОЛ видение справки одно, а реализация совершенно другое.

melky
18.02.2018, 14:18
На CDS чуть позже проверю. Я вообще про логику писал при PT=0, смысл формировать импульс если заданное время = 0, что описано в справке ?

Импульс ДОЛЖЕН быть ЗАДАННОЙ длительности, а задана длительность НОЛЬ, следовательно при PT=0 не должно быть на выходе никаких импульсов хоть подавай на вход 1 хоть имей на входе 1.
Ну и далее по тексту про фронт сигнала тоже облажались, при наличии 1 и изменении PT c 0 на какое-то время согласно справке ТР тоже не должен срабатывать.

Не, проверил, все таки по фронту срабатывает, как положено. Кроме того, что дает импульс при PT=0 косяков больше нет.

Если управление изменением уставки делаем через SEL то просто на выходе TP поставить AND и с выхода SEL завести на этот AND через INT_TO_BOOL. так избавимся от паразитного импульса TP при PT=0.

rovki
18.02.2018, 15:43
Мы говорим о переходном процессе - единаца на входе + включение (старт ПР) .Так как при старте все внутри ПР в нулях (кроме энергонезависимых переменных) -триггеры ,счетчики (не энегонезависимые) .Если вести обработку схемы от выхода ко входу ,то получим ,что значение на входе изменилось с нуля на единицу ,хотя на входе был потенциал .Так себя ведет даже железный таймер .А коль уставка времени равна нулю ,то в следующим цикле таймер выключится.Так себя ведет и R триггер ,у которого Т=0 .Все временные интервалы отрабатывает внутренний (аппаратный) таймер .Когда возникает событие сразу запускается таймер и если ему сделать уставку 0 ,то получим импульс равный циклу .Потому то не может любой таймер вырабатывать импульс короче чем цикл ПР ,вы указываете 0,001сек ,а цикл ПР 5мс , то импульс получите 5мс ,а не 1 мс ,вас же это не смущает ...
И так мы разобрались почему ПР воспринимает потенциал на входе как фронт при вкл. питания ПР и почему при уставке ноль формируется импульс длиной с цикл ПР.
Кстати если таймер запустился при уставке 1сек и мы меняем уставку на 0 ,то сброс выхода произойдет только в следующем цикле .
Это данность о которой знают электронщики и учитывают в своих схемах .
Кстати и счетчик посчитает это за фронт при включении питания ,если до этого на входе была 1 (напряжение)

rovki
18.02.2018, 16:07
давайте так, эта тема обсуждается каждые шесть лет :) http://www.owen.ru/forum/showthread.php?t=12117

Каждые 5-6 лет приходят новички из вузов или других областей ;)

Владимир Ситников
18.02.2018, 16:27
давайте так, эта тема обсуждается каждые шесть лет :) http://www.owen.ru/forum/showthread.php?t=12117

А воз ОЛ документации и ныне там. Неужели сложно в документации описать как оно "должно" работать?

Но, нет, в ОЛ свой путь. Ни в коем случае нельзя документировать то, какое поведение ожидается в теории, ну и нужно всячески поддерживать тех, кто рисует схемы вилами по воде.

Владимир Ситников
18.02.2018, 16:34
И так мы разобрались почему ПР воспринимает потенциал на входе как фронт при вкл. питания ПР и почему при уставке ноль формируется импульс длиной с цикл ПР.... Кстати и счетчик посчитает это за фронт при включении питания ,если до этого на входе была 1 (напряжение)


Есть такая штука, "спецификация" называется.
Например, в стандарте 61131 явно записано как должны действовать R_TRIG и F_TRIG:

35667
35668

Тут и текстом, и кодом (даже код реализации R_TRIG/F_TRIG оказался в стандарте!) сказано, что R_TRIG и F_TRIG должны считать за фронт, если при их первом включении на входе будет TRUE/FALSE


Конечно, МЭК 61131 имеет весьма опосредованное значение для ОЛ, ведь, ОЛ для электронщиков предназначено, но хотелось бы верить, что разработчики ОЛ хотя бы изредка оглядываются на МЭК.


Но, к слову, стандарт 61131 ничего не говорит о работе TP при PT=0, т.е. тут дело остаётся на совести ОВЕН: хотят они или нет документировать то, как "в теории" должно работать ОЛ.

rovki
18.02.2018, 16:54
Есть такая штука, "спецификация" называется.
Например, в стандарте 61131 явно записано как должны действовать R_TRIG и F_TRIG:

35667
35668

Тут и текстом, и кодом (даже код реализации R_TRIG/F_TRIG оказался в стандарте!) сказано, что R_TRIG и F_TRIG должны считать за фронт, если при их первом включении на входе будет TRUE/FALSE


Конечно, МЭК 61131 имеет весьма опосредованное значение для ОЛ, ведь, ОЛ для электронщиков предназначено, но хотелось бы верить, что разработчики ОЛ хотя бы изредка оглядываются на МЭК.


Но, к слову, стандарт 61131 ничего не говорит о работе TP при PT=0, т.е. тут дело остаётся на совести ОВЕН: хотят они или нет документировать то, как "в теории" должно работать ОЛ.

речь не о том как должен обрабатываться первый фронт (и так понятно) ,а о том что должно быть при включении питания (первом старте) ПР ,если на входе 1 .Если на входе (физическом или переменной) стоит единица ,то R триггер сформирует импульс ,это свойство неоднократно используется в схемах для выявления события -включение питания .Тем более ,я уже сказал - что и в "железных"(реальных) таймерах будет запуск таймера в такой ситуации (переходной процесс) .Вопрос был как устранить этот эффект и был дан ответ (два варианта) ...

Владимир Ситников
18.02.2018, 19:54
маленькая поправка, если заметили МЕМ расположен в области ретайн,
Да, тут меня правильно поправили. Реально R_TRIG не "включение" а "1-е выполнение" отрабатывает так, как будто до этого сигнал был FALSE (и код и текст на это указывают).



при очередном включении могут происходить "нежданчики", например если вход тоже TRUE то будет потеря импульса фронта у R_TRIG
Если устройство выключается при CLK=TRUE, то, конечно, оно никак в выключенном состоянии не поймёт были ли изменения CLK. И, если после включения CLK будет равно TRUE, то R_TRIG ничего не сгенерирует.

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

rovki
18.02.2018, 20:05
а я этими триггерами вовсе не пользуюсь, только внутренним содержимым сравнивая CLK и MEM и неоднозначности в любых ситуациях не знаю
Но это к ОЛ не имеет отношения ...

Владимир Ситников
18.02.2018, 20:09
Но это к ОЛ не имеет отношения ...

Это точно. В ОЛ нельзя ни при каких обстоятельствах документировать то, как работают штатные блоки. Тем более, нельзя показывать их псевдо-код, и, тем более, нельзя допускать, чтобы пользователи создавали свои блоки в обход штатных.

А-то, ишь, понапишет каждый своих блоков..

rovki
18.02.2018, 20:20
Это точно. В ОЛ нельзя ни при каких обстоятельствах документировать то, как работают штатные блоки. Тем более, нельзя показывать их псевдо-код, и, тем более, нельзя допускать, чтобы пользователи создавали свои блоки в обход штатных.

А-то, ишь, понапишет каждый своих блоков..

Все пишут макросы на проверенных ФБ и Элементах ....А то будут вылавливать ошибки и зависания .

rovki
18.02.2018, 20:22
по чему же и в ОЛ тоже, хватает текущего значения и обратной связи
Нарисуйте вариант - 1вход ,1 ТР, 1 выход ,а то иначе без схемы не понимаю" птичьего" языка ,что бы не было импульса при 1 на входе в момент включения ...

rovki
18.02.2018, 20:44
Мы в теме про ПР и как прикажите понимать "а я этими триггерами вовсе не пользуюсь, только внутренним содержимым сравнивая CLK и MEM и неоднозначности в любых ситуациях не знаю".А Ситников еще дальше пошел -код из кодесис выкладывает. Может вы программисты и понимаете друг друга ,а вот многие электронщики не совсем, поэтому и просил свои мысли оформить в ОЛ(схема) .

rovki
18.02.2018, 21:09
Вы это про ПЛК или реально ПР?
Ваша схема это F триггер и что ?Как это относится к теме .
Человеку нужно выловить передний фронт и запустить по нему таймер ,когда у него на входе 1 ,а вы ему говорите -друг вылавливай задний фронт ,тогда импульса при включении не будет ...ясно что не будет ,но это другая схема и задача.Это все равно что сказать -давай я другую задачу решу

Владимир Ситников
18.02.2018, 21:21
Не спорте ребята не трате попусту время скажите лучше, что сейчас с ОЛ какая рабочая и стабильная версия года два уже не запускал ОЛ.

В этом-то и прелесть ОЛ, что каждая версия со своими загадками

rovki
18.02.2018, 22:03
ОЛ: схема И(&) на которую поданы сигнал с текущего цикла и предыдущего. Один из этих входов должен быть инвертирован.

Идиот это вы .Если инвертировать один вход ,то буде R триггер ,если другой ,то F триггер .
Причем тут триггеры ,как их реализовать ,хоть на RS триггерах .Если будет р-триггер ,то и импульс будет неважно как его реализовать .

rovki
18.02.2018, 22:13
Так и я про то же ...причем тут F триггер . А R триггер даст при 1 на входе и включении ПР импульс ,при любой реализации триггера ,о чем спор то .Задачу то кто решать поставленную автором будет ,зачем пришли то ,по быковать с Ситниковым .Один мануалы цитирует ,другой про свои реализации рассказывает ...а импульс как был так и есть..

rovki
18.02.2018, 22:28
а что Вы сами то знаете о задаче? Она так то описана здесь

как альтернативу я направление изложил, заставить меня нарисовать схему не получится, она мне вобще ни какой пользы не принесет, только вред, потому что я не собираюсь из-за этого прекращать на полпути обучать нейросеть

А я дал два варианта решения этой задачи. А я это ТЗ читал

В процессе отладки выявил "паразитный импульс" в моей программе. Может быть потом оптимизирую код и этого куска не будет, но сейчас есть проблема.
Если на управляющем (верхнем) входе SEL =0, то селектор всегда выбирает нулевую уставку для TP и теоретически, TP, никаких выходных иvпульсов на Q5 ни при каких входных сигналах I генерировать не должен, но от каждого переднего фронта от I5, генератор выдает выходной импульс на слух меньше полсекунды, уверенно успеваю заметить импульс и на светодиоде.

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

35650

rovki
18.02.2018, 22:46
А кто сорвался то ,я всегда называл язык программистов "птичьим" ,потому что не понятным для электронщиков и просил перейти на один язык общения в данной теме (схема).Я просто не увидел решения проблемы "ложного" импульса при включении у ваших примеров .И обратной связи обычно не жду ,если бы ждал ,то не сделал бы столько примеров .

melky
18.02.2018, 22:52
В эмуляции CDS вообще при PT=0 получаем генератор импульсов на выходе. Не среда разработки а просто "сказка" бл....

melky
18.02.2018, 23:04
capzap TP в ОЛ - один импульс, TP в CDS - генератор импульсов - что из этих двух заложено в стандарт ? :)

rovki
18.02.2018, 23:10
ну вот и мой второй вариант, скорее всего он был уже выложен, всех картинок я не смотрел

Подайте в симуляторе на вход1 единицу перед пуском(потом пуск) и ваш выход сработает ....значит и при включении питания ПР тоже сработает- не рабочий вариант

melky
18.02.2018, 23:13
вот блин, а я всю жизнь думал, что если время таймера 0 миллисекунд то и на выходе импульс должен быть 0 миллисекунд, то бишь нифига быть не должно. наверное у ОЛ и CDS свое понятие времени, ну да бог с ними....

когда таймеры внутри схемы и там нет таких неоднозначностей по ходу и времени оно как-то и не заметно, что их код с косяками.

rovki
18.02.2018, 23:22
А еще если соединить вход с выходом инвертора то будет генерация и длительность будет не ноль импульса

melky
18.02.2018, 23:37
rovki а это тут при чем когда речь о таймерах ? в таймерах обязана быть проверка времени. По крайней мере те, кто занимается обычным программированием это понимают.

rovki
18.02.2018, 23:59
В генераторах тоже есть время .Генератор это таймер с обратной связью .Просто в инверторе обратная связь вроде как с нулевой задержкой .То есть задержка ноль ,но у самого инвертора есть задержка на такт ,поэтому получаем генератор с периодом 2цикла. Внешней задержки нет ,но есть внутренняя ...

rovki
19.02.2018, 00:04
в задании не сказано ни чего про подачу питания, поэтому мой вариант рабочий, что же касается этой темы, то она появилась потому что ТС не правильно выбрал вид таймера и чтоб сделать по подаче питания несработку схемы, мне добавить понадобиться один SEL и OR
Надо все читать -"http://www.owen.ru/forum/showthread.php?t=28242&p=270322&viewfull=1#post270322" .У человека на входе было питание и при включении питания оно щелкало ,как выяснилось в ходе диалога и пыл поставлен диагноз и назначено лечение...

SideMoon
19.02.2018, 05:31
на входе было питание и при включении питания оно щелкало ,как выяснилось в ходе диалога и пыл поставлен диагноз и назначено лечение...
Проблема паразитного импульса не в питании, а в ошибочном коде таймера TP.
Если на управляющий вход I подать 1 (можно константу 1, тогда импульс будет 1 раз при включении питания) при уставке времени T=0, будет паразитный выходной импульс длиной прибл 0,1 сек (на слух, по щелчку реле).
Его видно даже в симуляторе.

SideMoon
19.02.2018, 05:34
ну вот и мой второй вариант http://www.owen.ru/forum/attachment.php?attachmentid=35670&d=1518983420 , скорее всего он был уже выложен, всех картинок я не смотрел

Задержка от входного сигнала на 1 цикл. Есть ли уверенность, что паразитный импульс длится всего 1 цикл?

SideMoon
19.02.2018, 05:40
Но, к слову, стандарт 61131 ничего не говорит о работе TP при PT=0, т.е. тут дело остаётся на совести ОВЕН: хотят они или нет документировать то, как "в теории" должно работать ОЛ.

Давайте дождемся мнения представителя Овена.
Может быть Овен в следующей версии Owen Logic исправит мелкую ошибку в макросе TP и дело с концами.

SideMoon
19.02.2018, 06:40
где в моей схеме Вы нашли задержку на один цикл?
см на пунктир 35678


Что бы сбросить таймер ТР нужно подавать нули на оба входа, IN и PT и проблемы не будет С какого перепуга взялись "новые" правила?


или не использовать его вовсе Режимы использования таймера каждый выбирает сам. Пока видна явная ошибка в реализации TP.

capzap
19.02.2018, 06:49
Пунктир, да ладно, Вы схеиы то читать умеете, это детектор переднего фронта.
По поводу новых правил о них я с самого первого поста Вам говорю и кстати шесть лет назад тоже советовал, это единственный вариант работы таймера без паразитных сигналов
А по третьему, ну не моя проблема, что люди создают себе трудности, чтоб из героически преодолевать

Владимир Ситников
19.02.2018, 07:25
Давайте дождемся мнения представителя Овена.
Может быть Овен в следующей версии Owen Logic исправит мелкую ошибку в макросе TP и дело с концами.

Да вы что.
Во-первых, в ОЛ всё хорошо.
Во-вторых, если исправить даже мелкую ошибку в макросе TP, то все имеющиеся проекты станут работать по-другому, а значит, могут сломаться. И кому это нужно?

capzap
19.02.2018, 07:35
кто то хотел внутренности таймера ТР, чтоб подстроить под себя, вот от компании 3S Software исходник

rovki
19.02.2018, 08:35
Проблема паразитного импульса не в питании, а в ошибочном коде таймера TP.
Если на управляющий вход I подать 1 (можно константу 1, тогда импульс будет 1 раз при включении питания) при уставке времени T=0, будет паразитный выходной импульс длиной прибл 0,1 сек (на слух, по щелчку реле).
Его видно даже в симуляторе.

Яже вам показал что это не ошибка ОЛ , импульс формируется из за старта ОЛ ,когда переменная сначала ноль(при старте) ,а потом ,становится 1 ,после чтения входа.

Karkade
19.02.2018, 08:39
если исправить даже мелкую ошибку в макросе TP, то все имеющиеся проекты станут работать по-другому, а значит, могут сломаться. И кому это нужно? Как раз в мою тему. Я из опасений таких "модернизаций" хочу иметь резервную копию софта и чтобы она могла установить в ПР ту же версию прошивки, которая использовалась на момент разработки и отладки проекта.
Иначе в случае претензий , заказчику ничего не докажешь.
http://www.owen.ru/forum/showthread.php?t=28230

А исправить ошибку можно созданием макроса TP_NEW :)

Karkade
19.02.2018, 08:52
это не ошибка ОЛ , импульс формируется из за старта ОЛ ,когда переменная сначала ноль(при старте) ,а потом ,становится 1 ,после чтения входа. Чтение входов и старт здесь ни при чем. Ошибка именно ОЛ, то есть его библиотеки.
Реакция TP на импульсы от BLINK - повторение этих импульсов

35683

Владимир Ситников
19.02.2018, 09:29
исправить ошибку можно созданием макроса TP_NEW :)
Сразу уж TP_20180219, через какое-то время TP_20180923 и так далее.
Представляете как будет выглядеть перечень ФБ? Вообще ни одну схему составить не получится, только и будешь, что список ФБ прокручивать.
Вывод -- не нужно никаких TP_NEW.

melky
19.02.2018, 09:51
Если ТР будет использоваться внутри схемы с неизменным выставленным временем никаких ошибок от нового ТР и не будет. Их и сейчас нет, если ТР используется с указанным временем больше нуля.
Вся загвоздка вызвана только тем, что кто-то хочет реализовать ТР со сбросом путем записи PT=0, которого в ОЛ просто нет.

Владимир Ситников
19.02.2018, 09:55
Если ТР будет использоваться внутри схемы с неизменным выставленным временем никаких ошибок от нового ТР и не будет. Их и сейчас нет, если ТР используется с указанным временем больше нуля.

Вы не учитываете, что у кого-то может использоваться TP с нулевой уставкой времени.
И у этого кого-то, на этой нулевой уставке может вся схема держаться.
Если поменять поведение, то схема может сломаться.

Поэтому подобные изменения TP и других блоков вредны. Они лишь дестабилизируют ОЛ в угоду маргиналам, которым лишь бы с PT=0 поразвлечься.

capzap
19.02.2018, 09:59
еще один аспект, как диагностировать. Например уставка формируется динамически, программист уверен что она не нулевая, а на самом деле из-за ошибок, на таймер подается ноль, сейчас что в ОЛ, что в КДС можно обнаружить импульс/ы, а предложение что то изменить приведдет к тому что если при нуле ничего не будет происходить где искать причину.

melky
19.02.2018, 10:07
/* ------------------- TP ------------------- */
TP::TP()
{
IN = false;
PT = 0;
_M = false;
_StartTime = 0;
Q = false;
ET = 0;
}
TP::TP(unsigned long PT)
{
IN = false;
TP::PT = PT;
_M = false;
_StartTime = 0;
Q = false;
ET = 0;
}
boolean TP::Run(boolean IN)
{
TP::IN = IN;
if (!_M) {
if (TP::IN) {
_M = true; // взводим флаг М
_StartTime = millis();
if (ET < PT)
Q = true;
}
} else {
if (Q) {
ET = millis() - _StartTime; // вычисляем время
if (ET >= PT)
Q = false;
} else {
if (!TP::IN) {
_M = false;
ET = 0;
}
}
}
return Q;
}



Код реализации ТР на ПК - паразитных импульсов при PT=0 НЕТ. что не так с программированием ?

melky
19.02.2018, 10:09
Владимир Ситников если в программе кому-то необходим импульс, то человек просто будет использовать R_Trig без всяких TP с нулевой уставкой. Нет?, я ошибаюсь и применять будут именно ТР ?

capzap
19.02.2018, 10:19
Владимир Ситников если в программе кому-то необходим импульс, то человек просто будет использовать R_Trig без всяких TP с нулевой уставкой. Нет?, я ошибаюсь и применять будут именно ТР ?

а как Вам эта фраза из 55 поста
Режимы использования таймера каждый выбирает самможет и будут, Вам откуда знать

melky
19.02.2018, 10:22
capzap ну, наверное будут, зная фича-багу, что при 0 импульс есть. Соглашусь. Но лично меня подобные поведения всегда пугали и подобное никогда не использовал.

SideMoon
19.02.2018, 11:34
И у этого кого-то, на этой нулевой уставке может вся схема держаться.
Если поменять поведение, то схема может сломаться.
Поэтому подобные изменения TP и других блоков вредны. Они лишь дестабилизируют ОЛ в угоду маргиналам, которым лишь бы с PT=0 поразвлечься.

Тогда для обеспечения работоспособности старых проектов, не менять поведение блока TP,
но в его описании в OWEN Logic указать на выявленную особенность работы при нулевой уставке.

rovki
19.02.2018, 12:34
Что вы докапались до ТР , при нулевых уставках так же работает R ,F триггер ,а так же блинк при нулях будет выдавать период 2цикла и счетчик будет считать импульсы если вы его прицепите ко входу и будите дергать питание ,а на входе будет 1.А так же D триггер отработает фронт по входу С. Все ФБ которые работают по фронту отработают при включении питания ,если на входе ранее стояла 1....Это знают все электронщики .!

melky
19.02.2018, 12:51
rovki речь о ТАЙМЕРЕ, а не о R,F триггерах и далее по тексту.

Я привел код с ПК для ТР, который адаптировал в C# для Scada системы (чтобы можно было использовать во входных каналах) и проверил его при запуске Scada, при уставке = 0 никаких паразитных импульсов.
И выше писал что при уставке =0 ТР в ОЛ дает один импульс а ТР в CodeSys начинает работать как генератор импульсов каждый цикл

Не видите разницу что в коде реализации каждого ТР получаются свои особенности ? в ОЛ и CDS тупо нет проверки времени, равной нулю и соответственно документация является НЕДЕЙСТВИТЕЛЬНОЙ и НЕДОСТОВЕРНОЙ.

При включении питания таймер должен запуститься, если уставка времени >0 - это справедливо для электроники. Но почему он должен стартовать, если время 0 ?
А то, что триггера запускаются тоже справедливо, так как контролировать в них время нет необходимости.

rovki
19.02.2018, 13:13
Тогда еще раз .Выделим два момента
1.Если на динамическом входе ФБ есть 1 ,то при включении питания (первый цикл) ФБ воспримет это как фронт (причину я обьяснял).
2.Формирование не нулевого импульса на выходе ФБ ,при уставке=0.
Каждый элемент ,ФБ имеет внутреннею задержку 1 цикл ПР ,это как у микросхемы -время распространения сигнала от входа до выхода .И есть внешняя задержка которую задает пользователь (это аналог R-C цепочки) .Если задавать время у ФБ более цикла ПР ,то внутренний таймер процессора обеспечит ее ,если время будет меньше Цикла или ноль ,то все равно сформируется импульс ,благодаря внутренней задержки (время цикла) ,аналогично что убрать внешнею RC цепочку в МС .В ОЛ это связано с последовательной обработкой сигнала от выхода до входа - сначала ловим фронт ,а потом время задержки или время импульса (в следующем цикле).Поэтому при уставке НОЛЬ ,формируется минимальный импульс (время цикла) и к этому все привыкли и используют в своих схемах ,как в реальной схемотехнике .

capzap
19.02.2018, 13:20
Тогда еще раз .Выделим два момента
1.Если на динамическом входе ФБ есть 1 ,то при включении питания (первый цикл) ФБ воспримет это как фронт (причину я обьяснял).
2.Формирование не нулевого импульса на выходе ФБ ,при уставке=0.
Каждый элемент ,ФБ имеет внутреннею задержку 1 цикл ПР ,это как у микросхемы -время распространения сигнала от входа до выхода .И есть внешняя задержка которую задает пользователь (это аналог R-C цепочки) .Если задавать время у ФБ более цикла ПР ,то внутренний таймер процессора обеспечит ее ,если время будет меньше Цикла или ноль ,то все равно сформируется импульс ,благодаря внутренней задержки (время цикла) ,аналогично что убрать внешнею RC цепочку в МС .В ОЛ это связано с последовательной обработкой сигнала от выхода до входа - сначала ловим фронт ,а потом время задержки или время импульса (в следующем цикле).Поэтому при уставке НОЛЬ ,формируется минимальный импульс (время цикла) и к этому все привыкли и используют в своих схемах ,как в реальной схемотехнике .

не мешало бы объяснить тогда, мы с Ситниковым тоже про это же говорим, приводим программный код где это видно, Вы на нас то чего задираетесь?

Мелкий, код таймера в ОЛ возможно писался с исходника КДС, чтоб сократить объем кода, можно удалить 7 и 8 строчку из приведенного мною скрина и вот она разница, почему в КДС генератор, а в ОЛ одиночный импульс. То что Вы приводите, писавший, так же как и Вы рассуждал что уставка не может быть нулевой и переписал по своему, проблемы то нет ни какой, кто как и на сколько далеко уходит от стандарта дело сугубо личное для каждого

melky
19.02.2018, 13:31
rovki у меня простой вопрос, почему бы тогда всяким AND и прочим не пропускать на выход импульс, равный одному циклу а потом не обрубать его до нуля ?
А то вы уже за уши притягиваете.

capzap хорошо еще что в ОЛ он не начинает работать как генератор, а то песня была бы длиннее :)

rovki
19.02.2018, 13:45
не мешало бы объяснить тогда, мы с Ситниковым тоже про это же говорим, приводим программный код где это видно, Вы на нас то чего задираетесь?

Мелкий, код таймера в ОЛ возможно писался с исходника КДС, чтоб сократить объем кода, можно удалить 7 и 8 строчку из приведенного мною скрина и вот она разница, почему в КДС генератор, а в ОЛ одиночный импульс. То что Вы приводите, писавший, так же как и Вы рассуждал что уставка не может быть нулевой и переписал по своему, проблемы то нет ни какой, кто как и на сколько далеко уходит от стандарта дело сугубо личное для каждого

Я вообще не задираюсь ,я да же код что вы и мелкий приводите понять не могу .

rovki
19.02.2018, 13:52
rovki у меня простой вопрос, почему бы тогда всяким AND и прочим не пропускать на выход импульс, равный одному циклу а потом не обрубать его до нуля ?
А то вы уже за уши притягиваете.

capzap хорошо еще что в ОЛ он не начинает работать как генератор, а то песня была бы длиннее :)

Вы путаете ,обработка элементов идет в пределах одного цикла , и фронт на И обработается в следующем цикле и получите результат(если не стоит линия задержки) ,а если поставите ее ,то получите короткий импульс если использовать другой элемент XOR, а отчет времени ТР ведет аппаратный таймер (по прерыванию) ,поэтому в этом же программном цикле обработаться не может ,только как минимум в следующем цикле программы .

melky
19.02.2018, 15:11
Да все таймер может, как заложено будет в программе (а выполняет программу процессор ПР) так оно работать и будет.
Просто наверное никто не думал, что можно нулевым временем сбрасывать таймер ни в ОЛ ни в CDS.
В пределах одного цикла можно сделать все, что угодно, так как логика любого Программируемого реле или ПЛК у всех производителей одинакова.

1. Чтение входов
2. выполнение программы ( и вот тут то если мы переменную в программе сперва сделаем "1" а потом перепишем в "0" то на выход пойдет именно "0"
3. Запись выходов - внимательно читаем пункт 2.

Или вы хотите сказать, что в ПР200 не так если мы многократно будем переписывать переменную в программе ? ой ли...

capzap
19.02.2018, 15:41
можно нулевым временем сбрасывать таймер ни в ОЛ ни в CDS.
одним нулевым временем таймер ТР не сбросить, только одновременно с входом IN в состояние FALSE, тогда не будет этого эффекта одиночного импулься, это и в ПР и в КДС

melky
19.02.2018, 15:57
capzap не вижу никаких проблем в ОЛ для этого.
а вот тот код, который я для Scada адаптировал вход IN не затрагивает, там хоть пачка импульсов будет, при PT=0 на выходе будет 0 и никаких импульсов

capzap
19.02.2018, 16:11
capzap не вижу никаких проблем в ОЛ для этого.
а вот тот код, который я для Scada адаптировал вход IN не затрагивает, там хоть пачка импульсов будет, при PT=0 на выходе будет 0 и никаких импульсов

Вы зачем всё еще делитесь этой информацией, как Вас устраивает собственный таймер, Ситников вполне разумно обяъснил, что не будут менять таймер

melky
19.02.2018, 16:55
Ситников работник Овен ? Мне кажется это решать не ему, а производителю. А как решат, мне лично по барабану.
Я только привел пример нормально работающего таймера. Этот пример отнюдь не мой. Кстати именно для CDS тут на форуме тоже выкладывали пример ТР со сбросом, который работает корректно со временем. Возможно и в oscat есть примеры аналогичные, сильно не разбирался за ненадобностью.

Просто в данном контексте не применял ТР в ОЛ, чтобы заметить подобный косяк, заметили другие.

rovki
19.02.2018, 17:02
Не нужен импульс при уставке ноль так уберите

melky
19.02.2018, 17:09
Не проще ? Ну и как говорит capzap одновременно с записью нуля в PT снимаем 1 со входа ТР

rovki
19.02.2018, 17:32
Не проще ? Ну и как говорит capzap одновременно с записью нуля в PT снимаем 1 со входа ТР

но это не убирает импульс при 1 на входе и включении питания

capzap
19.02.2018, 17:36
но это не убирает импульс при 1 на входе и включении питания

ну чего Вы докапались, добавит он используемый Вами XOR, что авторство будете предъявлять или обязательно должно быть на другой элементной базе

melky
19.02.2018, 17:48
rovki в симуляторе импульсов нет при пошаговом выполнении. На живом не пробовал. Только Rtrig надо добавить для достоверности картины

rovki
19.02.2018, 17:52
rovki в симуляторе импульсов нет при пошаговом выполнении. На живом не пробовал
Это при нуле уставки ,а иначе будет

rovki
19.02.2018, 17:53
ну чего Вы докапались, добавит он используемый Вами XOR, что авторство будете предъявлять или обязательно должно быть на другой элементной базе

Не надо грубить и быть модератором .Мы сами разберемся ...

melky
19.02.2018, 17:58
rovki блин, а иначе на то он и ТР чтобы при уставке работал. Или я не пойму о чем вы ?

capzap
19.02.2018, 18:00
Не надо грубить и быть модератором .Мы сами разберемся ...

это и меня касалось, с той же претензией и ко мне приставали, какую то элементарную вещь видите ли надо показывать на схеме до полноты картины. Птицелов в ударе он то на своих скринах это показал

SideMoon
19.02.2018, 18:03
Ситников работник Овен ? Да или нет ?

capzap
19.02.2018, 18:12
Да или нет ?

зайдите в его профиль и узнаете где он работает

SideMoon
19.02.2018, 18:36
зайдите в его профиль и узнаете где он работает


System performance engineer at @NetCrackerTech. Looking forward to tuning java and sql things. Moscow, Russia netcracker.com Дата регистрации: июль 2012 г.

Домашняя страничка
https://twitter.com/VladimirSitnikv

А я думал он из Овена.

wildnsk
19.02.2018, 19:57
...если на входе ранее стояла 1....Это знают все электронщики .!
.... ускоренные курсы программирования, теперь каждая домохозяйка может управлять сталеплавильной печью или запускать космические корабли