PDA

Просмотр полной версии : Таймер TON в режиме эмуляции



IIkIIkIIk
27.02.2024, 10:52
Добрый день!
Необходим генератор импульсов каждую секунду. Использовал таймер TON для реализации. На текущий момент на руках контроллера нет (ПЛК110-60).
При одновременном запуске таймера в режиме эмуляции и таймера на ПК (пробовал и с таймером на телефоне) через время (примерно 30 секунд) таймер TON успевает накопить погрешность (отстает).
Подскажите, пожалуйста, это связано с режимом эмуляции или я что-то не так делаю?

kondor3000
27.02.2024, 10:56
Добрый день!
Необходим генератор импульсов каждую секунду. Использовал таймер TON для реализации. На текущий момент на руках контроллера нет (ПЛК110-60).
При одновременном запуске таймера в режиме эмуляции и таймера на ПК (пробовал и с таймером на телефоне) через время (примерно 30 секунд) таймер TON успевает накопить погрешность (отстает).
Подскажите, пожалуйста, это связано с режимом эмуляции или я что-то не так делаю?

В эмуляции время цикла ПЛК около 64 мс, что значительно отличается от цикла живого ПЛК (1-5-10 мс), так что в эмуляции время отличается.
Кстати TON не лучший вариант, если нужно точное время, используйте расчёт времени через функцию Time();
а ещё лучше брать время из самого ПЛК через биб-ку, там есть возможность корректировки времени.

IIkIIkIIk
27.02.2024, 10:57
Спасибо большое!

Dimensy
27.02.2024, 13:04
Самый простой вариант - это BLINK из библиотеки util.lib



BLINK1(ENABLE:=en , TIMELOW:=t#1s , TIMEHIGH:=t#1s );
Q := BLINK1.OUT XOR flag;
flag := BLINK1.OUT;

IIkIIkIIk
28.02.2024, 09:02
Самый простой вариант - это BLINK из библиотеки util.lib



BLINK1(ENABLE:=en , TIMELOW:=t#1s , TIMEHIGH:=t#1s );
Q := BLINK1.OUT XOR flag;
flag := BLINK1.OUT;


Думаете, лучше выбрать BLINK? Он точнее?

IIkIIkIIk
28.02.2024, 09:04
В эмуляции время цикла ПЛК около 64 мс, что значительно отличается от цикла живого ПЛК (1-5-10 мс), так что в эмуляции время отличается.
Кстати TON не лучший вариант, если нужно точное время, используйте расчёт времени через функцию Time();
а ещё лучше брать время из самого ПЛК через биб-ку, там есть возможность корректировки времени.

Задача у этого TONa следующая. Есть аналоговый расходомер. Нужно каждую секунду прибавлять накопленный объем. Подойдет ли тут TON?

EFrol
28.02.2024, 09:11
Задача у этого TONa следующая. Есть аналоговый расходомер. Нужно каждую секунду прибавлять накопленный объем. Подойдет ли тут TON?

При использовании TON Вы потратите целый цикл на его сброс, а BLINK будет просто переключаться. При этом, если он переключится не вовремя, то на каждом следующем цикле будет стараться синхронизироваться с внутренним таймером. Остается ловить либо фронт, либо спад (при th=0.5s и tl=0.5s) - будет точнее!!

IIkIIkIIk
28.02.2024, 09:16
создайте отдельную задачу, с требуемым временем и накапливайте объем, будет точнее чем программные тики

В конфигурации задач создал циклическую задачу с именем NewTask c периодом 1 сек. Подскажите, пожалуйста, как использовать эту задачу в коде? Бегло пробежал по руководству - не нашел.

IIkIIkIIk
28.02.2024, 09:17
При использовании TON Вы потратите целый цикл на его сброс, а BLINK будет просто переключаться. При этом, если он переключится не вовремя, то на каждом следующем цикле будет стараться синхронизироваться с внутренним таймером. Остается ловить либо фронт, либо спад (при th=0.5s и tl=0.5s) - будет точнее!!

Спасибо за уточнения)

IIkIIkIIk
28.02.2024, 09:22
создайте отдельную задачу, с требуемым временем и накапливайте объем, будет точнее чем программные тики

Разобрался, как использовать. Спасибо!