Вопрос до неприличия прост - как сбросить (или загрузить какое либо значение) в счетчик энкодера?![]()
Вопрос до неприличия прост - как сбросить (или загрузить какое либо значение) в счетчик энкодера?![]()
Примерно так:
pt:= ADR(Enkoder); (*Получаем адрес энкодера*)
pt^:=SEL(D_Form_TRIG.Q, pt^,0); (*обнуляем энкодер*)
Получилось проще, правда на эмуляторе:
pt:= ADR(Enkoder); (*Получаем адрес энкодера*)
pt^:= 0; (*обнуляем энкодер или любое другое значение*)
Спасибо за подсказку, в понедельник попробую на железке.
Последний раз редактировалось Алексей Дмитриев; 14.10.2011 в 22:48.
Я Вам уже с условием сброса по фронту с тригером навалял.
Понял, только чего-то не пошло, да этого и не нужно.
На железке, увы, не работает. Посе того, как прекращаю обнулять, возвращается старое значение. Ну и на хрена нужен такой счетчик, который сбросить нельзя? Вопрос к разработчикам.![]()
А обнулять надо каждый раз какое-нибудь новое значение или некое фиксированное. Если фиксированное, попробуйте в параметрах энкодера выставить нужный вам диапазон.
Мне нужно отмерять некоторую (разную) длину, потом отрезать и счетчик, ессно сбросить! Зачем вообще нужен счетчик, который считает погоду? Энкодер по умолчанию инкрементальный, поэтому его все равно надо когда-то и куда-то привязать, даже если потом не предполагается ничего с сигналом делать, только читать, скажем, положение некоего механизма!
ЗЫ: попробовал записывать в регистр, на котором, предположительно сидит этот счетчик, но как определить его адрес??? Разработчики! Аууууу!!!
Я, так понял, счетчик у Вас выдает кодовую последовательность 0-1-3-2-0-1-........, код Грея. Организуйте опрос входов в многозадачности, присвойте программе опроса высший приоритет. При включении устройства, программа считывает ту комбинацию, которая на входе. например, это число 3. Если, следующая комбинация будет 1, то датчик вращается против часовой стрелки, если 2 , то по часовой. Если на входах появилась двойка, то Вы добавляете шаг одного деления. например полный оборот датчика - это 10 мм. 10 делите на количество шагов, например 1024, получаете шаг на импульс, в нашем случае, это 0.009765625 мм. Значит в какой то переменной будет 0.009765625, потом еще плюс шаг, если в обратную сторону, то минус шаг. Сбрасывать энкодер совсем не надо, а надо работать с счетчиком шагов. Кстати в этом случае не нужно работать с точкой, а работать с целыми числами, так быстрее.
Успехов!
Вы не представляете, о чём идёт речь. Нет никаких кодов Грея. Есть обычный реверсивный счётчик импульсов. Направление счёта зависит от фазы этих импульсов. Когда энкодер вращается в одну сторону, счёт идёт в плюс. Когда в другую - в минут. Всё происходит на аппаратном уровне. Проблема в том, что невозможно обнулить счётчик, и начать отсчёт сначала. Или сделать предустановку нужным числом и считать до нуля.
В нормальных промышленных контроллерах (Siemens, Vipa например) нет никаких проблем со встроенным счётным модулем. Во-первых, он не 16-ти разрядный, а 32-х. Два байта в памяти контроллера пожалели? 65000 - это очень мало. У меня энкодер даёт больше 65000 за один оборот. Во-вторых, функциональный блок для управления этим модулем имеет тьму входных параметров, с помощью которых можно заставить работать счётчик во множестве всевозможных режимов. Его можно сбрасывать и предустанавливать, запрещать и разрешать счёт как угодно, задавать направление счёта, заставить генерировать прерывание..
Здесь даже обнулиться нельзя. Какова практическая польза от такого энкодера? Какие прикладные задачи можно решать с его помощью?
Последний раз редактировалось olc; 28.10.2011 в 15:38.