Просмотр полной версии : сохранение значения энкодера после отключения питания для ПР103
Evgeniy83
08.10.2024, 09:39
Доброго времени суток.
Прошу помощи в решении задачи сохранение значения энкодера после отключения питания для ПР103.
Описание процесса: Есть некий редуктор тянущий цепь, (на редукторе установлен энкодер) на цепи скребок. Длинна всего прохода по энкодеру от 0- до 37000 импульсов (энкодер 10 импульсов на оборот). Если во время движения машины отключают электричество то после включения переменная энкодера становится в 0. Можно ли каким то образом сохранять значение энкодера?
kondor3000
08.10.2024, 10:23
Доброго времени суток.
Прошу помощи в решении задачи сохранение значения энкодера после отключения питания для ПР103.
Описание процесса: Есть некий редуктор тянущий цепь, (на редукторе установлен энкодер) на цепи скребок. Длинна всего прохода по энкодеру от 0- до 37000 импульсов (энкодер 10 импульсов на оборот). Если во время движения машины отключают электричество то после включения переменная энкодера становится в 0. Можно ли каким то образом сохранять значение энкодера?
Это делается например так, сохранение Энкодера в энергонезависимой переменной, скрин 79193
R триггер инициализирует переменную при включении.
Evgeniy83
08.10.2024, 10:33
Это делается например так, сохранение Энкодера в энергонезависимой переменной, скрин 79193
R триггер инициализирует переменную при включении.
То есть каждое значение энкодера сохраняется в энергонезависимую память? Есть несколько вопросов. 37к импульсов в одну сторону 37к в другую и 100 раз в сутки сколько проживет флешка в данном устройстве ПР?
После перезапуска переменная энкодер все ровно станет 0?
kondor3000
08.10.2024, 10:57
То есть каждое значение энкодера сохраняется в энергонезависимую память? Есть несколько вопросов. 37к импульсов в одну сторону 37к в другую и 100 раз в сутки сколько проживет флешка в данном устройстве ПР?
После перезапуска переменная энкодер все ровно станет 0?
Запись в память происходит при отключении питания, в остальное время, всё работает в ОЗУ.
Evgeniy83
08.10.2024, 11:05
То есть правильно ли я понял, переменной в которую записывается значение энкодера просто поставить энергонезависимость?
То есть правильно ли я понял, переменной в которую записывается значение энкодера просто поставить энергонезависимость?
Нет, при старте ПРки она перезапишется нулем.
Как вариант, можно такой огород сделать
79207
Здесь, переменная Положение энергонезависимая. Нулевая точка - это для сброса переменной Сдвиг
Evgeniy83
08.10.2024, 12:48
Нет, при старте ПРки она перезапишется нулем.
Как вариант, можно такой огород сделать
79207
Здесь, переменная Положение энергонезависимая. Нулевая точка - это для сброса переменной Сдвиг
Попытался в эмуляции воспроизвести ваше предложение.
не пойму в какой момент сдвиг должен стать равным положению?
79208
Если энкодер работает только на увеличение, то:
79220
Evgeniy83
08.10.2024, 14:22
Энкодер конечно же работает в обе стороны и в + и в -.
генератор blink был добавлен в качестве эмулятора энкодера так как нет под рукой энкодера
Проверил. Работает в обе стороны:
79221
Evgeniy83
08.10.2024, 15:01
Проверил. Работает в обе стороны:
79221
можете по подробней объяснить для чего детектор переднего фронта?
в какой момент старая позиция примет значение новой?
79222
Попытался в эмуляции воспроизвести ваше предложение.
не пойму в какой момент сдвиг должен стать равным положению?
При включении ПРки. Попробуйте задать какое-нибудь начальное значение переменной Положение (она ведь энергонезависимая) и запустить эмуляцию
можете по подробней объяснить для чего детектор переднего фронта?
в какой момент старая позиция примет значение новой?
79222
На выходе RTRIG будет 1 в течении 1-го цикла, а потом только 0.
В течении первого цикла и произойдет перезапись сохраненного значения в старое.
Задержу в цикл после RTRIG, вероятно, можно заменить на обычные связи.
Просто при симуляции энергонезависимые переменные значения не запоминают.
После включения симуляции энергонезависимая будет содержать значение по-умолчанию,
даже если её значение поменять на нужное (якобы сохраненное).
Получается 1-й цикл запишет значение по-умолчанию.
В ПР-ке же перед 1-м циклом должно быть восстановлено сохраненное значение.
Поэтому я добавил задержку. Перед записью в ПР-ку задержку меняю на обычные связи.
В принципе можно использовать другую конструкцию:
79223
Но здесь наоборот 1-й цикл на SEL будет 0, все следующие 1.
Тогда входа надо поменять местами.
Она в принципе и так работает:
79224
Evgeniy83
08.10.2024, 16:22
На выходе RTRIG будет 1 в течении 1-го цикла, а потом только 0.
В течении первого цикла и произойдет перезапись сохраненного значения в старое.
Задержу в цикл после RTRIG, вероятно, можно заменить на обычные связи.
Просто при симуляции энергонезависимые переменные значения не запоминают.
После включения симуляции энергонезависимая будет содержать значение по-умолчанию,
даже если её значение поменять на нужное (якобы сохраненное).
Получается 1-й цикл запишет значение по-умолчанию.
В ПР-ке же перед 1-м циклом должно быть восстановлено сохраненное значение.
Поэтому я добавил задержку. Перед записью в ПР-ку задержку меняю на обычные связи.
Да спасибо на эмуляции работает ваша схема. Завтра проверю на ПР.
Остается открытым вопрос та переменная в которую пишет энкодер становится энергонезависимой а значит пишется на флешку что-бы сохранить значения в случаи отключения электричества, не приведет ли это со временем к ошибкам во флеш ПР
Вроде как говорили, что запись идет при выключении. В эмуляции работает - в ПР-ке может не сработать. Поэтому задержку после RTRIG лучше убрать.
А вот после SEL - оставить.
Число циклов перезаписи зависит от температурных условий, но производители гарантируют до 100000.
Даже если будет до 10 выключений в день - это 10000 дней (> 27 лет до первой ошибки).
Думаю, не стоит заморачиваться на этот счёт.
Evgeniy83
10.10.2024, 15:21
Подскажите а какое число максимальное в регистре. При подключении энкодера. Можно ли использовать это число?79304
kondor3000
10.10.2024, 15:31
Подскажите а какое число максимальное в регистре. При подключении энкодера. Можно ли использовать это число?79304
В одном регистре максимум 65535 (16 битное целое), можно использовать.
А вообще в Лоджике максимум 4294967295, это 32 битное целое (2 регистра)
Evgeniy83
10.10.2024, 15:38
В одном регистре максимум 65535 (16 битное целое), можно использовать.
А вообще в Лоджике максимум 4294967295, это 32 битное целое (2 регистра)
можно ли использовать такое число для подсчета точки 0
79305
kondor3000
10.10.2024, 15:46
можно ли использовать такое число для подсчета точки 0
79305
Скрины можно выложить проще, добавить изображение.
Тогда уже вместо 4294967295, проще просто поставить 0.
4294967295+1=0
0-1=4294967295
Evgeniy83
10.10.2024, 16:23
Скрины можно выложить проще, добавить изображение.
Тогда уже вместо 4294967295, проще просто поставить 0.
4294967295+1=0
0-1=4294967295
Вопрос был в следующем.
Если энкодер крутнуть назад на 1 шаг то получится 4294967295. если продолжать его крутить назад то число будет уменьшатся. вопрос работают ли функции вычитания сравнения на большее значения с такими числами?
kondor3000
10.10.2024, 19:13
Вопрос был в следующем.
Если энкодер крутнуть назад на 1 шаг то получится 4294967295. если продолжать его крутить назад то число будет уменьшатся. вопрос работают ли функции вычитания сравнения на большее значения с такими числами?
Вычитание работает нормально (если правильно считать), а сравнение будет наоборот ( оно не нужно) 79312
Вот для понимания работы, один из примеров. Энкодер со счётчиком ЛИР (1024 импульса/оборот). В эмуляции включите Реверс и Пуск, счётчик (эмулятор энкодера) будет считать обратно. В прямом счёте начальное (меньшее) вычитается из конечного, в обратном счёте конечное (меньшее) вычитается из начального.
AlexandrGr
14.10.2024, 18:40
Зачем сохранять значение инкрементального энкодера?
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot