импульсами, поступающими с энкодера.
Вообще в Вашем случае лучше работать с быстрыми входами на прямую, через таймер 20мкс. На диске был пример.
Если не разберетесь, пишите в личку я делал такую задачу. Сброшу.
импульсами, поступающими с энкодера.
Вообще в Вашем случае лучше работать с быстрыми входами на прямую, через таймер 20мкс. На диске был пример.
Если не разберетесь, пишите в личку я делал такую задачу. Сброшу.
1. Во время сброса механизм стоит на месте, никаких импульсов с энкодера не поступает.
2. Я не понял - зачем мне работать с входами напрямую? В контроллере есть аппаратный счётчик, специально предназначенный для того, чтобы не работать с быстрыми входами напрямую. Может, всё-таки, разработчики доведут его до ума?
Можно и через счетчик, который считает импульсы поступившие на вход за цикл ПЛК .
Очень удобно. Складывайте значения. При остановке, для обрезки изделия, сбрасывайте регистр со сложенным значением в ноль.
Значение после сброса через указатель должно быть равно сброшенному. У меня оно никогда не возвращалось к старому.
ТОЖЕ СТОЛКНУЛСЯ С ТАКОЙ ЖЕ ПРОБЛЕМОЙ НЕОБХОДИМ СБРОС ЭНКОДЕРА В НОЛЬ, В НАЧАЛЕ ЦИКЛА ПРОГРАММЫ И СТАРЫЕ ЗНАЧЕНИЯ МНЕ НЕ НУЖНЫ (ЭНКОДЕР БЕГАЕТ ТУДЫ-СУДЫ).
ВОТ ТОЖЕ ЛОМАЮ ГОЛОВУ, МОЖЕТ РАЗРАБОТЧИКИ СЖАЛЮТСЯ И ВСТРОЯТ СБРОС В МОДУЛЬ ЭНКОДЕРА.
ТОТО БЫ СЧАСТЬТЬЕ ПРИВАЛИЛО, ДУМАЮ НЕ ТОЛЬКО МНЕ![]()
Последний раз редактировалось bgn62; 22.11.2011 в 00:35.
придумывая свои способы вы не учитываете структуру работы контроллера... вспоминайте школу =>
- чтение аппаратных переменных ( в том числе регистров энкодеров )
- пользовательские действия (занимают неопределенное время! )
- запись аппаратных переменных
дык вот, между считыванием и записью проходит время, за которое вполне вероятно аппаратные переменные могут непредсказуемо поменяться... и обнулите вы другое значение, потеряв информацию!
чтобы иметь однозначно выполняемый код - вам и разрешено лишь читать аппаратную переменную... создавайте себе свою и делайте чо заблагорассудиться.... не надо свой отдельный случай (длительное время пофиг на значение переменной) вводить в ранг закона.
То что модуль "Энкодер" глючит тема отдельной песни ))) Прерывания на ПЛК110 и правда надежнее работают!
А ЗАЧЕМ МНЕ ИХ ПРИДУМЫВАТЬ, ТО О ЧЕМ ВЫ ПИШЕТЕ Я ПОНИМАЮ, НО СЧИТАЮ, ЧТО ЧЕМ УДОБНЕЙ ИНСТРУМЕНТ, ТЕМ КАЧЕСТВЕННЕЙ ВЫЙДЕТ ИЗДЕЛИЕ. И ЕСЛИ В СЧЕТЧИКЕ ЕСТЬ ВХОД СБРОСА, ТО ЕГО БОЛЕЕ УДОБНО ИСПОЛЬЗОВАТЬ. И ОВЕН МНЕ НУЖЕН НЕ ДЛЯ ТОГО, ЧТОБЫ УПРАЖНЯТЬСЯ В ПРОГРАММИРОВАНИИ, А ЧТОБЫ КОНКРЕТНЫЙ СТАНОК НАДЕЖНО РАБОТАЛ. ЧЕМ БЫСТРЕЕ НАПИШУ КОД, ТЕМ БОЛЬШЕ ВРЕМЕНИ НА ОТЛАДКУ. И ЕСЛИ ОКАЖЕТСЯ, ЧТО НЕОБХОДИМО ОБРАТИТЬ ВНИМАНИЕ НА ВАШИ СОВЕТЫ, ТОГДА ЭТИМ И ЗАЙМУСЬ.
НА ДАННЫЙ МОМЕНТ СТАРЫЕ ДАННЫЕ ОТ ЭНКОДЕРА ТОЛЬКО МЕШАЮТ И ПРИХОДИТСЯ ВЫЕЖИВАТЬСЯ КАК МУХА НА СТЕКЛЕ, ЧТОБЫ ОТ НИХ НЕ ЗАВИСЕЛ СЛЕДУЮЩИЙ ЦИКЛ ПРОГРАММЫ
если такая несложная вещь вызывает у вас небходимость "выеживания" - вам рано заниматься реальным программированием.....![]()
... вы так и не поняли, что сбрасывать вы будете ДРУГОЕ значение, совсем не соответствующее считанному значению энкодера...
Одно из правил программирования процедур прерываний - это либо запись в переменную, либо чтение из нее ... используя переменные для универсальной роли вы создаете почву для очень мудренных ошибок. Цикл контроллера - по сути прерывание таймера с периодом 1 мс, чтобы не было неожиданностей в программе, на время обработки прерывания запрещают все остальные.... в ПЛК это невозможно, значит либо читать либо писать
именно для того чтобы не объяснять каждому, почему это так, и делают ЭЛЕМЕНТАРНЫЕ модули максимально устойчивыми...
напишите ОДИН раз процедуру капсулирующую аппаратный счетчик овена в приемлемый для вас вид, с входом обнуления и прочими феньками и используйте его не вспоминая каждый раз почему так