Просмотр полной версии : ПЛК выдает задержку в 3 раза длиннее установочной
klad_Fe2O3
10.12.2023, 07:22
Здравствуйте. Подскажите, пожалуйста как настроить правильный таймер времени на ПЛК.
Блок
myTON(IN:=knop_13,PT:=t#5s);
на ПЛК выдает задержку примерно 15 сек.
myTON(IN:=knop_13,PT:=t#1s);
на ПЛК выдает задержку около 3 сек.
... и т.д. Если задавать в ms, то те же проблемы: 5000 ms в реальной работе дают задержку 15 сек.
Спасибо.
Программа в плк состоит из одной этой строчки или все же имеется какой то обвес
klad_Fe2O3
10.12.2023, 07:38
В данном случае практически из одной. Сейчас тестовый режим подключения нового оборудования.
if knop_26 then
myTON(IN:=knop_26,PT:=t#5s);
if myTON.Q then
d_N3:= true;
end_if
end_if
klad_Fe2O3
10.12.2023, 08:09
Спасибо. Завтра попробую. Как бы понятно, что функцию TON можно заменить собственной. Но, видимо, никто не сталкивался с тем чтобы заданное время не соответствовало. Поэтому у меня скорее вопрос о том, может быть в ПЛК200 есть какие-то настройки внутреннего таймера, которые мы пока не настроили.
МихаилГл
10.12.2023, 08:35
Желательно не вставлять таймер внутрь условий
Михаил Троицкий
10.12.2023, 08:53
myTON(IN:=knop_26,
PT:=T#5S,
ET=>);
if myTON.Q then
d_N3:= TRUE;
end_if
klad_Fe2O3
11.12.2023, 19:58
Попробовал чуть измененный код:
tik_curr := time_to_dword(time());
If knop_26 then // клавиша, а не переключатель
tik_start:=tik_curr;
end_if
if (tik_curr - tik_start) > 5000 then
indikator:= true;
else
indikator:=false;
end_if;
Этот вариант работает корректно. Выдает задержку 5 сек. Не понимаю почему блок TON тут сбоит. Наверно придется написать свой ФБ.
Если сигнал в виде импульса, тон работать не должен от слова совсем
klad_Fe2O3
11.12.2023, 23:09
В моем первоначальном примере кнопка была переключателем.
Она изменена на клавишу только для данного кода, где TON не используется.
Ps. Я неверно написал "блок TON тут сбоит". Он не работает в первоначальном варианте. А сюда я его не пробовал вставлять. )
В моем первоначальном примере кнопка была переключателем.
Она изменена на клавишу только для данного кода, где TON не используется.
Ps. Я неверно написал "блок TON тут сбоит". Он не работает в первоначальном варианте. А сюда я его не пробовал вставлять. )
Во первых, зачем было менять переключатель на кнопку, есть сомнения что моё предложение не будет работать или на практике убедились что не работает так как Вам хочется?
во вторых, что значит TON не работает, он входит в стандартную библиотеку 72319, по Вашим словам миллионы пользователей сталкиваются с такой проблемой и она за столько лет существования контроллеров не решилась
TON и остальные таймеры и триггеры на CodeSys полностью программные, и кодом можно напортачить.
В данном случае практически из одной. Сейчас тестовый режим подключения нового оборудования.
if knop_26 then
myTON(IN:=knop_26,PT:=t#5s);
if myTON.Q then
d_N3:= true;
end_if
end_if
При включении кнопки knop_26 из исходного состояния (предположим, что только что залили программу и запустили контроллер), включается таймер myTON. При выключении knop_26 таймер продолжит отсчитывать время до 5 секунд, сработает его выход, но d_N3 не включится, т.к. первый if knop_26 не срабатывает. При следующем включении knop_26 и досчитанном таймере включается d_N3. Таймер по knop_26 не будет ни сбрасываться, ни включаться по новой, т.к. для сброса таймера требуется задний фронт knop_26, а его myTON не видит из-за if knop_26 then.
Желательно не вставлять таймер внутрь условий
Согласен с вами.
klad_Fe2O3
12.12.2023, 21:50
Во первых, зачем было менять переключатель на кнопку, есть сомнения что моё предложение не будет работать или на практике убедились что не работает так как Вам хочется?
во вторых, что значит TON не работает, он входит в стандартную библиотеку 72319, по Вашим словам миллионы пользователей сталкиваются с такой проблемой и она за столько лет существования контроллеров не решилась
Ваш код пришлось изменить потому что он на переключателе не работал.
tik_curr := time_to_dword(time());
If knop_26 and (tik_curr - tik_start) > 5000 then
d_N3:= true;
else
tik_start := tik_curr;
end_if
В нем (tik_curr - tik_start) > 5000 никогда не превышает 5000. (на переключателе)
Поэтому для проверки time() код был поправлен. А для удобства кнопка стала клавишей.
klad_Fe2O3
12.12.2023, 21:56
При включении кнопки knop_26 из исходного состояния (предположим, что только что залили программу и запустили контроллер), включается таймер myTON. При выключении knop_26 таймер продолжит отсчитывать время до 5 секунд, сработает его выход, но d_N3 не включится, т.к. первый if knop_26 не срабатывает. При следующем включении knop_26 и досчитанном таймере включается d_N3. Таймер по knop_26 не будет ни сбрасываться, ни включаться по новой, т.к. для сброса таймера требуется задний фронт knop_26, а его myTON не видит из-за if knop_26 then.
Вы описали процесс, если knop_26 была бы клавишей. Но задержка в три раза по времени была именно на переключателе. После одинарного включения ничего больше не нажималось и ожидалась реакция реле. Реле срабатывало только через 15 сек, а не через 5, как установлено в TON.
У Вас knop_26 это использование физического входа или что программноэмулированое нечто? 5000 это всего лишь пять секунд, как можно их не дождаться.
Действительно, как предложили ранее, надо выкладывать проект
Реле срабатывало только через 15 сек, а не через 5, как установлено в TON.
О каком реле идёт речь, случайно среда разработки не овенлоджик и проверяете не в эмуляции ли?
klad_Fe2O3
12.12.2023, 22:13
knop_26 - переключатель в визуализации. d_N3 - физический выход на самом ПЛК200.
А я разве сказал, что не дождался их? при установку 1s - дождался через 3 секунды. При установке 5s и в другой раз 5000ms дождался через 15 сек.
Проект заключался именно в 7 строчках, которые я вам написал. Ничего кроме них не было (Кроме кнопки в визуализации.)
klad_Fe2O3
12.12.2023, 22:15
О каком реле идёт речь, случайно среда разработки не овенлоджик и проверяете не в эмуляции ли?
Реальное физическое реле в собранном щите. Нет никакой эмуляции. Смотрел по диоду на реле.
МихаилГл
13.12.2023, 04:46
В данном случае практически из одной. Сейчас тестовый режим подключения нового оборудования.
if knop_26 then
myTON(IN:=knop_26,PT:=t#5s);
if myTON.Q then
d_N3:= true;
end_if
end_if
Вернемся к началу...
myTON(IN:=knop_26,PT:=t#5s); надо вообще наружу вынести, зачем это внутри условия, непонятно, т.к. IN:=knop_26 это тоже само по себе условие. Тем более время таймера если больше не меняется, то зачем его в условие пихать.
Помню я в case такое запихал, но у меня таймеры переназначались по времени работы, и тоже начался какой то мрак...
myTON(IN:=knop_26,PT:=t#5s);
d_N3:= knop_26 and myTON.Q;
Посмотрел, как ведет себя ваш код в эмуляторе... Это тот еще мрак.
1. Нажимаем кнопку knop_26 и отпускаем... В момент нажатия таймер начинает отсчет, в момент отпускания таймер остается взведен, что логично, но отсчет в переменных уже не ведется (хотя таймер считает), так как находимся вне условия IF.
2. Проходит хоть час, хоть два... Ничего не произойдет, пока снова не нажмем knop_26 и тогда попадем в 2 условия и загорится выход...
3. Все, таймер больше не сбросить, так как вне условия IF код myTON(IN:=knop_26,PT:=t#5s) не выполняется ни при каких условиях...
Вы сами намудрили с кодом и поэтому так и вышло... Это похоже не 3 секунды (или 15), а вы просто задолбались ждать исполнения багованого кода, повторно нажали кнопку и о чудо, выхода включились...
Вот с виртуальной визуализацией тоже все норм...
72348
МихаилГл
13.12.2023, 05:50
При включении кнопки knop_26 из исходного состояния (предположим, что только что залили программу и запустили контроллер), включается таймер myTON. При выключении knop_26 таймер продолжит отсчитывать время до 5 секунд, сработает его выход, но d_N3 не включится, т.к. первый if knop_26 не срабатывает. При следующем включении knop_26 и досчитанном таймере включается d_N3. Таймер по knop_26 не будет ни сбрасываться, ни включаться по новой, т.к. для сброса таймера требуется задний фронт knop_26, а его myTON не видит из-за if knop_26 then.
Проверил, таймер считает, ну как считает, у него есть время запуска и текущее... Он находится в ступоре и выход при выключенном входе у него не включается, так как он не обрабатывается в данном коде ТС.
Однако при повторном поступлении входа время запуска, текущее и время работы таймера говорят ему, что "о брат, пора включить твой выход... ты почему спишь".
knop_26 - переключатель в визуализации. d_N3 - физический выход на самом ПЛК200.
А я разве сказал, что не дождался их? при установку 1s - дождался через 3 секунды. При установке 5s и в другой раз 5000ms дождался через 15 сек.
Проект заключался именно в 7 строчках, которые я вам написал. Ничего кроме них не было (Кроме кнопки в визуализации.)
на третий день узнаем что кроме 7 строчек оказывается есть визуализация и судите о времени Вы от момента клика на визуальной кнопке до зажигания светодиода на реле в щите и виноват при этом стандартный код TON-а, пробовали в окне объявлений в режиме онлайн, раскрыть свой таймер и отследить на каком периоде времени сработает Q глядя на ET
А про мой код я тогда вообще не понял, он так же работает как TON или воодще не работает
А я разве сказал, что не дождался их? при установку 1s - дождался через 3 секунды.и
В нем (tik_curr - tik_start) > 5000 никогда не превышает 5000. (на переключателе)
МихаилГл
13.12.2023, 08:02
Такой код так же выдаст время в три раза больше:
tik_curr := time_to_dword(time());
If knop_26 and (tik_curr - tik_start) > 5000 then
d_N3:= true;
else
tik_start := tik_curr;
end_if;
Надо так:
tik_curr := TIME_TO_DWORD(TIME());
IF knop_26 THEN
d_N3:= ((tik_curr - tik_start) > 5000);
else
tik_start := tik_curr;
end_if;
Кому надо ?
У capzap 2 варианта результатов
У Вас - 3 (три)
Кому чего надо - тот пусть четко и скажет.
Да ладно, у меня там ошибка , я тот код писал в машине, не проверяя
МихаилГл
14.12.2023, 04:28
Надо так:
Кому надо ?
Да ладно, у меня там ошибка , я тот код писал в машине, не проверяя
Ну я тоже виноват, не полностью расписал свое "надо"... Просто рассчитывал на то, что этот код ТС проверил и он у него не заработал. Он даже что-то поменял, но вроде не сказал что.
Исправляюсь:
Надо так:... чтоб этот код по минимуму заработал для тестирования.
Не стоит воспринимать как: Надо делать вот так всегда и везде...
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot