Может быть по показаниям энкодера?
IF Encoder = 0 THEN Маркер:= TRUE; ELSE Маркер:= FALSE;
Далее по фронту маркера инкременируем счетчик оборотов.
Может быть по показаниям энкодера?
IF Encoder = 0 THEN Маркер:= TRUE; ELSE Маркер:= FALSE;
Далее по фронту маркера инкременируем счетчик оборотов.
Последний раз редактировалось lexusdizel; 16.09.2016 в 06:52.
Какая частота энкодера? И какая задача (что именно нужно считать, с какой частотой идут импульсы)?
Оно крутится в одну сторону или может хаотично менять направление?
Если крутится в одну сторону и не вращается чаще 500 об/сек (ну, не чаще 500 z импульсов в секунду), то можно просто проверять IF Encoder < БылоВПрошлыйРаз THEN плюсодин;
Т.е. ловить конкретное значение 0 почти бесполезно (ну, его можно не поймать), а вот вариант "значение стало меньше, чем видели в прошлый раз" уже гораздо надёжнее.
Если же Z импульсы идут часто или крутиться может в разные стороны, то пишите ответом на это сообщение Вольда, что так и так, модуля FastEncoder недостаточно, нужно обороты считать. Скорость оборотов такая-то, скорость импульсов такая-то.
Если будут пропуски импульсов, то энкодер, или кабель до него, пора менять.
При пропусках импульсов каналов А-В будет нарушаться непрерывность счёта в области нуля. А при пропусках в канале Z показания энкодера либо будут становиться отрицательными, либо будут превышать модуль (число отсчётов на оборот) самого энкодера с учётом коэффициента счёта.
Пропуски будут в зависимости от скорости вращения энкодера. У меня в одном проекте реализована функция детектирования нуля энкодеоа. Но:
1. Энкодер 360имп\об вращается со скоростью не более 20 об\мин.
2. Я не применял FastEncoder, а реализовал энкодер программно в прерывании по таймеру 20мкс. (ПЛК110-60 старой модели)
3. Детектирование нуля условное Т. е. IF Энкодер =>0 OR Энкодер <=2 THEN Действие.