Просмотр полной версии : Таймер 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
Спасибо большое!
Самый простой вариант - это 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?
Задача у этого 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
создайте отдельную задачу, с требуемым временем и накапливайте объем, будет точнее чем программные тики
Разобрался, как использовать. Спасибо!
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot