придумывая свои способы вы не учитываете структуру работы контроллера... вспоминайте школу =>
- чтение аппаратных переменных ( в том числе регистров энкодеров )
- пользовательские действия (занимают неопределенное время! )
- запись аппаратных переменных

дык вот, между считыванием и записью проходит время, за которое вполне вероятно аппаратные переменные могут непредсказуемо поменяться... и обнулите вы другое значение, потеряв информацию!
чтобы иметь однозначно выполняемый код - вам и разрешено лишь читать аппаратную переменную... создавайте себе свою и делайте чо заблагорассудиться.... не надо свой отдельный случай (длительное время пофиг на значение переменной) вводить в ранг закона.
То что модуль "Энкодер" глючит тема отдельной песни ))) Прерывания на ПЛК110 и правда надежнее работают!